1  /* { dg-require-effective-target alloca } */
       2  
       3  typedef __SIZE_TYPE__ size_t;
       4  
       5  int test_alloca_1 (void)
       6  {
       7    void *buf = __builtin_alloca (1024);
       8    return test_alloca_1 (); /* { dg-warning "-Wanalyzer-infinite-recursion" } */
       9  }
      10  
      11  int test_alloca_2 (size_t n)
      12  {
      13    void *buf = __builtin_alloca (n);
      14    return test_alloca_2 (n); /* { dg-warning "-Wanalyzer-infinite-recursion" } */
      15  }
      16  
      17  int test_alloca_3 (size_t n)
      18  {
      19    void *buf = __builtin_alloca (n);
      20    return test_alloca_2 (n - 1);
      21  }
      22  
      23  int test_alloca_4 (size_t n)
      24  {
      25    void *buf = __builtin_alloca (n);
      26    if (n > 0)
      27      return test_alloca_2 (n - 1);
      28    return 42;
      29  }