aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-02-15 18:10:40 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-02-15 18:10:40 +0100
commite72028574f776fd5b73de8b974e4ea2d085f1532 (patch)
tree741f2855ba78ee73ac193fa675fb1641b6262fa6 /gcc
parent4f5e5fcba8a9cbabb0e05f9cb753b549396bc2de (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/parser.c16
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/fallthrough2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C2
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)" // { }