1 /* PR middle-end/101300 - -fsanitize=undefined suppresses -Wuninitialized
2    for a VLA read at -O0
3    { dg-do compile }
4    { dg-options "-O0 -Wall -fsanitize=undefined" } */
5 
warn_vla_rd0(int n)6 int warn_vla_rd0 (int n)
7 {
8   char a[n];
9   return a[0];      // { dg-warning "\\\[-Wuninitialized]" }
10 }
11 
warn_vla_rd1(int n)12 int warn_vla_rd1 (int n)
13 {
14   char a[n];
15   return a[1];      // { dg-warning "\\\[-Wuninitialized]" }
16 }
17 
warn_vla_rdi(int n,int i)18 int warn_vla_rdi (int n, int i)
19 {
20   char a[n];
21   return a[i];      // { dg-warning "\\\[-Wuninitialized]" }
22 }
23 
24 
warn_vla_wr0_rd2_1_0(int n)25 int warn_vla_wr0_rd2_1_0 (int n)
26 {
27   char a[n];
28   a[0] = __LINE__;
29   int x = a[2];     // { dg-warning "\\\[-Wuninitialized]" }
30   int y = a[1];     // { dg-warning "\\\[-Wuninitialized]" }
31   int z = a[0];
32   return x + y + z;
33 }
34 
warn_vla_wr1_rd2_1_0(int n)35 int warn_vla_wr1_rd2_1_0 (int n)
36 {
37   char a[n];
38   a[1] = __LINE__;
39   int x = a[2];     // { dg-warning "\\\[-Wuninitialized]" }
40   int y = a[1];
41   int z = a[0];     // { dg-warning "\\\[-Wuninitialized]" }
42   return x + y + z;
43 }
44 
warn_vla_wr2_rd2_1_0(int n)45 int warn_vla_wr2_rd2_1_0 (int n)
46 {
47   char a[n];
48   a[2] = __LINE__;
49   int x = a[2];
50   int y = a[1];     // { dg-warning "\\\[-Wuninitialized]" }
51   int z = a[0];     // { dg-warning "\\\[-Wuninitialized]" }
52   return x + y + z;
53 }
54