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
This commit is contained in:
parent
4f5e5fcba8
commit
e72028574f
@ -1,5 +1,10 @@
|
|||||||
2017-02-15 Jakub Jelinek <jakub@redhat.com>
|
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
|
PR c++/79288
|
||||||
* decl.c (grokdeclarator): For static data members, handle thread_p
|
* decl.c (grokdeclarator): For static data members, handle thread_p
|
||||||
only after handling inline.
|
only after handling inline.
|
||||||
|
@ -24749,22 +24749,10 @@ cp_parser_std_attribute (cp_parser *parser, tree attr_ns)
|
|||||||
TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
|
TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
|
||||||
/* C++14 deprecated attribute is equivalent to GNU's. */
|
/* C++14 deprecated attribute is equivalent to GNU's. */
|
||||||
else if (is_attribute_p ("deprecated", attr_id))
|
else if (is_attribute_p ("deprecated", attr_id))
|
||||||
{
|
TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
|
||||||
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");
|
|
||||||
}
|
|
||||||
/* C++17 fallthrough attribute is equivalent to GNU's. */
|
/* C++17 fallthrough attribute is equivalent to GNU's. */
|
||||||
else if (is_attribute_p ("fallthrough", attr_id))
|
else if (is_attribute_p ("fallthrough", attr_id))
|
||||||
{
|
TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
|
||||||
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");
|
|
||||||
}
|
|
||||||
/* Transactional Memory TS optimize_for_synchronized attribute is
|
/* Transactional Memory TS optimize_for_synchronized attribute is
|
||||||
equivalent to GNU transaction_callable. */
|
equivalent to GNU transaction_callable. */
|
||||||
else if (is_attribute_p ("optimize_for_synchronized", attr_id))
|
else if (is_attribute_p ("optimize_for_synchronized", attr_id))
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
2017-02-15 Jakub Jelinek <jakub@redhat.com>
|
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
|
PR c++/79288
|
||||||
* g++.dg/tls/pr79288.C: New test.
|
* g++.dg/tls/pr79288.C: New test.
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ f (int i)
|
|||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
bar (1);
|
bar (1);
|
||||||
[[fallthrough]]; // { dg-warning ".fallthrough. is a C\\+\\+17 feature" "" { target { c++14_down } } }
|
[[fallthrough]];
|
||||||
case 3:
|
case 3:
|
||||||
bar (1);
|
bar (1);
|
||||||
[[gnu::fallthrough, gnu::fallthrough]]; // { dg-warning ".fallthrough. attribute specified multiple times" }
|
[[gnu::fallthrough, gnu::fallthrough]]; // { dg-warning ".fallthrough. attribute specified multiple times" }
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
// { dg-do compile { target c++11_only } }
|
// { dg-do compile { target c++11_only } }
|
||||||
// { dg-options "-pedantic" }
|
// { 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
|
int
|
||||||
foo(int n)
|
foo(int n)
|
||||||
{
|
{
|
||||||
return 42 + 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
|
int
|
||||||
bar(int n)
|
bar(int n)
|
||||||
{
|
{
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
// C++14 attributes:
|
// 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
|
//#ifdef __has_cpp_attribute
|
||||||
//# if __has_cpp_attribute(deprecated) == 201309
|
//# if __has_cpp_attribute(deprecated) == 201309
|
||||||
//# error "__has_cpp_attribute(deprecated)" // { }
|
//# error "__has_cpp_attribute(deprecated)" // { }
|
||||||
|
@ -166,7 +166,7 @@
|
|||||||
|
|
||||||
// C++14 attributes:
|
// 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
|
#ifdef __has_cpp_attribute
|
||||||
# if ! __has_cpp_attribute(deprecated)
|
# if ! __has_cpp_attribute(deprecated)
|
||||||
# error "__has_cpp_attribute(deprecated)"
|
# error "__has_cpp_attribute(deprecated)"
|
||||||
|
@ -144,7 +144,7 @@
|
|||||||
|
|
||||||
// C++14 attributes:
|
// 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
|
//#ifdef __has_cpp_attribute
|
||||||
//# if __has_cpp_attribute(deprecated) == 201309
|
//# if __has_cpp_attribute(deprecated) == 201309
|
||||||
//# error "__has_cpp_attribute(deprecated)" // { }
|
//# error "__has_cpp_attribute(deprecated)" // { }
|
||||||
|
Loading…
Reference in New Issue
Block a user