]> gcc.gnu.org Git - gcc.git/commit
c++: constexpr non-trivial aggregate init [PR105191]
authorJason Merrill <jason@redhat.com>
Fri, 8 Apr 2022 19:33:41 +0000 (15:33 -0400)
committerJason Merrill <jason@redhat.com>
Sat, 9 Apr 2022 03:25:54 +0000 (23:25 -0400)
commit4822108e61ab879067482704f2f7d1670813d61a
treee3b0b52a7cca145a83283d6024a4963de68ce0c8
parent58586721c79f77224b8571a5dba732620d5546ab
c++: constexpr non-trivial aggregate init [PR105191]

My patch for PR92385 made us use VEC_INIT_EXPR for aggregate initialization
of an array where some elements are not explicitly initialized.  Constexpr
handling of that was treating initialization from {} as equivalent to
value-initialization, which is problematic for classes with default member
initializers that make the default constructor non-trivial; in older
standard modes, not initializing all members makes a constructor
non-constexpr, but aggregate initialization is fine.

PR c++/105191
PR c++/92385

gcc/cp/ChangeLog:

* tree.cc (build_vec_init_elt): Do {}-init for aggregates.
* constexpr.cc (cxx_eval_vec_init): Only treat {} as value-init
for non-aggregate types.
(build_vec_init_expr): Also check constancy of explicit
initializer elements.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/constexpr-array28.C: New test.
gcc/cp/constexpr.cc
gcc/cp/tree.cc
gcc/testsuite/g++.dg/cpp0x/constexpr-array28.C [new file with mode: 0644]
This page took 0.070978 seconds and 6 git commands to generate.