diff options
author | Jason Merrill <jason@redhat.com> | 2014-01-28 16:04:44 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-01-28 16:04:44 -0500 |
commit | 0f59a31da8c70c08f7887139aaf8c9318ba7e130 (patch) | |
tree | cb7bd3a012b69f10ecb3e3142568104dee307fcc /gcc | |
parent | 3807059e82873de1e5d0b8580b4755be7f90c54b (diff) | |
download | gcc-0f59a31da8c70c08f7887139aaf8c9318ba7e130.zip gcc-0f59a31da8c70c08f7887139aaf8c9318ba7e130.tar.gz gcc-0f59a31da8c70c08f7887139aaf8c9318ba7e130.tar.bz2 |
re PR c++/58701 ([c++11] ICE initializing member of static union)
PR c++/58701
* semantics.c (build_anon_member_initialization): Stop walking
when we run out of COMPONENT_REFs.
From-SVN: r207209
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C | 11 |
3 files changed, 17 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 43ba804..a0ec066 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2014-01-28 Jason Merrill <jason@redhat.com> + PR c++/58701 + * semantics.c (build_anon_member_initialization): Stop walking + when we run out of COMPONENT_REFs. + PR c++/58632 * decl.c (lookup_and_check_tag): Ignore template parameters if scope == ts_current. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 3a8daca..fd6466d 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7515,7 +7515,8 @@ build_anon_member_initialization (tree member, tree init, fields.safe_push (TREE_OPERAND (member, 1)); member = TREE_OPERAND (member, 0); } - while (ANON_AGGR_TYPE_P (TREE_TYPE (member))); + while (ANON_AGGR_TYPE_P (TREE_TYPE (member)) + && TREE_CODE (member) == COMPONENT_REF); /* VEC has the constructor elements vector for the context of FIELD. If FIELD is an anonymous aggregate, we will push inside it. */ diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C new file mode 100644 index 0000000..57dfd59 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-union5.C @@ -0,0 +1,11 @@ +// PR c++/58701 +// { dg-require-effective-target c++11 } +// { dg-final { scan-assembler "7" } } + +static union +{ + union + { + int i = 7; + }; +}; |