diff options
author | Jason Merrill <jason@redhat.com> | 2011-03-18 11:06:41 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-03-18 11:06:41 -0400 |
commit | 82d3711899283500f82e917649cd3dc0457ba1a1 (patch) | |
tree | 61f68b44485b32ef37f551799322a44f718c4370 /gcc | |
parent | 09a52fc3aecb7091b44ea0a6e0265a87415ed522 (diff) | |
download | gcc-82d3711899283500f82e917649cd3dc0457ba1a1.zip gcc-82d3711899283500f82e917649cd3dc0457ba1a1.tar.gz gcc-82d3711899283500f82e917649cd3dc0457ba1a1.tar.bz2 |
re PR c++/35315 (ICE with attribute transparent_union)
PR c++/35315
* c-common.c (handle_transparent_union_attribute): Don't
make a duplicate type in C++.
From-SVN: r171145
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-family/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attrib32.C | 6 |
4 files changed, 14 insertions, 3 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index a0268fd..ca3db25 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2011-03-18 Jason Merrill <jason@redhat.com> + + PR c++/35315 + * c-common.c (handle_transparent_union_attribute): Don't + make a duplicate type in C++. + 2011-03-15 Jason Merrill <jason@redhat.com> * c-common.c (max_constexpr_depth): New. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 6674c58..799f815 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -6152,6 +6152,7 @@ handle_transparent_union_attribute (tree *node, tree name, if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) { if (TYPE_FIELDS (type) == NULL_TREE + || c_dialect_cxx () || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type))) goto ignored; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac7e5ad..dcd19ea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-03-18 Jason Merrill <jason@redhat.com> + + * g++.dg/ext/attrib32.C: Expect errors on the two-names case. + 2011-03-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR middle-end/47405 diff --git a/gcc/testsuite/g++.dg/ext/attrib32.C b/gcc/testsuite/g++.dg/ext/attrib32.C index 77f71de..e4dfe4e 100644 --- a/gcc/testsuite/g++.dg/ext/attrib32.C +++ b/gcc/testsuite/g++.dg/ext/attrib32.C @@ -10,10 +10,10 @@ void bar() foo(0); } -typedef union U1 { int i; } U2 __attribute__((transparent_union)); +typedef union U1 { int i; } U2 __attribute__((transparent_union)); // { dg-warning "ignored" } -static void foo2(U1) {} -static void foo2(U2) {} +static void foo2(U1) {} // { dg-error "previously defined" } +static void foo2(U2) {} // { dg-error "redefinition" } void bar2(U1 u1, U2 u2) { |