1  /* PR middle-end/95136 - missing -Wuninitialized on an array access with
       2     a variable offset
       3     { dg-do compile }
       4     { dg-options "-O -Wall" } */
       5  
       6  #define NOIPA __attribute__ ((noipa))
       7  
       8  NOIPA int a1_addr_varidx_plus_cst (int i)
       9  {
      10    int a[4];              // { dg-message "'a' declared here" }
      11    int *p = &a[i + 1];
      12    return *p;             // { dg-warning "'a|a\\\[<unknown>]' is used uninitialized" }
      13  }
      14  
      15  NOIPA int a1_plus_addr_varidx_cst (int i)
      16  {
      17    int a[4];              // { dg-message "'a' declared here" }
      18    int *p = &a[i] + 1;
      19    return *p;             // { dg-warning "'a' is used uninitialized" }
      20  }
      21  
      22  NOIPA int a1_plus_addr_cstidx_var (int i)
      23  {
      24    int a[4];              // { dg-message "'a' declared here" }
      25    int *p = &a[1] + i;
      26    return *p;             // { dg-warning "'a' is used uninitialized" }
      27  }
      28  
      29  NOIPA int a1_plus_addr_varidx_var (int i, int j)
      30  {
      31    int a[4];              // { dg-message "'a' declared here" }
      32    int *p = &a[i] + j;
      33    return *p;             // { dg-warning "'a' is used uninitialized" }
      34  }
      35  
      36  
      37  NOIPA int a2_addr_varidx_plus_cst (int i, int j)
      38  {
      39    int a[4][4];           // { dg-message "'a' declared here" }
      40    int *p = &a[i + 1][j + 1];
      41    return *p;             // { dg-warning "'a|a\\\[<unknown>]\\\[<unknown>]' is used uninitialized" }
      42  }
      43  
      44  NOIPA int a2_plus_addr_varidx_cst (int i, int j)
      45  {
      46    int a[4][4];           // { dg-message "'a' declared here" }
      47    int *p = &a[i][j] + 1;
      48    return *p;             // { dg-warning "'a' is used uninitialized" }
      49  }
      50  
      51  NOIPA int a2_plus_addr_cstidx_var (int i)
      52  {
      53    int a[4][4];           // { dg-message "'a' declared here" }
      54    int *p = &a[1][1] + i;
      55    return *p;             // { dg-warning "'a' is used uninitialized" }
      56  }
      57  
      58  NOIPA int a2_plus_addr_varidx_var (int i, int j, int k)
      59  {
      60    int a[4][4];           // { dg-message "'a' declared here" }
      61    int *p = &a[i][j] + k;
      62    return *p;             // { dg-warning "'a' is used uninitialized" }
      63  }