tree-optimization/111233 - loop splitting miscompile
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / pr48542.c
blob98cff00071d6b78a70e4ebaedb04388bac666f79
1 /* { dg-do run } */
2 /* { dg-require-effective-target indirect_jumps } */
4 /* The return-address was clobbered. */
5 #include <stdlib.h>
6 #include <setjmp.h>
8 jmp_buf env;
9 extern void sub(void);
10 extern void sub3(void);
11 int called;
12 __attribute__ ((__noinline__))
13 int sjtest()
15 int i;
16 if (setjmp(env))
17 return 99;
19 for (i = 0; i < 10; i++)
20 sub();
22 longjmp(env, 1);
25 __attribute__ ((__noinline__))
26 void sub(void)
28 called++;
31 int called3;
32 __attribute__ ((__noinline__))
33 int sjtest3()
35 int i;
36 if (setjmp(env))
37 return 42;
39 for (i = 0; i < 10; i++)
40 sub3();
41 return 0;
44 __attribute__ ((__noinline__))
45 void sub3(void)
47 called3++;
48 if (called3 == 10)
49 longjmp (env, 1);
52 int main(void)
54 if (sjtest() != 99 || called != 10)
55 abort();
56 if (sjtest3() != 42 || called3 != 10)
57 abort();
58 exit (0);