2013-10-21 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / pr48542.c
blobe3e49489f7dcac1d83e736f123727e898bcfdf7c
1 /* { dg-do run } */
2 /* The return-address was clobbered. */
3 #include <stdlib.h>
4 #include <setjmp.h>
6 jmp_buf env;
7 extern void sub(void);
8 extern void sub3(void);
9 int called;
10 __attribute__ ((__noinline__))
11 int sjtest()
13 int i;
14 if (setjmp(env))
15 return 99;
17 for (i = 0; i < 10; i++)
18 sub();
20 longjmp(env, 1);
23 __attribute__ ((__noinline__))
24 void sub(void)
26 called++;
29 int called3;
30 __attribute__ ((__noinline__))
31 int sjtest3()
33 int i;
34 if (setjmp(env))
35 return 42;
37 for (i = 0; i < 10; i++)
38 sub3();
39 return 0;
42 __attribute__ ((__noinline__))
43 void sub3(void)
45 called3++;
46 if (called3 == 10)
47 longjmp (env, 1);
50 int main(void)
52 if (sjtest() != 99 || called != 10)
53 abort();
54 if (sjtest3() != 42 || called3 != 10)
55 abort();
56 exit (0);