aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-12-11 17:46:08 -0500
committerJason Merrill <jason@gcc.gnu.org>2012-12-11 17:46:08 -0500
commitefa6d698dcdc4e3528e9e9f39643186474b40e69 (patch)
tree9fde19743c71044abf16de5c0bd86c73c39c6f1d /gcc
parent3c523cf8a8686d043208948f2e76a34ecb045114 (diff)
downloadgcc-efa6d698dcdc4e3528e9e9f39643186474b40e69.zip
gcc-efa6d698dcdc4e3528e9e9f39643186474b40e69.tar.gz
gcc-efa6d698dcdc4e3528e9e9f39643186474b40e69.tar.bz2
re PR c++/54883 (Name mangling of types in an unnamed namespace)
PR c++/54883 * decl2.c (min_vis_r): Handle anon visibility for enums. From-SVN: r194430
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl2.c15
-rw-r--r--gcc/testsuite/g++.dg/abi/anon1.C5
3 files changed, 17 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5e75a14..a2228fa 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2012-12-11 Jason Merrill <jason@redhat.com>
+
+ PR c++/54883
+ * decl2.c (min_vis_r): Handle anon visibility for enums.
+
2012-12-11 Marc Glisse <marc.glisse@inria.fr>
PR c++/53094
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index fd54cac..c5de37e 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -1926,16 +1926,15 @@ min_vis_r (tree *tp, int *walk_subtrees, void *data)
{
*walk_subtrees = 0;
}
- else if (CLASS_TYPE_P (*tp))
+ else if (TAGGED_TYPE_P (*tp)
+ && !TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
{
- if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
- {
- *vis_p = VISIBILITY_ANON;
- return *tp;
- }
- else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
- *vis_p = CLASSTYPE_VISIBILITY (*tp);
+ *vis_p = VISIBILITY_ANON;
+ return *tp;
}
+ else if (CLASS_TYPE_P (*tp)
+ && CLASSTYPE_VISIBILITY (*tp) > *vis_p)
+ *vis_p = CLASSTYPE_VISIBILITY (*tp);
return NULL;
}
diff --git a/gcc/testsuite/g++.dg/abi/anon1.C b/gcc/testsuite/g++.dg/abi/anon1.C
new file mode 100644
index 0000000..c45917a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/anon1.C
@@ -0,0 +1,5 @@
+// PR c++/54883
+
+namespace { enum E { E1 }; } void f(E e) { }
+
+// { dg-final { scan-assembler-not "globl" } }