https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71793
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Status|UNCONFIRMED |NEW Last reconfirmed| |2016-07-07 Component|c++ |rtl-optimization Ever confirmed|0 |1 Known to fail| |5.4.0, 6.1.0 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- As y is not used stores to it are eliminated in main(). I can confirm that RTL optimizers somehow remove the volatile load from x from the inline copy of g() which is because RTL expansion expands x as register copy for some reason. ;; x.11_3 ={v} x; (insn 19 18 0 (set (reg:QI 87 [ x.11_3 ]) (mem/v/c:QI (plus:DI (reg/f:DI 82 virtual-stack-vars) (const_int -2 [0xfffffffffffffffe])) [0 x+0 S1 A16])) t.C:36 -1 (nil)) ;; x ={v} x.11_3; (insn 20 19 0 (set (reg/v:QI 94 [ x ]) (reg:QI 87 [ x.11_3 ])) -1 (nil)) ;; Generating RTL for gimple basic block 5 ;; x.7_10 ={v} x; (insn 22 21 0 (set (reg:QI 90 [ x.7_10 ]) (reg/v:QI 94 [ x ])) t.C:18 -1 (nil)) ;; ivtmp_36 = ivtmp_22 + 18446744073709551615; (insn 23 22 0 (parallel [ (set (reg:DI 92 [ ivtmp_22 ]) (plus:DI (reg:DI 92 [ ivtmp_22 ]) (const_int -1 [0xffffffffffffffff]))) (clobber (reg:CC 17 flags)) ]) -1 (nil))