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:
		| @@ -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 | ||||||
		Reference in New Issue
	
	Block a user
	 Hauke Mehrtens
					Hauke Mehrtens