(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Wvla-parameter-3.c
       1  /* PR c/50584 - No warning for passing small array to C99 static array
       2     declarator
       3     Verify that redeclarations of functions with pointer parameters to
       4     arrays with variable bounds are diagnosed if the bounds don't match
       5     either in kind or in the variable expression.
       6     { dg-do compile }
       7     { dg-options "-Wall -Wvla-parameter" } */
       8  
       9  extern int m, n;
      10  
      11  void pa_ (int (*)[]);                   // { dg-message "previously declared as 'int \\\(\\\*\\\)\\\[]'" "note" }
      12  void pa_ (int (*)[n]);                  // { dg-warning "\\\[-Wvla-parameter" }
      13  void pa_ (int (*)[n + 1]);              // { dg-warning "mismatch in bound 1 of argument 1 declared as 'int *\\\(\\\*\\\)\\\[n \\\+ 1\\\]'" }
      14  
      15  void ppa_ (int (**)[]);                 // { dg-message "previously declared as 'int \\\(\\\*\\\*\\\)\\\[]'" "note" }
      16  void ppa_ (int (**)[n]);                // { dg-warning "\\\[-Wvla-parameter" }
      17  void ppa_ (int (**)[n + 1]);            // { dg-warning "mismatch in bound 1 of argument 1 declared as 'int \\\(\\\*\\\*\\\)\\\[n \\\+ 1\\\]'" }
      18  
      19  void pa1 (int (*)[1]);                  // { dg-message "previously declared as 'int \\\(\\\*\\\)\\\[1]'" "note" }
      20  void pa1 (int (*)[n]);                  // { dg-warning "\\\[-Wvla-parameter" }
      21  void pa1 (int (*)[1]);
      22  void pa1 (int (*)[n + 1]);              // { dg-warning "mismatch in bound 1 of argument 1 declared as 'int *\\\(\\\*\\\)\\\[n \\\+ 1\\\]'" }
      23  
      24  void ppax (int (**)[*]);                // { dg-message "previously declared as 'int \\\(\\\*\\\*\\\)\\\[.]'" "note" }
      25  void ppax (int (**)[n]);                // { dg-warning "\\\[-Wvla-parameter" }
      26  /* A VLA with an unspecified bound is represented the same as [0] so
      27     so the pretty printer can't differentiate between the two forms.  */
      28  void ppax (int (**)[1]);                // { dg-bogus "\\\[-Warray-parameter" "pr100420 (expected)" { xfail *-*-* } }
      29                                          // { dg-warning "\\\[-Wvla-parameter" "pr100420 (expected)" { xfail *-*-* } .-1 }
      30  void ppax (int (**)[n + 1]);            // { dg-warning "mismatch in bound 1 of argument 1 declared as 'int *\\\(\\\*\\\*\\\)\\\[n \\\+ 1\\\]'" }
      31  
      32  
      33  void pa1_n (int (*)[1][n]);
      34  void pa1_n (int (*)[1][n]);
      35  void pa1_n (int (*)[*][n]);             // { dg-warning "mismatch in bound 1 of argument 1 declared as 'int \\\(\\\*\\\)\\\[\\\*]\\\[n]'" "pr100420 (expected)" { xfail *-*-*} }
      36                                          // { dg-warning "mismatch in bound 1 of argument 1 declared as 'int \\\(\\\*\\\)\\\[0]\\\[n]'" "pr100420" { target *-*-* } .-1 }
      37  
      38  void pa1_n_2 (int (*)[1][n][2]);
      39  void pa1_n_2 (int (*)[1][n][*]);        // { dg-warning "mismatch in bound 3 of argument 1 declared as 'int \\\(\\\*\\\)\\\[1]\\\[n]\\\[\\\*]'" "pr100420 (expected)" { xfail *-*-* } }
      40                                          // { dg-warning "mismatch in bound 3 of argument 1 declared as 'int \\\(\\\*\\\)\\\[1]\\\[n]\\\[0]'" "pr100420" { target *-*-* } .-1 }
      41  
      42  
      43  void pa1_n_2_a1_n_2 (int (*)[1][n][2], int (*)[1][n][2]);
      44  // { dg-message "previously declared as 'int \\\(\\\*\\\)\\\[1]\\\[n]\\\[2]'" "note" { target *-*-* } .-1 }
      45  void pa1_n_2_a1_n_2 (int (*)[1][n][2], int (*)[1][n][n]);
      46  // { dg-warning "mismatch in bound 3 of argument 2 declared as 'int \\\(\\\*\\\)\\\[1]\\\[n]\\\[n]'" "" { target *-*-* } .-1 }
      47  void pa1_n_2_a1_n_2 (int (*)[1][n][2], int (*)[1][3][2]);
      48  // { dg-warning "mismatch in bound 2 of argument 2 declared as 'int \\\(\\\*\\\)\\\[1]\\\[3]\\\[2]'" "" { target *-*-* } .-1 }
      49  void pa1_n_2_a1_n_2 (int (*)[1][n][2], int (*)[n][n][2]);
      50  // { dg-warning "mismatch in bound 1 of argument 2 declared as 'int \\\(\\\*\\\)\\\[n]\\\[n]\\\[2]'" "" { target *-*-* } .-1 }
      51  void pa1_n_2_a1_n_2 (int (*)[1][n][n], int (*)[1][n][2]);
      52  // { dg-warning "mismatch in bound 3 of argument 1 declared as 'int \\\(\\\*\\\)\\\[1]\\\[n]\\\[n]'" "" { target *-*-* } .-1 }
      53  void pa1_n_2_a1_n_2 (int (*)[n][n][2], int (*)[1][n][2]);
      54  // { dg-warning "mismatch in bound 1 of argument 1 declared as 'int \\\(\\\*\\\)\\\[n]\\\[n]\\\[2]'" "" { target *-*-* } .-1 }
      55  void pa1_n_2_a1_n_2 (int (*)[*][*][*], int (*)[*][*][2]);
      56  // { dg-warning "mismatch in bounds 1, 2, 3 of argument 1 declared as 'int \\\(\\\*\\\)\\\[.]\\\[.]\\\[.]'" "" { target *-*-* } .-1 }
      57  // { dg-warning "mismatch in bounds 1, 2 of argument 2 declared as 'int \\\(\\\*\\\)\\\[.]\\\[.]\\\[2]'" "" { target *-*-* } .-2 }
      58  void pa1_n_2_a1_n_2 (int (*)[1][n][2], int (*)[1][n][2]);
      59  
      60  /* Verify that pointers to arrays of pointers to arrays...etc are handled
      61     correctly.  */
      62  void pa2pampan (int (*(*(*(*)[2])[m])[n]));
      63  // { dg-message "previously declared as 'int \\\* \\\(\\\* \\\(\\\* \\\(\\\*\\\)\\\[2]\\\)\\\[m]\\\)\\\[n]'" "note" { target *-*-* } .-1 }
      64  void pa2pampan (int (*(*(*(*)[2])[m])[1]));
      65  // { dg-warning "mismatch in bound 3 of argument 1 declared as 'int \\\* \\\(\\\* \\\(\\\* \\\(\\\*\\\)\\\[2]\\\)\\\[m]\\\)\\\[1]'" "" { target *-*-* } .-1  }
      66  void pa2pampan (int (*(*(*(*)[2])[1])[n]));
      67  // { dg-warning "mismatch in bound 2 of argument 1 declared as 'int \\\* \\\(\\\* \\\(\\\* \\\(\\\*\\\)\\\[2]\\\)\\\[1]\\\)\\\[n]'" "" { target *-*-* } .-1  }
      68  void pa2pampan (int (*(*(*(*)[2])[m])[n]));