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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-03-15
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Doesn't seem to be _BitInt related,
struct S { long long a[16]; } s;

struct S
foo (void)
{
  struct S r;
  __atomic_load (&s, &r, __ATOMIC_RELAXED);
  return r;
}
ICEs the same way.  Guess analyzer doesn't handle properly atomic_load which
can't be optimized into the 1/2/4/8/16 byte variants and is handled by
libatomic.
Makes me wonder about other __atomic operations on such types, __atomic_store,
__atomic_exchange and __atomic_compare_exchange on such types.

And to answer my question,
void
bar (struct S x)
{
  __atomic_store (&s, &x, __ATOMIC_RELAXED);
}
doesn't ICE,
struct S
baz (struct S x)
{
  struct S r;
  __atomic_exchange (&s, &x, &r, __ATOMIC_RELAXED);
}
does and
int
qux (struct S *e, struct S *d)
{
  return __atomic_compare_exchange (&s, e, d, 0, __ATOMIC_RELAXED,
__ATOMIC_RELAXED);
}
doesn't.

Reply via email to