Home | History | Annotate | Download | only in Analysis
      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
      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 
     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 
     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);
     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);
     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);
     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