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

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The reason why it works in #c1 is that we replace the
  c = x_4(D);
  n_6 = 2;
  n.0_1 = n_6;
  n.1_2 = (unsigned int) n.0_1;
  __atomic_compare_exchange_4 (p_7(D), &c, n.1_2, 1, 0, 0);
call in the IL with:
  c_20 = x_4(D);
  _15 = c_20;
  _16 = VIEW_CONVERT_EXPR<unsigned int>(_15);
  _17 = .ATOMIC_COMPARE_EXCHANGE (p_7(D), _16, 2, 260, 0, 0);
  _18 = REALPART_EXPR <_17>;
  _19 = VIEW_CONVERT_EXPR<int>(_18);
  c_21 = _19;
during ccp1 pass, optimizing away the addressables.
But we don't do that for aggregates with sizes of integer types,
but supposedly we could do that too.

Reply via email to