diff mbox

C++ PATCH to remove -fconcepts from -std=c++1z

Message ID 56DF511A.6000204@redhat.com
State New
Headers show

Commit Message

Jason Merrill March 8, 2016, 10:24 p.m. UTC
At the Jacksonville C++ meeting last week the committee decided not to 
integrate the Concepts TS into the C++17 working paper, so I'm removing 
it from -std=c++1z.  This patch also adds diagnostics to guide people 
toward adding -fconcepts for code that needs it.  Concepts will probably 
be in C++20 instead.

Tested x86_64-pc-linux-gnu, applying to trunk.
diff mbox

Patch

commit 4d03a13cd253a97292a5bf7105c627393cfce081
Author: Jason Merrill <jason@redhat.com>
Date:   Fri Mar 4 22:21:40 2016 -0500

    	Remove Concepts from -std=c++1z.
    
    gcc/c-family/
    	* c-opts.c (set_std_cxx1z): Don't enable concepts.
    gcc/testsuite/
    	* lib/g++-dg.exp (g++-dg-runtest): Handle "concepts" in std list.
    	* lib/target-supports.exp (check_effective_target_concepts): New.
    gcc/cp/
    	* parser.c (cp_parser_diagnose_invalid_type_name): Give helpful
    	diagnostic for use of "concept".
    	(cp_parser_requires_clause_opt): And "requires".
    	(cp_parser_type_parameter, cp_parser_late_return_type_opt)
    	(cp_parser_explicit_template_declaration): Adjust.
    	* Make-lang.in (check-c++-all): Add "concepts" to std list.

diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index c2783f7..fec58bc 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -1566,8 +1566,6 @@  set_std_cxx1z (int iso)
   /* C++11 includes the C99 standard library.  */
   flag_isoc94 = 1;
   flag_isoc99 = 1;
-  /* Enable concepts by default. */
-  flag_concepts = 1;
   flag_isoc11 = 1;
   cxx_dialect = cxx1z;
   lang_hooks.name = "GNU C++14"; /* Pretend C++14 till standarization.  */
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index 2286c64..8770f6f 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -152,7 +152,7 @@  check-c++1z:
 
 # Run the testsuite in all standard conformance levels.
 check-c++-all:
-	$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --stds=98,11,14,1z" check-g++
+	$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --stds=98,11,14,1z,concepts" check-g++
 
 # Run the testsuite with garbage collection at every opportunity.
 check-g++-strict-gc:
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 535052f..726d5fc 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -3172,6 +3172,8 @@  cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree id,
 	       && !strcmp (IDENTIFIER_POINTER (id), "thread_local"))
 	inform (location, "C++11 %<thread_local%> only available with "
 		"-std=c++11 or -std=gnu++11");
+      else if (!flag_concepts && id == ridpointers[(int)RID_CONCEPT])
+	inform (location, "%<concept%> only available with -fconcepts");
       else if (processing_template_decl && current_class_type
 	       && TYPE_BINFO (current_class_type))
 	{
@@ -14668,13 +14670,10 @@  cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
 	cp_parser_require (parser, CPP_GREATER, RT_GREATER);
 
         // If template requirements are present, parse them.
-	if (flag_concepts)
-          {
-            tree reqs = get_shorthand_constraints (current_template_parms);
-            if (tree r = cp_parser_requires_clause_opt (parser))
-              reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
-            TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
-          }
+	tree reqs = get_shorthand_constraints (current_template_parms);
+	if (tree r = cp_parser_requires_clause_opt (parser))
+	  reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
+	TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
 
 	/* Look for the `class' or 'typename' keywords.  */
 	cp_parser_type_parameter_key (parser);
@@ -19745,6 +19744,8 @@  cp_parser_late_return_type_opt (cp_parser* parser, cp_declarator *declarator,
   /* A late-specified return type is indicated by an initial '->'. */
   if (token->type != CPP_DEREF
       && token->keyword != RID_REQUIRES
+      && !(token->type == CPP_NAME
+	   && token->u.value == ridpointers[RID_REQUIRES])
       && !(declare_simd_p || cilk_simd_fn_vector_p || oacc_routine_p))
     return NULL_TREE;
 
@@ -24216,8 +24217,20 @@  cp_parser_requires_clause (cp_parser *parser)
 static tree
 cp_parser_requires_clause_opt (cp_parser *parser)
 {
-  if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_REQUIRES))
-    return NULL_TREE;
+  cp_token *tok = cp_lexer_peek_token (parser->lexer);
+  if (tok->keyword != RID_REQUIRES)
+    {
+      if (!flag_concepts && tok->type == CPP_NAME
+	  && tok->u.value == ridpointers[RID_REQUIRES])
+	{
+	  error_at (cp_lexer_peek_token (parser->lexer)->location,
+		    "%<requires%> only available with -fconcepts");
+	  /* Parse and discard the requires-clause.  */
+	  cp_lexer_consume_token (parser->lexer);
+	  cp_parser_requires_clause (parser);
+	}
+      return NULL_TREE;
+    }
   cp_lexer_consume_token (parser->lexer);
   return cp_parser_requires_clause (parser);
 }
@@ -25608,13 +25621,10 @@  cp_parser_explicit_template_declaration (cp_parser* parser, bool member_p)
   cp_parser_skip_to_end_of_template_parameter_list (parser);
 
   /* Manage template requirements */
