https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85669
--- Comment #47 from Wilco <wilco at gcc dot gnu.org> --- (In reply to Douglas Mencken from comment #45) > (In reply to self from comment #44) > > > I can’t get where is the value of STACK_DYNAMIC_OFFSET in published assembly > > and why do you think it is wrong > > Most likely this value is shown as 96 in “addi r1,r30,96” (80 for _t1 and > _t2) of epilogues > > bl _t1 > addi r1,r30,96 > lwz r0,8(r1) > lwz r30,-8(r1) > lwz r31,-4(r1) > mtlr r0 > blr No, it's the value of r2 before the call to _t1 (like I quoted in comment 32): t1_a4 addi r2,r1,72 -> 72 % 16 != 0 (correct value would be 64) stw r6,60(r1) stw r2,56(r1) As long as STACK_DYNAMIC_OFFSET isn't aligned, the alloca pointer won't be setup correctly, and this can cause it to corrupt other data in the function.