diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0074-PR-debug-48466.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0074-PR-debug-48466.patch | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0074-PR-debug-48466.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0074-PR-debug-48466.patch new file mode 100644 index 000000000..bd239012a --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0074-PR-debug-48466.patch @@ -0,0 +1,113 @@ +From da3ed31e2090c6b8236bbc3be69433aca0d445f1 Mon Sep 17 00:00:00 2001 +From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Wed, 6 Apr 2011 20:40:24 +0000 +Subject: [PATCH 074/200] 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. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172064 138bc75d-0d04-0410-961f-82ee72b054a4 + +index 1e5917c..68d56b0 100644 +--- a/gcc/dwarf2out.c ++++ b/gcc/dwarf2out.c +@@ -13545,7 +13545,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); + } + +new file mode 100644 +index 0000000..3689fae +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/guality/pr36977.c +@@ -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; ++} +diff --git a/gcc/testsuite/gcc.dg/guality/pr48466.c b/gcc/testsuite/gcc.dg/guality/pr48466.c +new file mode 100644 +index 0000000..8d5426a +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/guality/pr48466.c +@@ -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; ++} +-- +1.7.0.4 + |