From patchwork Mon Jun 14 20:02:48 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [M68K] Don't clobber PIC reference to constant pool Date: Mon, 14 Jun 2010 10:02:48 -0000 From: Andreas Schwab X-Patchwork-Id: 55578 Message-Id: To: gcc-patches@gcc.gnu.org m68k_delegitimize_address should not do anything if the argument isn't a MEM, otherwise PIC references to the constant pool will be miscompiled. Tested on m68k-linux, committed to trunk and 4.5 branch. Andreas. 2010-06-14 Andreas Schwab * config/m68k/m68k.c (m68k_delegitimize_address): Don't do anything if the argument is not a MEM. Index: gcc/config/m68k/m68k.c =================================================================== --- gcc/config/m68k/m68k.c (revision 160760) +++ gcc/config/m68k/m68k.c (working copy) @@ -4625,16 +4625,17 @@ m68k_output_dwarf_dtprel (FILE *file, in and turn them back into a direct symbol reference. */ static rtx -m68k_delegitimize_address (rtx x) +m68k_delegitimize_address (rtx orig_x) { - rtx orig_x = delegitimize_mem_from_attrs (x); - rtx y; + rtx x, y; rtx addend = NULL_RTX; rtx result; - x = orig_x; - if (MEM_P (x)) - x = XEXP (x, 0); + orig_x = delegitimize_mem_from_attrs (orig_x); + if (! MEM_P (orig_x)) + return orig_x; + + x = XEXP (orig_x, 0); if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST