Commit c4e26da1 by Jakub Jelinek Committed by Jakub Jelinek

re PR debug/43972 (ICE in loc_cmp)

	PR debug/43972
	* config/i386/i386.c (ix86_delegitimize_address): Make sure the
	result mode matches original rtl mode.

	* gcc.dg/debug/pr43972.c: New test.

From-SVN: r158989
parent 43f9f521
2010-05-03 Jakub Jelinek <jakub@redhat.com>
PR debug/43972
* config/i386/i386.c (ix86_delegitimize_address): Make sure the
result mode matches original rtl mode.
2010-05-03 Dave Korn <dave.korn.cygwin@gmail.com> 2010-05-03 Dave Korn <dave.korn.cygwin@gmail.com>
PR target/43888 PR target/43888
......
...@@ -11014,7 +11014,10 @@ ix86_delegitimize_address (rtx x) ...@@ -11014,7 +11014,10 @@ ix86_delegitimize_address (rtx x)
|| XINT (XEXP (x, 0), 1) != UNSPEC_GOTPCREL || XINT (XEXP (x, 0), 1) != UNSPEC_GOTPCREL
|| !MEM_P (orig_x)) || !MEM_P (orig_x))
return orig_x; return orig_x;
return XVECEXP (XEXP (x, 0), 0, 0); x = XVECEXP (XEXP (x, 0), 0, 0);
if (GET_MODE (orig_x) != Pmode)
return simplify_gen_subreg (GET_MODE (orig_x), x, Pmode, 0);
return x;
} }
if (GET_CODE (x) != PLUS if (GET_CODE (x) != PLUS
...@@ -11081,6 +11084,8 @@ ix86_delegitimize_address (rtx x) ...@@ -11081,6 +11084,8 @@ ix86_delegitimize_address (rtx x)
else else
return orig_x; return orig_x;
} }
if (GET_MODE (orig_x) != Pmode && MEM_P (orig_x))
return simplify_gen_subreg (GET_MODE (orig_x), result, Pmode, 0);
return result; return result;
} }
......
2010-05-03 Jakub Jelinek <jakub@redhat.com>
PR debug/43972
* gcc.dg/debug/pr43972.c: New test.
2010-05-02 Uros Bizjak <ubizjak@gmail.com> 2010-05-02 Uros Bizjak <ubizjak@gmail.com>
PR testsuite/43963 PR testsuite/43963
......
/* PR debug/43972 */
/* { dg-do compile } */
/* { dg-options "-g -w" } */
/* { dg-options "-g -fpic -w" { target fpic } } */
struct { int *b1; } *f1 ();
short v1[1];
struct S { int b2; };
void
foo (struct S *a1, union { char *b3; unsigned *b4; int *b5; } *a2)
{
int d;
switch (d)
{
case 0:
{
int c = a1->b2, i;
if (f1 () == 0)
*a2->b3++ = 2;
else if (((long) (f1 () - f1 ())) ^ ((long) f1 ()->b1 - ((long) f1 () & 8)))
*a2->b3++ = (long) f1 - ((long) f1 () & 0xff);
else
*a2->b4++ = (long) f1;
for (i = 0; i < c; i++)
*a2->b5++ = (long) v1;
foo (a1, a2);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment