c++: change -fconcepts to mean C++20 concepts
commita4cd2389276a30c39034a83d640ce68fa407bac1
authorJason Merrill <jason@redhat.com>
Thu, 3 Nov 2022 14:51:40 +0000 (3 10:51 -0400)
committerJason Merrill <jason@redhat.com>
Thu, 3 Nov 2022 19:24:31 +0000 (3 15:24 -0400)
treed8bdaa609e0737eb7cb80a94df86b08685bc6caf
parentc0b38e9fec71dc4cc5e99b1f0cb159c15a8da9ba
c++: change -fconcepts to mean C++20 concepts

It was always weird that -fconcepts in C++17 mode meant the same thing as
-fconcepts-ts in C++20 mode; this patch harmonizes the flags so that for TS
concepts you always need to write -fconcepts-ts.

In the unlikely event anyone is still using -fconcepts in C++17 mode, they
can either fix their code to work with C++20 concepts or adjust the compiler
flag.

gcc/c-family/ChangeLog:

* c-opts.cc (c_common_post_options): -fconcepts no longer implies
-fconcepts-ts before C++20.

gcc/ChangeLog:

* doc/invoke.texi: -fconcepts no longer implies
-fconcepts-ts before C++20.

gcc/cp/ChangeLog:

* parser.cc (cp_parser_template_declaration_after_parameters): Fix
concept parsing below C++20.

gcc/testsuite/ChangeLog:

