https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86214
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Priority|P3 |P2 CC| |matz at gcc dot gnu.org, | |rguenth at gcc dot gnu.org --- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> --- The issue with Alex testcase is that inlining when faced with ff () { charD.10 cD.2379[1000]; <bb 2> : f (&cD.2379); <bb 3> : cD.2379 ={v} {CLOBBER}; return; <bb 4> : <L0>: cD.2379 ={v} {CLOBBER}; resx 1 } ends up unifying the resx 1 parts, making the lifetime of the two instances overlap: g (intD.9 nD.2380) { charD.10 cD.2411[1000]; charD.10 cD.2410[1000]; ... <bb 4> : f (&cD.2410); <bb 5> : cD.2410 ={v} {CLOBBER}; f (&cD.2411); <bb 6> : cD.2411 ={v} {CLOBBER}; ... all fine up to here <bb 9> : <L4>: sD.2383 ={v} {CLOBBER}; cD.2399 ={v} {CLOBBER}; resx 1 oops. When analyzing lifetime of variables during RTL expansion we might want to not consider blocks where only the clobbers mention the vars thus virtually move those up as far as possible.