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:
parent
d06a312a4f
commit
5fb4d142f0
@ -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>
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
13
gcc/testsuite/g++.dg/cpp0x/constexpr-array7.C
Normal file
13
gcc/testsuite/g++.dg/cpp0x/constexpr-array7.C
Normal 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);
|
Loading…
Reference in New Issue
Block a user