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

--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:ebf6e6241f5658a3cae462b1314f4a8f2bc71760

commit r15-8014-gebf6e6241f5658a3cae462b1314f4a8f2bc71760
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Mar 13 00:42:54 2025 +0100

    c++: Evaluate immediate invocation call arguments with mce_true [PR119150]

    Since Marek's r14-4140 which moved immediate invocation evaluation
    from build_over_call to cp_fold_r, the following testcase is miscompiled.

    The a = foo (bar ()); case is actually handled right, that is handled
    in cp_fold_r and the whole CALL_EXPR is at that point evaluated by
    cp_fold_immediate_r with cxx_constant_value (stmt, tf_none);
    and that uses mce_true for evaluation of the argument as well as the actual
    call.

    But in the bool b = foo (bar ()); case we actually try to evaluate this
    as non-manifestly constant-evaluated.  And while
              /* Make sure we fold std::is_constant_evaluated to true in an
                 immediate function.  */
              if (DECL_IMMEDIATE_FUNCTION_P (fun))
                call_ctx.manifestly_const_eval = mce_true;
    ensures that if consteval and __builtin_is_constant_evaluated () is true
    inside of that call, this happens after arguments to the function
    have been already constant evaluated in cxx_bind_parameters_in_call.
    The call_ctx in that case also includes new call_ctx.call, something that
    shouldn't be used for the arguments, so the following patch just arranges
    to call cxx_bind_parameters_in_call with manifestly_constant_evaluated =
    mce_true.

    2025-03-13  Jakub Jelinek  <ja...@redhat.com>

            PR c++/119150
            * constexpr.cc (cxx_eval_call_expression): For
            DECL_IMMEDIATE_FUNCTION_P (fun) set manifestly_const_eval in
new_ctx
            and new_call to mce_true and set ctx to &new_ctx.

            * g++.dg/cpp2a/consteval41.C: New test.

Reply via email to