(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
Warray-bounds-9.c
       1  /* PR tree-optimization/99121 - ICE in -Warray-bounds on a multidimensional
       2     VLA
       3     { dg-do compile }
       4     { dg-options "-O2 -Wall -ftrack-macro-expansion=0" }
       5     { dg-require-effective-target alloca } */
       6  
       7  #define NOIPA __attribute__ ((noipa))
       8  
       9  void sink (void*, ...);
      10  #define T(a, x) sink (a, x)
      11  
      12  
      13  NOIPA void a_0_n (int n)
      14  {
      15    int a[0][n];
      16  
      17    sink (a);
      18  
      19    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      20    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      21    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
      22  }
      23  
      24  NOIPA void a_n_0 (int n)
      25  {
      26    int a[n][0];
      27  
      28    sink (a);
      29  
      30    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      31    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      32    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
      33  }
      34  
      35  
      36  NOIPA void a_1_n_0 (int n)
      37  {
      38    int a[1][n][0];
      39  
      40    sink (a);
      41  
      42    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      43    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      44    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
      45  }
      46  
      47  NOIPA void a_1_0_n (int n)
      48  {
      49    int a[1][0][n];
      50  
      51    sink (a);
      52  
      53    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      54    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      55    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
      56  }
      57  
      58  NOIPA void a_0_1_n (int n)
      59  {
      60    int a[0][1][n];
      61  
      62    sink (a);
      63  
      64    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      65    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      66    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
      67  }
      68  
      69  NOIPA void a_0_n_1 (int n)
      70  {
      71    int a[0][n][1];
      72  
      73    sink (a);
      74  
      75    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      76    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      77    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
      78  }
      79  
      80  NOIPA void a_n_0_n (int n)
      81  {
      82    int a[n][0][n];
      83  
      84    sink (a);
      85  
      86    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      87    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      88    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
      89  }
      90  
      91  NOIPA void a_n_n_0 (int n)
      92  {
      93    int a[n][n][0];
      94  
      95    sink (a);
      96  
      97    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
      98    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
      99    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
     100  }
     101  
     102  NOIPA void a_0_n_n (int n)
     103  {
     104    int a[0][n][n];
     105  
     106    sink (a);
     107  
     108    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
     109    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
     110    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
     111  }
     112  
     113  NOIPA void a_0_0_n (int n)
     114  {
     115    int a[0][0][n];
     116  
     117    sink (a);
     118  
     119    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
     120    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
     121    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
     122  }
     123  
     124  NOIPA void a_n_0_0 (int n)
     125  {
     126    int a[n][0][0];
     127  
     128    sink (a);
     129  
     130    T (a, ((int *) a)[0]);      // { dg-warning "\\\[-Warray-bounds" }
     131    T (a, ((char *) a)[1]);     // { dg-warning "\\\[-Warray-bounds" }
     132    T (a, ((float *) a)[n]);    // { dg-warning "\\\[-Warray-bounds" }
     133  }
     134  
     135  NOIPA void a_n_n_n (int n)
     136  {
     137    int a[n][n][n];
     138  
     139    sink (a);
     140  
     141    T (a, ((int *) a)[-1]);     // { dg-warning "\\\[-Warray-bounds" "pr99140" }
     142    T (a, ((int *) a)[0]);
     143    T (a, ((char *) a)[1]);
     144    T (a, ((float *) a)[n]);
     145  }