Port from redhat/gcc-4_4-branch:
2009-10-08 Jakub Jelinek <jakub@redhat.com> * gcc.dg/debug/vta-2.c: New test. 2009-09-30 Alexandre Oliva <aoliva@redhat.com> * gcc.dg/debug/vta-1.c: New. From-SVN: r152986
This commit is contained in:
parent
a141816c42
commit
55165bf6b4
|
@ -1,3 +1,12 @@
|
|||
2009-10-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Port from redhat/gcc-4_4-branch:
|
||||
2009-10-08 Jakub Jelinek <jakub@redhat.com>
|
||||
* gcc.dg/debug/vta-2.c: New test.
|
||||
|
||||
2009-09-30 Alexandre Oliva <aoliva@redhat.com>
|
||||
* gcc.dg/debug/vta-1.c: New.
|
||||
|
||||
2009-10-19 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/noreturn2.ad[sb]: New test.
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue