summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDragan Mladjenovic <draganm@gcc.gnu.org>2019-10-04 10:57:48 +0000
committerDragan Mladjenovic <draganm@gcc.gnu.org>2019-10-04 10:57:48 +0000
commitb753d85d205b4e24f0ce11160ebee1e8da98782e (patch)
treebad486e3139f5b7371a4bb7fb649c0f838665c90
parent3d583f47b7eca6b64dd221a3a89f07593e299e27 (diff)
downloadgcc-b753d85d205b4e24f0ce11160ebee1e8da98782e.tar.gz
Backprot fix for uninitialised use in mips_split_move
Fixes PR target/91474 and PR target/91702. 2019-10-04 Dragan Mladjenovic <dmladjenovic@wavecomp.com> Backport from mainline 2019-07-07 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. From-SVN: r276569
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/mips/mips.c4
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1e9c050d45a..ac7ae9ff1e3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+ 2019-10-04 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
+
+ Backport from mainline
+ 2019-07-07 Richard Sandiford <richard.sandiford@arm.com>
+
+ * config/mips/mips.c (mips_split_move): Zero-initialize addr
+ and check whether addr.reg is nonnull before using it.
+
2019-10-02 Bernd Edlinger <bernd.edlinger@hotmail.de>
Backport from mainline
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 2dfc7c73cce..53429270327 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -4849,7 +4849,7 @@ mips_split_move (rtx dest, rtx src, enum mips_split_type split_type, rtx insn_)
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 mips_split_type split_type, rtx insn_)
{
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