Message ID | mpty31czx28.fsf@arm.com |
---|---|
State | New |
Headers | show |
Series | Fix uninitialised use in mips_split_move | expand |
On 7/5/19 2:48 AM, Richard Sandiford wrote: > While testing the fix for PR91068, I hit an rtl checking failure > while building newlib. mips_split_move was decomposing an address that > happened to be symbolic and then tried to access the REGNO of the base > register field, which wasn't initialised but which by chance pointed to > valid memory. > > Tested on mipsisa64-elf. OK to install? > > Richard > > > 2019-07-05 Richard Sandiford <richard.sandiford@arm.com> > > gcc/ > * config/mips/mips.c (mips_split_move): Zero-initialize addr > and check whether addr.reg is nonnull before using it. OK jeff
Index: gcc/config/mips/mips.c =================================================================== --- gcc/config/mips/mips.c 2019-07-01 09:37:07.300523814 +0100 +++ gcc/config/mips/mips.c 2019-07-05 09:46:46.407526855 +0100 @@ -4849,7 +4849,7 @@ mips_split_move (rtx dest, rtx src, enum can forward SRC for DEST. This is most useful if the next insn is a simple store. */ rtx_insn *insn = (rtx_insn *)insn_; - struct mips_address_info addr; + struct mips_address_info addr = {}; if (insn) { rtx_insn *next = next_nonnote_nondebug_insn_bb (insn); @@ -4862,7 +4862,7 @@ mips_split_move (rtx dest, rtx src, enum { rtx tmp = XEXP (src, 0); mips_classify_address (&addr, tmp, GET_MODE (tmp), true); - if (REGNO (addr.reg) != REGNO (dest)) + if (addr.reg && REGNO (addr.reg) != REGNO (dest)) validate_change (next, &SET_SRC (set), src, false); } else