aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2018-03-13 11:55:44 -0400
committerJason Merrill <jason@gcc.gnu.org>2018-03-13 11:55:44 -0400
commit1d500c25165a5b708f1fc2088ba63c93a2c1eb94 (patch)
tree98b3d0582451132e837485abba0003a491e0643b
parent426c1e2ec7b42902a80a20cb3965a69061b8345b (diff)
downloadgcc-1d500c25165a5b708f1fc2088ba63c93a2c1eb94.zip
gcc-1d500c25165a5b708f1fc2088ba63c93a2c1eb94.tar.gz
gcc-1d500c25165a5b708f1fc2088ba63c93a2c1eb94.tar.bz2
Pedwarn about auto parameter even without -Wpedantic.
* parser.c (cp_parser_simple_type_specifier): Pedwarn about auto parameter even without -Wpedantic. From-SVN: r258494
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/parser.c6
-rw-r--r--gcc/testsuite/g++.dg/concepts/abbrev1.C (renamed from gcc/testsuite/g++.dg/cpp1z/abbrev1.C)3
-rw-r--r--gcc/testsuite/g++.dg/concepts/abbrev2.C (renamed from gcc/testsuite/g++.dg/cpp1z/abbrev2.C)4
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn-generic-member-ool.C (renamed from gcc/testsuite/g++.dg/cpp1y/fn-generic-member-ool.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr58500.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr58500.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr58534.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr58534.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr58535.C7
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr58536.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr58536.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr58548.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr58548.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr58549.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr58549.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60052.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60052.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60053.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60053.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60064.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60064.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60065.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60065.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60377.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60377.C)3
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60390.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60390.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60391.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60391.C)3
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr60573.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr60573.C)2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr80471.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr80471.C)2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto-60626.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto-84662.C (renamed from gcc/testsuite/g++.dg/cpp1y/pr84662.C)3
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/pr58535.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/pr60626.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/decomp3.C2
25 files changed, 40 insertions, 41 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d480c1b..0da60a3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2018-03-13 Jason Merrill <jason@redhat.com>
+ * parser.c (cp_parser_simple_type_specifier): Pedwarn about auto
+ parameter even without -Wpedantic.
+
PR c++/84798 - ICE with auto in abstract function declarator.
* parser.c (cp_parser_parameter_declaration_clause): Check
parser->default_arg_ok_p.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 8e8ebce..0a82f41 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -17049,9 +17049,9 @@ cp_parser_simple_type_specifier (cp_parser* parser,
"only available with "
"-std=c++14 or -std=gnu++14");
else if (!flag_concepts)
- pedwarn (token->location, OPT_Wpedantic,
- "ISO C++ forbids use of %<auto%> in parameter "
- "declaration");
+ pedwarn (token->location, 0,
+ "use of %<auto%> in parameter declaration "
+ "only available with -fconcepts");
}
else
type = make_auto ();
diff --git a/gcc/testsuite/g++.dg/cpp1z/abbrev1.C b/gcc/testsuite/g++.dg/concepts/abbrev1.C
index 3caa814..8de681f 100644
--- a/gcc/testsuite/g++.dg/cpp1z/abbrev1.C
+++ b/gcc/testsuite/g++.dg/concepts/abbrev1.C
@@ -1,5 +1,6 @@
// PR c++/64969
-// { dg-options "-std=c++17" }
+// { dg-do compile { target c++14 } }
+// { dg-additional-options "-fconcepts" }
auto f1(auto x) { return *x; }
decltype(auto) f2(auto x) { return *x; }
diff --git a/gcc/testsuite/g++.dg/cpp1z/abbrev2.C b/gcc/testsuite/g++.dg/concepts/abbrev2.C
index 1dc6af3..3100f67 100644
--- a/gcc/testsuite/g++.dg/cpp1z/abbrev2.C
+++ b/gcc/testsuite/g++.dg/concepts/abbrev2.C
@@ -1,6 +1,6 @@
// PR c++/66197
-// { dg-do run }
-// { dg-options "-std=c++17" }
+// { dg-do run { target c++14 } }
+// { dg-additional-options "-fconcepts" }
extern "C" void abort();
diff --git a/gcc/testsuite/g++.dg/cpp1y/fn-generic-member-ool.C b/gcc/testsuite/g++.dg/concepts/fn-generic-member-ool.C
index 60ac52e..b664ccf 100644
--- a/gcc/testsuite/g++.dg/cpp1y/fn-generic-member-ool.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-generic-member-ool.C
@@ -1,6 +1,6 @@
// Out-of-line generic member function definitions.
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
struct A {
void f(auto x);
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58500.C b/gcc/testsuite/g++.dg/concepts/pr58500.C
index bb68cbc..cb74072 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr58500.C
+++ b/gcc/testsuite/g++.dg/concepts/pr58500.C
@@ -1,6 +1,6 @@
// PR c++/58500
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
struct A {};
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58534.C b/gcc/testsuite/g++.dg/concepts/pr58534.C
index e38e1f3..b2c3caa 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr58534.C
+++ b/gcc/testsuite/g++.dg/concepts/pr58534.C
@@ -1,6 +1,6 @@
// PR c++/58534
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
template<typename> void foo(const auto&) {}
diff --git a/gcc/testsuite/g++.dg/concepts/pr58535.C b/gcc/testsuite/g++.dg/concepts/pr58535.C
new file mode 100644
index 0000000..3e212a0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/pr58535.C
@@ -0,0 +1,7 @@
+// PR c++/58535
+// { dg-do compile { target c++14 } }
+
+struct A
+{
+ virtual void foo(auto); // { dg-error "auto|templates" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58536.C b/gcc/testsuite/g++.dg/concepts/pr58536.C
index a4b6f55..99c7ebe 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr58536.C
+++ b/gcc/testsuite/g++.dg/concepts/pr58536.C
@@ -1,6 +1,6 @@
// PR c++/58536
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
struct A
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58548.C b/gcc/testsuite/g++.dg/concepts/pr58548.C
index 6a78de4..cd3e6fd 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr58548.C
+++ b/gcc/testsuite/g++.dg/concepts/pr58548.C
@@ -1,6 +1,6 @@
// PR c++/58548
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
void foo(auto)
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58549.C b/gcc/testsuite/g++.dg/concepts/pr58549.C
index 2f76399..6b66afc 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr58549.C
+++ b/gcc/testsuite/g++.dg/concepts/pr58549.C
@@ -1,6 +1,6 @@
// PR c++/58549
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
void foo(auto)
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60052.C b/gcc/testsuite/g++.dg/concepts/pr60052.C
index 25d20ac..c5bc28e 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60052.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60052.C
@@ -1,6 +1,6 @@
// PR c++/60052
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
struct A
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60053.C b/gcc/testsuite/g++.dg/concepts/pr60053.C
index a8f5ba1..20cf121 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60053.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60053.C
@@ -1,6 +1,6 @@
// PR c++/60053
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
struct A
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60064.C b/gcc/testsuite/g++.dg/concepts/pr60064.C
index add3f05..b82b560 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60064.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60064.C
@@ -1,6 +1,6 @@
// PR c++/60064
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
class A
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60065.C b/gcc/testsuite/g++.dg/concepts/pr60065.C
index 56505b7..b2b1aea 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60065.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60065.C
@@ -1,6 +1,6 @@
// PR c++/60065
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
template <int> void foo(auto... x);
template <typename> void foo2(auto... x);
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60377.C b/gcc/testsuite/g++.dg/concepts/pr60377.C
index ab35ba9..5b18717 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60377.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60377.C
@@ -1,8 +1,7 @@
// PR c++/60377
// { dg-do compile { target c++14 } }
-// { dg-options "" }
-void foo(auto, void (f*)()); // { dg-error "expected" }
+void foo(auto, void (f*)()); // { dg-error "auto|expected" }
struct A
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60390.C b/gcc/testsuite/g++.dg/concepts/pr60390.C
index 38d0e4b..a453d1d 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60390.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60390.C
@@ -1,6 +1,6 @@
// PR c++/60390
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
struct A
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60391.C b/gcc/testsuite/g++.dg/concepts/pr60391.C
index 7e35704..5c5ca2c 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60391.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60391.C
@@ -1,10 +1,9 @@
// PR c++/60391
// { dg-do compile { target c++14 } }
-// { dg-options "" }
namespace N
{
- int operator"" _X(auto) {} // { dg-error "invalid" }
+ int operator"" _X(auto) {} // { dg-error "auto|invalid" }
}
namespace N {}
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60573.C b/gcc/testsuite/g++.dg/concepts/pr60573.C
index da730f8..5688491 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr60573.C
+++ b/gcc/testsuite/g++.dg/concepts/pr60573.C
@@ -1,6 +1,6 @@
// PR c++/60573
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
struct A
{
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr80471.C b/gcc/testsuite/g++.dg/concepts/pr80471.C
index bca4022..d5fa5a5 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr80471.C
+++ b/gcc/testsuite/g++.dg/concepts/pr80471.C
@@ -1,6 +1,6 @@
// PR c++/80471
// { dg-do compile { target c++14 } }
-// { dg-options "" }
+// { dg-additional-options "-fconcepts" }
template <class, class>
constexpr bool is_same = false;
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto-60626.C b/gcc/testsuite/g++.dg/cpp0x/auto-60626.C
new file mode 100644
index 0000000..3567192
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto-60626.C
@@ -0,0 +1,6 @@
+// PR c++/60626
+// { dg-do compile { target c++14 } }
+
+struct A {};
+
+void (*A::p)(auto) = 0; // { dg-error "auto|static data member|template" }
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr84662.C b/gcc/testsuite/g++.dg/cpp0x/auto-84662.C
index 36bd201..271fb56 100644
--- a/gcc/testsuite/g++.dg/cpp1y/pr84662.C
+++ b/gcc/testsuite/g++.dg/cpp0x/auto-84662.C
@@ -1,6 +1,5 @@
// PR c++/84662
// { dg-do compile { target c++14 } }
-// { dg-options "" }
double b;
-a (__attribute__((c (0 && int() - ([] {} && b) || auto)))); // { dg-error "expected constructor, destructor, or type conversion before" }
+a (__attribute__((c (0 && int() - ([] {} && b) || auto)))); // { dg-error "auto|expected constructor, destructor, or type conversion before" }
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58535.C b/gcc/testsuite/g++.dg/cpp1y/pr58535.C
deleted file mode 100644
index b36be8f..0000000
--- a/gcc/testsuite/g++.dg/cpp1y/pr58535.C
+++ /dev/null
@@ -1,8 +0,0 @@
-// PR c++/58535
-// { dg-do compile { target c++14 } }
-// { dg-options "" }
-
-struct A
-{
- virtual void foo(auto); // { dg-error "templates" }
-};
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60626.C b/gcc/testsuite/g++.dg/cpp1y/pr60626.C
deleted file mode 100644
index 3114644..0000000
--- a/gcc/testsuite/g++.dg/cpp1y/pr60626.C
+++ /dev/null
@@ -1,7 +0,0 @@
-// PR c++/60626
-// { dg-do compile { target c++14 } }
-// { dg-options "" }
-
-struct A {};
-
-void (*A::p)(auto) = 0; // { dg-error "static data member|template" }
diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp3.C b/gcc/testsuite/g++.dg/cpp1z/decomp3.C
index 529f373..1886cdb 100644
--- a/gcc/testsuite/g++.dg/cpp1z/decomp3.C
+++ b/gcc/testsuite/g++.dg/cpp1z/decomp3.C
@@ -43,7 +43,7 @@ test (A &b, B c)
void
test2 (auto & [ p ] = bar ()) // { dg-error "'p' was not declared in this scope" }
-{
+{ // { dg-warning "auto" "" { target { ! concepts } } .-1 }
}
int arr[4];