https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78176
Maciej W. Rozycki <ma...@linux-mips.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ma...@linux-mips.org --- Comment #11 from Maciej W. Rozycki <ma...@linux-mips.org> --- TBH this does look like trying to rely on UB to me, as per section 6.5.6 "Additive operators" clause 8 of the C language standard, which states (among others): "If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined." Here under the triggering conditions the pointer the integer is added to with LDXC1 does not point to an element of the array operated on (or to one past the last), so the hardware operation matches the standard's semantics WRT overflow and I don't think we ought to be pushing it. So it looks like a middle end bug to me and the backend is fine in faithfully assuming its RTL pattern won't be passed operands leading to UB. Have I missed anything? Maciej