c++: ICE with constexpr lambda [PR107280]
authorMarek Polacek <polacek@redhat.com>
Fri, 10 Mar 2023 15:14:20 +0000 (10:14 -0500)
committerMarek Polacek <polacek@redhat.com>
Wed, 15 Mar 2023 18:23:06 +0000 (14:23 -0400)
commitbe20dcc359bcc4677c5b9ce011d3cd7b4ce94a64
tree1a4fe7754ee9007fad482b065613da8ce7f9cd1d
parentcd394c542b73cab89228f4aad7afe757e58ef126
c++: ICE with constexpr lambda [PR107280]

We crash here since r10-3661, the store_init_value hunk in particular.
Before, we called cp_fully_fold_init, so e.g.

  {.str=VIEW_CONVERT_EXPR<char[8]>("")}

was folded into

  {.str=""}

but now we don't fold and keep the VCE around, and it causes trouble in
cxx_eval_store_expression: in the !refs->is_empty () loop we descend on
.str's initializer but since it's wrapped in a VCE, we skip the STRING_CST
check and then crash on the CONSTRUCTOR_NO_CLEARING.

PR c++/107280

gcc/cp/ChangeLog:

* constexpr.cc (cxx_eval_store_expression): Strip location wrappers.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1z/constexpr-lambda28.C: New test.
gcc/cp/constexpr.cc
gcc/testsuite/g++.dg/cpp1z/constexpr-lambda28.C [new file with mode: 0644]