re PR debug/48466 (Wrong variable locations at -O0 on i686)

PR debug/48466
	* dwarf2out.c (based_loc_descr): If drap_reg is INVALID_REGNUM, use
	as base_reg whatever register reg has been eliminated to, instead
	of hardcoding STACK_POINTER_REGNUM.

	* gcc.dg/guality/pr36977.c: New test.
	* gcc.dg/guality/pr48466.c: New test.

From-SVN: r172039
This commit is contained in:
Jakub Jelinek 2011-04-06 13:49:59 +02:00 committed by Jakub Jelinek
parent acce4e7738
commit fe84628425
5 changed files with 87 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2011-04-06 Jakub Jelinek <jakub@redhat.com>
PR debug/48466
* dwarf2out.c (based_loc_descr): If drap_reg is INVALID_REGNUM, use
as base_reg whatever register reg has been eliminated to, instead
of hardcoding STACK_POINTER_REGNUM.
2011-04-06 Joseph Myers <joseph@codesourcery.com>
* doc/tm.texi.in: Document C target hooks as separate from general

View File

@ -13395,7 +13395,7 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset,
int base_reg
= DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
? HARD_FRAME_POINTER_REGNUM
: STACK_POINTER_REGNUM);
: REGNO (elim));
return new_reg_loc_descr (base_reg, offset);
}

View File

@ -1,3 +1,9 @@
2011-04-06 Jakub Jelinek <jakub@redhat.com>
PR debug/48466
* gcc.dg/guality/pr36977.c: New test.
* gcc.dg/guality/pr48466.c: New test.
2011-04-06 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
* gcc.target/arm/pr43920-1.c: Fix accidental duplication.

View File

@ -0,0 +1,32 @@
/* PR debug/36977 */
/* { dg-do run } */
/* { dg-options "-g" } */
/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
void
foo ()
{
}
int
main ()
{
struct { char c[100]; } cbig;
struct { int i[800]; } ibig;
struct { long l[900]; } lbig;
struct { float f[200]; } fbig;
struct { double d[300]; } dbig;
struct { short s[400]; } sbig;
ibig.i[0] = 55; /* { dg-final { gdb-test 30 "ibig.i\[0\]" "55" } } */
ibig.i[100] = 5; /* { dg-final { gdb-test 30 "ibig.i\[100\]" "5" } } */
cbig.c[0] = '\0'; /* { dg-final { gdb-test 30 "cbig.c\[0\]" "'\\0'" } } */
cbig.c[99] = 'A'; /* { dg-final { gdb-test 30 "cbig.c\[99\]" "'A'" } } */
fbig.f[100] = 11.0; /* { dg-final { gdb-test 30 "fbig.f\[100\]" "11" } } */
dbig.d[202] = 9.0; /* { dg-final { gdb-test 30 "dbig.d\[202\]" "9" } } */
sbig.s[90] = 255; /* { dg-final { gdb-test 30 "sbig.s\[90\]" "255" } } */
lbig.l[333] = 999; /* { dg-final { gdb-test 30 "lbig.l\[333\]" "999" } } */
foo ();
return 0;
}

View File

@ -0,0 +1,41 @@
/* PR debug/48466 */
/* { dg-do run } */
/* { dg-options "-g" } */
/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
struct S { unsigned int a; unsigned int *b; };
struct T { struct S a; struct S b; };
struct U { const char *u; };
int n[10];
volatile int v;
struct U
foo (const char *s)
{
struct U r;
r.u = s;
return r;
}
void
bar (struct T *s, int a, int b)
{
s->a.a = a;
s->a.b = &s->a.a;
s->b.a = b;
s->b.b = &s->b.a;
}
int
main ()
{
struct T t;
struct U x = foo ("this is x");
struct S y, z;
y.b = n; /* { dg-final { gdb-test 38 "t.a.a" "17" } } */
y.a = 0; /* { dg-final { gdb-test 38 "*t.a.b" "17" } } */
bar (&t, 17, 21); /* { dg-final { gdb-test 38 "t.b.a" "21" } } */
v++; /* { dg-final { gdb-test 38 "*t.b.b" "21" } } */
z = y;
return 0;
}