1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -verify %s
24920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor
34920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregorvoid clang_analyzer_eval(int);
44920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor
54920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregorvoid testAnd(int i, int *p) {
64920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  int *nullP = 0;
74920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  int *knownP = &i;
84920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  clang_analyzer_eval((knownP && knownP) == 1); // expected-warning{{TRUE}}
94920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  clang_analyzer_eval((knownP && nullP) == 0); // expected-warning{{TRUE}}
104920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  clang_analyzer_eval((knownP && p) == 1); // expected-warning{{UNKNOWN}}
114920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor}
124920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor
134920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregorvoid testOr(int i, int *p) {
144920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  int *nullP = 0;
154920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  int *knownP = &i;
164920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  clang_analyzer_eval((nullP || knownP) == 1); // expected-warning{{TRUE}}
174920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  clang_analyzer_eval((nullP || nullP) == 0); // expected-warning{{TRUE}}
184920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  clang_analyzer_eval((nullP || p) == 1); // expected-warning{{UNKNOWN}}
194920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor}
204920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor
214920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor
224920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor// PR13461
234920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregorint testTypeIsInt(int i, void *p) {
244920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  if (i | (p && p))
254920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor    return 1;
264920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor  return 0;
274920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor}
284920f1ffb62b13b88e579476803c093f97f3e17fDouglas Gregor