https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88690
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|arm-linux-gnueabihf | CC| |jason at gcc dot gnu.org Host|x86_64-pc-linux-gnu | Summary|[7/8/9 Regression] internal |[7/8/9 Regression] c++17 |compiler error: in |internal compiler error: in |output_constructor_regular_ |output_constructor_regular_ |field, at varasm.c:5031 |field, at varasm.c:5031 --- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- And it ICEs everywhere. The CONSTRUCTOR with D type is: {.D.2084={.b=0}, .D.2085={}} D.2084 FIELD_DECL has field offset 0 and size 4 bytes, D.4405 FIELD_DECL has field offset also 0 and size 0. If that is correct, then the CONTRUCTOR should be ordered {.D.2085={}, .D.2084={.b=0}}. .D.2084 is created by build_base_field_1 with t D and base_type B and .D.2085 is created by build_base_field_1 with t D and base_type C. The latter is created with: if (cxx_dialect >= cxx17 && !BINFO_VIRTUAL_P (binfo)) { tree decl = build_base_field_1 (t, basetype, next_field); DECL_FIELD_OFFSET (decl) = BINFO_OFFSET (binfo); DECL_FIELD_BIT_OFFSET (decl) = bitsize_zero_node; SET_DECL_OFFSET_ALIGN (decl, BITS_PER_UNIT); } Shall we sort somewhere the FIELD_DECLs by ascending offsets, something else?