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

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Simon Martin <simar...@gcc.gnu.org>:

https://gcc.gnu.org/g:37f38b0f97374476a4818b68c8df991886428787

commit r15-6972-g37f38b0f97374476a4818b68c8df991886428787
Author: Simon Martin <si...@nasilyan.com>
Date:   Thu Jan 16 16:27:06 2025 +0100

    c++: Make sure fold_sizeof_expr returns the correct type [PR117775]

    We currently ICE upon the following code, that is valid under
    -Wno-pointer-arith:

    === cut here ===
    int main() {
      decltype( [](auto) { return sizeof(void); } ) x;
      return x.operator()(0);
    }
    === cut here ===

    The problem is that "fold_sizeof_expr (sizeof(void))" returns
    size_one_node, that has a different TREE_TYPE from that of the sizeof
    expression, which later triggers an assert in cxx_eval_store_expression.

    This patch makes sure that fold_sizeof_expr always returns a tree with
    the size_type_node type.

            PR c++/117775

    gcc/cp/ChangeLog:

            * decl.cc (fold_sizeof_expr): Make sure the folded result has
            type size_type_node.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/constexpr-117775.C: New test.

Reply via email to