aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/decl.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/enum9.C13
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c1465cc..ef4e8ac 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2012-07-17 Jason Merrill <jason@redhat.com>
+ PR c++/53995
+ * decl.c (finish_enum_value_list): Only call
+ insert_late_enum_def_into_classtype_sorted_fields in class scope.
+
PR c++/53989
* tree.c (build_cplus_array_type): Also add TYPE_CANONICAL
to the list of variants.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 84b78f6..8a3163a 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -12392,7 +12392,7 @@ finish_enum_value_list (tree enumtype)
for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
TYPE_VALUES (t) = TYPE_VALUES (enumtype);
- if (current_class_type
+ if (at_class_scope_p ()
&& COMPLETE_TYPE_P (current_class_type)
&& UNSCOPED_ENUM_P (enumtype))
insert_late_enum_def_into_classtype_sorted_fields (enumtype,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2b1bb7b..ac9f86b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-07-17 Jason Merrill <jason@redhat.com>
+
+ PR c++/53995
+ * g++.dg/parse/enum9.C: New.
+
2012-07-17 Kazu Hirata <kazu@codesourcery.com>
Sandra Loosemore <sandra@codesourcery.com>
diff --git a/gcc/testsuite/g++.dg/parse/enum9.C b/gcc/testsuite/g++.dg/parse/enum9.C
new file mode 100644
index 0000000..559db31
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/enum9.C
@@ -0,0 +1,13 @@
+// PR c++/53995
+
+enum E1 { e };
+void f(E1);
+
+struct A {
+ int i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
+ void g();
+ void h();
+};
+
+void A::g() { enum E2 { e }; }
+void A::h() { f(e); }