summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0074-PR-debug-48466.patch
blob: b4b0be656ab7ad9f154554125e1bc361665c4caa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
Upstream-Status: Inappropriate [Backport]
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

OpenPOWER on IntegriCloud