global_region_invalidation.mm revision e0208ff84598f48e0aafecf5b543afeff8574045
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s 2 3void clang_analyzer_eval(int); 4 5void use(int); 6id foo(int x) { 7 if (x) 8 return 0; 9 static id p = foo(1); 10 clang_analyzer_eval(p == 0); // expected-warning{{TRUE}} 11 return p; 12} 13 14const int &globalIntRef = 42; 15 16void testGlobalRef() { 17 // FIXME: Should be TRUE, but should at least not crash. 18 clang_analyzer_eval(globalIntRef == 42); // expected-warning{{UNKNOWN}} 19} 20 21extern int globalInt; 22extern struct { 23 int value; 24} globalStruct; 25extern void invalidateGlobals(); 26 27void testGlobalInvalidation() { 28 clang_analyzer_eval(globalInt == 42); // expected-warning{{UNKNOWN}} 29 clang_analyzer_eval(globalStruct.value == 43); // expected-warning{{UNKNOWN}} 30 31 if (globalInt != 42) 32 return; 33 if (globalStruct.value != 43) 34 return; 35 clang_analyzer_eval(globalInt == 42); // expected-warning{{TRUE}} 36 clang_analyzer_eval(globalStruct.value == 43); // expected-warning{{TRUE}} 37 38 invalidateGlobals(); 39 clang_analyzer_eval(globalInt == 42); // expected-warning{{UNKNOWN}} 40 clang_analyzer_eval(globalStruct.value == 43); // expected-warning{{UNKNOWN}} 41} 42 43void testGlobalInvalidationWithDirectBinding() { 44 clang_analyzer_eval(globalInt == 42); // expected-warning{{UNKNOWN}} 45 clang_analyzer_eval(globalStruct.value == 43); // expected-warning{{UNKNOWN}} 46 47 globalInt = 42; 48 globalStruct.value = 43; 49 clang_analyzer_eval(globalInt == 42); // expected-warning{{TRUE}} 50 clang_analyzer_eval(globalStruct.value == 43); // expected-warning{{TRUE}} 51 52 invalidateGlobals(); 53 clang_analyzer_eval(globalInt == 42); // expected-warning{{UNKNOWN}} 54 clang_analyzer_eval(globalStruct.value == 43); // expected-warning{{UNKNOWN}} 55} 56