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