https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99212

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |cris-elf

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
Just to repeat - we have folding that turns BIT_FIELD_REF <bits, 8, 0> into
VIEW_CONVERT_EXPR <type> (bits) if the size of bits is the size of the
extracted
bits which, for cris likely means that sizeof (ubits) is 1.  To quote

struct ubits
{
  unsigned int b0 : 1;
  unsigned int b123 : 3;
  unsigned int b456 : 3;
  unsigned int b7 : 1;
};

to make the IL the same for both targets it might be enough to insert padding:

struct ubits
{
  unsigned int b0 : 1;
  unsigned int b123 : 3;
  unsigned int b456 : 3;
  unsigned int b7 : 1;
  unsigned int pad : 24; // or 8
};

xfail/pass depending on sizeof (int) might be possible but as said it might
be that cris doesn't have sizeof (int) == 1 but instead just lays out
struct ubits in a way to have its size being 1.

Reply via email to