aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-03-18 11:06:41 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-03-18 11:06:41 -0400
commit82d3711899283500f82e917649cd3dc0457ba1a1 (patch)
tree61f68b44485b32ef37f551799322a44f718c4370 /gcc
parent09a52fc3aecb7091b44ea0a6e0265a87415ed522 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/c-family/c-common.c1
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib32.C6
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)
{