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

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <[email protected]>:

https://gcc.gnu.org/g:9af58600fd08d986894051be4d0f37454ad38abe

commit r17-1592-g9af58600fd08d986894051be4d0f37454ad38abe
Author: Marek Polacek <[email protected]>
Date:   Mon Jun 1 17:32:38 2026 -0400

    c++: ICE in tsubst_expr with comma expr [PR125539]

    Here we crash because a TARGET_EXPR gets into tsubst_expr with something
    like:

      template<typename>
      constexpr static A a = (A{}, A{});

    Pre r14-4796, when we had tsubst_copy, we didn't crash because we had
    an early exit when substituting with args=NULL_TREE.  tsubst_expr
    deliberately doesn't have that early exit.

    Note that

      template<typename>
      constexpr static A a = A{};

    works because expand_aggr_init_1 sees a COMPOUND_LITERAL_P and does the
    early exit without calling expand_default_init.  But with a COMPOUND_EXPR
    we don't take that path.

    The TARGET_EXPR is created via check_initializer ->
build_aggr_init_full_exprs
    -> build_aggr_init -> expand_aggr_init_1 -> expand_default_init ->
ocp_convert
    -> build_cplus_new -> build_target_expr.  I tried adjusting the big
    and ugly check in check_initializer before build_aggr_init_full_exprs
    but that didn't work out.  I also tried avoiding the call to ocp_convert
    but that broke some reflection tests.

    We can fix this by calling perform_implicit_conversion in a template to
    create an IMPLICIT_CONV_EXPR, then build_cplus_new won't create a
TARGET_EXPR.

            PR c++/125539

    gcc/cp/ChangeLog:

            * cvt.cc (ocp_convert): In a template, always call
            perform_implicit_conversion.  Pass flags to
            perform_implicit_conversion_flags.
            * decl.cc (check_initializer): Remove a call to
            build_implicit_conv_flags.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1y/var-templ89.C: New test.

    Reviewed-by: Jason Merrill <[email protected]>

Reply via email to