aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-cppbuiltin.c2
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/parser.c10
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C6
8 files changed, 47 insertions, 18 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 8f44887..e5ca891 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2014-10-06 Edward Smith-Rowland <3dw4rd@verizon.net>
+
+ * c-family/c-cppbuiltin.c: Move __cpp_attribute_deprecated to the
+ C++11 section.
+
2014-10-03 Marc Glisse <marc.glisse@inria.fr>
PR c++/54427
diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c
index b6ac0b0..1173109 100644
--- a/gcc/c-family/c-cppbuiltin.c
+++ b/gcc/c-family/c-cppbuiltin.c
@@ -828,6 +828,7 @@ c_cpp_builtins (cpp_reader *pfile)
cpp_define (pfile, "__cpp_rvalue_reference=200610");
cpp_define (pfile, "__cpp_variadic_templates=200704");
cpp_define (pfile, "__cpp_alias_templates=200704");
+ cpp_define (pfile, "__cpp_attribute_deprecated=201309");
}
if (cxx_dialect > cxx11)
{
@@ -841,7 +842,6 @@ c_cpp_builtins (cpp_reader *pfile)
//cpp_define (pfile, "__cpp_aggregate_nsdmi=201304");
cpp_define (pfile, "__cpp_variable_templates=201304");
cpp_define (pfile, "__cpp_digit_separators=201309");
- cpp_define (pfile, "__cpp_attribute_deprecated=201309");
//cpp_define (pfile, "__cpp_sized_deallocation=201309");
/* We'll have to see where runtime arrays wind up.
Let's put it in C++14 for now. */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6405be0..10084c4 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2014-10-06 Edward Smith-Rowland <3dw4rd@verizon.net>
+
+ * cp/parser.c: Allow [[deprecated]] for C++11. Issue a pedwarn.
+
2014-10-06 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55250
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 18cae5b..bc992b2 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -22204,8 +22204,14 @@ cp_parser_std_attribute (cp_parser *parser)
if (is_attribute_p ("noreturn", attr_id))
TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
/* C++14 deprecated attribute is equivalent to GNU's. */
- else if (cxx_dialect >= cxx14 && is_attribute_p ("deprecated", attr_id))
- TREE_PURPOSE (TREE_PURPOSE (attribute)) = get_identifier ("gnu");
+ else if (cxx_dialect >= cxx11 && 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");
+ }
}
/* Now parse the optional argument clause of the attribute. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 582f189..99c66d9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-10-06 Edward Smith-Rowland <3dw4rd@verizon.net>
+
+ * g++.dg/cpp1y/attr-deprecated-neg.C: Attribute no longer ignored.
+ * g++.dg/cpp1y/feat-cxx11-neg.C: Comment out __cpp_attribute_deprecated test.
+ * g++.dg/cpp1y/feat-cxx11.C: Add __cpp_attribute_deprecated test.
+
2014-10-06 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/55250
diff --git a/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C b/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C
index 134b3b8..369f3df 100644
--- a/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C
+++ b/gcc/testsuite/g++.dg/cpp1y/attr-deprecated-neg.C
@@ -1,23 +1,24 @@
// { dg-do compile { target c++11_only } }
+// { dg-options "-pedantic" }
-class [[deprecated]] A // { dg-warning "attribute directive ignored" }
+class [[deprecated]] A // { dg-warning "'deprecated' is a C..14 feature" }
{
};
-[[deprecated]]
+[[deprecated]] // { dg-warning "'deprecated' is a C..14 feature" }
int
-foo(int n) // { dg-warning "attribute directive ignored" }
+foo(int n)
{
return 42 + n;
}
-class [[deprecated("B has been superceded by C")]] B // { dg-warning "attribute directive ignored" }
+class [[deprecated("B has been superceded by C")]] B // { dg-warning "'deprecated' is a C..14 feature" }
{
};
-[[deprecated("bar is unsafe; use foobar instead")]]
+[[deprecated("bar is unsafe; use foobar instead")]] // { dg-warning "'deprecated' is a C..14 feature" }
int
-bar(int n) // { dg-warning "attribute directive ignored" }
+bar(int n)
{
return 42 + n - 1;
}
@@ -47,12 +48,12 @@ foobar(int n)
int
main()
{
- A aaa;
- int n = foo(12);
+ A aaa; // { dg-warning "is deprecated" }
+ int n = foo(12); // { dg-warning "is deprecated" }
- B bbb;
- int m = bar(666);
+ B bbb; // { dg-warning "is deprecated" }
+ int m = bar(666); // { dg-warning "is deprecated" }
- C ccc;
- int l = foobar(8);
+ C ccc; // { dg-warning "is deprecated" "" { target { c++14 } } }
+ int l = foobar(8); // { dg-warning "is deprecated" "" { target { c++14 } } }
}
diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
index 8719577..6310ce6 100644
--- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
+++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11-neg.C
@@ -31,9 +31,10 @@
# error "__cpp_digit_separators" // { dg-error "error" }
#endif
-#ifndef __cpp_attribute_deprecated
-# error "__cpp_attribute_deprecated" // { dg-error "error" }
-#endif
+// Attribute [[deprecated]] is allowed in C++11 as an extension (with pedwarn).
+//#ifndef __cpp_attribute_deprecated
+//# error "__cpp_attribute_deprecated"
+//#endif
#ifndef __cpp_runtime_arrays
# error "__cpp_runtime_arrays" // { dg-error "error" }
diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
index 606a5ce..6ebc0c8 100644
--- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
+++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C
@@ -79,3 +79,9 @@
#elif __cpp_binary_literals != 201304
# error "__cpp_binary_literals != 201304"
#endif
+
+#ifndef __cpp_attribute_deprecated
+# error "__cpp_attribute_deprecated"
+#elif __cpp_attribute_deprecated != 201309
+# error "__cpp_attribute_deprecated != 201309"
+#endif