diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-02-15 18:10:40 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-02-15 18:10:40 +0100 |
commit | e72028574f776fd5b73de8b974e4ea2d085f1532 (patch) | |
tree | 741f2855ba78ee73ac193fa675fb1641b6262fa6 /gcc | |
parent | 4f5e5fcba8a9cbabb0e05f9cb753b549396bc2de (diff) | |
download | gcc-e72028574f776fd5b73de8b974e4ea2d085f1532.zip gcc-e72028574f776fd5b73de8b974e4ea2d085f1532.tar.gz gcc-e72028574f776fd5b73de8b974e4ea2d085f1532.tar.bz2 |
re PR c++/79301 (With -Werror=pedantic outside C++17 mode, __has_cpp_attribute(fallthrough) is nonzero but [[fallthrough]] fails)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/fallthrough2.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C | 2 |
8 files changed, 25 insertions, 22 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 74f5fc9..b281f0b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index ccafefd..cd41ee6 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5df5da8..f749fb7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. diff --git a/gcc/testsuite/g++.dg/cpp0x/fallthrough2.C b/gcc/testsuite/g++.dg/cpp0x/fallthrough2.C index 075885a..f2d0ce1 100644 --- a/gcc/testsuite/g++.dg/cpp0x/fallthrough2.C +++ b/gcc/testsuite/g++.dg/cpp0x/fallthrough2.C @@ -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" } diff --git a/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C b/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C index 369f3df..3c5646c 100644 --- a/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C +++ b/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C @@ -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) { diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C index 825d088..8d68aaa 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C @@ -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)" // { } diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C index 2f3b01e..9811221 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C @@ -166,7 +166,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) # error "__has_cpp_attribute(deprecated)" diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C index 5fbffab..d76a1e2 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C @@ -144,7 +144,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)" // { } |