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

Reply via email to