OSDN Git Service

PR c/37924
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / nestfunc-4.c
1 /* Origin: hp@bitrange.com
2    Test that return values come out right from a 1000-level call chain to
3    functions without parameters that each need at least one "long"
4    preserved.  Exposed problems related to the MMIX port.  */
5
6 long level = 0;
7 extern long foo (void);
8 extern long bar (void);
9
10 #ifdef STACK_SIZE
11 #define DEPTH ((STACK_SIZE) / 512 + 1)
12 #else
13 #define DEPTH 500
14 #endif
15
16 int
17 main (void)
18 {
19   if (foo () == -42)
20     exit (0);
21
22   abort ();
23 }
24
25 long
26 foo (void)
27 {
28   long tmp = ++level;
29   return bar () + tmp;
30 }
31
32 long
33 bar (void)
34 {
35   long tmp = level;
36   return tmp > DEPTH - 1 ? -42 - tmp : foo () - tmp;
37 }