* constexpr.c (cxx_eval_statement_list): Jumping out of a
statement-expr is non-constant.
From-SVN: r270161
+2019-04-04 Jason Merrill <jason@redhat.com>
+
+ PR c++/89948 - ICE with break in statement-expr.
+ * constexpr.c (cxx_eval_statement_list): Jumping out of a
+ statement-expr is non-constant.
+
2019-04-04 Jason Merrill <jason@redhat.com>
PR c++/89966 - error with non-type auto tparm.
if (returns (jump_target) || breaks (jump_target))
break;
}
+ if (*jump_target && jump_target == &local_target)
+ {
+ /* We aren't communicating the jump to our caller, so give up. We don't
+ need to support evaluation of jumps out of statement-exprs. */
+ if (!ctx->quiet)
+ error_at (cp_expr_loc_or_loc (r, input_location),
+ "statement is not a constant expression");
+ *non_constant_p = true;
+ }
return r;
}
--- /dev/null
+// PR c++/89948
+// { dg-options "" }
+
+void f ()
+{
+ int a = 0;
+ for (;;)
+ for (;a=+({break;1;});)
+ {}
+}