[Bug middle-end/115527] -ftrivial-auto-var-init appears to clobber explicit initializer
qinzhao at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jul 12 19:02:19 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115527
--- Comment #4 from qinzhao at gcc dot gnu.org ---
when checking the expanded IR for __builtin_clear_padding in the below:
the builtin
__builtin_clear_padding (&o, 0B);
was expanded as the following sequence
D.4430 = &o + 0;
_2 = D.4430 + 72;
goto <D.4432>;
<D.4431>:
MEM <char[7]> [(struct outer *)D.4430 + 9B] = {};
D.4430 = D.4430 + 24;
<D.4432>:
if (D.4430 != _2) goto <D.4431>; else goto <D.4433>;
<D.4433>:
MEM <char[4]> [(struct outer *)&o + 4B] = {};
When examining the above sequence, I locate the bug is at the last statement:
MEM <char[4]> [(struct outer *)&o + 4B] = {};
this statement incorrectly zeroed the 5th to 8th bytes of the structure "o".
Instead, it should zeroed the &o + 72 + 4B as:
MEM <char[4]> [(struct outer *)&o + 72 + 4B] = {};
I will check why the expanding of __builtin_clear_padding is wrong.
More information about the Gcc-bugs
mailing list