gcc: Fix ICE in GCC 9.2.0
This backports a fix from GCC master to fix a internal compiler exception seen when compiling libjson-c with mips16 activated. Fixes: FS#2455 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
c5b10c8282
commit
9edd7edcda
@ -0,0 +1,55 @@
|
|||||||
|
From d57faea9337ad595d005687247c3322252f70ba1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||||
|
Date: Sun, 7 Jul 2019 09:49:14 +0000
|
||||||
|
Subject: [PATCH] Fix uninitialised use in mips_split_move
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@273174 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||||
|
---
|
||||||
|
gcc/ChangeLog | 5 +++++
|
||||||
|
gcc/config/mips/mips.c | 4 ++--
|
||||||
|
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/gcc/ChangeLog
|
||||||
|
+++ b/gcc/ChangeLog
|
||||||
|
@@ -1,3 +1,8 @@
|
||||||
|
+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-08-12 Release Manager
|
||||||
|
|
||||||
|
* GCC 9.2.0 released.
|
||||||
|
--- a/gcc/config/mips/mips.c
|
||||||
|
+++ b/gcc/config/mips/mips.c
|
||||||
|
@@ -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
|
Loading…
Reference in New Issue
Block a user