modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/990128-1.c (about)

     1  extern int printf (const char *,...);
     2  
     3  struct s { struct s *n; } *p;
     4  struct s ss;
     5  #define MAX     10
     6  struct s sss[MAX];
     7  int count = 0;
     8  
     9  void sub( struct s *p, struct s **pp );
    10  int look( struct s *p, struct s **pp );
    11  
    12  main()
    13  {
    14      struct s *pp;
    15      struct s *next;
    16      int i;
    17  
    18      p = &ss;
    19      next = p;
    20      for ( i = 0; i < MAX; i++ ) {
    21          next->n = &sss[i];
    22          next = next->n;
    23      }
    24      next->n = 0;
    25  
    26      sub( p, &pp );
    27      if (count != MAX+2)
    28        abort ();
    29  
    30      exit( 0 );
    31  }
    32  
    33  void sub( struct s *p, struct s **pp )
    34  {
    35     for ( ; look( p, pp ); ) {
    36          if ( p )
    37              p = p->n;
    38          else
    39              break;
    40     }
    41  }
    42  
    43  int look( struct s *p, struct s **pp )
    44  {
    45      for ( ; p; p = p->n )
    46          ;
    47      *pp = p;
    48      count++;
    49      return( 1 );
    50  }