re PR rtl-optimization/48542 (unchanged variables in code which calls setjmp may be clobbered (including the return-address))
PR rtl-optimization/48542 * gcc.dg/torture/pr48542.c: New test. From-SVN: r175147
This commit is contained in:
parent
04c462aab4
commit
1b6f601a31
|
@ -1,3 +1,11 @@
|
|||
2011-06-17 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
Backport from mainline
|
||||
2011-06-17 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
PR rtl-optimization/48542
|
||||
* gcc.dg/torture/pr48542.c: New test.
|
||||
|
||||
2011-06-05 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
/* { dg-do run } */
|
||||
/* The return-address was clobbered. */
|
||||
#include <stdlib.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
jmp_buf env;
|
||||
extern void sub(void);
|
||||
extern void sub3(void);
|
||||
int called;
|
||||
__attribute__ ((__noinline__))
|
||||
int sjtest()
|
||||
{
|
||||
int i;
|
||||
if (setjmp(env))
|
||||
return 99;
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
sub();
|
||||
|
||||
longjmp(env, 1);
|
||||
}
|
||||
|
||||
__attribute__ ((__noinline__))
|
||||
void sub(void)
|
||||
{
|
||||
called++;
|
||||
}
|
||||
|
||||
int called3;
|
||||
__attribute__ ((__noinline__))
|
||||
int sjtest3()
|
||||
{
|
||||
int i;
|
||||
if (setjmp(env))
|
||||
return 42;
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
sub3();
|
||||
return 0;
|
||||
}
|
||||
|
||||
__attribute__ ((__noinline__))
|
||||
void sub3(void)
|
||||
{
|
||||
called3++;
|
||||
if (called3 == 10)
|
||||
longjmp (env, 1);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
if (sjtest() != 99 || called != 10)
|
||||
abort();
|
||||
if (sjtest3() != 42 || called3 != 10)
|
||||
abort();
|
||||
exit (0);
|
||||
}
|
Loading…
Reference in New Issue