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.
///////////////////
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