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  }