PR c++/88690 - C++17 ICE with empty base in aggregate.
authorJason Merrill <jason@redhat.com>
Thu, 21 Feb 2019 18:16:15 +0000 (13:16 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 21 Feb 2019 18:16:15 +0000 (13:16 -0500)
commit7b45322a5e5030d386a3ad3f747f5e390be4d3ff
tree6fcd5af2f5a869fe25729cfc965e662154b51ad0
parentf64629aa9aefbdcf895b120f00caf5b18a17e3e4
PR c++/88690 - C++17 ICE with empty base in aggregate.

Base fields for empty bases appear in initialization order, which may not be
the same as layout order.  If they also show up in a CONSTRUCTOR in that
order, output_constructor_regular_field aborts because it understandably
doesn't want to go backwards.  I also considered making o_c_r_f more
tolerant of the case where the out-of-order field has fieldsize 0, and so no
actual data needs to be emitted, but we might as well avoid adding an
element to the CONSTRUCTOR in the first place.

* typeck2.c (process_init_constructor_record): Skip trivial
initialization of an empty base.

From-SVN: r269073
gcc/cp/ChangeLog
gcc/cp/typeck2.c
gcc/testsuite/g++.dg/cpp1z/aggr-base7.C [new file with mode: 0644]