mirror of git://gcc.gnu.org/git/gcc.git
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: r175133
This commit is contained in:
parent
9a2091cd0a
commit
041efc9a53
|
|
@ -1,3 +1,8 @@
|
|||
2011-06-17 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
PR rtl-optimization/48542
|
||||
* gcc.dg/torture/pr48542.c: New test.
|
||||
|
||||
2011-06-16 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/44160
|
||||
|
|
|
|||
|
|
@ -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