(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
infinite-recursion.c
       1  extern void marker_A(void);
       2  extern void marker_B(void);
       3  extern void marker_C(void);
       4  extern void marker_D(void);
       5  
       6  void test(int flag)
       7  {
       8    marker_A();
       9  
      10    if (flag) {
      11      marker_B();
      12  
      13      /* Recurse, infinitely, as it happens: */
      14      test(flag); /* { dg-warning "infinite recursion" } */
      15  
      16      marker_C();
      17    }
      18  
      19    marker_D();
      20  }
      21  
      22  /* A cycle of 4 mutually-recursive functions (but only for certain inputs).  */
      23  
      24  extern void mutual_test_1 (int flag);
      25  extern void mutual_test_2 (int flag);
      26  extern void mutual_test_3 (int flag);
      27  extern void mutual_test_4 (int flag);
      28  
      29  void mutual_test_1 (int flag)
      30  {
      31    marker_A ();
      32    if (flag)
      33      mutual_test_2 (flag); /* { dg-warning "infinite recursion" } */
      34  }
      35  
      36  void mutual_test_2 (int flag)
      37  {
      38    marker_B ();
      39    if (flag)
      40      mutual_test_3 (flag); /* { dg-warning "infinite recursion" } */
      41  }
      42  
      43  void mutual_test_3 (int flag)
      44  {
      45    marker_C ();
      46    if (flag)
      47      mutual_test_4 (flag); /* { dg-warning "infinite recursion" } */
      48  }
      49  
      50  void mutual_test_4 (int flag)
      51  {
      52    marker_D ();
      53    if (flag)
      54      mutual_test_1 (flag); /* { dg-warning "infinite recursion" } */
      55  }