17f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s 27f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose 37f839a6b35e5007964b538423b0a570eed26fc10Jordan Rosevoid clang_analyzer_eval(int); 47f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose 57f839a6b35e5007964b538423b0a570eed26fc10Jordan Rosevoid testAnd(int i, int *p) { 67f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose int *nullP = 0; 77f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose int *knownP = &i; 87f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose clang_analyzer_eval((knownP && knownP) == 1); // expected-warning{{TRUE}} 97f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose clang_analyzer_eval((knownP && nullP) == 0); // expected-warning{{TRUE}} 107f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose clang_analyzer_eval((knownP && p) == 1); // expected-warning{{UNKNOWN}} 117f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose} 127f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose 137f839a6b35e5007964b538423b0a570eed26fc10Jordan Rosevoid testOr(int i, int *p) { 147f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose int *nullP = 0; 157f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose int *knownP = &i; 167f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose clang_analyzer_eval((nullP || knownP) == 1); // expected-warning{{TRUE}} 177f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose clang_analyzer_eval((nullP || nullP) == 0); // expected-warning{{TRUE}} 187f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose clang_analyzer_eval((nullP || p) == 1); // expected-warning{{UNKNOWN}} 197f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose} 207f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose 217f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose 227f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose// PR13461 237f839a6b35e5007964b538423b0a570eed26fc10Jordan Roseint testTypeIsInt(int i, void *p) { 247f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose if (i | (p && p)) 257f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose return 1; 267f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose return 0; 277f839a6b35e5007964b538423b0a570eed26fc10Jordan Rose} 286a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath 296a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath// These crashed the analyzer at some point. 306a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labathint between(char *x) { 316a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath extern char start[]; 326a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath extern char end[]; 336a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath return x >= start && x < end; 346a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath} 356a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath 366a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labathint undef(void) {} // expected-warning{{control reaches end of non-void function}} 376a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labathvoid useUndef(void) { 0 || undef(); } 386a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labath 396a556a42d48cc098fb8dcb5d4ecdd0e03e32c0ecPavel Labathvoid testPointer(void) { (void) (1 && testPointer && 0); } 40