commit 32714acccf980898b3973e34a1034fa07ebe8dee
Author: Jason Merrill <jason@redhat.com>
Date: Wed Jan 21 16:44:24 2015 -0500
PR c++/64701
* constexpr.c (maybe_constant_value): Just hand back STATEMENT_LIST.
@@ -3454,8 +3454,18 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
break;
default:
- internal_error ("unexpected expression %qE of kind %s", t,
- get_tree_code_name (TREE_CODE (t)));
+ if (STATEMENT_CODE_P (TREE_CODE (t)))
+ {
+ /* This function doesn't know how to deal with pre-genericize
+ statements; this can only happen with statement-expressions,
+ so for now just fail. */
+ if (!ctx->quiet)
+ error_at (EXPR_LOCATION (t),
+ "statement is not a constant-expression");
+ }
+ else
+ internal_error ("unexpected expression %qE of kind %s", t,
+ get_tree_code_name (TREE_CODE (t)));
*non_constant_p = true;
break;
}
new file mode 100644
@@ -0,0 +1,9 @@
+// PR c++/64701
+// { dg-options "" }
+
+enum { A };
+void
+foo ()
+{
+ int x = ({ do {} while (0); A; });
+}