c++: Handle std::construct_at on automatic vars during constant evaluation [PR97195]
authorJakub Jelinek <jakub@redhat.com>
Thu, 1 Oct 2020 09:16:44 +0000 (11:16 +0200)
committerJakub Jelinek <jakub@redhat.com>
Thu, 1 Oct 2020 09:16:44 +0000 (11:16 +0200)
commit2805fcb32660bc0cdcd5ba54310f1f02651e039f
tree365c7a4a2491d674e8847fd175ceda5d9ee7beb3
parent85516b71730d8f9401c34407ac3fadf5f1ebfc4e
c++: Handle std::construct_at on automatic vars during constant evaluation [PR97195]

As mentioned in the PR, we only support due to a bug in constant expressions
std::construct_at on non-automatic variables, because we VERIFY_CONSTANT the
second argument of placement new, which fails verification if it is an
address of an automatic variable.
The following patch fixes it by not performing that verification, the
placement new evaluation later on will verify it after it is dereferenced.

2020-10-01  Jakub Jelinek  <jakub@redhat.com>

PR c++/97195
* constexpr.c (cxx_eval_call_expression): Don't VERIFY_CONSTANT the
second argument.

* g++.dg/cpp2a/constexpr-new14.C: New test.
gcc/cp/constexpr.c
gcc/testsuite/g++.dg/cpp2a/constexpr-new14.C [new file with mode: 0644]