From 55165bf6b48ed26cd17e66ac447dcfeaaf110fca Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 19 Oct 2009 21:10:20 +0200 Subject: [PATCH] Port from redhat/gcc-4_4-branch: 2009-10-08 Jakub Jelinek * gcc.dg/debug/vta-2.c: New test. 2009-09-30 Alexandre Oliva * gcc.dg/debug/vta-1.c: New. From-SVN: r152986 --- gcc/testsuite/ChangeLog | 9 ++++++++ gcc/testsuite/gcc.dg/debug/vta-1.c | 34 ++++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/debug/vta-2.c | 21 ++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/debug/vta-1.c create mode 100644 gcc/testsuite/gcc.dg/debug/vta-2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1437ce664de..cddfb3968e3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2009-10-18 Jakub Jelinek + + Port from redhat/gcc-4_4-branch: + 2009-10-08 Jakub Jelinek + * gcc.dg/debug/vta-2.c: New test. + + 2009-09-30 Alexandre Oliva + * gcc.dg/debug/vta-1.c: New. + 2009-10-19 Eric Botcazou * gnat.dg/noreturn2.ad[sb]: New test. diff --git a/gcc/testsuite/gcc.dg/debug/vta-1.c b/gcc/testsuite/gcc.dg/debug/vta-1.c new file mode 100644 index 00000000000..414083a09c0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/vta-1.c @@ -0,0 +1,34 @@ +/* https://bugzilla.redhat.com/show_bug.cgi?id=521991#c5 + + Distilled from Linux XFS source code. foo, inlined into bar, ends + up with debug stmts referencing the addressable variable b. + Optimization made it non-addressable, and then completely optimized + away, before we got a chance to rename (and discard) the occurrence + in the debug stmt. When we did, we crashed, attempting to rename + an unreference variable. */ + +/* { dg-do compile } */ + +static inline int +foo (void *x, unsigned y) +{ + unsigned z = *(unsigned long *) x % y; + *(unsigned long *) x = *(unsigned long *) x / y; + return z; +} + +struct S +{ + unsigned t; +}; + +void +bar (struct S *x, int *y) +{ + int a = 0; + unsigned long b = x->t; + foo (&b, x->t); + for (;; a++) + if (b) + *y = 1; +} diff --git a/gcc/testsuite/gcc.dg/debug/vta-2.c b/gcc/testsuite/gcc.dg/debug/vta-2.c new file mode 100644 index 00000000000..5d44262ec76 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/vta-2.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ + +static int +bar (void *a, unsigned int b, int n) +{ + int c = *(unsigned long *) a % b; + *(unsigned long *) a = (int) (*(unsigned long *) a) / b; + return c; +} + +int +foo (unsigned long x, int *y, int z) +{ + int level; + for (level = 0; level < *y; level++) + { + bar (&x, z, sizeof (x)); + if (x) + return *y - 1; + } +} -- 2.30.2