aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Voutilainen <ville.voutilainen@gmail.com>2018-05-24 22:05:46 +0300
committerVille Voutilainen <ville@gcc.gnu.org>2018-05-24 22:05:46 +0300
commit9635923dc836994fb33352375a8d115e46705d27 (patch)
tree940f80fd7b5f931d03d042b7331e8ce3f8218099
parentfd657f1acbb76aae325f7185359064c89c5dbfad (diff)
downloadgcc-9635923dc836994fb33352375a8d115e46705d27.zip
gcc-9635923dc836994fb33352375a8d115e46705d27.tar.gz
gcc-9635923dc836994fb33352375a8d115e46705d27.tar.bz2
Pedwarn on a non-standard position of a C++ attribute.
From-SVN: r260682
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/namespace-attribs2.C7
5 files changed, 20 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 10e57ee..fdf73d1 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2018-05-24 Ville Voutilainen <ville.voutilainen@gmail.com>
+
+ Pedwarn on a non-standard position of a C++ attribute.
+ * parser.c (cp_parser_namespace_definition): Pedwarn about attributes
+ after the namespace name.
+
2018-05-24 Paolo Carlini <paolo.carlini@oracle.com>
* cp-tree.h (INDIRECT_TYPE_P): New.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index c0220bf..f5a6d94 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -18656,6 +18656,11 @@ cp_parser_namespace_definition (cp_parser* parser)
{
identifier = cp_parser_identifier (parser);
+ if (cp_next_tokens_can_be_std_attribute_p (parser))
+ pedwarn (input_location, OPT_Wpedantic,
+ "standard attributes on namespaces must precede "
+ "the namespace name");
+
/* Parse any attributes specified after the identifier. */
attribs = attr_chainon (attribs, cp_parser_attributes_opt (parser));
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C
index f331ed3..f63fff4 100644
--- a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C
+++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-56.C
@@ -2,4 +2,4 @@
// { dg-do compile { target c++11 } }
namespace foo __attribute__((visibility("default"))) {}
-namespace bar [[gnu::visibility("default")]] {}
+namespace [[gnu::visibility("default")]] bar {}
diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C
index c0d48fc..4b335eb 100644
--- a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C
+++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C
@@ -1,4 +1,4 @@
// PR c++/85140
// { dg-do compile { target c++11 } }
-namespace N alignas() {} // { dg-error "expected" }
+namespace alignas() N {} // { dg-error "expected" }
diff --git a/gcc/testsuite/g++.dg/cpp1z/namespace-attribs2.C b/gcc/testsuite/g++.dg/cpp1z/namespace-attribs2.C
new file mode 100644
index 0000000..2049da3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/namespace-attribs2.C
@@ -0,0 +1,7 @@
+// { dg-options "-std=c++17" }
+// { dg-additional-options "-pedantic" }
+
+namespace B [[deprecated]] {} // { dg-warning "ignored|must precede" }
+
+namespace [[deprecated]] D {} // { dg-warning "ignored" }
+