xref: /aosp_15_r20/external/clang/test/Analysis/outofbound-notwork.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -Wno-array-bounds -analyze -analyzer-checker=core,alpha.security.ArrayBound -analyzer-store=region -verify %s
2*67e74705SXin Li // XFAIL: *
3*67e74705SXin Li 
4*67e74705SXin Li // Once we better handle modeling of sizes of VLAs, we can pull this back
5*67e74705SXin Li // into outofbound.c.
6*67e74705SXin Li 
sizeof_vla(int a)7*67e74705SXin Li void sizeof_vla(int a) {
8*67e74705SXin Li   if (a == 5) {
9*67e74705SXin Li     char x[a];
10*67e74705SXin Li     int y[sizeof(x)];
11*67e74705SXin Li     y[4] = 4; // no-warning
12*67e74705SXin Li     y[5] = 5; // expected-warning{{out-of-bound}}
13*67e74705SXin Li   }
14*67e74705SXin Li }
15*67e74705SXin Li 
sizeof_vla_2(int a)16*67e74705SXin Li void sizeof_vla_2(int a) {
17*67e74705SXin Li   if (a == 5) {
18*67e74705SXin Li     char x[a];
19*67e74705SXin Li     int y[sizeof(x) / sizeof(char)];
20*67e74705SXin Li     y[4] = 4; // no-warning
21*67e74705SXin Li     y[5] = 5; // expected-warning{{out-of-bound}}
22*67e74705SXin Li   }
23*67e74705SXin Li }
24*67e74705SXin Li 
sizeof_vla_3(int a)25*67e74705SXin Li void sizeof_vla_3(int a) {
26*67e74705SXin Li   if (a == 5) {
27*67e74705SXin Li     char x[a];
28*67e74705SXin Li     int y[sizeof(*&*&*&x)];
29*67e74705SXin Li     y[4] = 4; // no-warning
30*67e74705SXin Li     y[5] = 5; // expected-warning{{out-of-bound}}
31*67e74705SXin Li   }
32*67e74705SXin Li }
33