c-cppbuiltin.c: Move __cpp_attribute_deprecated to the C++11 section.
authorEdward Smith-Rowland <3dw4rd@verizon.net>
Mon, 6 Oct 2014 17:11:23 +0000 (17:11 +0000)
committerEdward Smith-Rowland <emsr@gcc.gnu.org>
Mon, 6 Oct 2014 17:11:23 +0000 (17:11 +0000)
gcc/c-family:

2014-10-06  Edward Smith-Rowland  <3dw4rd@verizon.net>

* c-family/c-cppbuiltin.c: Move __cpp_attribute_deprecated to the
C++11 section.

gcc/cp:

2014-10-06  Edward Smith-Rowland  <3dw4rd@verizon.net>

* cp/parser.c: Allow [[deprecated]] for C++11.  Issue a pedwarn.

gcc/testsuite:

2014-10-06  Edward Smith-Rowland  <3dw4rd@verizon.net>

* g++.dg/cpp1y/attr-deprecated-neg.C: Attribute no longer ignored.
* g++.dg/cpp1y/feat-cxx11-neg.C: Comment out __cpp_attribute_deprecated test.
* g++.dg/cpp1y/feat-cxx11.C: Add __cpp_attribute_deprecated test.

From-SVN: r215957

gcc/c-family/ChangeLog
gcc/c-family/c-cppbuiltin.c
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
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

index 8f448878edc7f298e55113ac00804d5a2daada1d..e5ca891b8998a7a6e019a263d0886deb51edd891 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-06  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       * c-family/c-cppbuiltin.c: Move __cpp_attribute_deprecated to the
+       C++11 section.
+
 2014-10-03  Marc Glisse  <marc.glisse@inria.fr>
 
        PR c++/54427
index b6ac0b0341c6a90c0176484be245f565fdb2b109..1173109fde7efce84f1f0d68f887b5678fc61ddd 100644 (file)
@@ -828,6 +828,7 @@ c_cpp_builtins (cpp_reader *pfile)
          cpp_define (pfile, "__cpp_rvalue_reference=200610");
          cpp_define (pfile, "__cpp_variadic_templates=200704");
          cpp_define (pfile, "__cpp_alias_templates=200704");
+         cpp_define (pfile, "__cpp_attribute_deprecated=201309");
        }
       if (cxx_dialect > cxx11)
        {
@@ -841,7 +842,6 @@ c_cpp_builtins (cpp_reader *pfile)
          //cpp_define (pfile, "__cpp_aggregate_nsdmi=201304");
          cpp_define (pfile, "__cpp_variable_templates=201304");
          cpp_define (pfile, "__cpp_digit_separators=201309");
-         cpp_define (pfile, "__cpp_attribute_deprecated=201309");
          //cpp_define (pfile, "__cpp_sized_deallocation=201309");
          /* We'll have to see where runtime arrays wind up.
             Let's put it in C++14 for now.  */
index 6405be0947591cd60892781ad96c271bfd818b98..10084c4903a100176afb872c12d8c3086ba18768 100644 (file)
@@ -1,3 +1,7 @@
+2014-10-06  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       * cp/parser.c: Allow [[deprecated]] for C++11.  Issue a pedwarn.
+
 2014-10-06  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/55250
index 18cae5bafd958c00099c1530108d9be229777c13..bc992b20045cfd4ea0d10247e4ee3ce7f00267e6 100644 (file)
@@ -22204,8 +22204,14 @@ cp_parser_std_attribute (cp_parser *parser)
       if (is_attribute_p ("noreturn", attr_id))
        TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
       /* C++14 deprecated attribute is equivalent to GNU's.  */
-      else if (cxx_dialect >= cxx14 && is_attribute_p ("deprecated", attr_id))
-       TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
+      else if (cxx_dialect >= cxx11 && 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");
+       }
     }
 
   /* Now parse the optional argument clause of the attribute.  */
index 582f18902202b45490a097cb6dccdc76a9a8ce22..99c66d9bbe2ec51941034db534286eee712a0fb1 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-06  Edward Smith-Rowland  <3dw4rd@verizon.net>
+
+       * g++.dg/cpp1y/attr-deprecated-neg.C: Attribute no longer ignored.
+       * g++.dg/cpp1y/feat-cxx11-neg.C: Comment out __cpp_attribute_deprecated test.
+       * g++.dg/cpp1y/feat-cxx11.C: Add __cpp_attribute_deprecated test.
+
 2014-10-06  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/55250
index 134b3b89c0294e0b0548b8a43ebc60332bdc22ed..369f3df9961a27dda9f4255237fff06a0714f170 100644 (file)
@@ -1,23 +1,24 @@
 // { dg-do compile { target c++11_only } }
+// { dg-options "-pedantic" }
 
-class [[deprecated]] A // { dg-warning "attribute directive ignored" }
+class [[deprecated]] A // { dg-warning "'deprecated' is a C..14 feature" }
 {
 };
 
-[[deprecated]]
+[[deprecated]] // { dg-warning "'deprecated' is a C..14 feature" }
 int
-foo(int n) // { dg-warning "attribute directive ignored" }
+foo(int n)
 {
   return 42 + n;
 }
 
-class [[deprecated("B has been superceded by C")]] B // { dg-warning "attribute directive ignored" }
+class [[deprecated("B has been superceded by C")]] B // { dg-warning "'deprecated' is a C..14 feature" }
 {
 };
 
-[[deprecated("bar is unsafe; use foobar instead")]]
+[[deprecated("bar is unsafe; use foobar instead")]] // { dg-warning "'deprecated' is a C..14 feature" }
 int
-bar(int n) // { dg-warning "attribute directive ignored" }
+bar(int n)
 {
   return 42 + n - 1;
 }
@@ -47,12 +48,12 @@ foobar(int n)
 int
 main()
 {
-  A aaa;
-  int n = foo(12);
+  A aaa; // { dg-warning "is deprecated" }
+  int n = foo(12); // { dg-warning "is deprecated" }
 
-  B bbb;
-  int m = bar(666);
+  B bbb; // { dg-warning "is deprecated" }
+  int m = bar(666); // { dg-warning "is deprecated" }
 
-  C ccc;
-  int l = foobar(8);
+  C ccc; // { dg-warning "is deprecated" "" { target { c++14 } } }
+  int l = foobar(8); // { dg-warning "is deprecated" "" { target { c++14 } } }
 }
index 8719577c5cffc75f4ae9ab60b89e827467c67b62..6310ce666e36751cfd2c502b74b1061b2b1e6f89 100644 (file)
 #  error "__cpp_digit_separators" // { dg-error "error" }
 #endif
 
-#ifndef __cpp_attribute_deprecated
-#  error "__cpp_attribute_deprecated" // { dg-error "error" }
-#endif
+//  Attribute [[deprecated]] is allowed in C++11 as an extension (with pedwarn).
+//#ifndef __cpp_attribute_deprecated
+//#  error "__cpp_attribute_deprecated"
+//#endif
 
 #ifndef __cpp_runtime_arrays
 #  error "__cpp_runtime_arrays" // { dg-error "error" }
index 606a5cec6180f3170e0c35ce4433002a1a138716..6ebc0c84cb0d1ec14ca377b62b2b9bd59d36be32 100644 (file)
@@ -79,3 +79,9 @@
 #elif __cpp_binary_literals != 201304
 #  error "__cpp_binary_literals != 201304"
 #endif
+
+#ifndef __cpp_attribute_deprecated
+#  error "__cpp_attribute_deprecated"
+#elif __cpp_attribute_deprecated != 201309
+#  error "__cpp_attribute_deprecated != 201309"
+#endif