]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: constexpr empty base redux [PR105622]
authorJason Merrill <jason@redhat.com>
Fri, 20 May 2022 20:16:25 +0000 (16:16 -0400)
committerJason Merrill <jason@redhat.com>
Tue, 24 May 2022 19:49:27 +0000 (15:49 -0400)
commit2540e2c604142889308857657d3510874955336a
tree789bb80c29cf6b4eb7eec0ccd86c2eb840f945b9
parentae8decf1d2b8329af59592b4fa78ee8dfab3ba5e
c++: constexpr empty base redux [PR105622]

Here calling the constructor for s.__size_ had ctx->ctor for s itself
because cxx_eval_store_expression doesn't create a ctor for the empty field.
Then cxx_eval_call_expression returned the s initializer, and my empty base
overhaul in r13-160 got confused because the type of init is not an empty
class.  But that's OK, we should be checking the type of the original LHS
instead.  We also want to use initialized_type in the condition, in case
init is an AGGR_INIT_EXPR.

I spent quite a while working on more complex solutions before coming back
to this simple one.

PR c++/105622

gcc/cp/ChangeLog:

* constexpr.cc (cxx_eval_store_expression): Adjust assert.
Use initialized_type.

gcc/testsuite/ChangeLog:

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