From 2a8ef767005baf7c026e42a4521673ad1a9320d1 Mon Sep 17 00:00:00 2001 From: Edward Smith-Rowland <3dw4rd@verizon.net> Date: Mon, 6 Oct 2014 17:11:23 +0000 Subject: [PATCH] c-cppbuiltin.c: Move __cpp_attribute_deprecated to the C++11 section. 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 | 5 ++++ gcc/c-family/c-cppbuiltin.c | 2 +- gcc/cp/ChangeLog | 4 +++ gcc/cp/parser.c | 10 ++++++-- gcc/testsuite/ChangeLog | 6 +++++ .../g++.dg/cpp1y/attr-deprecated-neg.C | 25 ++++++++++--------- gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C | 7 +++--- gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C | 6 +++++ 8 files changed, 47 insertions(+), 18 deletions(-) diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 8f448878edc..e5ca891b899 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -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 PR c++/54427 diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c index b6ac0b0341c..1173109fde7 100644 --- a/gcc/c-family/c-cppbuiltin.c +++ b/gcc/c-family/c-cppbuiltin.c @@ -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. */ diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6405be09475..10084c4903a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 PR c++/55250 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 18cae5bafd9..bc992b20045 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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, + "% is a C++14 feature;" + " use %"); + TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu"); + } } /* Now parse the optional argument clause of the attribute. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 582f1890220..99c66d9bbe2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 PR c++/55250 diff --git a/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C b/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C index 134b3b89c02..369f3df9961 100644 --- a/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C +++ b/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C @@ -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 } } } } diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C index 8719577c5cf..6310ce666e3 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C @@ -31,9 +31,10 @@ # 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" } diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C index 606a5cec618..6ebc0c84cb0 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C @@ -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 -- 2.30.2