https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92236

--- Comment #7 from asutton at gcc dot gnu.org ---
Author: asutton
Date: Wed Nov 27 15:23:02 2019
New Revision: 278775

URL: https://gcc.gnu.org/viewcvs?rev=278775&root=gcc&view=rev
Log:
2019-11-27  Andrew Sutton  <asut...@lock3software.com>

        PR c++/92236
        Defer evaluation of concept checks so that static assertions can
        emit more detailed diagnostics.

gcc/cp/
        * constexpr.c (cxx_eval_call_expression): Handle concept checks.
        (cxx_eval_constant_expression): Diagnose misuse of function concepts
        as template-id expressions. Follow the usual return path for results.
        (cxx_eval_outermost_constant_expr): Avoid calling
        cp_get_callee_fndecl_nofold for function concepts.
        * constraint.cc (build_function_check): Fully type the concept check
        so that we don't ICE in conversions.
        * cp-gimplify.c (cp_genericize_r) [CALL_EXPR]: Handle concept checks.
        [TEMPLATE_ID_EXPR] Likewise.
        * cvt.c (convert_to_void): Always evaluate concept checks so we don't
        accidentally ignore them. Substitution during satisfaction can make
        a program ill-formed (example in g++.dg/cpp2a/concepts6.C).
        * pt.c (tsubst_copy_and_build): [CALL_EXPR]: Don't evaluate concepts.
        [TEMPLATE_ID_EXPR]: Likewise.
        * semantics.c (finish_call_expr): Don't evaluate concepts.
        (finish_id_expression_1): Likewise.
        (finish_static_assert): Preserve the original condition so we can
        diagnose concept errors when a check returns false.

gcc/testsuite/
        * g++.dg/cpp2a/concepts-iconv1.C: Update diagnostics.
        * g++.dg/cpp2a/concepts-requires5.C: Likewise.
        * g++.dg/cpp2a/concepts6.C: New test.


Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/constexpr.c
    trunk/gcc/cp/constraint.cc
    trunk/gcc/cp/cp-gimplify.c
    trunk/gcc/cp/cvt.c
    trunk/gcc/cp/pt.c
    trunk/gcc/cp/semantics.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/g++.dg/cpp2a/concepts-iconv1.C
    trunk/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C

Reply via email to