re PR c++/79301 (With -Werror=pedantic outside C++17 mode, __has_cpp_attribute(fallth...
authorJakub Jelinek <jakub@redhat.com>
Wed, 15 Feb 2017 17:10:40 +0000 (18:10 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 15 Feb 2017 17:10:40 +0000 (18:10 +0100)
PR c++/79301
* parser.c (cp_parser_std_attribute): Don't pedwarn about
[[deprecated]] with -std=c++11 and [[fallthrough]] with
-std=c++11 and -std=c++14.

* g++.dg/cpp1y/feat-cxx11-neg.C: Remove (with pedwarn) from
[[deprecated]] comment.
* g++.dg/cpp1y/feat-cxx98-neg.C: Likewise.
* g++.dg/cpp1y/feat-cxx11.C: Likewise.
* g++.dg/cpp1y/attr-deprecated-neg.C: Don't expect warnings for
[[deprecated]] in -std=c++11.
* g++.dg/cpp0x/fallthrough2.C: Don't expect warnings for
[[fallthrough]] in -std=c++11 and -std=c++14.

From-SVN: r245489

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/fallthrough2.C
gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C
gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C

index 74f5fc9b784511de5f21e749f75c60678bd8e6e7..b281f0b0c70e4dea7d395fe0d2edd67baa2e8288 100644 (file)
@@ -1,5 +1,10 @@
 2017-02-15  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/79301
+       * parser.c (cp_parser_std_attribute): Don't pedwarn about
+       [[deprecated]] with -std=c++11 and [[fallthrough]] with
+       -std=c++11 and -std=c++14.
+
        PR c++/79288
        * decl.c (grokdeclarator): For static data members, handle thread_p
        only after handling inline.
index ccafefd2c00154f169732155a9d0b5d1680d8f2d..cd41ee6a3c3eb83befda197258864dcc7c9b7a89 100644 (file)
@@ -24749,22 +24749,10 @@ cp_parser_std_attribute (cp_parser *parser, tree attr_ns)
        TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
       /* C++14 deprecated attribute is equivalent to GNU's.  */
       else if (is_attribute_p ("deprecated", attr_id))
-       {
-         if (cxx_dialect == cxx11)
-           pedwarn (token->location, OPT_Wpedantic,
-                    "%<deprecated%> is a C++14 feature;"
-                    " use %<gnu::deprecated%>");
-         TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
-       }
+       TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
       /* C++17 fallthrough attribute is equivalent to GNU's.  */
       else if (is_attribute_p ("fallthrough", attr_id))
-       {
-         if (cxx_dialect < cxx1z)
-           pedwarn (token->location, OPT_Wpedantic,
-                    "%<fallthrough%> is a C++17 feature;"
-                    " use %<gnu::fallthrough%>");
-         TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
-       }
+       TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
       /* Transactional Memory TS optimize_for_synchronized attribute is
         equivalent to GNU transaction_callable.  */
       else if (is_attribute_p ("optimize_for_synchronized", attr_id))
index 5df5da8827b59135421c7c442b5a9f2554b94c47..f749fb7dbc9785057f9fa6bfd4cffab4404fe3d5 100644 (file)
@@ -1,5 +1,15 @@
 2017-02-15  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/79301
+       * g++.dg/cpp1y/feat-cxx11-neg.C: Remove (with pedwarn) from
+       [[deprecated]] comment.
+       * g++.dg/cpp1y/feat-cxx98-neg.C: Likewise.
+       * g++.dg/cpp1y/feat-cxx11.C: Likewise.
+       * g++.dg/cpp1y/attr-deprecated-neg.C: Don't expect warnings for
+       [[deprecated]] in -std=c++11.
+       * g++.dg/cpp0x/fallthrough2.C: Don't expect warnings for
+       [[fallthrough]] in -std=c++11 and -std=c++14.
+
        PR c++/79288
        * g++.dg/tls/pr79288.C: New test.
 
index 075885a821043b14151e0ce0b36d14fbd62e7b1f..f2d0ce1c6930dc1f913a9444ff2d33b828cb4560 100644 (file)
@@ -11,7 +11,7 @@ f (int i)
     {
     case 1:
       bar (1);
-      [[fallthrough]]; // { dg-warning ".fallthrough. is a C\\+\\+17 feature" "" { target { c++14_down } }  }
+      [[fallthrough]];
     case 3:
       bar (1);
       [[gnu::fallthrough, gnu::fallthrough]]; // { dg-warning ".fallthrough. attribute specified multiple times" }
index 369f3df9961a27dda9f4255237fff06a0714f170..3c5646c3993c4d1a36963805eea3b62bd4b3a40e 100644 (file)
@@ -1,22 +1,22 @@
 // { dg-do compile { target c++11_only } }
 // { dg-options "-pedantic" }
 
-class [[deprecated]] A // { dg-warning "'deprecated' is a C..14 feature" }
+class [[deprecated]] A // { dg-bogus "'deprecated' is a C..14 feature" }
 {
 };
 
-[[deprecated]] // { dg-warning "'deprecated' is a C..14 feature" }
+[[deprecated]] // { dg-bogus "'deprecated' is a C..14 feature" }
 int
 foo(int n)
 {
   return 42 + n;
 }
 
-class [[deprecated("B has been superceded by C")]] B // { dg-warning "'deprecated' is a C..14 feature" }
+class [[deprecated("B has been superceded by C")]] B // { dg-bogus "'deprecated' is a C..14 feature" }
 {
 };
 
-[[deprecated("bar is unsafe; use foobar instead")]] // { dg-warning "'deprecated' is a C..14 feature" }
+[[deprecated("bar is unsafe; use foobar instead")]] // { dg-bogus "'deprecated' is a C..14 feature" }
 int
 bar(int n)
 {
index 825d0880f58ff9d37dddf39014fd30236716ede1..8d68aaa2b835cb5b027608527da084808fb20291 100644 (file)
@@ -57,7 +57,7 @@
 
 //  C++14 attributes:
 
-//  Attribute [[deprecated]] is allowed in C++11 as an extension (with pedwarn).
+//  Attribute [[deprecated]] is allowed in C++11 as an extension.
 //#ifdef __has_cpp_attribute
 //#  if __has_cpp_attribute(deprecated) == 201309
 //#    error "__has_cpp_attribute(deprecated)" // {  }
index 2f3b01efc38b7e6ebf8495420ec1d82dfc04a44d..98112218d8ff0e7b29fa30db3b158d1ffd33741c 100644 (file)
 
 //  C++14 attributes:
 
-//  Attribute [[deprecated]] is allowed in C++11 as an extension (with pedwarn).
+//  Attribute [[deprecated]] is allowed in C++11 as an extension.
 #ifdef __has_cpp_attribute
 #  if ! __has_cpp_attribute(deprecated)
 #    error "__has_cpp_attribute(deprecated)"
index 5fbffabd1396e217ac1bc7c51a7cb59f6aba2161..d76a1e2617d2a2c500b565e45e9277c115a9dddd 100644 (file)
 
 //  C++14 attributes:
 
-//  Attribute [[deprecated]] is allowed in C++11 as an extension (with pedwarn).
+//  Attribute [[deprecated]] is allowed in C++11 as an extension.
 //#ifdef __has_cpp_attribute
 //#  if __has_cpp_attribute(deprecated) == 201309
 //#    error "__has_cpp_attribute(deprecated)" // {  }