Hi,

On 05/25/2012 06:25 PM, Jason Merrill wrote:
On 05/24/2012 10:57 PM, Paolo Carlini wrote:
+        error_at (decl_spec_token_start->location,
+              "a storage class is not allowed");

Let's give more explanation here so that the user knows that the problem is a storage class on an anonymous union/struct in class scope.
Good, then I propose the below, using the form "anonymous aggregate", because - I didn't know - we are already using it in error messages elsewhere, in decl.c too.

Thanks,
Paolo.

////////////////////
Index: testsuite/g++.dg/other/anon-union3.C
===================================================================
--- testsuite/g++.dg/other/anon-union3.C        (revision 0)
+++ testsuite/g++.dg/other/anon-union3.C        (revision 0)
@@ -0,0 +1,25 @@
+// PR c++/32054
+
+class C
+{
+  auto union      // { dg-error "storage class" "" { target c++98 } }
+    {
+      int a;
+    };            // { dg-error "multiple|specified" "" { target c++11 } }
+  register union  // { dg-error "storage class" }
+    {
+      int b;
+    };
+  static union    // { dg-error "storage class" }
+    {
+      int c;
+    };
+  extern union    // { dg-error "storage class" }
+    {
+      int d;
+    };
+  mutable union   // { dg-error "storage class" }
+    {
+      int e;
+    };
+};
Index: cp/parser.c
===================================================================
--- cp/parser.c (revision 187868)
+++ cp/parser.c (working copy)
@@ -18910,6 +18910,12 @@ cp_parser_member_declaration (cp_parser* parser)
             particular type), as opposed to a nested class.  */
          else if (ANON_AGGR_TYPE_P (type))
            {
+             /* C++11 9.5/6.  */
+             if (decl_specifiers.storage_class != sc_none)
+               error_at (decl_spec_token_start->location,
+                         "a storage class on an anonymous aggregate "
+                         "in class scope is not allowed");
+
              /* Remove constructors and such from TYPE, now that we
                 know it is an anonymous aggregate.  */
              fixup_anonymous_aggr (type);

Reply via email to