15db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix,debug.ExprInspection -verify %s 2a8f2362307b436023095e66efd678ae591c02184Anna Zaks 3a8f2362307b436023095e66efd678ae591c02184Anna Zaksint printf(const char *restrict,...); 4a8f2362307b436023095e66efd678ae591c02184Anna Zaks 5a8f2362307b436023095e66efd678ae591c02184Anna Zaks// Testing core functionality of the region store. 6a8f2362307b436023095e66efd678ae591c02184Anna Zaks// radar://10127782 7a8f2362307b436023095e66efd678ae591c02184Anna Zaksint compoundLiteralTest() { 8a8f2362307b436023095e66efd678ae591c02184Anna Zaks int index = 0; 9a8f2362307b436023095e66efd678ae591c02184Anna Zaks for (index = 0; index < 2; index++) { 10a8f2362307b436023095e66efd678ae591c02184Anna Zaks int thing = (int []){0, 1}[index]; 11a8f2362307b436023095e66efd678ae591c02184Anna Zaks printf("thing: %i\n", thing); 12a8f2362307b436023095e66efd678ae591c02184Anna Zaks } 13a8f2362307b436023095e66efd678ae591c02184Anna Zaks return 0; 14a8f2362307b436023095e66efd678ae591c02184Anna Zaks} 15a8f2362307b436023095e66efd678ae591c02184Anna Zaks 16a8f2362307b436023095e66efd678ae591c02184Anna Zaksint compoundLiteralTest2() { 17a8f2362307b436023095e66efd678ae591c02184Anna Zaks int index = 0; 18a8f2362307b436023095e66efd678ae591c02184Anna Zaks for (index = 0; index < 3; index++) { 19a8f2362307b436023095e66efd678ae591c02184Anna Zaks int thing = (int [][3]){{0,0,0}, {1,1,1}, {2,2,2}}[index][index]; 20a8f2362307b436023095e66efd678ae591c02184Anna Zaks printf("thing: %i\n", thing); 21a8f2362307b436023095e66efd678ae591c02184Anna Zaks } 22a8f2362307b436023095e66efd678ae591c02184Anna Zaks return 0; 23a8f2362307b436023095e66efd678ae591c02184Anna Zaks} 245db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks 255db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksint concreteOffsetBindingIsInvalidatedBySymbolicOffsetAssignment(int length, 265db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks int i) { 275db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks int values[length]; 285db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks values[i] = 4; 295db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks return values[0]; // no-warning 305db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks} 315db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks 325db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksstruct X{ 335db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks int mem; 345db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks}; 355db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksint initStruct(struct X *st); 365db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksint structOffsetBindingIsInvalidated(int length, int i){ 375db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks struct X l; 385db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks initStruct(&l); 395db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks return l.mem; // no-warning 405db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks} 415db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks 425db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksvoid clang_analyzer_eval(int); 435db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksvoid testConstraintOnRegionOffset(int *values, int length, int i){ 445db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks if (values[1] == 4) { 455db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks values[i] = 5; 465db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks clang_analyzer_eval(values[1] == 4);// expected-warning {{UNKNOWN}} 475db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks } 485db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks} 495db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks 505db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksint initArray(int *values); 515db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaksvoid testConstraintOnRegionOffsetStack(int *values, int length, int i) { 525db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks if (values[0] == 4) { 535db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks initArray(values); 545db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks clang_analyzer_eval(values[0] == 4);// expected-warning {{UNKNOWN}} 555db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks } 565db8fac5f304d9973f724d5aeb4108367d36f781Anna Zaks} 57