re PR c++/61994 (constexpr vector array ICE)

PR c++/61994
	* init.c (build_vec_init): Leave atype an ARRAY_TYPE
	if we're just returning an INIT_EXPR.

From-SVN: r213688
This commit is contained in:
Jason Merrill 2014-08-06 21:44:06 -04:00 committed by Jason Merrill
parent d06a312a4f
commit 5fb4d142f0
3 changed files with 26 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2014-08-06 Jason Merrill <jason@redhat.com>
PR c++/61994
* init.c (build_vec_init): Leave atype an ARRAY_TYPE
if we're just returning an INIT_EXPR.
2014-08-06 Jason Merrill <jason@redhat.com>
Braden Obrzut <admin@maniacsvault.net>

View File

@ -3840,6 +3840,13 @@ build_vec_init (tree base, tree maxindex, tree init,
stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
if (errors)
return error_mark_node;
if (const_init)
return build2 (INIT_EXPR, atype, obase, const_init);
/* Now make the result have the correct type. */
if (TREE_CODE (atype) == ARRAY_TYPE)
{
@ -3849,12 +3856,6 @@ build_vec_init (tree base, tree maxindex, tree init,
TREE_NO_WARNING (stmt_expr) = 1;
}
current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
if (const_init)
return build2 (INIT_EXPR, atype, obase, const_init);
if (errors)
return error_mark_node;
return stmt_expr;
}

View File

@ -0,0 +1,13 @@
// PR c++/61994
// { dg-do compile { target c++11 } }
struct A { int i,j; };
struct X {
A a = {1,1};
};
constexpr X table[1][1] = {{ {} }};
#define SA(X) static_assert(X,#X)
SA(table[0][0].a.i == 1);