-  if (flag_concepts)
-  {
-    tree reqs = get_shorthand_constraints (current_template_parms);
-    if (tree r = cp_parser_requires_clause_opt (parser))
-      reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
-    TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
-  }
+  tree reqs = get_shorthand_constraints (current_template_parms);
+  if (tree r = cp_parser_requires_clause_opt (parser))
+    reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
+  TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
 
   cp_parser_template_declaration_after_parameters (parser, parameter_list,
 						   member_p);
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 62c70d5..9580c10 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -2238,6 +2238,16 @@  return value even without this option.  In all other cases, when
 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
 @samp{new (nothrow)}.
 
+@item -fconcepts
+@opindex fconcepts
+Enable support for the C++ Extensions for Concepts Technical
+Specification, ISO 19217 (2015), which allows code like
+
+@smallexample
+template <class T> concept bool Addable = requires (T t) @{ t + t; @};
+template <Addable T> T add (T a, T b) @{ return a + b; @}
+@end smallexample
+
 @item -fconstexpr-depth=@var{n}
 @opindex fconstexpr-depth
 Set the maximum nested evaluation depth for C++11 constexpr functions
diff --git a/gcc/testsuite/g++.dg/concepts/alias1.C b/gcc/testsuite/g++.dg/concepts/alias1.C
index 03b3cea..fdd54bd 100644
--- a/gcc/testsuite/g++.dg/concepts/alias1.C
+++ b/gcc/testsuite/g++.dg/concepts/alias1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/alias2.C b/gcc/testsuite/g++.dg/concepts/alias2.C
index d81188e..7879d44 100644
--- a/gcc/testsuite/g++.dg/concepts/alias2.C
+++ b/gcc/testsuite/g++.dg/concepts/alias2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/alias3.C b/gcc/testsuite/g++.dg/concepts/alias3.C
index e6ab669..a8f0f67 100644
--- a/gcc/testsuite/g++.dg/concepts/alias3.C
+++ b/gcc/testsuite/g++.dg/concepts/alias3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/alias4.C b/gcc/testsuite/g++.dg/concepts/alias4.C
index 4227a44..8ffa0a1 100644
--- a/gcc/testsuite/g++.dg/concepts/alias4.C
+++ b/gcc/testsuite/g++.dg/concepts/alias4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/auto1.C b/gcc/testsuite/g++.dg/concepts/auto1.C
index 6068e4c..be9237d 100644
--- a/gcc/testsuite/g++.dg/concepts/auto1.C
+++ b/gcc/testsuite/g++.dg/concepts/auto1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 1cface7..e1a4d73 100644
--- a/gcc/testsuite/g++.dg/concepts/auto3.C
+++ b/gcc/testsuite/g++.dg/concepts/auto3.C
@@ -1,4 +1,4 @@ 
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class...> class tuple {};
 
