// PR c++/102490
// { dg-do run { target c++20 } }
struct A
{
  unsigned char a : 1;
  unsigned char b : 1;
  constexpr bool operator== (const A &) const = default;
};
struct B
{
  unsigned char a : 8;
  int : 0;
  unsigned char b : 7;
  constexpr bool operator== (const B &) const = default;
};
struct C
{
  unsigned char a : 3;
  unsigned char b : 1;
  constexpr bool operator== (const C &) const = default;
};
void
foo (C &x, int y)
{
  x.b = y;
}
int
main ()
{
  A a{}, b{};
  B c{}, d{};
  C e{}, f{};
  a.b = 1;
  d.b = 1;
  foo (e, 0);
  foo (f, 1);
  return a == b || c == d || e == f;
}