Patchwork [C++] PR 52599

login
register
mail settings
Submitter Paolo Carlini
Date April 17, 2012, 3:50 p.m.
Message ID <4F8D9138.5080401@oracle.com>
Download mbox | patch
Permalink /patch/153244/
State New
Headers show

Comments

Paolo Carlini - April 17, 2012, 3:50 p.m.
On 04/17/2012 05:35 PM, Paolo Carlini wrote:
> Hi,
>> I think build_constexpr_constructor_member_initializers is a better 
>> place for that check, since it's already looking at the tree structure.
> Indeed. I'm finishing testing the below. Ok if it passes?
... uhm, actually like this seems more correct to me, I'm testing this 
variant instead. Sorry.

Paolo.

///////////////////
Jason Merrill - April 17, 2012, 4:59 p.m.
OK.

Jason

Patch

Index: testsuite/g++.dg/cpp0x/constexpr-ctor10.C
===================================================================
--- testsuite/g++.dg/cpp0x/constexpr-ctor10.C	(revision 0)
+++ testsuite/g++.dg/cpp0x/constexpr-ctor10.C	(revision 0)
@@ -0,0 +1,6 @@ 
+// PR c++/52599
+// { dg-options -std=c++11 }
+
+struct foo {
+  constexpr foo() try { } catch(...) { };  // { dg-error "constructor" }
+};
Index: cp/semantics.c
===================================================================
--- cp/semantics.c	(revision 186523)
+++ cp/semantics.c	(working copy)
@@ -5921,6 +5921,12 @@  build_constexpr_constructor_member_initializers (t
 	    break;
 	}
     }
+  else if (TREE_CODE (body) == TRY_BLOCK)
+    {
+      error ("body of %<constexpr%> constructor cannot be "
+	     "a function-try-block");
+      return error_mark_node;
+    }
   else if (EXPR_P (body))
     ok = build_data_member_initialization (body, &vec);
   else