OSDN Git Service

Fix PR tree-optimization/21520
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / compile / 20031023-1.c
1 #ifndef ASIZE
2 # define ASIZE 0x10000000000UL
3 #endif
4
5 #include <limits.h>
6
7 #if LONG_MAX < 8 * ASIZE
8 # undef ASIZE
9 # define ASIZE 4096
10 #endif
11
12 extern void abort (void);
13
14 int __attribute__((noinline))
15 foo (const char *s)
16 {
17   if (!s)
18     return 1;
19   if (s[0] != 'a')
20     abort ();
21   s += ASIZE - 1;
22   if (s[0] != 'b')
23     abort ();
24   return 0;
25 }
26
27 int (*fn) (const char *) = foo;
28
29 int __attribute__((noinline))
30 bar (void)
31 {
32   char s[ASIZE];
33   s[0] = 'a';
34   s[ASIZE - 1] = 'b';
35   foo (s);
36   foo (s);
37   return 0;
38 }
39
40 int __attribute__((noinline))
41 baz (long i)
42 {
43   if (i)
44     return fn (0);
45   else
46     {
47       char s[ASIZE];
48       s[0] = 'a';
49       s[ASIZE - 1] = 'b';
50       foo (s);
51       foo (s);
52       return fn (0);
53     }
54 }
55
56 int
57 main (void)
58 {
59   if (bar ())
60     abort ();
61   if (baz (0) != 1)
62     abort ();
63   if (baz (1) != 1)
64     abort ();
65   return 0;
66 }