* g++.dg/concepts/auto1.C:
* g++.dg/concepts/auto3.C:
* g++.dg/concepts/auto4.C:
* g++.dg/concepts/class-deduction1.C:
* g++.dg/concepts/class5.C:
* g++.dg/concepts/class6.C:
* g++.dg/concepts/debug1.C:
* g++.dg/concepts/decl-diagnose.C:
* g++.dg/concepts/deduction-constraint1.C:
* g++.dg/concepts/diagnostic1.C:
* g++.dg/concepts/dr1430.C:
* g++.dg/concepts/equiv.C:
* g++.dg/concepts/equiv2.C:
* g++.dg/concepts/expression.C:
* g++.dg/concepts/expression2.C:
* g++.dg/concepts/expression3.C:
* g++.dg/concepts/fn-concept1.C:
* g++.dg/concepts/fn-concept2.C:
* g++.dg/concepts/fn-concept3.C:
* g++.dg/concepts/fn1.C:
* g++.dg/concepts/fn10.C:
* g++.dg/concepts/fn2.C:
* g++.dg/concepts/fn3.C:
* g++.dg/concepts/fn4.C:
* g++.dg/concepts/fn5.C:
* g++.dg/concepts/fn6.C:
* g++.dg/concepts/fn8.C:
* g++.dg/concepts/fn9.C:
* g++.dg/concepts/generic-fn-err.C:
* g++.dg/concepts/generic-fn.C:
* g++.dg/concepts/inherit-ctor1.C:
* g++.dg/concepts/inherit-ctor3.C:
* g++.dg/concepts/intro1.C:
* g++.dg/concepts/intro2.C:
* g++.dg/concepts/intro3.C:
* g++.dg/concepts/intro4.C:
* g++.dg/concepts/intro5.C:
* g++.dg/concepts/intro6.C:
* g++.dg/concepts/intro7.C:
* g++.dg/concepts/locations1.C:
* g++.dg/concepts/partial-concept-id1.C:
* g++.dg/concepts/partial-concept-id2.C:
* g++.dg/concepts/partial-spec5.C:
* g++.dg/concepts/placeholder2.C:
* g++.dg/concepts/placeholder3.C:
* g++.dg/concepts/placeholder4.C:
* g++.dg/concepts/placeholder5.C:
* g++.dg/concepts/placeholder6.C:
* g++.dg/concepts/pr65634.C:
* g++.dg/concepts/pr65636.C:
* g++.dg/concepts/pr65681.C:
* g++.dg/concepts/pr65848.C:
* g++.dg/concepts/pr67249.C:
* g++.dg/concepts/pr67595.C:
* g++.dg/concepts/pr68434.C:
* g++.dg/concepts/pr71127.C:
* g++.dg/concepts/pr71128.C:
* g++.dg/concepts/pr71131.C:
* g++.dg/concepts/pr71385.C:
* g++.dg/concepts/pr85065.C:
* g++.dg/concepts/template-parm11.C:
* g++.dg/concepts/template-parm12.C:
* g++.dg/concepts/template-parm2.C:
* g++.dg/concepts/template-parm3.C:
* g++.dg/concepts/template-parm4.C:
* g++.dg/concepts/template-template-parm1.C:
* g++.dg/concepts/var-concept1.C:
* g++.dg/concepts/var-concept2.C:
* g++.dg/concepts/var-concept3.C:
* g++.dg/concepts/var-concept4.C:
* g++.dg/concepts/var-concept5.C:
* g++.dg/concepts/var-concept6.C:
* g++.dg/concepts/var-concept7.C:
* g++.dg/concepts/var-templ2.C:
* g++.dg/concepts/var-templ3.C:
* g++.dg/concepts/variadic1.C:
* g++.dg/concepts/variadic2.C:
* g++.dg/concepts/variadic3.C:
* g++.dg/concepts/variadic4.C:
* g++.dg/cpp2a/concepts-pr65575.C:
* g++.dg/cpp2a/concepts-pr66091.C:
* g++.dg/cpp2a/concepts-pr84980.C:
* g++.dg/cpp2a/concepts-pr85265.C: Pass -fconcepts-ts.
* g++.dg/cpp2a/concepts-pr84979-2.C:
* g++.dg/cpp2a/concepts-pr84979-3.C: Same diagnostics
in C++20 and below.
88 files changed:
gcc/c-family/c-opts.cc
gcc/cp/parser.cc
gcc/doc/invoke.texi
gcc/testsuite/g++.dg/concepts/auto1.C
gcc/testsuite/g++.dg/concepts/auto3.C
gcc/testsuite/g++.dg/concepts/auto4.C
gcc/testsuite/g++.dg/concepts/class-deduction1.C
gcc/testsuite/g++.dg/concepts/class5.C
gcc/testsuite/g++.dg/concepts/class6.C
gcc/testsuite/g++.dg/concepts/debug1.C
gcc/testsuite/g++.dg/concepts/decl-diagnose.C
gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
gcc/testsuite/g++.dg/concepts/diagnostic1.C
gcc/testsuite/g++.dg/concepts/dr1430.C
gcc/testsuite/g++.dg/concepts/equiv.C
gcc/testsuite/g++.dg/concepts/equiv2.C
gcc/testsuite/g++.dg/concepts/expression.C
gcc/testsuite/g++.dg/concepts/expression2.C
gcc/testsuite/g++.dg/concepts/expression3.C
gcc/testsuite/g++.dg/concepts/fn-concept1.C
gcc/testsuite/g++.dg/concepts/fn-concept2.C
gcc/testsuite/g++.dg/concepts/fn-concept3.C
gcc/testsuite/g++.dg/concepts/fn1.C
gcc/testsuite/g++.dg/concepts/fn10.C
gcc/testsuite/g++.dg/concepts/fn2.C
gcc/testsuite/g++.dg/concepts/fn3.C
gcc/testsuite/g++.dg/concepts/fn4.C
gcc/testsuite/g++.dg/concepts/fn5.C
gcc/testsuite/g++.dg/concepts/fn6.C
gcc/testsuite/g++.dg/concepts/fn8.C
gcc/testsuite/g++.dg/concepts/fn9.C
gcc/testsuite/g++.dg/concepts/generic-fn-err.C
gcc/testsuite/g++.dg/concepts/generic-fn.C
gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
gcc/testsuite/g++.dg/concepts/intro1.C
gcc/testsuite/g++.dg/concepts/intro2.C
gcc/testsuite/g++.dg/concepts/intro3.C
gcc/testsuite/g++.dg/concepts/intro4.C
gcc/testsuite/g++.dg/concepts/intro5.C
gcc/testsuite/g++.dg/concepts/intro6.C
gcc/testsuite/g++.dg/concepts/intro7.C
gcc/testsuite/g++.dg/concepts/locations1.C
gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
gcc/testsuite/g++.dg/concepts/partial-spec5.C
gcc/testsuite/g++.dg/concepts/placeholder2.C
gcc/testsuite/g++.dg/concepts/placeholder3.C
gcc/testsuite/g++.dg/concepts/placeholder4.C
gcc/testsuite/g++.dg/concepts/placeholder5.C
gcc/testsuite/g++.dg/concepts/placeholder6.C
gcc/testsuite/g++.dg/concepts/pr65634.C
gcc/testsuite/g++.dg/concepts/pr65636.C
gcc/testsuite/g++.dg/concepts/pr65681.C
gcc/testsuite/g++.dg/concepts/pr65848.C
gcc/testsuite/g++.dg/concepts/pr67249.C
gcc/testsuite/g++.dg/concepts/pr67595.C
gcc/testsuite/g++.dg/concepts/pr68434.C
gcc/testsuite/g++.dg/concepts/pr71127.C
gcc/testsuite/g++.dg/concepts/pr71128.C
gcc/testsuite/g++.dg/concepts/pr71131.C
gcc/testsuite/g++.dg/concepts/pr71385.C
gcc/testsuite/g++.dg/concepts/pr85065.C
gcc/testsuite/g++.dg/concepts/template-parm11.C
gcc/testsuite/g++.dg/concepts/template-parm12.C
gcc/testsuite/g++.dg/concepts/template-parm2.C
gcc/testsuite/g++.dg/concepts/template-parm3.C
gcc/testsuite/g++.dg/concepts/template-parm4.C
gcc/testsuite/g++.dg/concepts/template-template-parm1.C
gcc/testsuite/g++.dg/concepts/var-concept1.C
gcc/testsuite/g++.dg/concepts/var-concept2.C
gcc/testsuite/g++.dg/concepts/var-concept3.C
gcc/testsuite/g++.dg/concepts/var-concept4.C
gcc/testsuite/g++.dg/concepts/var-concept5.C
gcc/testsuite/g++.dg/concepts/var-concept6.C
gcc/testsuite/g++.dg/concepts/var-concept7.C
gcc/testsuite/g++.dg/concepts/var-templ2.C
gcc/testsuite/g++.dg/concepts/var-templ3.C
gcc/testsuite/g++.dg/concepts/variadic1.C
gcc/testsuite/g++.dg/concepts/variadic2.C
gcc/testsuite/g++.dg/concepts/variadic3.C
gcc/testsuite/g++.dg/concepts/variadic4.C
gcc/testsuite/g++.dg/cpp2a/concepts-pr65575.C
gcc/testsuite/g++.dg/cpp2a/concepts-pr66091.C
gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C
gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-3.C
gcc/testsuite/g++.dg/cpp2a/concepts-pr84980.C
gcc/testsuite/g++.dg/cpp2a/concepts-pr85265.C