mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-31 00:15:43 +08:00
re PR c++/10515 (problem when initializing a field in a union)
PR c++/10515 * cp-tree.h (lookup_field_1): Declare it. * search.c (lookup_field_1): Make it public. * decl.c (reshape_init): Handle designated initializers. From-SVN: r66236
This commit is contained in:
parent
7513525363
commit
446d5e4776
@ -7551,11 +7551,24 @@ reshape_init (tree type, tree *initp)
|
||||
{
|
||||
/* Loop through the initializable fields, gathering
|
||||
initializers. */
|
||||
/* FIXME support non-trivial labeled initializers. */
|
||||
while (*initp && field)
|
||||
while (*initp)
|
||||
{
|
||||
tree field_init;
|
||||
|
||||
/* Handle designated initializers, as an extension. */
|
||||
if (TREE_PURPOSE (*initp))
|
||||
{
|
||||
if (pedantic)
|
||||
pedwarn ("ISO C++ does not allow designated initializers");
|
||||
field = lookup_field_1 (type, TREE_PURPOSE (*initp),
|
||||
/*want_type=*/false);
|
||||
if (!field || TREE_CODE (field) != FIELD_DECL)
|
||||
error ("`%T' has no non-static data member named `%D'",
|
||||
type, TREE_PURPOSE (*initp));
|
||||
}
|
||||
if (!field)
|
||||
break;
|
||||
|
||||
field_init = reshape_init (TREE_TYPE (field), initp);
|
||||
TREE_CHAIN (field_init) = CONSTRUCTOR_ELTS (new_init);
|
||||
CONSTRUCTOR_ELTS (new_init) = field_init;
|
||||
|
Loading…
Reference in New Issue
Block a user