2018-05-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / ipa / pr85449.c
blob57dfce263de627f2f1831e154312ea7a01302b39
1 /* { dg-do run } */
2 /* { dg-options "-O3 -fno-early-inlining" } */
4 int array[128];
6 volatile int v = 0;
7 volatile int blah = 0;
9 int __attribute__((noipa))
10 obscured_zero ()
12 return 0;
15 int __attribute__((noipa))
16 obscured_one ()
18 return 1;
21 int __attribute__((noipa))
22 obscured_two ()
24 return 2;
27 static
28 void cb1 (int l)
30 v = 25;
33 static
34 void cb2 (int l)
36 v = 125;
39 typedef void (*silly_callback)(int);
41 silly_callback __attribute__((noipa))
42 get_callback ()
44 return cb1;
47 static void
48 f (int c, int l, silly_callback p)
50 int i;
52 for (i = 0; i < c; i++)
53 array[i] = 455;
55 for (i = 0; i < 200; i++)
57 p (l);
58 if (obscured_one ())
59 break;
62 if (l > 0)
63 f (c * 2, l - 1, p);
64 blah = l;
67 int
68 main (int argc, char *argv[])
70 int i;
71 for (i = 0; i < 1000; i++)
73 f (0, 5, get_callback ());
74 if (v != 25)
75 __builtin_abort ();
76 if (obscured_one ())
77 break;
80 for (i = 0; i < 1000; i++)
82 f (obscured_zero (), obscured_two (), cb2);
83 if (v != 125)
84 __builtin_abort ();
85 if (obscured_one ())
86 break;
89 return 0;