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

--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:8cccdc2176740f3e034ee6caa49552cf2f142744

commit r14-6561-g8cccdc2176740f3e034ee6caa49552cf2f142744
Author: Marek Polacek <pola...@redhat.com>
Date:   Tue Dec 5 15:23:52 2023 -0500

    c++: fix ICE with sizeof in a template [PR112869]

    This test shows that we cannot clear *walk_subtrees in
    cp_fold_immediate_r when we're in_immediate_context, because that
    checks even e.g. sk_template_parms, and, as the comment says, affects
    cp_fold_r as well.  Here we had an expression with

      min ((long int) VIEW_CONVERT_EXPR<long unsigned int>(bytecount), (long
int) <<< Unknown tree: sizeof_expr
        (int) <<< error >>> >>>)

    as its sub-expression, and we never evaluated that into

      min ((long int) bytecount, 4)

    so the SIZEOF_EXPR leaked into the middle end.  We need to make sure
    we are calling cp_fold on the SIZEOF_EXPR.

            PR c++/112869

    gcc/cp/ChangeLog:

            * cp-gimplify.cc (cp_fold_immediate_r): Check
cp_unevaluated_operand
            and DECL_IMMEDIATE_FUNCTION_P rather than in_immediate_context.

    gcc/testsuite/ChangeLog:

            * g++.dg/template/sizeof18.C: New test.

Reply via email to