static void __attribute__((noinline)) foo (const char *x, long long y, int z) { asm volatile ("" : : "r" (x), "r" ((int) y), "r" (z) : "memory"); }
typedef struct S { struct S *n; int v; } *P; P bar (P c, int v, P e) { register int si asm ("esi"), di asm ("edi"), bx asm ("ebx"); asm volatile ("" : "=r" (si), "=r" (di), "=r" (bx)); while (c < e) { foo ("c", (unsigned int) c, 0); foo ("v", v, 0); foo ("e", (unsigned int) e, 0); if (c->v == v) return c; foo ("c", (unsigned int) c, 0); foo ("v", v, 0); foo ("e", (unsigned int) e, 0); c++; } asm volatile ("" : : "r" (si), "r" (di), "r" (bx)); return 0; } at -g -O2 -m32 makes c unavailable in most of the function, while the c var is for the whole time living in the parameter stack slot. GCC 4.4.x and earlier emit correct location info in this case. -- Summary: [4.5 Regression] VTA causes a stack living parameter unavailable in most of the function Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: wrong-debug Severity: normal Priority: P3 Component: debug AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org GCC target triplet: i686-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43051