re PR c++/60186 ([c++11] ICE with invalid value in constexpr array initializer)

PR c++/60186
	* typeck2.c (massage_init_elt): Call fold_non_dependent_expr_sfinae.

From-SVN: r208027
This commit is contained in:
Jason Merrill 2014-02-21 16:49:05 -05:00 committed by Jason Merrill
parent 3e9e24ab25
commit b98fb3633e
3 changed files with 14 additions and 1 deletions

View file

@ -1,5 +1,8 @@
2014-02-21 Jason Merrill <jason@redhat.com>
PR c++/60186
* typeck2.c (massage_init_elt): Call fold_non_dependent_expr_sfinae.
PR c++/60187
* parser.c (cp_parser_enum_specifier): Call
check_for_bare_parameter_packs.

View file

@ -1131,7 +1131,10 @@ massage_init_elt (tree type, tree init, tsubst_flags_t complain)
init = TARGET_EXPR_INITIAL (init);
/* When we defer constant folding within a statement, we may want to
defer this folding as well. */
init = maybe_constant_init (init);
tree t = fold_non_dependent_expr_sfinae (init, complain);
t = maybe_constant_value (t);
if (TREE_CONSTANT (t))
init = t;
return init;
}

View file

@ -0,0 +1,7 @@
// PR c++/60186
// { dg-require-effective-target c++11 }
template<typename> void foo(int i)
{
constexpr int a[] = { i }; // { dg-error "" }
}