]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: Make sure fold_sizeof_expr returns the correct type [PR117775]
authorSimon Martin <simon@nasilyan.com>
Thu, 16 Jan 2025 15:27:06 +0000 (16:27 +0100)
committerSimon Martin <simon@nasilyan.com>
Thu, 16 Jan 2025 20:06:24 +0000 (21:06 +0100)
commit37f38b0f97374476a4818b68c8df991886428787
tree3a6669c6a6089a4097f529650918fa2ab06e46eb
parent99bcce0d89b8a9aa9a1cc481b41be101c07d8bdf
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.
gcc/cp/decl.cc
gcc/testsuite/g++.dg/cpp2a/constexpr-117775.C [new file with mode: 0644]