[OpenWrt-Devel] [PATCH] gcc: Fix ICE in GCC 9.2.0

Hauke Mehrtens hauke at hauke-m.de
Thu Sep 19 15:49:10 EDT 2019


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 at hauke-m.de>
---
 ...uninitialised_use_in_mips_split_move.patch | 55 +++++++++++++++++++
 1 file changed, 55 insertions(+)
 create mode 100644 toolchain/gcc/patches/9.2.0/100-Fix_uninitialised_use_in_mips_split_move.patch

diff --git a/toolchain/gcc/patches/9.2.0/100-Fix_uninitialised_use_in_mips_split_move.patch b/toolchain/gcc/patches/9.2.0/100-Fix_uninitialised_use_in_mips_split_move.patch
new file mode 100644
index 0000000000..3529a19d8c
--- /dev/null
+++ b/toolchain/gcc/patches/9.2.0/100-Fix_uninitialised_use_in_mips_split_move.patch
@@ -0,0 +1,55 @@
+From d57faea9337ad595d005687247c3322252f70ba1 Mon Sep 17 00:00:00 2001
+From: rsandifo <rsandifo at 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 at 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 at 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
-- 
2.20.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list