[C++ Patch] PR 60365
Paolo Carlini
paolo.carlini@oracle.com
Tue Jun 30 20:25:00 GMT 2015
oops, I mean the below.
Paolo.
////////////////
-------------- next part --------------
Index: cp/parser.c
===================================================================
--- cp/parser.c (revision 225177)
+++ cp/parser.c (working copy)
@@ -22532,6 +22547,28 @@ cp_parser_std_attribute (cp_parser *parser)
return attribute;
}
+/* Check that the attribute ATTRIBUTE appears at most once in the
+ attribute-list ATTRIBUTES. This is enforced for noreturn (7.6.3)
+ and deprecated (7.6.5). Note that carries_dependency (7.6.4)
+ isn't implemented yet in GCC. */
+
+static void
+cp_parser_check_std_attribute (tree attributes, tree attribute)
+{
+ if (attributes)
+ {
+ tree name = get_attribute_name (attribute);
+ if (is_attribute_p ("noreturn", name)
+ && lookup_attribute ("noreturn", attributes))
+ error ("attribute noreturn can appear at most once "
+ "in an attribute-list");
+ else if (is_attribute_p ("deprecated", name)
+ && lookup_attribute ("deprecated", attributes))
+ error ("attribute deprecated can appear at most once "
+ "in an attribute-list");
+ }
+}
+
/* Parse a list of standard C++-11 attributes.
attribute-list:
@@ -22554,6 +22591,7 @@ cp_parser_std_attribute_list (cp_parser *parser)
break;
if (attribute != NULL_TREE)
{
+ cp_parser_check_std_attribute (attributes, attribute);
TREE_CHAIN (attribute) = attributes;
attributes = attribute;
}
Index: testsuite/g++.dg/cpp0x/gen-attrs-60.C
===================================================================
--- testsuite/g++.dg/cpp0x/gen-attrs-60.C (revision 0)
+++ testsuite/g++.dg/cpp0x/gen-attrs-60.C (working copy)
@@ -0,0 +1,4 @@
+// PR c++/60365
+// { dg-do compile { target c++11 } }
+
+void func [[noreturn, noreturn]] (); // { dg-error "at most once" }
Index: testsuite/g++.dg/cpp1y/attr-deprecated-2.C
===================================================================
--- testsuite/g++.dg/cpp1y/attr-deprecated-2.C (revision 0)
+++ testsuite/g++.dg/cpp1y/attr-deprecated-2.C (working copy)
@@ -0,0 +1,4 @@
+// PR c++/60365
+// { dg-do compile { target c++14 } }
+
+void func [[deprecated, deprecated]] (); // { dg-error "at most once" }
More information about the Gcc-patches
mailing list