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?

Reply via email to