aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-03-08 17:30:44 -0500
committerJason Merrill <jason@gcc.gnu.org>2016-03-08 17:30:44 -0500
commit80aac5c82043b6f3d7b2100e1f2f9abbbad97e89 (patch)
tree25bdfea51e1be2eb39b8e789b3b2f3eb0e543289
parent1e546b68c1e45d0f1fffbf02c5324717264816c4 (diff)
downloadgcc-80aac5c82043b6f3d7b2100e1f2f9abbbad97e89.zip
gcc-80aac5c82043b6f3d7b2100e1f2f9abbbad97e89.tar.gz
gcc-80aac5c82043b6f3d7b2100e1f2f9abbbad97e89.tar.bz2
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. From-SVN: r234069
-rw-r--r--gcc/c-family/ChangeLog4
-rw-r--r--gcc/c-family/c-opts.c2
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/Make-lang.in2
-rw-r--r--gcc/cp/parser.c42
-rw-r--r--gcc/doc/invoke.texi10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/alias4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/auto1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/auto3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/class6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/constrained-parm.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/decl-diagnose.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/deduction-constraint1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/diagnostic1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/disjunction1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/dr1430.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/equiv.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/equiv2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-inst4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/explicit-spec6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/expression.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/expression2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/expression3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/feature-macro.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn-concept1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn-concept2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn10.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn8.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/fn9.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/friend1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/friend2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/generic-fn-err.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/generic-fn.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/iconv1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/inherit-ctor4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/intro7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/member-concept.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/memfun-err.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/memfun.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-concept-id1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-concept-id2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/partial-spec6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/placeholder6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65552.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65575.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65634.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65636.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65681.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65848.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr65854.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr66091.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr67249.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr68434.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/pr68683.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req-neg1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req10.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req11.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req12.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req13.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req14.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req15.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req16.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req17.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req18.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req8.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/req9.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm10.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm11.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm12.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm7.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm8.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-parm9.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/template-template-parm1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/traits1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/traits2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept3.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept4.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept5.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-concept6.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-templ1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/var-templ2.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/variadic1.C2
-rw-r--r--gcc/testsuite/g++.dg/concepts/variadic2.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto3.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/auto9.C4
-rw-r--r--gcc/testsuite/lib/g++-dg.exp2
-rw-r--r--gcc/testsuite/lib/target-supports.exp5
146 files changed, 199 insertions, 158 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index f285c8b..464297b 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,7 @@
+2016-03-08 Jason Merrill <jason@redhat.com>
+
+ * c-opts.c (set_std_cxx1z): Don't enable concepts.
+
2016-03-04 David Malcolm <dmalcolm@redhat.com>
PR c/68187
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/ChangeLog b/gcc/cp/ChangeLog
index 2b95036..4bb43db 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,12 @@
2016-03-08 Jason Merrill <jason@redhat.com>
+ * 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.
+
P0036R0: Unary Folds and Empty Parameter Packs
* pt.c (expand_empty_fold): Remove special cases for *,+,&,|.
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/ChangeLog b/gcc/testsuite/ChangeLog
index 5149414..40e9b52 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-03-08 Jason Merrill <jason@redhat.com>
+
+ * lib/g++-dg.exp (g++-dg-runtest): Handle "concepts" in std list.
+ * lib/target-supports.exp (check_effective_target_concepts): New.
+
2016-03-08 Jakub Jelinek <jakub@redhat.com>
PR c++/70135
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 b075c100..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 092c91c5..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..9387ce00a 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..757bcef9b 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..5f66376f 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 { } {