| /* { dg-add-options stack_size } */ |
| |
| /* Origin: hp@bitrange.com |
| Test that return values come out right from a 1000-level call chain to |
| functions without parameters that each need at least one "long" |
| preserved. Exposed problems related to the MMIX port. */ |
| |
| long level = 0; |
| extern long foo (void); |
| extern long bar (void); |
| |
| #ifdef STACK_SIZE |
| #define DEPTH ((STACK_SIZE) / 512 + 1) |
| #else |
| #define DEPTH 500 |
| #endif |
| |
| int |
| main (void) |
| { |
| if (foo () == -42) |
| exit (0); |
| |
| abort (); |
| } |
| |
| long |
| foo (void) |
| { |
| long tmp = ++level; |
| return bar () + tmp; |
| } |
| |
| long |
| bar (void) |
| { |
| long tmp = level; |
| return tmp > DEPTH - 1 ? -42 - tmp : foo () - tmp; |
| } |