diff --git a/gcc/testsuite/g++.dg/concepts/class.C b/gcc/testsuite/g++.dg/concepts/class.C
index ea74a54..0611057 100644
--- a/gcc/testsuite/g++.dg/concepts/class.C
+++ b/gcc/testsuite/g++.dg/concepts/class.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class1.C b/gcc/testsuite/g++.dg/concepts/class1.C
index b213cb5..a2c4f5d 100644
--- a/gcc/testsuite/g++.dg/concepts/class1.C
+++ b/gcc/testsuite/g++.dg/concepts/class1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class2.C b/gcc/testsuite/g++.dg/concepts/class2.C
index 2c3ea44..4b8706d 100644
--- a/gcc/testsuite/g++.dg/concepts/class2.C
+++ b/gcc/testsuite/g++.dg/concepts/class2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class3.C b/gcc/testsuite/g++.dg/concepts/class3.C
index e3a1d2a..c25c801 100644
--- a/gcc/testsuite/g++.dg/concepts/class3.C
+++ b/gcc/testsuite/g++.dg/concepts/class3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class4.C b/gcc/testsuite/g++.dg/concepts/class4.C
index 7ba8250..af6db25 100644
--- a/gcc/testsuite/g++.dg/concepts/class4.C
+++ b/gcc/testsuite/g++.dg/concepts/class4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/class5.C b/gcc/testsuite/g++.dg/concepts/class5.C
index 903bf24..218ec9f 100644
--- a/gcc/testsuite/g++.dg/concepts/class5.C
+++ b/gcc/testsuite/g++.dg/concepts/class5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 fe6b42d..4a3a3d7 100644
--- a/gcc/testsuite/g++.dg/concepts/class6.C
+++ b/gcc/testsuite/g++.dg/concepts/class6.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool One() { return sizeof(T) >= 4; }
diff --git a/gcc/testsuite/g++.dg/concepts/constrained-parm.C b/gcc/testsuite/g++.dg/concepts/constrained-parm.C
index fd21c43..2650cae 100644
--- a/gcc/testsuite/g++.dg/concepts/constrained-parm.C
+++ b/gcc/testsuite/g++.dg/concepts/constrained-parm.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
index 67b56f9..9829ba1 100644
--- a/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
+++ b/gcc/testsuite/g++.dg/concepts/decl-diagnose.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 6ff3be9..dfb0c6e 100644
--- a/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
+++ b/gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
@@ -1,5 +1,5 @@ 
 // PR c++/67007
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 7c360cc..aa98ffa 100644
--- a/gcc/testsuite/g++.dg/concepts/diagnostic1.C
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
@@ -1,5 +1,5 @@ 
 // PR c++/67159
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept bool R = requires (T& t) {
diff --git a/gcc/testsuite/g++.dg/concepts/disjunction1.C b/gcc/testsuite/g++.dg/concepts/disjunction1.C
index f67fa0b..24472cc 100644
--- a/gcc/testsuite/g++.dg/concepts/disjunction1.C
+++ b/gcc/testsuite/g++.dg/concepts/disjunction1.C
@@ -1,5 +1,5 @@ 
 // PR c++/66962
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <typename> struct remove_cv;
 template <typename> struct is_reference;
diff --git a/gcc/testsuite/g++.dg/concepts/dr1430.C b/gcc/testsuite/g++.dg/concepts/dr1430.C
index 7f857fe..3a7ba03 100644
--- a/gcc/testsuite/g++.dg/concepts/dr1430.C
+++ b/gcc/testsuite/g++.dg/concepts/dr1430.C
@@ -1,5 +1,5 @@ 
 // PR c++/66092
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <type_traits>
 
diff --git a/gcc/testsuite/g++.dg/concepts/equiv.C b/gcc/testsuite/g++.dg/concepts/equiv.C
index c2ac741..11e232f 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // 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 675fe21..24d419b 100644
--- a/gcc/testsuite/g++.dg/concepts/equiv2.C
+++ b/gcc/testsuite/g++.dg/concepts/equiv2.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 
 // template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst1.C b/gcc/testsuite/g++.dg/concepts/explicit-inst1.C
index 3079ca5..89eeb15 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst1.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst2.C b/gcc/testsuite/g++.dg/concepts/explicit-inst2.C
index 5e75f4f..0319756 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst2.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst3.C b/gcc/testsuite/g++.dg/concepts/explicit-inst3.C
index a471657..177fc6c 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst3.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-inst4.C b/gcc/testsuite/g++.dg/concepts/explicit-inst4.C
index b075c10..cf0d898 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-inst4.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-inst4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec1.C b/gcc/testsuite/g++.dg/concepts/explicit-spec1.C
index 6316410..c6f559c 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec1.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec1.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec2.C b/gcc/testsuite/g++.dg/concepts/explicit-spec2.C
index 4f19624..8fa7e8a 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec2.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec3.C b/gcc/testsuite/g++.dg/concepts/explicit-spec3.C
index 29546b3..6294cef 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec3.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec4.C b/gcc/testsuite/g++.dg/concepts/explicit-spec4.C
index e9aacd5..16698cb 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec4.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec4.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec5.C b/gcc/testsuite/g++.dg/concepts/explicit-spec5.C
index 8047278..e889c21 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec5.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
diff --git a/gcc/testsuite/g++.dg/concepts/explicit-spec6.C b/gcc/testsuite/g++.dg/concepts/explicit-spec6.C
index 3eba9ff..0bf7640 100644
--- a/gcc/testsuite/g++.dg/concepts/explicit-spec6.C
+++ b/gcc/testsuite/g++.dg/concepts/explicit-spec6.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 struct A {
diff --git a/gcc/testsuite/g++.dg/concepts/expression.C b/gcc/testsuite/g++.dg/concepts/expression.C
index 5ae04e4..de68ef8 100644
--- a/gcc/testsuite/g++.dg/concepts/expression.C
+++ b/gcc/testsuite/g++.dg/concepts/expression.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 #include <iostream>
diff --git a/gcc/testsuite/g++.dg/concepts/expression2.C b/gcc/testsuite/g++.dg/concepts/expression2.C
index 40c2034..ebdadc2 100644
--- a/gcc/testsuite/g++.dg/concepts/expression2.C
+++ b/gcc/testsuite/g++.dg/concepts/expression2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 eb8406f..77b414e 100644
--- a/gcc/testsuite/g++.dg/concepts/expression3.C
+++ b/gcc/testsuite/g++.dg/concepts/expression3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/feature-macro.C b/gcc/testsuite/g++.dg/concepts/feature-macro.C
index 7bc7875..d8ea369 100644
--- a/gcc/testsuite/g++.dg/concepts/feature-macro.C
+++ b/gcc/testsuite/g++.dg/concepts/feature-macro.C
@@ -1,4 +1,4 @@ 
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #ifndef __cpp_concepts
 #error __cpp_concepts not defined
diff --git a/gcc/testsuite/g++.dg/concepts/fn-concept1.C b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
index 385dcbc..4a8437f 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 092c91c..86ba936 100644
--- a/gcc/testsuite/g++.dg/concepts/fn-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn-concept2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept auto C1() { return 0; } // { dg-error "deduced return type" }
diff --git a/gcc/testsuite/g++.dg/concepts/fn1.C b/gcc/testsuite/g++.dg/concepts/fn1.C
index b2bdaf9..c4f9f55 100644
--- a/gcc/testsuite/g++.dg/concepts/fn1.C
+++ b/gcc/testsuite/g++.dg/concepts/fn1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 f4cd4c5..859c1d5 100644
--- a/gcc/testsuite/g++.dg/concepts/fn10.C
+++ b/gcc/testsuite/g++.dg/concepts/fn10.C
@@ -1,5 +1,5 @@ 
 // { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // 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 0aee852..51a3fb5 100644
--- a/gcc/testsuite/g++.dg/concepts/fn2.C
+++ b/gcc/testsuite/g++.dg/concepts/fn2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 06402e0..ef704f7 100644
--- a/gcc/testsuite/g++.dg/concepts/fn3.C
+++ b/gcc/testsuite/g++.dg/concepts/fn3.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
diff --git a/gcc/testsuite/g++.dg/concepts/fn4.C b/gcc/testsuite/g++.dg/concepts/fn4.C
index 5ced6a7..9fa5790 100644
--- a/gcc/testsuite/g++.dg/concepts/fn4.C
+++ b/gcc/testsuite/g++.dg/concepts/fn4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 b3c3f70..dd9a19e 100644
--- a/gcc/testsuite/g++.dg/concepts/fn5.C
+++ b/gcc/testsuite/g++.dg/concepts/fn5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check shorthand notation.
 
diff --git a/gcc/testsuite/g++.dg/concepts/fn6.C b/gcc/testsuite/g++.dg/concepts/fn6.C
index 73ef19a..f6f165e 100644
--- a/gcc/testsuite/g++.dg/concepts/fn6.C
+++ b/gcc/testsuite/g++.dg/concepts/fn6.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Redefinition errors.
 
diff --git a/gcc/testsuite/g++.dg/concepts/fn7.C b/gcc/testsuite/g++.dg/concepts/fn7.C
index 2abd34a..dd16a9a 100644
--- a/gcc/testsuite/g++.dg/concepts/fn7.C
+++ b/gcc/testsuite/g++.dg/concepts/fn7.C
@@ -1,5 +1,5 @@ 
 // { dg-do link }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // FIXME: What is this actually testing?
 
diff --git a/gcc/testsuite/g++.dg/concepts/fn8.C b/gcc/testsuite/g++.dg/concepts/fn8.C
index 71141f6..e7481be 100644
--- a/gcc/testsuite/g++.dg/concepts/fn8.C
+++ b/gcc/testsuite/g++.dg/concepts/fn8.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 b7ac4e1..c135bd7 100644
--- a/gcc/testsuite/g++.dg/concepts/fn9.C
+++ b/gcc/testsuite/g++.dg/concepts/fn9.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
diff --git a/gcc/testsuite/g++.dg/concepts/friend1.C b/gcc/testsuite/g++.dg/concepts/friend1.C
index 286e769..5c418cb 100644
--- a/gcc/testsuite/g++.dg/concepts/friend1.C
+++ b/gcc/testsuite/g++.dg/concepts/friend1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Eq() { return requires(T t) { t == t; }; }
diff --git a/gcc/testsuite/g++.dg/concepts/friend2.C b/gcc/testsuite/g++.dg/concepts/friend2.C
index 38b230c..6268801 100644
--- a/gcc/testsuite/g++.dg/concepts/friend2.C
+++ b/gcc/testsuite/g++.dg/concepts/friend2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Eq() { return requires(T t) { t == t; }; }
diff --git a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
index 1e97510..03a47d5 100644
--- a/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
+++ b/gcc/testsuite/g++.dg/concepts/generic-fn-err.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 778356d..d74ea21 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 run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 #include <type_traits>
diff --git a/gcc/testsuite/g++.dg/concepts/iconv1.C b/gcc/testsuite/g++.dg/concepts/iconv1.C
index c4dd38f..28f3566 100644
--- a/gcc/testsuite/g++.dg/concepts/iconv1.C
+++ b/gcc/testsuite/g++.dg/concepts/iconv1.C
@@ -1,5 +1,5 @@ 
 // PR c++/67240
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 int foo(int x)
 {
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
index 29433ad..6f5115c 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C
index 4f39203..435745a 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
index 3d0ddf2..07499bb 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C b/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C
index cd9565f..4c53205 100644
--- a/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C
+++ b/gcc/testsuite/g++.dg/concepts/inherit-ctor4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 1b5f5d1..5f036c4 100644
--- a/gcc/testsuite/g++.dg/concepts/intro1.C
+++ b/gcc/testsuite/g++.dg/concepts/intro1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 91a1cac..1db1d7a 100644
--- a/gcc/testsuite/g++.dg/concepts/intro2.C
+++ b/gcc/testsuite/g++.dg/concepts/intro2.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
diff --git a/gcc/testsuite/g++.dg/concepts/intro3.C b/gcc/testsuite/g++.dg/concepts/intro3.C
index 5dd95c6..3cb3ecb 100644
--- a/gcc/testsuite/g++.dg/concepts/intro3.C
+++ b/gcc/testsuite/g++.dg/concepts/intro3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 6d8aec3..1821291 100644
--- a/gcc/testsuite/g++.dg/concepts/intro4.C
+++ b/gcc/testsuite/g++.dg/concepts/intro4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 64771cd..31924f9 100644
--- a/gcc/testsuite/g++.dg/concepts/intro5.C
+++ b/gcc/testsuite/g++.dg/concepts/intro5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 4e168ef..f8ed666 100644
--- a/gcc/testsuite/g++.dg/concepts/intro6.C
+++ b/gcc/testsuite/g++.dg/concepts/intro6.C
@@ -1,5 +1,5 @@ 
 // PR c++/67003
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 namespace X {
   template<class>
diff --git a/gcc/testsuite/g++.dg/concepts/intro7.C b/gcc/testsuite/g++.dg/concepts/intro7.C
index d92eafc..914c5fd 100644
--- a/gcc/testsuite/g++.dg/concepts/intro7.C
+++ b/gcc/testsuite/g++.dg/concepts/intro7.C
@@ -1,5 +1,5 @@ 
 // PR c++/66985
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <template <class> class T>
 concept bool _Valid = requires { typename T<int>; };
diff --git a/gcc/testsuite/g++.dg/concepts/member-concept.C b/gcc/testsuite/g++.dg/concepts/member-concept.C
index 46404e3..2b06046 100644
--- a/gcc/testsuite/g++.dg/concepts/member-concept.C
+++ b/gcc/testsuite/g++.dg/concepts/member-concept.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct Base {
   template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/memfun-err.C b/gcc/testsuite/g++.dg/concepts/memfun-err.C
index a62fe5e..e44273c 100644
--- a/gcc/testsuite/g++.dg/concepts/memfun-err.C
+++ b/gcc/testsuite/g++.dg/concepts/memfun-err.C
@@ -1,5 +1,5 @@ 
 // { dg-do run}
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 
 template<typename T>
diff --git a/gcc/testsuite/g++.dg/concepts/memfun.C b/gcc/testsuite/g++.dg/concepts/memfun.C
index a96c018..523410c 100644
--- a/gcc/testsuite/g++.dg/concepts/memfun.C
+++ b/gcc/testsuite/g++.dg/concepts/memfun.C
@@ -1,5 +1,5 @@ 
 // { dg-do run}
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
index 114c12f..117400c 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Type() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
index fb75448..2e6866e 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Make sure that we check partial concept ids
 // with variable concepts.
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec.C b/gcc/testsuite/g++.dg/concepts/partial-spec.C
index fe612d4..5db9a58 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check that constraints don't break unconstrained partial
 // specializations.
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec2.C b/gcc/testsuite/g++.dg/concepts/partial-spec2.C
index db75455..bc7621b 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec2.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec2.C
@@ -1,5 +1,5 @@ 
 // PR c++/67084
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 constexpr bool p = false;
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec3.C b/gcc/testsuite/g++.dg/concepts/partial-spec3.C
index d73d787..9387ce0 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec3.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec3.C
@@ -1,4 +1,4 @@ 
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T> struct A { };
 template <class T> requires false struct A<T*> { };
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec4.C b/gcc/testsuite/g++.dg/concepts/partial-spec4.C
index d4b8e9c..80e41ab 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec4.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec4.C
@@ -1,4 +1,4 @@ 
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T> concept bool is_int = __is_same_as(T,int);
 
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec5.C b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
index dcf167b..32a5eae 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec5.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec5.C
@@ -1,5 +1,5 @@ 
 // PR c++/67138
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept bool _Auto = true;
diff --git a/gcc/testsuite/g++.dg/concepts/partial-spec6.C b/gcc/testsuite/g++.dg/concepts/partial-spec6.C
index 2196fcd..50ef289 100644
--- a/gcc/testsuite/g++.dg/concepts/partial-spec6.C
+++ b/gcc/testsuite/g++.dg/concepts/partial-spec6.C
@@ -1,5 +1,5 @@ 
 // PR c++/67152
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept bool HasType = requires { typename T::type; };
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder1.C b/gcc/testsuite/g++.dg/concepts/placeholder1.C
index 0b5a7cf..757bcef 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder1.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T, typename U>
 struct is_same
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder2.C b/gcc/testsuite/g++.dg/concepts/placeholder2.C
index 8165c81..cf2013e 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder2.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check argument deduction constraints.
 // TODO: We shoul have more of these...
diff --git a/gcc/testsuite/g++.dg/concepts/placeholder3.C b/gcc/testsuite/g++.dg/concepts/placeholder3.C
index bd89551..208fc29 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder3.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder3.C
@@ -1,5 +1,5 @@ 
 // PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 e34fc94..2fb4758 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder4.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder4.C
@@ -1,5 +1,5 @@ 
 // PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 6aaf57b..e1d3092 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder5.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 7f2e67a..ee218fd 100644
--- a/gcc/testsuite/g++.dg/concepts/placeholder6.C
+++ b/gcc/testsuite/g++.dg/concepts/placeholder6.C
@@ -1,4 +1,4 @@ 
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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/pr65552.C b/gcc/testsuite/g++.dg/concepts/pr65552.C
index c72e6c6..c1cc0b1 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65552.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65552.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool Concept() {
diff --git a/gcc/testsuite/g++.dg/concepts/pr65575.C b/gcc/testsuite/g++.dg/concepts/pr65575.C
index fa24b7b..18e8059 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65575.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65575.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C = false;
diff --git a/gcc/testsuite/g++.dg/concepts/pr65634.C b/gcc/testsuite/g++.dg/concepts/pr65634.C
index 31dc87a..df64a3f 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65634.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65634.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 8b6f2a1..ddeef82 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65636.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65636.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 using TD = int;
 
diff --git a/gcc/testsuite/g++.dg/concepts/pr65681.C b/gcc/testsuite/g++.dg/concepts/pr65681.C
index bdbbd66..fcbbab3 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65681.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65681.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C()
diff --git a/gcc/testsuite/g++.dg/concepts/pr65848.C b/gcc/testsuite/g++.dg/concepts/pr65848.C
index d0bb6a2..4affa23 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65848.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65848.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Performance test... This should be fast.
 
diff --git a/gcc/testsuite/g++.dg/concepts/pr65854.C b/gcc/testsuite/g++.dg/concepts/pr65854.C
index 4b0befa..c615ed7 100644
--- a/gcc/testsuite/g++.dg/concepts/pr65854.C
+++ b/gcc/testsuite/g++.dg/concepts/pr65854.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Handle alias templates in type requirements.
 
diff --git a/gcc/testsuite/g++.dg/concepts/pr66091.C b/gcc/testsuite/g++.dg/concepts/pr66091.C
index ee9d115..b53f64c 100644
--- a/gcc/testsuite/g++.dg/concepts/pr66091.C
+++ b/gcc/testsuite/g++.dg/concepts/pr66091.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C1()
diff --git a/gcc/testsuite/g++.dg/concepts/pr67249.C b/gcc/testsuite/g++.dg/concepts/pr67249.C
index cb0445d..9cfada5 100644
--- a/gcc/testsuite/g++.dg/concepts/pr67249.C
+++ b/gcc/testsuite/g++.dg/concepts/pr67249.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<class T> concept bool C1 = true;
 template<class A, class B> struct Pair {};
diff --git a/gcc/testsuite/g++.dg/concepts/pr68434.C b/gcc/testsuite/g++.dg/concepts/pr68434.C
index d5f901a..ece5bb7 100644
--- a/gcc/testsuite/g++.dg/concepts/pr68434.C
+++ b/gcc/testsuite/g++.dg/concepts/pr68434.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class>
 concept bool C1 () {
diff --git a/gcc/testsuite/g++.dg/concepts/pr68683.C b/gcc/testsuite/g++.dg/concepts/pr68683.C
index a0d8fcf..eef1b33 100644
--- a/gcc/testsuite/g++.dg/concepts/pr68683.C
+++ b/gcc/testsuite/g++.dg/concepts/pr68683.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <typename, typename>
 struct is_same {
diff --git a/gcc/testsuite/g++.dg/concepts/req-neg1.C b/gcc/testsuite/g++.dg/concepts/req-neg1.C
index 0b7520e..6c80d81 100644
--- a/gcc/testsuite/g++.dg/concepts/req-neg1.C
+++ b/gcc/testsuite/g++.dg/concepts/req-neg1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 void f1(int a) requires true;         // OK
 auto f2(int a) -> bool requires true; // OK
diff --git a/gcc/testsuite/g++.dg/concepts/req1.C b/gcc/testsuite/g++.dg/concepts/req1.C
index 02d5de0..0636f1d 100644
--- a/gcc/testsuite/g++.dg/concepts/req1.C
+++ b/gcc/testsuite/g++.dg/concepts/req1.C
@@ -1,5 +1,5 @@ 
 // { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class () { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/req10.C b/gcc/testsuite/g++.dg/concepts/req10.C
index bd3b4e3..0352a08 100644
--- a/gcc/testsuite/g++.dg/concepts/req10.C
+++ b/gcc/testsuite/g++.dg/concepts/req10.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Test that standard conversions are checked with
 // implicit conversion constraints.
diff --git a/gcc/testsuite/g++.dg/concepts/req11.C b/gcc/testsuite/g++.dg/concepts/req11.C
index 3e21c11..1a259e8 100644
--- a/gcc/testsuite/g++.dg/concepts/req11.C
+++ b/gcc/testsuite/g++.dg/concepts/req11.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check that we can evaluate constant requires-expressions
 // as constant expressions, for the curious case when they
diff --git a/gcc/testsuite/g++.dg/concepts/req12.C b/gcc/testsuite/g++.dg/concepts/req12.C
index 7b23d11..f285514 100644
--- a/gcc/testsuite/g++.dg/concepts/req12.C
+++ b/gcc/testsuite/g++.dg/concepts/req12.C
@@ -1,5 +1,5 @@ 
 // PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <type_traits>
 
diff --git a/gcc/testsuite/g++.dg/concepts/req13.C b/gcc/testsuite/g++.dg/concepts/req13.C
index 54fcd8b..559c128 100644
--- a/gcc/testsuite/g++.dg/concepts/req13.C
+++ b/gcc/testsuite/g++.dg/concepts/req13.C
@@ -1,5 +1,5 @@ 
 // PR c++/66758
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class...Args>
 concept bool Constructible =
diff --git a/gcc/testsuite/g++.dg/concepts/req14.C b/gcc/testsuite/g++.dg/concepts/req14.C
index e86281a..de7efcd 100644
--- a/gcc/testsuite/g++.dg/concepts/req14.C
+++ b/gcc/testsuite/g++.dg/concepts/req14.C
@@ -1,5 +1,5 @@ 
 // PR c++/66758
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class U>
 concept bool C = requires (T t, U u) { t + u; };
diff --git a/gcc/testsuite/g++.dg/concepts/req15.C b/gcc/testsuite/g++.dg/concepts/req15.C
index 09ebf89..537669b 100644
--- a/gcc/testsuite/g++.dg/concepts/req15.C
+++ b/gcc/testsuite/g++.dg/concepts/req15.C
@@ -1,5 +1,5 @@ 
 // PR c++/66832
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class U, unsigned N>
   requires requires (T& t, U &u) { t.foo(); u.foo(); }
diff --git a/gcc/testsuite/g++.dg/concepts/req16.C b/gcc/testsuite/g++.dg/concepts/req16.C
index 67ae5b5..2704c38 100644
--- a/gcc/testsuite/g++.dg/concepts/req16.C
+++ b/gcc/testsuite/g++.dg/concepts/req16.C
@@ -1,5 +1,5 @@ 
 // PR c++/66988
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <type_traits>
 
diff --git a/gcc/testsuite/g++.dg/concepts/req17.C b/gcc/testsuite/g++.dg/concepts/req17.C
index 48bd0a8..af622e2 100644
--- a/gcc/testsuite/g++.dg/concepts/req17.C
+++ b/gcc/testsuite/g++.dg/concepts/req17.C
@@ -1,5 +1,5 @@ 
 // PR c++/67018
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <typename T>
 constexpr bool Val = true;
diff --git a/gcc/testsuite/g++.dg/concepts/req18.C b/gcc/testsuite/g++.dg/concepts/req18.C
index 9a47437..0b6848b 100644
--- a/gcc/testsuite/g++.dg/concepts/req18.C
+++ b/gcc/testsuite/g++.dg/concepts/req18.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class> struct all_same {
   static constexpr bool value = 1;
diff --git a/gcc/testsuite/g++.dg/concepts/req2.C b/gcc/testsuite/g++.dg/concepts/req2.C
index a28f30b..b1258c4 100644
--- a/gcc/testsuite/g++.dg/concepts/req2.C
+++ b/gcc/testsuite/g++.dg/concepts/req2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class () { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/req3.C b/gcc/testsuite/g++.dg/concepts/req3.C
index 69581ee..5bc7ac7 100644
--- a/gcc/testsuite/g++.dg/concepts/req3.C
+++ b/gcc/testsuite/g++.dg/concepts/req3.C
@@ -1,5 +1,5 @@ 
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class () { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/req4.C b/gcc/testsuite/g++.dg/concepts/req4.C
index 2077834..e7e71a4 100644
--- a/gcc/testsuite/g++.dg/concepts/req4.C
+++ b/gcc/testsuite/g++.dg/concepts/req4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct fool {
   constexpr fool operator&&(fool) const { return {}; }
diff --git a/gcc/testsuite/g++.dg/concepts/req5.C b/gcc/testsuite/g++.dg/concepts/req5.C
index c0af1f8..17db0dd 100644
--- a/gcc/testsuite/g++.dg/concepts/req5.C
+++ b/gcc/testsuite/g++.dg/concepts/req5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct fool { };
 
diff --git a/gcc/testsuite/g++.dg/concepts/req6.C b/gcc/testsuite/g++.dg/concepts/req6.C
index e4f20ec..e8e94c0 100644
--- a/gcc/testsuite/g++.dg/concepts/req6.C
+++ b/gcc/testsuite/g++.dg/concepts/req6.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct X { };
 int operator==(X, X) { return 0; }
diff --git a/gcc/testsuite/g++.dg/concepts/req7.C b/gcc/testsuite/g++.dg/concepts/req7.C
index 51aba7b..ef25987 100644
--- a/gcc/testsuite/g++.dg/concepts/req7.C
+++ b/gcc/testsuite/g++.dg/concepts/req7.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <vector>
 
diff --git a/gcc/testsuite/g++.dg/concepts/req8.C b/gcc/testsuite/g++.dg/concepts/req8.C
index 35c0854..4adbc78 100644
--- a/gcc/testsuite/g++.dg/concepts/req8.C
+++ b/gcc/testsuite/g++.dg/concepts/req8.C
@@ -1,5 +1,5 @@ 
 // { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check that type requirements are normalized correctly.
 
diff --git a/gcc/testsuite/g++.dg/concepts/req9.C b/gcc/testsuite/g++.dg/concepts/req9.C
index 5654be0..5f66376 100644
--- a/gcc/testsuite/g++.dg/concepts/req9.C
+++ b/gcc/testsuite/g++.dg/concepts/req9.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 struct S1 {};
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm1.C b/gcc/testsuite/g++.dg/concepts/template-parm1.C
index 20a7fb6..101432f 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm1.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm10.C b/gcc/testsuite/g++.dg/concepts/template-parm10.C
index b803289..b61912c 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm10.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm10.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<int N, class T>
   concept bool P() { return true; }
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm11.C b/gcc/testsuite/g++.dg/concepts/template-parm11.C
index 95ce784..1f0d91a 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm11.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm11.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 1639f26..edeeb90 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm12.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm12.C
@@ -1,5 +1,5 @@ 
 // Conceptized version of template/ttp23.C
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 ad715e1..146d1c6 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm2.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 e412fb4..5fcd5a2 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm3.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 a29bb11..ac9d2af 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm4.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm5.C b/gcc/testsuite/g++.dg/concepts/template-parm5.C
index f33742b..25bd916 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm5.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm6.C b/gcc/testsuite/g++.dg/concepts/template-parm6.C
index d23f259..e70cdc0 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm6.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm6.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename... Ts> struct are_same;
 
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm7.C b/gcc/testsuite/g++.dg/concepts/template-parm7.C
index 1086984..3e2a2f2 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm7.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm7.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename... Ts> struct are_same;
 
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm8.C b/gcc/testsuite/g++.dg/concepts/template-parm8.C
index f604d5a..69a31bc 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm8.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm8.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/template-parm9.C b/gcc/testsuite/g++.dg/concepts/template-parm9.C
index 7e68984..06b0f96 100644
--- a/gcc/testsuite/g++.dg/concepts/template-parm9.C
+++ b/gcc/testsuite/g++.dg/concepts/template-parm9.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
index 4091284..c2dcc3a 100644
--- a/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
+++ b/gcc/testsuite/g++.dg/concepts/template-template-parm1.C
@@ -1,5 +1,5 @@ 
 // PR c++/66937
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <tuple>
 
diff --git a/gcc/testsuite/g++.dg/concepts/traits1.C b/gcc/testsuite/g++.dg/concepts/traits1.C
index f07c878..7ccf087 100644
--- a/gcc/testsuite/g++.dg/concepts/traits1.C
+++ b/gcc/testsuite/g++.dg/concepts/traits1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Nothrow_assignable() { return __has_nothrow_assign(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/traits2.C b/gcc/testsuite/g++.dg/concepts/traits2.C
index 28ced34..971a67b 100644
--- a/gcc/testsuite/g++.dg/concepts/traits2.C
+++ b/gcc/testsuite/g++.dg/concepts/traits2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Nothrow_assignable() { return __has_nothrow_assign(T); }
diff --git a/gcc/testsuite/g++.dg/concepts/var-concept1.C b/gcc/testsuite/g++.dg/concepts/var-concept1.C
index eb8a2b7..b99016f 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept1.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept1.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 71663bd..21c69dd 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 c901028..d27e4fa 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept3.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept3.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 b398353..1870a42 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept4.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept4.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 13f86dd..ca16332 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept5.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept5.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 2f775fd..40be4f9 100644
--- a/gcc/testsuite/g++.dg/concepts/var-concept6.C
+++ b/gcc/testsuite/g++.dg/concepts/var-concept6.C
@@ -1,4 +1,4 @@ 
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept int C = true;		// { dg-error "bool" }
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ1.C b/gcc/testsuite/g++.dg/concepts/var-templ1.C
index 79476c3..7dfa240 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ1.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ1.C
@@ -1,5 +1,5 @@ 
 // PR c++/67117
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
   requires false
diff --git a/gcc/testsuite/g++.dg/concepts/var-templ2.C b/gcc/testsuite/g++.dg/concepts/var-templ2.C
index e615f21..dc0be75 100644
--- a/gcc/testsuite/g++.dg/concepts/var-templ2.C
+++ b/gcc/testsuite/g++.dg/concepts/var-templ2.C
@@ -1,5 +1,5 @@ 
 // PR c++/67139
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 constexpr typename T::type::value_type _v = T::type::value;
diff --git a/gcc/testsuite/g++.dg/concepts/variadic1.C b/gcc/testsuite/g++.dg/concepts/variadic1.C
index ed3d4f1..8129463 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic1.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic1.C
@@ -1,5 +1,5 @@ 
 // PR c++/66712
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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 6c55277..f7aa710 100644
--- a/gcc/testsuite/g++.dg/concepts/variadic2.C
+++ b/gcc/testsuite/g++.dg/concepts/variadic2.C
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 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/cpp0x/auto3.C b/gcc/testsuite/g++.dg/cpp0x/auto3.C
index 27aab57..ed7084b 100644
--- a/gcc/testsuite/g++.dg/cpp0x/auto3.C
+++ b/gcc/testsuite/g++.dg/cpp0x/auto3.C
@@ -17,11 +17,11 @@  struct A { };
 
 A<int> A1;
 // CWG issue 625
-A<auto> A2 = A1;		// { dg-error "" "" { target { ! c++1z } } }
+A<auto> A2 = A1;		// { dg-error "" "" { target { ! concepts } } }
 
 auto foo() { }			// { dg-error "auto" "" { target { ! c++14 } } }
 
-void bar(auto i)		// { dg-error "incomplete|auto" "" { target { ! c++1z } } }
+void bar(auto i)		// { dg-error "incomplete|auto" "" { target { ! concepts } } }
 {
   (void)i;
 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/auto9.C b/gcc/testsuite/g++.dg/cpp0x/auto9.C
index ee20441..9001f78 100644
--- a/gcc/testsuite/g++.dg/cpp0x/auto9.C
+++ b/gcc/testsuite/g++.dg/cpp0x/auto9.C
@@ -116,8 +116,8 @@  template <auto V = 4> struct G {};		// { dg-error "auto" }
 template <typename T> struct H { H (); ~H (); };
 H<auto> h;					// { dg-error "invalid|initializer" }
 
-void qq (auto);		       // { dg-error "auto" "" { target { ! c++1z } } }
-void qr (auto*);	       // { dg-error "auto" "" { target { ! c++1z } } }
+void qq (auto);		       // { dg-error "auto" "" { target { ! concepts } } }
+void qr (auto*);	       // { dg-error "auto" "" { target { ! concepts } } }
 
 // PR c++/46145
 typedef auto autot;		// { dg-error "auto" }
diff --git a/gcc/testsuite/lib/g++-dg.exp b/gcc/testsuite/lib/g++-dg.exp
index 1343533..4f7d18a 100644
--- a/gcc/testsuite/lib/g++-dg.exp
+++ b/gcc/testsuite/lib/g++-dg.exp
@@ -56,6 +56,8 @@  proc g++-dg-runtest { testcases flags default-extra-flags } {
 	    }
 	    set option_list { }
 	    foreach x $std_list {
+		# Handle "concepts" as C++1z plus Concepts TS.
+		if { $x eq "concepts" } then { set x "1z -fconcepts" }
 		lappend option_list "${std_prefix}$x"
 	    }
 	} else {
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 16d3588..5af139b 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -6557,6 +6557,11 @@  proc check_effective_target_c++1z { } {
     return [check_effective_target_c++1z_only]
 }
 
+# Check for C++ Concepts TS support, i.e. -fconcepts flag.
+proc check_effective_target_concepts { } {
+    return [check-flags { "" { } { -fconcepts } }]
+}
+
 # Return 1 if expensive testcases should be run.
 
 proc check_effective_target_run_expensive_tests { } {