* [pushed] c++: change -fconcepts to mean C++20 concepts
@ 2022-11-03 18:52 Jason Merrill
0 siblings, 0 replies; 2+ messages in thread
From: Jason Merrill @ 2022-11-03 18:52 UTC (permalink / raw)
To: gcc-patches
Tested x86_64-pc-linux-gnu, applying to trunk.
-- >8 --
It was always weird that -fconcepts in C++17 mode meant the same thing as
-fconcepts-ts in C++20 mode; this patch harmonizes the flags so that for TS
concepts you always need to write -fconcepts-ts.
In the unlikely event anyone is still using -fconcepts in C++17 mode, they
can either fix their code to work with C++20 concepts or adjust the compiler
flag.
gcc/c-family/ChangeLog:
* c-opts.cc (c_common_post_options): -fconcepts no longer implies
-fconcepts-ts before C++20.
gcc/ChangeLog:
* doc/invoke.texi: -fconcepts no longer implies
-fconcepts-ts before C++20.
gcc/cp/ChangeLog:
* parser.cc (cp_parser_template_declaration_after_parameters): Fix
concept parsing below C++20.
gcc/testsuite/ChangeLog:
* g++.dg/concepts/auto1.C:
* g++.dg/concepts/auto3.C:
* g++.dg/concepts/auto4.C:
* g++.dg/concepts/class-deduction1.C:
* g++.dg/concepts/class5.C:
* g++.dg/concepts/class6.C:
* g++.dg/concepts/debug1.C:
* g++.dg/concepts/decl-diagnose.C:
* g++.dg/concepts/deduction-constraint1.C:
* g++.dg/concepts/diagnostic1.C:
* g++.dg/concepts/dr1430.C:
* g++.dg/concepts/equiv.C:
* g++.dg/concepts/equiv2.C:
* g++.dg/concepts/expression.C:
* g++.dg/concepts/expression2.C:
* g++.dg/concepts/expression3.C:
* g++.dg/concepts/fn-concept1.C:
* g++.dg/concepts/fn-concept2.C:
* g++.dg/concepts/fn-concept3.C:
* g++.dg/concepts/fn1.C:
* g++.dg/concepts/fn10.C:
* g++.dg/concepts/fn2.C:
* g++.dg/concepts/fn3.C:
* g++.dg/concepts/fn4.C:
* g++.dg/concepts/fn5.C:
* g++.dg/concepts/fn6.C:
* g++.dg/concepts/fn8.C:
* g++.dg/concepts/fn9.C:
* g++.dg/concepts/generic-fn-err.C:
* g++.dg/concepts/generic-fn.C:
* g++.dg/concepts/inherit-ctor1.C:
* g++.dg/concepts/inherit-ctor3.C:
* g++.dg/concepts/intro1.C:
* g++.dg/concepts/intro2.C:
* g++.dg/concepts/intro3.C:
* g++.dg/concepts/intro4.C:
* g++.dg/concepts/intro5.C:
* g++.dg/concepts/intro6.C:
* g++.dg/concepts/intro7.C:
* g++.dg/concepts/locations1.C:
* g++.dg/concepts/partial-concept-id1.C:
* g++.dg/concepts/partial-concept-id2.C:
* g++.dg/concepts/partial-spec5.C:
* g++.dg/concepts/placeholder2.C:
* g++.dg/concepts/placeholder3.C:
* g++.dg/concepts/placeholder4.C:
* g++.dg/concepts/placeholder5.C:
* g++.dg/concepts/placeholder6.C:
* g++.dg/concepts/pr65634.C:
* g++.dg/concepts/pr65636.C:
* g++.dg/concepts/pr65681.C:
* g++.dg/concepts/pr65848.C:
* g++.dg/concepts/pr67249.C:
* g++.dg/concepts/pr67595.C:
* g++.dg/concepts/pr68434.C:
* g++.dg/concepts/pr71127.C:
* g++.dg/concepts/pr71128.C:
* g++.dg/concepts/pr71131.C:
* g++.dg/concepts/pr71385.C:
* g++.dg/concepts/pr85065.C:
* g++.dg/concepts/template-parm11.C:
* g++.dg/concepts/template-parm12.C:
* g++.dg/concepts/template-parm2.C:
* g++.dg/concepts/template-parm3.C:
* g++.dg/concepts/template-parm4.C:
* g++.dg/concepts/template-template-parm1.C:
* g++.dg/concepts/var-concept1.C:
* g++.dg/concepts/var-concept2.C:
* g++.dg/concepts/var-concept3.C:
* g++.dg/concepts/var-concept4.C:
* g++.dg/concepts/var-concept5.C:
* g++.dg/concepts/var-concept6.C:
* g++.dg/concepts/var-concept7.C:
* g++.dg/concepts/var-templ2.C:
* g++.dg/concepts/var-templ3.C:
* g++.dg/concepts/variadic1.C:
* g++.dg/concepts/variadic2.C:
* g++.dg/concepts/variadic3.C:
* g++.dg/concepts/variadic4.C:
* g++.dg/cpp2a/concepts-pr65575.C:
* g++.dg/cpp2a/concepts-pr66091.C:
* g++.dg/cpp2a/concepts-pr84980.C:
* g++.dg/cpp2a/concepts-pr85265.C: Pass -fconcepts-ts.
* g++.dg/cpp2a/concepts-pr84979-2.C:
* g++.dg/cpp2a/concepts-pr84979-3.C: Same diagnostics
in C++20 and below.
---
gcc/doc/invoke.texi | 14 +++++++-------
gcc/c-family/c-opts.cc | 3 ---
gcc/cp/parser.cc | 7 ++++---
gcc/testsuite/g++.dg/concepts/auto1.C | 2 +-
gcc/testsuite/g++.dg/concepts/auto3.C | 2 +-
gcc/testsuite/g++.dg/concepts/auto4.C | 2 +-
gcc/testsuite/g++.dg/concepts/class-deduction1.C | 2 +-
gcc/testsuite/g++.dg/concepts/class5.C | 2 +-
gcc/testsuite/g++.dg/concepts/class6.C | 2 +-
gcc/testsuite/g++.dg/concepts/debug1.C | 2 +-
gcc/testsuite/g++.dg/concepts/decl-diagnose.C | 2 +-
.../g++.dg/concepts/deduction-constraint1.C | 2 +-
gcc/testsuite/g++.dg/concepts/diagnostic1.C | 2 +-
gcc/testsuite/g++.dg/concepts/dr1430.C | 2 +-
gcc/testsuite/g++.dg/concepts/equiv.C | 2 +-
gcc/testsuite/g++.dg/concepts/equiv2.C | 2 +-
gcc/testsuite/g++.dg/concepts/expression.C | 2 +-
gcc/testsuite/g++.dg/concepts/expression2.C | 2 +-
gcc/testsuite/g++.dg/concepts/expression3.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn-concept1.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn-concept2.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn-concept3.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn1.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn10.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn2.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn3.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn4.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn5.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn6.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn8.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn9.C | 2 +-
gcc/testsuite/g++.dg/concepts/generic-fn-err.C | 2 +-
gcc/testsuite/g++.dg/concepts/generic-fn.C | 2 +-
gcc/testsuite/g++.dg/concepts/inherit-ctor1.C | 2 +-
gcc/testsuite/g++.dg/concepts/inherit-ctor3.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro1.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro2.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro3.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro4.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro5.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro6.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro7.C | 2 +-
gcc/testsuite/g++.dg/concepts/locations1.C | 2 +-
.../g++.dg/concepts/partial-concept-id1.C | 2 +-
.../g++.dg/concepts/partial-concept-id2.C | 2 +-
gcc/testsuite/g++.dg/concepts/partial-spec5.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder2.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder3.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder4.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder5.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder6.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65634.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65636.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65681.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65848.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr67249.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr67595.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr68434.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71127.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71128.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71131.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71385.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr85065.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm11.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm12.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm2.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm3.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm4.C | 2 +-
.../g++.dg/concepts/template-template-parm1.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept1.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept2.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept3.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept4.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept5.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept6.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept7.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-templ2.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-templ3.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic1.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic2.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic3.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic4.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C | 5 ++---
gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C | 5 ++---
gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C | 2 +-
88 files changed, 98 insertions(+), 102 deletions(-)
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index c6323a53ad2..2b29db831ae 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -3075,14 +3075,14 @@ exhaustion is signalled by throwing @code{std::bad_alloc}. See also
@itemx -fconcepts-ts
@opindex fconcepts
@opindex fconcepts-ts
-Below @option{-std=c++20}, @option{-fconcepts} enables support for the
-C++ Extensions for Concepts Technical Specification, ISO 19217 (2015).
+Enable support for the C++ Concepts feature for constraining template
+arguments. With @option{-std=c++20} and above, Concepts are part of
+the language standard, so @option{-fconcepts} defaults to on.
-With @option{-std=c++20} and above, Concepts are part of the language
-standard, so @option{-fconcepts} defaults to on. But the standard
-specification of Concepts differs significantly from the TS, so some
-constructs that were allowed in the TS but didn't make it into the
-standard can still be enabled by @option{-fconcepts-ts}.
+Some constructs that were allowed by the earlier C++ Extensions for
+Concepts Technical Specification, ISO 19217 (2015), but didn't make it
+into the standard, can additionally be enabled by
+@option{-fconcepts-ts}.
@item -fconstexpr-depth=@var{n}
@opindex fconstexpr-depth
diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
index 32b929e3ece..9e0494b2a45 100644
--- a/gcc/c-family/c-opts.cc
+++ b/gcc/c-family/c-opts.cc
@@ -1090,9 +1090,6 @@ c_common_post_options (const char **pfilename)
work with the standard. */
if (cxx_dialect >= cxx20 || flag_concepts_ts)
flag_concepts = 1;
- else if (flag_concepts)
- /* For -std=c++17 -fconcepts, imply -fconcepts-ts. */
- flag_concepts_ts = 1;
if (num_in_fnames > 1)
error ("too many filenames given; type %<%s %s%> for usage",
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index fd59de491cd..9523f73d9a3 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -31450,10 +31450,11 @@ cp_parser_template_declaration_after_parameters (cp_parser* parser,
else if (cxx_dialect >= cxx11
&& cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
decl = cp_parser_alias_declaration (parser);
- else if (cxx_dialect >= cxx20 /* Implies flag_concept. */
+ else if (flag_concepts
&& cp_lexer_next_token_is_keyword (parser->lexer, RID_CONCEPT)
- && !cp_lexer_nth_token_is_keyword (parser->lexer, 2, RID_BOOL))
- /* Allow 'concept bool' to be handled as per the TS. */
+ && cp_lexer_nth_token_is (parser->lexer, 2, CPP_NAME))
+ /* -fconcept-ts 'concept bool' syntax is handled below, in
+ cp_parser_single_declaration. */
decl = cp_parser_concept_definition (parser);
else
{
diff --git a/gcc/testsuite/g++.dg/concepts/auto1.C b/gcc/testsuite/g++.dg/concepts/auto1.C
index e05330610fc..abf7886c9f6 100644
--- a/gcc/testsuite/g++.dg/concepts/auto1.C
+++ b/gcc/testsuite/g++.dg/concepts/auto1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T1, class T2> class A { };
diff --git a/gcc/testsuite/g++.dg/concepts/auto3.C b/gcc/testsuite/g++.dg/concepts/auto3.C
index 27a6afa4ed9..868a56cf315 100644
--- a/gcc/testsuite/g++.dg/concepts/auto3.C
+++ b/gcc/testsuite/g++.dg/concepts/auto3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class...> class tuple {};
diff --git a/gcc/testsuite/g++.dg/concepts/auto4.C b/gcc/testsuite/g++.dg/concepts/auto4.C
index 8bf3fa9b1ce..6c984550229 100644
--- a/gcc/testsuite/g++.dg/concepts/auto4.C
+++ b/gcc/testsuite/g++.dg/concepts/auto4.C
@@ -1,6 +1,6 @@
// PR c++/85006
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename... Ts> struct A {};
diff --git a/gcc/testsuite/g++.dg/concepts/class-deduction1.C b/gcc/testsuite/g++.dg/concepts/class-deduction1.C
index 33597007752..7f427d053b8 100644
--- a/gcc/testsuite/g++.dg/concepts/class-deduction1.C
+++ b/gcc/testsuite/g++.dg/concepts/class-deduction1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
concept bool Isint = __is_same_as(T,int);
diff --git a/gcc/testsuite/g++.dg/concepts/class5.C b/gcc/testsuite/g++.dg/concepts/class5.C
index ac9d7e83e9d..5f8ece96543 100644
--- a/gcc/testsuite/g++.dg/concepts/class5.C
+++ b/gcc/testsuite/g++.dg/concepts/class5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool One() { return sizeof(T) >= 4; }
diff --git a/gcc/testsuite/g++.dg/concepts/class6.C b/gcc/testsuite/g++.dg/concepts/class6.C
index f2345b19b04..a1c5e166e55 100644
--- a/gcc/testsuite/g++.dg/concepts/class6.C
+++ b/gcc/testsuite/g++.dg/concepts/class6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool One() { return sizeof(T) >= 4; }
diff --git a/gcc/testsuite/g++.dg/concepts/debug1.C b/gcc/testsuite/g++.dg/concepts/debug1.C
index b9a544486ac..fb48567249f 100644
--- a/gcc/testsuite/g++.dg/concepts/debug1.C
+++ b/gcc/testsuite/g++.dg/concepts/debug1.C
@@ -1,6 +1,6 @@
// PR c++/84551
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename> concept bool C() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
index 6a461a50366..96038fd3dfc 100644
--- a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
+++ b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
typedef concept int CINT; // { dg-error "'concept' cannot appear in a typedef declaration" }
diff --git a/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C b/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
index eba57713089..d510fe00f2c 100644
--- a/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
+++ b/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
@@ -1,6 +1,6 @@
// PR c++/67007
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class U>
concept bool A =
diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic1.C b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
index 29c78c4c730..207c36c320e 100644
--- a/gcc/testsuite/g++.dg/concepts/diagnostic1.C
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
@@ -1,6 +1,6 @@
// PR c++/67159
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts -fconcepts-diagnostics-depth=2" }
+// { dg-options "-fconcepts-ts -fconcepts-diagnostics-depth=2" }
template <class T, class U>
concept bool SameAs = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/dr1430.C b/gcc/testsuite/g++.dg/concepts/dr1430.C
index 05c91526c20..c22a7827eba 100644
--- a/gcc/testsuite/g++.dg/concepts/dr1430.C
+++ b/gcc/testsuite/g++.dg/concepts/dr1430.C
@@ -1,6 +1,6 @@
// PR c++/66092
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/equiv.C b/gcc/testsuite/g++.dg/concepts/equiv.C
index 640c2b5ec0d..a5d0c1864c0 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv.C
@@ -1,5 +1,5 @@
// { dg-do link { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Check equivalence of short- and longhand declarations.
diff --git a/gcc/testsuite/g++.dg/concepts/equiv2.C b/gcc/testsuite/g++.dg/concepts/equiv2.C
index dff719b86a5..48a266498f9 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv2.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv2.C
@@ -1,5 +1,5 @@
// { dg-do link { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/expression.C b/gcc/testsuite/g++.dg/concepts/expression.C
index ba4c48d7dcc..3da0c962888 100644
--- a/gcc/testsuite/g++.dg/concepts/expression.C
+++ b/gcc/testsuite/g++.dg/concepts/expression.C
@@ -1,5 +1,5 @@
// { dg-do run { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// TODO: ICE on gimplify 16?
diff --git a/gcc/testsuite/g++.dg/concepts/expression2.C b/gcc/testsuite/g++.dg/concepts/expression2.C
index 4bb5bc71462..2f7aafc8b6b 100644
--- a/gcc/testsuite/g++.dg/concepts/expression2.C
+++ b/gcc/testsuite/g++.dg/concepts/expression2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1()
diff --git a/gcc/testsuite/g++.dg/concepts/expression3.C b/gcc/testsuite/g++.dg/concepts/expression3.C
index 67646811284..a2d340dfaca 100644
--- a/gcc/testsuite/g++.dg/concepts/expression3.C
+++ b/gcc/testsuite/g++.dg/concepts/expression3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept1.C b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
index d1b4c0c59f3..4908d11d56d 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool Tuple() { // { dg-error "multiple statements" }
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept2.C b/gcc/testsuite/g++.dg/concepts/fn-concept2.C
index 899988c37a3..28765054b5c 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept auto C1() { return 0; } // { dg-error "16:concept .concept auto C1\\(\\). declared with a deduced return type" }
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept3.C b/gcc/testsuite/g++.dg/concepts/fn-concept3.C
index ecb7f6b12f7..88ed5a8e8b2 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept3.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept3.C
@@ -1,6 +1,6 @@
// PR c++/92746
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T> concept bool C3() { return true; }
static_assert(noexcept(C3<int>()), "function concept should be treated as if noexcept(true) specified");
diff --git a/gcc/testsuite/g++.dg/concepts/fn1.C b/gcc/testsuite/g++.dg/concepts/fn1.C
index f23c057ab6b..e22cbf70a46 100644
--- a/gcc/testsuite/g++.dg/concepts/fn1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn10.C b/gcc/testsuite/g++.dg/concepts/fn10.C
index 8d0a2e1d202..83099de90a1 100644
--- a/gcc/testsuite/g++.dg/concepts/fn10.C
+++ b/gcc/testsuite/g++.dg/concepts/fn10.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Test that constraint satisfaction checks work even when
// processing template declarations.
diff --git a/gcc/testsuite/g++.dg/concepts/fn2.C b/gcc/testsuite/g++.dg/concepts/fn2.C
index 1c1280c9d15..e0ac36ff3dd 100644
--- a/gcc/testsuite/g++.dg/concepts/fn2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn3.C b/gcc/testsuite/g++.dg/concepts/fn3.C
index 07b8e3a89ba..3e076f62ee8 100644
--- a/gcc/testsuite/g++.dg/concepts/fn3.C
+++ b/gcc/testsuite/g++.dg/concepts/fn3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/fn4.C b/gcc/testsuite/g++.dg/concepts/fn4.C
index bbaac46c9ff..64186778f28 100644
--- a/gcc/testsuite/g++.dg/concepts/fn4.C
+++ b/gcc/testsuite/g++.dg/concepts/fn4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn5.C b/gcc/testsuite/g++.dg/concepts/fn5.C
index bf277135e79..3decf4e38ee 100644
--- a/gcc/testsuite/g++.dg/concepts/fn5.C
+++ b/gcc/testsuite/g++.dg/concepts/fn5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Check shorthand notation.
diff --git a/gcc/testsuite/g++.dg/concepts/fn6.C b/gcc/testsuite/g++.dg/concepts/fn6.C
index 031e87fdf23..57c4cfbd016 100644
--- a/gcc/testsuite/g++.dg/concepts/fn6.C
+++ b/gcc/testsuite/g++.dg/concepts/fn6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Redefinition errors.
diff --git a/gcc/testsuite/g++.dg/concepts/fn8.C b/gcc/testsuite/g++.dg/concepts/fn8.C
index 32df5a556c0..594270f5178 100644
--- a/gcc/testsuite/g++.dg/concepts/fn8.C
+++ b/gcc/testsuite/g++.dg/concepts/fn8.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool Class() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn9.C b/gcc/testsuite/g++.dg/concepts/fn9.C
index 2f5e88b945c..51edd2fc539 100644
--- a/gcc/testsuite/g++.dg/concepts/fn9.C
+++ b/gcc/testsuite/g++.dg/concepts/fn9.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
index 816072d8d3a..e4909eb50bf 100644
--- a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
+++ b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/generic-fn.C b/gcc/testsuite/g++.dg/concepts/generic-fn.C
index 257608a57a7..983b37092f8 100644
--- a/gcc/testsuite/g++.dg/concepts/generic-fn.C
+++ b/gcc/testsuite/g++.dg/concepts/generic-fn.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
index b137791bbb6..98c260c89b9 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
index 6b7a7a43910..76308ffb212 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/intro1.C b/gcc/testsuite/g++.dg/concepts/intro1.C
index 5f9bb7e08f0..0dd9b646a4d 100644
--- a/gcc/testsuite/g++.dg/concepts/intro1.C
+++ b/gcc/testsuite/g++.dg/concepts/intro1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/intro2.C b/gcc/testsuite/g++.dg/concepts/intro2.C
index 206777d1b94..5c6906c8d35 100644
--- a/gcc/testsuite/g++.dg/concepts/intro2.C
+++ b/gcc/testsuite/g++.dg/concepts/intro2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/intro3.C b/gcc/testsuite/g++.dg/concepts/intro3.C
index f02f1bea247..c92338e548d 100644
--- a/gcc/testsuite/g++.dg/concepts/intro3.C
+++ b/gcc/testsuite/g++.dg/concepts/intro3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename ... T>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/intro4.C b/gcc/testsuite/g++.dg/concepts/intro4.C
index 0b275e14bf2..5ddd1628934 100644
--- a/gcc/testsuite/g++.dg/concepts/intro4.C
+++ b/gcc/testsuite/g++.dg/concepts/intro4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename ... T>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/intro5.C b/gcc/testsuite/g++.dg/concepts/intro5.C
index bbfef7bed9e..cb1c5da7894 100644
--- a/gcc/testsuite/g++.dg/concepts/intro5.C
+++ b/gcc/testsuite/g++.dg/concepts/intro5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T, typename U = int>
concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/intro6.C b/gcc/testsuite/g++.dg/concepts/intro6.C
index 233c5bcec7b..b718d134b2b 100644
--- a/gcc/testsuite/g++.dg/concepts/intro6.C
+++ b/gcc/testsuite/g++.dg/concepts/intro6.C
@@ -1,6 +1,6 @@
// PR c++/67003
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
namespace X {
template<class>
diff --git a/gcc/testsuite/g++.dg/concepts/intro7.C b/gcc/testsuite/g++.dg/concepts/intro7.C
index 343fe7a9824..0c452a77b86 100644
--- a/gcc/testsuite/g++.dg/concepts/intro7.C
+++ b/gcc/testsuite/g++.dg/concepts/intro7.C
@@ -1,6 +1,6 @@
// PR c++/66985
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <template <class> class T>
concept bool Valid = requires { typename T<int>; };
diff --git a/gcc/testsuite/g++.dg/concepts/locations1.C b/gcc/testsuite/g++.dg/concepts/locations1.C
index fbad42f6952..ea227433d2d 100644
--- a/gcc/testsuite/g++.dg/concepts/locations1.C
+++ b/gcc/testsuite/g++.dg/concepts/locations1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
struct S
{
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
index 6b66b78fb8b..09c9d4fe8ef 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool Type = true;
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
index 2c14576f374..089f40fe640 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Make sure that we check partial concept ids
// with variable concepts.
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec5.C b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
index bec6715ea65..954c072ee6c 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec5.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
@@ -1,6 +1,6 @@
// PR c++/67138
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
concept bool _Auto = true;
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder2.C b/gcc/testsuite/g++.dg/concepts/placeholder2.C
index 0c6f91abcaf..f1c3b9c6917 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder2.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = sizeof(T) == 0;
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder3.C b/gcc/testsuite/g++.dg/concepts/placeholder3.C
index d90e5cfb02f..6b79ef6401d 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder3.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder3.C
@@ -1,6 +1,6 @@
// PR c++/66218
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder4.C b/gcc/testsuite/g++.dg/concepts/placeholder4.C
index ab9d8e632af..16451611b2c 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder4.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder4.C
@@ -1,6 +1,6 @@
// PR c++/66218
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder5.C b/gcc/testsuite/g++.dg/concepts/placeholder5.C
index 3f29c933973..21a6b318ff6 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder5.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder6.C b/gcc/testsuite/g++.dg/concepts/placeholder6.C
index 20b9c931648..c7f62d1aa4c 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder6.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <int I> struct B { static const int i = I; };
template <int I> concept bool Few = I < 10;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65634.C b/gcc/testsuite/g++.dg/concepts/pr65634.C
index 5fcb38a5bf4..650d10eba5f 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65634.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65634.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1() {
diff --git a/gcc/testsuite/g++.dg/concepts/pr65636.C b/gcc/testsuite/g++.dg/concepts/pr65636.C
index f927c9abefc..69091dcfdb7 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65636.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65636.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
using TD = int;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65681.C b/gcc/testsuite/g++.dg/concepts/pr65681.C
index 67153d63dfb..cf34911e787 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65681.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65681.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C = requires (T t) { t.mf(); };
diff --git a/gcc/testsuite/g++.dg/concepts/pr65848.C b/gcc/testsuite/g++.dg/concepts/pr65848.C
index ea3077d84fb..76e6f6faefc 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65848.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65848.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Performance test... This should be fast.
diff --git a/gcc/testsuite/g++.dg/concepts/pr67249.C b/gcc/testsuite/g++.dg/concepts/pr67249.C
index 382eba110a6..75f0ea0e4ea 100644
--- a/gcc/testsuite/g++.dg/concepts/pr67249.C
+++ b/gcc/testsuite/g++.dg/concepts/pr67249.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<class T> concept bool C1 = true;
template<class A, class B> struct Pair {};
diff --git a/gcc/testsuite/g++.dg/concepts/pr67595.C b/gcc/testsuite/g++.dg/concepts/pr67595.C
index 37adf931fb5..33122d2ddb0 100644
--- a/gcc/testsuite/g++.dg/concepts/pr67595.C
+++ b/gcc/testsuite/g++.dg/concepts/pr67595.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class X> concept bool allocatable = requires{{new X}->X *; };
template <class X> concept bool semiregular = allocatable<X>;
diff --git a/gcc/testsuite/g++.dg/concepts/pr68434.C b/gcc/testsuite/g++.dg/concepts/pr68434.C
index 16868ba042c..ff6a8980700 100644
--- a/gcc/testsuite/g++.dg/concepts/pr68434.C
+++ b/gcc/testsuite/g++.dg/concepts/pr68434.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class>
concept bool C1 () {
diff --git a/gcc/testsuite/g++.dg/concepts/pr71127.C b/gcc/testsuite/g++.dg/concepts/pr71127.C
index 224eaa3d2f7..e76aec15809 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71127.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71127.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<template<typename> class T>
concept bool C = T<int>::value;
diff --git a/gcc/testsuite/g++.dg/concepts/pr71128.C b/gcc/testsuite/g++.dg/concepts/pr71128.C
index a150e37d78d..351a6465df1 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71128.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71128.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/pr71131.C b/gcc/testsuite/g++.dg/concepts/pr71131.C
index 675d66d9d75..8da43aff49c 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71131.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71131.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<template<typename> class T>
concept bool C = true;
diff --git a/gcc/testsuite/g++.dg/concepts/pr71385.C b/gcc/testsuite/g++.dg/concepts/pr71385.C
index fb754253612..66ca52bdfe1 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71385.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71385.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<class T>
concept bool Addable(){
diff --git a/gcc/testsuite/g++.dg/concepts/pr85065.C b/gcc/testsuite/g++.dg/concepts/pr85065.C
index 52a42647948..72f2aca8915 100644
--- a/gcc/testsuite/g++.dg/concepts/pr85065.C
+++ b/gcc/testsuite/g++.dg/concepts/pr85065.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<int> concept bool C = true;
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm11.C b/gcc/testsuite/g++.dg/concepts/template-parm11.C
index 257e7c691db..b376a490298 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm11.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm11.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool NameProvider()
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm12.C b/gcc/testsuite/g++.dg/concepts/template-parm12.C
index cb3e2c6b55a..81d08180a29 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm12.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm12.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Conceptized version of template/ttp23.C
template <class T> concept bool Foo = true;
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm2.C b/gcc/testsuite/g++.dg/concepts/template-parm2.C
index d708fd06f01..dc6983a6eaa 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm2.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm3.C b/gcc/testsuite/g++.dg/concepts/template-parm3.C
index 028149c13dc..2e6bd2c04e0 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm3.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm4.C b/gcc/testsuite/g++.dg/concepts/template-parm4.C
index d93dbc7f2dc..8f8ad6315ba 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm4.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
index d701859d127..019a9333ece 100644
--- a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
+++ b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
@@ -1,6 +1,6 @@
// PR c++/66937
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <tuple>
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept1.C b/gcc/testsuite/g++.dg/concepts/var-concept1.C
index 21a4915551b..3a3b3405bff 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept2.C b/gcc/testsuite/g++.dg/concepts/var-concept2.C
index 5e1faec213f..0ef2322cad2 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept3.C b/gcc/testsuite/g++.dg/concepts/var-concept3.C
index 144c0ea1a24..6fd96a5042e 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept3.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept4.C b/gcc/testsuite/g++.dg/concepts/var-concept4.C
index a7839ee5f85..7ae9f36c2d0 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept4.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T, typename U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept5.C b/gcc/testsuite/g++.dg/concepts/var-concept5.C
index d8fa2984f15..cc7f4af47c6 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept5.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T1, typename T2>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept6.C b/gcc/testsuite/g++.dg/concepts/var-concept6.C
index 80984a7ab1e..d2270df1727 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept6.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
concept int C = true; // { dg-error "bool" }
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept7.C b/gcc/testsuite/g++.dg/concepts/var-concept7.C
index 2cfe2666e16..026fe9f4165 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept7.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept7.C
@@ -1,6 +1,6 @@
// PR c++/85133
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename> concept bool C; // { dg-error "no initializer" }
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ2.C b/gcc/testsuite/g++.dg/concepts/var-templ2.C
index 1b8890a789b..2eb419aa945 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ2.C
@@ -1,6 +1,6 @@
// PR c++/67139
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
constexpr typename T::type::value_type _v = T::type::value;
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ3.C b/gcc/testsuite/g++.dg/concepts/var-templ3.C
index cc5ee5fa8e6..662511eee03 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ3.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ3.C
@@ -1,6 +1,6 @@
// PR c++/68666
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
struct A {
template <class>
diff --git a/gcc/testsuite/g++.dg/concepts/variadic1.C b/gcc/testsuite/g++.dg/concepts/variadic1.C
index c3bc7f61513..c590f28ee81 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic1.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic1.C
@@ -1,6 +1,6 @@
// PR c++/66712
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class...Args>
concept bool _Constructible_ =
diff --git a/gcc/testsuite/g++.dg/concepts/variadic2.C b/gcc/testsuite/g++.dg/concepts/variadic2.C
index 7b220097f98..1776b951113 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic2.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T> concept bool Copyable = requires (T t) { T(t); };
template <class T> concept bool Constructable = requires { T(); };
diff --git a/gcc/testsuite/g++.dg/concepts/variadic3.C b/gcc/testsuite/g++.dg/concepts/variadic3.C
index bd2f381a1a8..07c2401a785 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic3.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic3.C
@@ -1,6 +1,6 @@
// PR c++/70036
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T> concept bool C = true;
diff --git a/gcc/testsuite/g++.dg/concepts/variadic4.C b/gcc/testsuite/g++.dg/concepts/variadic4.C
index d6eea49b958..1dfa2e6000b 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic4.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic4.C
@@ -1,6 +1,6 @@
// PR c++/73456
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename...> struct list {};
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C
index 3ab7c9b6082..bec97e98352 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C
@@ -1,6 +1,6 @@
// PR c++/65575
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<typename T>
concept bool C = false;
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C
index ea51e31817e..cd3acf77876 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C
@@ -1,6 +1,6 @@
// PR c++/66091
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<typename T>
concept bool C1()
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
index 75f8e40ca58..726c90f4ab8 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
@@ -4,10 +4,9 @@
template <typename T>
void foo1(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
(typename T::template D<auto> (t)); // { dg-error "" }
-// { dg-warning "only available" "" { target c++17_down } .-1 }
}
struct T1 {
@@ -23,7 +22,7 @@ struct T1 {
template <typename T>
void foo2(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
T::template D<auto> (t); // { dg-error "" }
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
index 1c1a41c0fa2..ec8ae3564fa 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
@@ -8,10 +8,9 @@
template <typename T>
void foo1(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
(typename T::template D<auto> (t)); // { dg-error "" }
-// { dg-warning "only available" "" { target c++17_down } .-1 }
}
struct T1 {
@@ -27,7 +26,7 @@ struct T1 {
template <typename T>
void foo2(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
T::template D<auto> (t); // { dg-error "" }
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
index 1703de05f07..635a1688999 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
@@ -1,4 +1,4 @@
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<T> concept bool C = true; // { dg-error "has not been declared" }
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
index 96aac69ed6a..d351b4594ae 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
@@ -1,6 +1,6 @@
// PR c++/85265
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<typename> concept bool C = true;
base-commit: 20d5dca80b82df9b1295359edb44eb08c45c4334
--
2.31.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* [pushed] c++: change -fconcepts to mean C++20 concepts
@ 2022-11-03 19:26 Jason Merrill
0 siblings, 0 replies; 2+ messages in thread
From: Jason Merrill @ 2022-11-03 19:26 UTC (permalink / raw)
To: gcc-patches
Tested x86_64-pc-linux-gnu, applying to trunk.
-- >8 --
It was always weird that -fconcepts in C++17 mode meant the same thing as
-fconcepts-ts in C++20 mode; this patch harmonizes the flags so that for TS
concepts you always need to write -fconcepts-ts.
In the unlikely event anyone is still using -fconcepts in C++17 mode, they
can either fix their code to work with C++20 concepts or adjust the compiler
flag.
gcc/c-family/ChangeLog:
* c-opts.cc (c_common_post_options): -fconcepts no longer implies
-fconcepts-ts before C++20.
gcc/ChangeLog:
* doc/invoke.texi: -fconcepts no longer implies
-fconcepts-ts before C++20.
gcc/cp/ChangeLog:
* parser.cc (cp_parser_template_declaration_after_parameters): Fix
concept parsing below C++20.
gcc/testsuite/ChangeLog:
* g++.dg/concepts/auto1.C:
* g++.dg/concepts/auto3.C:
* g++.dg/concepts/auto4.C:
* g++.dg/concepts/class-deduction1.C:
* g++.dg/concepts/class5.C:
* g++.dg/concepts/class6.C:
* g++.dg/concepts/debug1.C:
* g++.dg/concepts/decl-diagnose.C:
* g++.dg/concepts/deduction-constraint1.C:
* g++.dg/concepts/diagnostic1.C:
* g++.dg/concepts/dr1430.C:
* g++.dg/concepts/equiv.C:
* g++.dg/concepts/equiv2.C:
* g++.dg/concepts/expression.C:
* g++.dg/concepts/expression2.C:
* g++.dg/concepts/expression3.C:
* g++.dg/concepts/fn-concept1.C:
* g++.dg/concepts/fn-concept2.C:
* g++.dg/concepts/fn-concept3.C:
* g++.dg/concepts/fn1.C:
* g++.dg/concepts/fn10.C:
* g++.dg/concepts/fn2.C:
* g++.dg/concepts/fn3.C:
* g++.dg/concepts/fn4.C:
* g++.dg/concepts/fn5.C:
* g++.dg/concepts/fn6.C:
* g++.dg/concepts/fn8.C:
* g++.dg/concepts/fn9.C:
* g++.dg/concepts/generic-fn-err.C:
* g++.dg/concepts/generic-fn.C:
* g++.dg/concepts/inherit-ctor1.C:
* g++.dg/concepts/inherit-ctor3.C:
* g++.dg/concepts/intro1.C:
* g++.dg/concepts/intro2.C:
* g++.dg/concepts/intro3.C:
* g++.dg/concepts/intro4.C:
* g++.dg/concepts/intro5.C:
* g++.dg/concepts/intro6.C:
* g++.dg/concepts/intro7.C:
* g++.dg/concepts/locations1.C:
* g++.dg/concepts/partial-concept-id1.C:
* g++.dg/concepts/partial-concept-id2.C:
* g++.dg/concepts/partial-spec5.C:
* g++.dg/concepts/placeholder2.C:
* g++.dg/concepts/placeholder3.C:
* g++.dg/concepts/placeholder4.C:
* g++.dg/concepts/placeholder5.C:
* g++.dg/concepts/placeholder6.C:
* g++.dg/concepts/pr65634.C:
* g++.dg/concepts/pr65636.C:
* g++.dg/concepts/pr65681.C:
* g++.dg/concepts/pr65848.C:
* g++.dg/concepts/pr67249.C:
* g++.dg/concepts/pr67595.C:
* g++.dg/concepts/pr68434.C:
* g++.dg/concepts/pr71127.C:
* g++.dg/concepts/pr71128.C:
* g++.dg/concepts/pr71131.C:
* g++.dg/concepts/pr71385.C:
* g++.dg/concepts/pr85065.C:
* g++.dg/concepts/template-parm11.C:
* g++.dg/concepts/template-parm12.C:
* g++.dg/concepts/template-parm2.C:
* g++.dg/concepts/template-parm3.C:
* g++.dg/concepts/template-parm4.C:
* g++.dg/concepts/template-template-parm1.C:
* g++.dg/concepts/var-concept1.C:
* g++.dg/concepts/var-concept2.C:
* g++.dg/concepts/var-concept3.C:
* g++.dg/concepts/var-concept4.C:
* g++.dg/concepts/var-concept5.C:
* g++.dg/concepts/var-concept6.C:
* g++.dg/concepts/var-concept7.C:
* g++.dg/concepts/var-templ2.C:
* g++.dg/concepts/var-templ3.C:
* g++.dg/concepts/variadic1.C:
* g++.dg/concepts/variadic2.C:
* g++.dg/concepts/variadic3.C:
* g++.dg/concepts/variadic4.C:
* g++.dg/cpp2a/concepts-pr65575.C:
* g++.dg/cpp2a/concepts-pr66091.C:
* g++.dg/cpp2a/concepts-pr84980.C:
* g++.dg/cpp2a/concepts-pr85265.C: Pass -fconcepts-ts.
* g++.dg/cpp2a/concepts-pr84979-2.C:
* g++.dg/cpp2a/concepts-pr84979-3.C: Same diagnostics
in C++20 and below.
---
gcc/doc/invoke.texi | 14 +++++++-------
gcc/c-family/c-opts.cc | 3 ---
gcc/cp/parser.cc | 7 ++++---
gcc/testsuite/g++.dg/concepts/auto1.C | 2 +-
gcc/testsuite/g++.dg/concepts/auto3.C | 2 +-
gcc/testsuite/g++.dg/concepts/auto4.C | 2 +-
gcc/testsuite/g++.dg/concepts/class-deduction1.C | 2 +-
gcc/testsuite/g++.dg/concepts/class5.C | 2 +-
gcc/testsuite/g++.dg/concepts/class6.C | 2 +-
gcc/testsuite/g++.dg/concepts/debug1.C | 2 +-
gcc/testsuite/g++.dg/concepts/decl-diagnose.C | 2 +-
.../g++.dg/concepts/deduction-constraint1.C | 2 +-
gcc/testsuite/g++.dg/concepts/diagnostic1.C | 2 +-
gcc/testsuite/g++.dg/concepts/dr1430.C | 2 +-
gcc/testsuite/g++.dg/concepts/equiv.C | 2 +-
gcc/testsuite/g++.dg/concepts/equiv2.C | 2 +-
gcc/testsuite/g++.dg/concepts/expression.C | 2 +-
gcc/testsuite/g++.dg/concepts/expression2.C | 2 +-
gcc/testsuite/g++.dg/concepts/expression3.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn-concept1.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn-concept2.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn-concept3.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn1.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn10.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn2.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn3.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn4.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn5.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn6.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn8.C | 2 +-
gcc/testsuite/g++.dg/concepts/fn9.C | 2 +-
gcc/testsuite/g++.dg/concepts/generic-fn-err.C | 2 +-
gcc/testsuite/g++.dg/concepts/generic-fn.C | 2 +-
gcc/testsuite/g++.dg/concepts/inherit-ctor1.C | 2 +-
gcc/testsuite/g++.dg/concepts/inherit-ctor3.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro1.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro2.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro3.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro4.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro5.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro6.C | 2 +-
gcc/testsuite/g++.dg/concepts/intro7.C | 2 +-
gcc/testsuite/g++.dg/concepts/locations1.C | 2 +-
.../g++.dg/concepts/partial-concept-id1.C | 2 +-
.../g++.dg/concepts/partial-concept-id2.C | 2 +-
gcc/testsuite/g++.dg/concepts/partial-spec5.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder2.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder3.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder4.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder5.C | 2 +-
gcc/testsuite/g++.dg/concepts/placeholder6.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65634.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65636.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65681.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr65848.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr67249.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr67595.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr68434.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71127.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71128.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71131.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr71385.C | 2 +-
gcc/testsuite/g++.dg/concepts/pr85065.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm11.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm12.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm2.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm3.C | 2 +-
gcc/testsuite/g++.dg/concepts/template-parm4.C | 2 +-
.../g++.dg/concepts/template-template-parm1.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept1.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept2.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept3.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept4.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept5.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept6.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-concept7.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-templ2.C | 2 +-
gcc/testsuite/g++.dg/concepts/var-templ3.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic1.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic2.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic3.C | 2 +-
gcc/testsuite/g++.dg/concepts/variadic4.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C | 5 ++---
gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C | 5 ++---
gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C | 2 +-
gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C | 2 +-
88 files changed, 98 insertions(+), 102 deletions(-)
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index c6323a53ad2..2b29db831ae 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -3075,14 +3075,14 @@ exhaustion is signalled by throwing @code{std::bad_alloc}. See also
@itemx -fconcepts-ts
@opindex fconcepts
@opindex fconcepts-ts
-Below @option{-std=c++20}, @option{-fconcepts} enables support for the
-C++ Extensions for Concepts Technical Specification, ISO 19217 (2015).
+Enable support for the C++ Concepts feature for constraining template
+arguments. With @option{-std=c++20} and above, Concepts are part of
+the language standard, so @option{-fconcepts} defaults to on.
-With @option{-std=c++20} and above, Concepts are part of the language
-standard, so @option{-fconcepts} defaults to on. But the standard
-specification of Concepts differs significantly from the TS, so some
-constructs that were allowed in the TS but didn't make it into the
-standard can still be enabled by @option{-fconcepts-ts}.
+Some constructs that were allowed by the earlier C++ Extensions for
+Concepts Technical Specification, ISO 19217 (2015), but didn't make it
+into the standard, can additionally be enabled by
+@option{-fconcepts-ts}.
@item -fconstexpr-depth=@var{n}
@opindex fconstexpr-depth
diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
index 32b929e3ece..9e0494b2a45 100644
--- a/gcc/c-family/c-opts.cc
+++ b/gcc/c-family/c-opts.cc
@@ -1090,9 +1090,6 @@ c_common_post_options (const char **pfilename)
work with the standard. */
if (cxx_dialect >= cxx20 || flag_concepts_ts)
flag_concepts = 1;
- else if (flag_concepts)
- /* For -std=c++17 -fconcepts, imply -fconcepts-ts. */
- flag_concepts_ts = 1;
if (num_in_fnames > 1)
error ("too many filenames given; type %<%s %s%> for usage",
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index fd59de491cd..9523f73d9a3 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -31450,10 +31450,11 @@ cp_parser_template_declaration_after_parameters (cp_parser* parser,
else if (cxx_dialect >= cxx11
&& cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
decl = cp_parser_alias_declaration (parser);
- else if (cxx_dialect >= cxx20 /* Implies flag_concept. */
+ else if (flag_concepts
&& cp_lexer_next_token_is_keyword (parser->lexer, RID_CONCEPT)
- && !cp_lexer_nth_token_is_keyword (parser->lexer, 2, RID_BOOL))
- /* Allow 'concept bool' to be handled as per the TS. */
+ && cp_lexer_nth_token_is (parser->lexer, 2, CPP_NAME))
+ /* -fconcept-ts 'concept bool' syntax is handled below, in
+ cp_parser_single_declaration. */
decl = cp_parser_concept_definition (parser);
else
{
diff --git a/gcc/testsuite/g++.dg/concepts/auto1.C b/gcc/testsuite/g++.dg/concepts/auto1.C
index e05330610fc..abf7886c9f6 100644
--- a/gcc/testsuite/g++.dg/concepts/auto1.C
+++ b/gcc/testsuite/g++.dg/concepts/auto1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T1, class T2> class A { };
diff --git a/gcc/testsuite/g++.dg/concepts/auto3.C b/gcc/testsuite/g++.dg/concepts/auto3.C
index 27a6afa4ed9..868a56cf315 100644
--- a/gcc/testsuite/g++.dg/concepts/auto3.C
+++ b/gcc/testsuite/g++.dg/concepts/auto3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class...> class tuple {};
diff --git a/gcc/testsuite/g++.dg/concepts/auto4.C b/gcc/testsuite/g++.dg/concepts/auto4.C
index 8bf3fa9b1ce..6c984550229 100644
--- a/gcc/testsuite/g++.dg/concepts/auto4.C
+++ b/gcc/testsuite/g++.dg/concepts/auto4.C
@@ -1,6 +1,6 @@
// PR c++/85006
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename... Ts> struct A {};
diff --git a/gcc/testsuite/g++.dg/concepts/class-deduction1.C b/gcc/testsuite/g++.dg/concepts/class-deduction1.C
index 33597007752..7f427d053b8 100644
--- a/gcc/testsuite/g++.dg/concepts/class-deduction1.C
+++ b/gcc/testsuite/g++.dg/concepts/class-deduction1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
concept bool Isint = __is_same_as(T,int);
diff --git a/gcc/testsuite/g++.dg/concepts/class5.C b/gcc/testsuite/g++.dg/concepts/class5.C
index ac9d7e83e9d..5f8ece96543 100644
--- a/gcc/testsuite/g++.dg/concepts/class5.C
+++ b/gcc/testsuite/g++.dg/concepts/class5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool One() { return sizeof(T) >= 4; }
diff --git a/gcc/testsuite/g++.dg/concepts/class6.C b/gcc/testsuite/g++.dg/concepts/class6.C
index f2345b19b04..a1c5e166e55 100644
--- a/gcc/testsuite/g++.dg/concepts/class6.C
+++ b/gcc/testsuite/g++.dg/concepts/class6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool One() { return sizeof(T) >= 4; }
diff --git a/gcc/testsuite/g++.dg/concepts/debug1.C b/gcc/testsuite/g++.dg/concepts/debug1.C
index b9a544486ac..fb48567249f 100644
--- a/gcc/testsuite/g++.dg/concepts/debug1.C
+++ b/gcc/testsuite/g++.dg/concepts/debug1.C
@@ -1,6 +1,6 @@
// PR c++/84551
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename> concept bool C() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
index 6a461a50366..96038fd3dfc 100644
--- a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
+++ b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
typedef concept int CINT; // { dg-error "'concept' cannot appear in a typedef declaration" }
diff --git a/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C b/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
index eba57713089..d510fe00f2c 100644
--- a/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
+++ b/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
@@ -1,6 +1,6 @@
// PR c++/67007
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class U>
concept bool A =
diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic1.C b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
index 29c78c4c730..207c36c320e 100644
--- a/gcc/testsuite/g++.dg/concepts/diagnostic1.C
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
@@ -1,6 +1,6 @@
// PR c++/67159
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts -fconcepts-diagnostics-depth=2" }
+// { dg-options "-fconcepts-ts -fconcepts-diagnostics-depth=2" }
template <class T, class U>
concept bool SameAs = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/dr1430.C b/gcc/testsuite/g++.dg/concepts/dr1430.C
index 05c91526c20..c22a7827eba 100644
--- a/gcc/testsuite/g++.dg/concepts/dr1430.C
+++ b/gcc/testsuite/g++.dg/concepts/dr1430.C
@@ -1,6 +1,6 @@
// PR c++/66092
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/equiv.C b/gcc/testsuite/g++.dg/concepts/equiv.C
index 640c2b5ec0d..a5d0c1864c0 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv.C
@@ -1,5 +1,5 @@
// { dg-do link { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Check equivalence of short- and longhand declarations.
diff --git a/gcc/testsuite/g++.dg/concepts/equiv2.C b/gcc/testsuite/g++.dg/concepts/equiv2.C
index dff719b86a5..48a266498f9 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv2.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv2.C
@@ -1,5 +1,5 @@
// { dg-do link { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/expression.C b/gcc/testsuite/g++.dg/concepts/expression.C
index ba4c48d7dcc..3da0c962888 100644
--- a/gcc/testsuite/g++.dg/concepts/expression.C
+++ b/gcc/testsuite/g++.dg/concepts/expression.C
@@ -1,5 +1,5 @@
// { dg-do run { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// TODO: ICE on gimplify 16?
diff --git a/gcc/testsuite/g++.dg/concepts/expression2.C b/gcc/testsuite/g++.dg/concepts/expression2.C
index 4bb5bc71462..2f7aafc8b6b 100644
--- a/gcc/testsuite/g++.dg/concepts/expression2.C
+++ b/gcc/testsuite/g++.dg/concepts/expression2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1()
diff --git a/gcc/testsuite/g++.dg/concepts/expression3.C b/gcc/testsuite/g++.dg/concepts/expression3.C
index 67646811284..a2d340dfaca 100644
--- a/gcc/testsuite/g++.dg/concepts/expression3.C
+++ b/gcc/testsuite/g++.dg/concepts/expression3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept1.C b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
index d1b4c0c59f3..4908d11d56d 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool Tuple() { // { dg-error "multiple statements" }
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept2.C b/gcc/testsuite/g++.dg/concepts/fn-concept2.C
index 899988c37a3..28765054b5c 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept auto C1() { return 0; } // { dg-error "16:concept .concept auto C1\\(\\). declared with a deduced return type" }
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept3.C b/gcc/testsuite/g++.dg/concepts/fn-concept3.C
index ecb7f6b12f7..88ed5a8e8b2 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept3.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept3.C
@@ -1,6 +1,6 @@
// PR c++/92746
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T> concept bool C3() { return true; }
static_assert(noexcept(C3<int>()), "function concept should be treated as if noexcept(true) specified");
diff --git a/gcc/testsuite/g++.dg/concepts/fn1.C b/gcc/testsuite/g++.dg/concepts/fn1.C
index f23c057ab6b..e22cbf70a46 100644
--- a/gcc/testsuite/g++.dg/concepts/fn1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn10.C b/gcc/testsuite/g++.dg/concepts/fn10.C
index 8d0a2e1d202..83099de90a1 100644
--- a/gcc/testsuite/g++.dg/concepts/fn10.C
+++ b/gcc/testsuite/g++.dg/concepts/fn10.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Test that constraint satisfaction checks work even when
// processing template declarations.
diff --git a/gcc/testsuite/g++.dg/concepts/fn2.C b/gcc/testsuite/g++.dg/concepts/fn2.C
index 1c1280c9d15..e0ac36ff3dd 100644
--- a/gcc/testsuite/g++.dg/concepts/fn2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn3.C b/gcc/testsuite/g++.dg/concepts/fn3.C
index 07b8e3a89ba..3e076f62ee8 100644
--- a/gcc/testsuite/g++.dg/concepts/fn3.C
+++ b/gcc/testsuite/g++.dg/concepts/fn3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/fn4.C b/gcc/testsuite/g++.dg/concepts/fn4.C
index bbaac46c9ff..64186778f28 100644
--- a/gcc/testsuite/g++.dg/concepts/fn4.C
+++ b/gcc/testsuite/g++.dg/concepts/fn4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn5.C b/gcc/testsuite/g++.dg/concepts/fn5.C
index bf277135e79..3decf4e38ee 100644
--- a/gcc/testsuite/g++.dg/concepts/fn5.C
+++ b/gcc/testsuite/g++.dg/concepts/fn5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Check shorthand notation.
diff --git a/gcc/testsuite/g++.dg/concepts/fn6.C b/gcc/testsuite/g++.dg/concepts/fn6.C
index 031e87fdf23..57c4cfbd016 100644
--- a/gcc/testsuite/g++.dg/concepts/fn6.C
+++ b/gcc/testsuite/g++.dg/concepts/fn6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Redefinition errors.
diff --git a/gcc/testsuite/g++.dg/concepts/fn8.C b/gcc/testsuite/g++.dg/concepts/fn8.C
index 32df5a556c0..594270f5178 100644
--- a/gcc/testsuite/g++.dg/concepts/fn8.C
+++ b/gcc/testsuite/g++.dg/concepts/fn8.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool Class() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/fn9.C b/gcc/testsuite/g++.dg/concepts/fn9.C
index 2f5e88b945c..51edd2fc539 100644
--- a/gcc/testsuite/g++.dg/concepts/fn9.C
+++ b/gcc/testsuite/g++.dg/concepts/fn9.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
index 816072d8d3a..e4909eb50bf 100644
--- a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
+++ b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/generic-fn.C b/gcc/testsuite/g++.dg/concepts/generic-fn.C
index 257608a57a7..983b37092f8 100644
--- a/gcc/testsuite/g++.dg/concepts/generic-fn.C
+++ b/gcc/testsuite/g++.dg/concepts/generic-fn.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
#include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
index b137791bbb6..98c260c89b9 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
index 6b7a7a43910..76308ffb212 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/intro1.C b/gcc/testsuite/g++.dg/concepts/intro1.C
index 5f9bb7e08f0..0dd9b646a4d 100644
--- a/gcc/testsuite/g++.dg/concepts/intro1.C
+++ b/gcc/testsuite/g++.dg/concepts/intro1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/intro2.C b/gcc/testsuite/g++.dg/concepts/intro2.C
index 206777d1b94..5c6906c8d35 100644
--- a/gcc/testsuite/g++.dg/concepts/intro2.C
+++ b/gcc/testsuite/g++.dg/concepts/intro2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <cassert>
diff --git a/gcc/testsuite/g++.dg/concepts/intro3.C b/gcc/testsuite/g++.dg/concepts/intro3.C
index f02f1bea247..c92338e548d 100644
--- a/gcc/testsuite/g++.dg/concepts/intro3.C
+++ b/gcc/testsuite/g++.dg/concepts/intro3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename ... T>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/intro4.C b/gcc/testsuite/g++.dg/concepts/intro4.C
index 0b275e14bf2..5ddd1628934 100644
--- a/gcc/testsuite/g++.dg/concepts/intro4.C
+++ b/gcc/testsuite/g++.dg/concepts/intro4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename ... T>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/intro5.C b/gcc/testsuite/g++.dg/concepts/intro5.C
index bbfef7bed9e..cb1c5da7894 100644
--- a/gcc/testsuite/g++.dg/concepts/intro5.C
+++ b/gcc/testsuite/g++.dg/concepts/intro5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T, typename U = int>
concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/intro6.C b/gcc/testsuite/g++.dg/concepts/intro6.C
index 233c5bcec7b..b718d134b2b 100644
--- a/gcc/testsuite/g++.dg/concepts/intro6.C
+++ b/gcc/testsuite/g++.dg/concepts/intro6.C
@@ -1,6 +1,6 @@
// PR c++/67003
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
namespace X {
template<class>
diff --git a/gcc/testsuite/g++.dg/concepts/intro7.C b/gcc/testsuite/g++.dg/concepts/intro7.C
index 343fe7a9824..0c452a77b86 100644
--- a/gcc/testsuite/g++.dg/concepts/intro7.C
+++ b/gcc/testsuite/g++.dg/concepts/intro7.C
@@ -1,6 +1,6 @@
// PR c++/66985
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <template <class> class T>
concept bool Valid = requires { typename T<int>; };
diff --git a/gcc/testsuite/g++.dg/concepts/locations1.C b/gcc/testsuite/g++.dg/concepts/locations1.C
index fbad42f6952..ea227433d2d 100644
--- a/gcc/testsuite/g++.dg/concepts/locations1.C
+++ b/gcc/testsuite/g++.dg/concepts/locations1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
struct S
{
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
index 6b66b78fb8b..09c9d4fe8ef 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool Type = true;
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
index 2c14576f374..089f40fe640 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Make sure that we check partial concept ids
// with variable concepts.
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec5.C b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
index bec6715ea65..954c072ee6c 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec5.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
@@ -1,6 +1,6 @@
// PR c++/67138
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
concept bool _Auto = true;
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder2.C b/gcc/testsuite/g++.dg/concepts/placeholder2.C
index 0c6f91abcaf..f1c3b9c6917 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder2.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = sizeof(T) == 0;
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder3.C b/gcc/testsuite/g++.dg/concepts/placeholder3.C
index d90e5cfb02f..6b79ef6401d 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder3.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder3.C
@@ -1,6 +1,6 @@
// PR c++/66218
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder4.C b/gcc/testsuite/g++.dg/concepts/placeholder4.C
index ab9d8e632af..16451611b2c 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder4.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder4.C
@@ -1,6 +1,6 @@
// PR c++/66218
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder5.C b/gcc/testsuite/g++.dg/concepts/placeholder5.C
index 3f29c933973..21a6b318ff6 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder5.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder6.C b/gcc/testsuite/g++.dg/concepts/placeholder6.C
index 20b9c931648..c7f62d1aa4c 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder6.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <int I> struct B { static const int i = I; };
template <int I> concept bool Few = I < 10;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65634.C b/gcc/testsuite/g++.dg/concepts/pr65634.C
index 5fcb38a5bf4..650d10eba5f 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65634.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65634.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1() {
diff --git a/gcc/testsuite/g++.dg/concepts/pr65636.C b/gcc/testsuite/g++.dg/concepts/pr65636.C
index f927c9abefc..69091dcfdb7 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65636.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65636.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
using TD = int;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65681.C b/gcc/testsuite/g++.dg/concepts/pr65681.C
index 67153d63dfb..cf34911e787 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65681.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65681.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C = requires (T t) { t.mf(); };
diff --git a/gcc/testsuite/g++.dg/concepts/pr65848.C b/gcc/testsuite/g++.dg/concepts/pr65848.C
index ea3077d84fb..76e6f6faefc 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65848.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65848.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Performance test... This should be fast.
diff --git a/gcc/testsuite/g++.dg/concepts/pr67249.C b/gcc/testsuite/g++.dg/concepts/pr67249.C
index 382eba110a6..75f0ea0e4ea 100644
--- a/gcc/testsuite/g++.dg/concepts/pr67249.C
+++ b/gcc/testsuite/g++.dg/concepts/pr67249.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<class T> concept bool C1 = true;
template<class A, class B> struct Pair {};
diff --git a/gcc/testsuite/g++.dg/concepts/pr67595.C b/gcc/testsuite/g++.dg/concepts/pr67595.C
index 37adf931fb5..33122d2ddb0 100644
--- a/gcc/testsuite/g++.dg/concepts/pr67595.C
+++ b/gcc/testsuite/g++.dg/concepts/pr67595.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class X> concept bool allocatable = requires{{new X}->X *; };
template <class X> concept bool semiregular = allocatable<X>;
diff --git a/gcc/testsuite/g++.dg/concepts/pr68434.C b/gcc/testsuite/g++.dg/concepts/pr68434.C
index 16868ba042c..ff6a8980700 100644
--- a/gcc/testsuite/g++.dg/concepts/pr68434.C
+++ b/gcc/testsuite/g++.dg/concepts/pr68434.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class>
concept bool C1 () {
diff --git a/gcc/testsuite/g++.dg/concepts/pr71127.C b/gcc/testsuite/g++.dg/concepts/pr71127.C
index 224eaa3d2f7..e76aec15809 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71127.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71127.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<template<typename> class T>
concept bool C = T<int>::value;
diff --git a/gcc/testsuite/g++.dg/concepts/pr71128.C b/gcc/testsuite/g++.dg/concepts/pr71128.C
index a150e37d78d..351a6465df1 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71128.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71128.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/pr71131.C b/gcc/testsuite/g++.dg/concepts/pr71131.C
index 675d66d9d75..8da43aff49c 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71131.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71131.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<template<typename> class T>
concept bool C = true;
diff --git a/gcc/testsuite/g++.dg/concepts/pr71385.C b/gcc/testsuite/g++.dg/concepts/pr71385.C
index fb754253612..66ca52bdfe1 100644
--- a/gcc/testsuite/g++.dg/concepts/pr71385.C
+++ b/gcc/testsuite/g++.dg/concepts/pr71385.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<class T>
concept bool Addable(){
diff --git a/gcc/testsuite/g++.dg/concepts/pr85065.C b/gcc/testsuite/g++.dg/concepts/pr85065.C
index 52a42647948..72f2aca8915 100644
--- a/gcc/testsuite/g++.dg/concepts/pr85065.C
+++ b/gcc/testsuite/g++.dg/concepts/pr85065.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<int> concept bool C = true;
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm11.C b/gcc/testsuite/g++.dg/concepts/template-parm11.C
index 257e7c691db..b376a490298 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm11.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm11.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool NameProvider()
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm12.C b/gcc/testsuite/g++.dg/concepts/template-parm12.C
index cb3e2c6b55a..81d08180a29 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm12.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm12.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
// Conceptized version of template/ttp23.C
template <class T> concept bool Foo = true;
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm2.C b/gcc/testsuite/g++.dg/concepts/template-parm2.C
index d708fd06f01..dc6983a6eaa 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm2.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm3.C b/gcc/testsuite/g++.dg/concepts/template-parm3.C
index 028149c13dc..2e6bd2c04e0 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm3.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm4.C b/gcc/testsuite/g++.dg/concepts/template-parm4.C
index d93dbc7f2dc..8f8ad6315ba 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm4.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
index d701859d127..019a9333ece 100644
--- a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
+++ b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
@@ -1,6 +1,6 @@
// PR c++/66937
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
#include <tuple>
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept1.C b/gcc/testsuite/g++.dg/concepts/var-concept1.C
index 21a4915551b..3a3b3405bff 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept1.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept2.C b/gcc/testsuite/g++.dg/concepts/var-concept2.C
index 5e1faec213f..0ef2322cad2 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept3.C b/gcc/testsuite/g++.dg/concepts/var-concept3.C
index 144c0ea1a24..6fd96a5042e 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept3.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept3.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T>
concept bool C1 = __is_class(T);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept4.C b/gcc/testsuite/g++.dg/concepts/var-concept4.C
index a7839ee5f85..7ae9f36c2d0 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept4.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept4.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T, typename U>
concept bool Same = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept5.C b/gcc/testsuite/g++.dg/concepts/var-concept5.C
index d8fa2984f15..cc7f4af47c6 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept5.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept5.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename T1, typename T2>
concept bool C1 = true;
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept6.C b/gcc/testsuite/g++.dg/concepts/var-concept6.C
index 80984a7ab1e..d2270df1727 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept6.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept6.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
concept int C = true; // { dg-error "bool" }
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept7.C b/gcc/testsuite/g++.dg/concepts/var-concept7.C
index 2cfe2666e16..026fe9f4165 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept7.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept7.C
@@ -1,6 +1,6 @@
// PR c++/85133
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename> concept bool C; // { dg-error "no initializer" }
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ2.C b/gcc/testsuite/g++.dg/concepts/var-templ2.C
index 1b8890a789b..2eb419aa945 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ2.C
@@ -1,6 +1,6 @@
// PR c++/67139
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T>
constexpr typename T::type::value_type _v = T::type::value;
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ3.C b/gcc/testsuite/g++.dg/concepts/var-templ3.C
index cc5ee5fa8e6..662511eee03 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ3.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ3.C
@@ -1,6 +1,6 @@
// PR c++/68666
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
struct A {
template <class>
diff --git a/gcc/testsuite/g++.dg/concepts/variadic1.C b/gcc/testsuite/g++.dg/concepts/variadic1.C
index c3bc7f61513..c590f28ee81 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic1.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic1.C
@@ -1,6 +1,6 @@
// PR c++/66712
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T, class...Args>
concept bool _Constructible_ =
diff --git a/gcc/testsuite/g++.dg/concepts/variadic2.C b/gcc/testsuite/g++.dg/concepts/variadic2.C
index 7b220097f98..1776b951113 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic2.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic2.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T> concept bool Copyable = requires (T t) { T(t); };
template <class T> concept bool Constructable = requires { T(); };
diff --git a/gcc/testsuite/g++.dg/concepts/variadic3.C b/gcc/testsuite/g++.dg/concepts/variadic3.C
index bd2f381a1a8..07c2401a785 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic3.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic3.C
@@ -1,6 +1,6 @@
// PR c++/70036
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template <class T> concept bool C = true;
diff --git a/gcc/testsuite/g++.dg/concepts/variadic4.C b/gcc/testsuite/g++.dg/concepts/variadic4.C
index d6eea49b958..1dfa2e6000b 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic4.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic4.C
@@ -1,6 +1,6 @@
// PR c++/73456
// { dg-do compile { target c++17_only } }
-// { dg-options "-fconcepts" }
+// { dg-options "-fconcepts-ts" }
template<typename...> struct list {};
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C
index 3ab7c9b6082..bec97e98352 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C
@@ -1,6 +1,6 @@
// PR c++/65575
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<typename T>
concept bool C = false;
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C
index ea51e31817e..cd3acf77876 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C
@@ -1,6 +1,6 @@
// PR c++/66091
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<typename T>
concept bool C1()
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
index 75f8e40ca58..726c90f4ab8 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
@@ -4,10 +4,9 @@
template <typename T>
void foo1(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
(typename T::template D<auto> (t)); // { dg-error "" }
-// { dg-warning "only available" "" { target c++17_down } .-1 }
}
struct T1 {
@@ -23,7 +22,7 @@ struct T1 {
template <typename T>
void foo2(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
T::template D<auto> (t); // { dg-error "" }
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
index 1c1a41c0fa2..ec8ae3564fa 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
@@ -8,10 +8,9 @@
template <typename T>
void foo1(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
(typename T::template D<auto> (t)); // { dg-error "" }
-// { dg-warning "only available" "" { target c++17_down } .-1 }
}
struct T1 {
@@ -27,7 +26,7 @@ struct T1 {
template <typename T>
void foo2(T& t) {
typename T::template C<void> tcv = t;
- typename T::template C<auto> u = tcv; // { dg-error "" "" { target c++20 } }
+ typename T::template C<auto> u = tcv; // { dg-error "" }
T::template C<auto>::f (tcv, u); // { dg-error "" }
T::template D<auto> (t); // { dg-error "" }
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
index 1703de05f07..635a1688999 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
@@ -1,4 +1,4 @@
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<T> concept bool C = true; // { dg-error "has not been declared" }
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
index 96aac69ed6a..d351b4594ae 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C
@@ -1,6 +1,6 @@
// PR c++/85265
// { dg-do compile { target c++17_only } }
-// { dg-additional-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-ts" }
template<typename> concept bool C = true;
base-commit: c0b38e9fec71dc4cc5e99b1f0cb159c15a8da9ba
--
2.31.1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-11-03 19:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-03 18:52 [pushed] c++: change -fconcepts to mean C++20 concepts Jason Merrill
2022-11-03 19:26 Jason Merrill
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).