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 6long level = 0; 7extern long foo (void); 8extern long bar (void); 9 10#ifdef STACK_SIZE 11#define DEPTH ((STACK_SIZE) / 512 + 1) 12#else 13#define DEPTH 500 14#endif 15 16int 17main (void) 18{ 19 if (foo () == -42) 20 exit (0); 21 22 abort (); 23} 24 25long 26foo (void) 27{ 28 long tmp = ++level; 29 return bar () + tmp; 30} 31 32long 33bar (void) 34{ 35 long tmp = level; 36 return tmp > DEPTH - 1 ? -42 - tmp : foo () - tmp; 37} 38