https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79541
Bug ID: 79541 Summary: lra reads uninitialized memory (with invalid input) Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: bernds at gcc dot gnu.org Target Milestone: --- Created attachment 40753 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40753&action=edit Reproducer Disclaimer: I'm uncertain how severe this is: the test program contains an invalid assembly statement that LRA converts into a nop. If that asm is corrected, the problem no longer reproduces, and I don't know if the issue could show up on a legitimate input. I noticed this because an unrelated patch that should have had no effect on this program caused differences in assembly output. Compile the test program as follows, for ppc-linux (I use an x86_64-linux x ppc-linux cross): valgrind ./cc1 -O2 sl4.i -I include The following should show up in the output: ==7398== Conditional jump or move depends on uninitialised value(s) ==7398== at 0xCB3791: lra_eliminate_regs_1(rtx_insn*, rtx_def*, machine_mode, bool, bool, long, bool) (lra-eliminations.c:403) ==7398== by 0xCB4133: lra_eliminate_regs_1(rtx_insn*, rtx_def*, machine_mode, bool, bool, long, bool) (lra-eliminations.c:642) ==7398== by 0xCC1D71: remove_pseudos(rtx_def**, rtx_insn*) (lra-spills.c:421) ==7398== by 0xCC1E1F: remove_pseudos(rtx_def**, rtx_insn*) (lra-spills.c:431) ==7398== by 0xCC2089: spill_pseudos() (lra-spills.c:475) ==7398== by 0xCC27A9: lra_spill() (lra-spills.c:604) ==7398== by 0xC93355: lra(_IO_FILE*) (lra.c:2486) ==7398== by 0xC38FC0: do_reload() (ira.c:5400) ==7398== by 0xC39476: (anonymous namespace)::pass_reload::execute(function*) (ira.c:5584) ==7398== by 0xD83360: execute_one_pass(opt_pass*) (passes.c:2465) ==7398== by 0xD836C4: execute_pass_list_1(opt_pass*) (passes.c:2554) ==7398== by 0xD836F5: execute_pass_list_1(opt_pass*) (passes.c:2555) The unitialized memory seems to be the sp_offset field of an insn created by LRA. The .reload dump should contain a line as follows, with random numbers for sp_off: Choosing alt 5 in insn 266: (0) m (1) r {*movsi_internal1} (sp_off=139971034200304)