1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,unix,debug.ExprInspection -verify %s
2
3 int printf(const char *restrict,...);
4
5 // Testing core functionality of the region store.
6 // radar://10127782
compoundLiteralTest()7 int compoundLiteralTest() {
8 int index = 0;
9 for (index = 0; index < 2; index++) {
10 int thing = (int []){0, 1}[index];
11 printf("thing: %i\n", thing);
12 }
13 return 0;
14 }
15
compoundLiteralTest2()16 int compoundLiteralTest2() {
17 int index = 0;
18 for (index = 0; index < 3; index++) {
19 int thing = (int [][3]){{0,0,0}, {1,1,1}, {2,2,2}}[index][index];
20 printf("thing: %i\n", thing);
21 }
22 return 0;
23 }
24
concreteOffsetBindingIsInvalidatedBySymbolicOffsetAssignment(int length,int i)25 int concreteOffsetBindingIsInvalidatedBySymbolicOffsetAssignment(int length,
26 int i) {
27 int values[length];
28 values[i] = 4;
29 return values[0]; // no-warning
30 }
31
32 struct X{
33 int mem;
34 };
35 int initStruct(struct X *st);
structOffsetBindingIsInvalidated(int length,int i)36 int structOffsetBindingIsInvalidated(int length, int i){
37 struct X l;
38 initStruct(&l);
39 return l.mem; // no-warning
40 }
41
42 void clang_analyzer_eval(int);
testConstraintOnRegionOffset(int * values,int length,int i)43 void testConstraintOnRegionOffset(int *values, int length, int i){
44 if (values[1] == 4) {
45 values[i] = 5;
46 clang_analyzer_eval(values[1] == 4);// expected-warning {{UNKNOWN}}
47 }
48 }
49
50 int initArray(int *values);
testConstraintOnRegionOffsetStack(int * values,int length,int i)51 void testConstraintOnRegionOffsetStack(int *values, int length, int i) {
52 if (values[0] == 4) {
53 initArray(values);
54 clang_analyzer_eval(values[0] == 4);// expected-warning {{UNKNOWN}}
55 }
56 }
57