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:
Jakub Jelinek 2009-10-19 21:10:20 +02:00 committed by Jakub Jelinek
parent a141816c42
commit 55165bf6b4
3 changed files with 64 additions and 0 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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;
}
}