]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
parser.c (cp_parser_enumerator_list): Do not warn about trailing commas in C++0x...
authorMagnus Fromreide <magfr@lysator.liu.se>
Fri, 4 Nov 2011 17:38:16 +0000 (18:38 +0100)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 4 Nov 2011 17:38:16 +0000 (13:38 -0400)
        * parser.c (cp_parser_enumerator_list): Do not warn about
        trailing commas in C++0x mode.

From-SVN: r180967

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/enum21a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/enum21b.C [new file with mode: 0644]

index 27c8b70924752c479e6932038cb62cd485d906f1..f984056dafc25f9a0196d79588794139e93654ac 100644 (file)
@@ -1,3 +1,8 @@
+2011-10-09  Magnus Fromreide  <magfr@lysator.liu.se>
+
+        * parser.c (cp_parser_enumerator_list): Do not warn about
+        trailing commas in C++0x mode.
+
 2011-11-04  Olivier Goffart  <olivier@woboq.com>
            Jason Merrill  <jason@redhat.com>
 
index 811b2faf32e0f0f0dafeb06c987c4e98b8fecd3f..2798eb7e7cbb391630ac1047bf801165d49c8f02 100644 (file)
@@ -14058,6 +14058,7 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
 
    enum-specifier:
      enum-head { enumerator-list [opt] }
+     enum-head { enumerator-list , } [C++0x]
 
    enum-head:
      enum-key identifier [opt] enum-base [opt]
@@ -14077,6 +14078,8 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
    GNU Extensions:
      enum-key attributes[opt] identifier [opt] enum-base [opt] 
        { enumerator-list [opt] }attributes[opt]
+     enum-key attributes[opt] identifier [opt] enum-base [opt]
+       { enumerator-list, }attributes[opt] [C++0x]
 
    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
    if the token stream isn't an enum-specifier after all.  */
@@ -14416,8 +14419,9 @@ cp_parser_enumerator_list (cp_parser* parser, tree type)
       /* If the next token is a `}', there is a trailing comma.  */
       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
        {
-         if (!in_system_header)
-           pedwarn (input_location, OPT_pedantic, "comma at end of enumerator list");
+         if (cxx_dialect < cxx0x && !in_system_header)
+           pedwarn (input_location, OPT_pedantic,
+                     "comma at end of enumerator list");
          break;
        }
     }
index c9bd2480833970c980464e7dafac889172a3b132..d0e94233c2321ec4aa1057c27f3d28ccb4120391 100644 (file)
@@ -1,3 +1,10 @@
+2011-10-09  Magnus Fromreide  <magfr@lysator.liu.se>
+
+        * g++.dg/cpp0x/enum21a.C: Test that enum x { y, } does
+        generate a pedwarn in c++98-mode.
+        * g++.dg/cpp0x/enum21b.C: Test that enum x { y, }
+        don't generate a pedwarn in c++0x-mode.
+
 2011-11-04  Olivier Goffart  <olivier@woboq.com>
 
        PR c++/50965
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum21a.C b/gcc/testsuite/g++.dg/cpp0x/enum21a.C
new file mode 100644 (file)
index 0000000..5526811
--- /dev/null
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-pedantic -std=c++98" }
+
+enum x { y, }; // { dg-warning "comma at end of enumerator list" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum21b.C b/gcc/testsuite/g++.dg/cpp0x/enum21b.C
new file mode 100644 (file)
index 0000000..4898912
--- /dev/null
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-pedantic -std=c++0x" }
+
+enum x { y, };