https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87373
--- Comment #17 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
(In reply to Murat Ursavaş from comment #16)
> OK I understand conservative action and not wait for word by word access.
> But the resulting value is not 0x401 on the test case, but it should be.
Is not 0x401 at what point? This part of the sequence:
ldr r3, .L3 < &testStructPtr
ldr r3, [r3] < testStructPtr
ldrb r2, [r3] < testStructPtr->one[byte 0] (dead)
movs r2, #0 < 0
orr r2, r2, #1 < 1
strb r2, [r3] < testStructPtr->one[byte 0] = 0x01
ldrb r2, [r3, #1] < testStructPtr->one[byte 1] (dead)
movs r2, #0 < 0
orr r2, r2, #4 < 4
strb r2, [r3, #1] < testStructPtr->one[byte 1] = 0x04
ldrb r2, [r3, #2]
movs r2, #0
strb r2, [r3, #2] < testStructPtr->one[byte 2] = 0x00
ldrb r2, [r3, #3]
movs r2, #0
strb r2, [r3, #3] < testStructPtr->one[byte 3] = 0x00
so successive bytes starting at &(testStructPtr->one) contain 0x01, 0x04, 0x00,
0x00 which is the value in the source code.