1de5277fc555551857602bd7a7e5e616274e2d4a6Jordan Rose// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=inlining -analyzer-config c++-inlining=constructors -verify %s 27ce351db56fbce162a3b650518ce05b5c61ebf36Zhongxing Xu 343d9f0d4e9b88dcab473a359a7b5579c2a619b22Jordy Rosevoid clang_analyzer_eval(bool); 443d9f0d4e9b88dcab473a359a7b5579c2a619b22Jordy Rose 57f660857309a14c036a80ef90b40bf8f68fda9daJordan Rose 640ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xustruct A { 740ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xu int x; 840ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xu A(int a) { x = a; } 932303020d0f1a21cbcab65ae0c69a4218dc8f0fbZhongxing Xu int getx() const { return x; } 1040ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xu}; 1140ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xu 127f660857309a14c036a80ef90b40bf8f68fda9daJordan Rosevoid testNullObject(A *a) { 137f660857309a14c036a80ef90b40bf8f68fda9daJordan Rose clang_analyzer_eval(a); // expected-warning{{UNKNOWN}} 147f660857309a14c036a80ef90b40bf8f68fda9daJordan Rose (void)a->getx(); // assume we know what we're doing 157f660857309a14c036a80ef90b40bf8f68fda9daJordan Rose clang_analyzer_eval(a); // expected-warning{{TRUE}} 167f660857309a14c036a80ef90b40bf8f68fda9daJordan Rose} 177f660857309a14c036a80ef90b40bf8f68fda9daJordan Rose 1840ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xuvoid f1() { 1940ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xu A x(3); 20c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 2140ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xu} 2240ab43b29bff9a240e5281e5952f59ddee623fcaZhongxing Xu 230e38d5d6775a26f8f39df353e34b0dc14c2d6cfcZhongxing Xuvoid f2() { 240e38d5d6775a26f8f39df353e34b0dc14c2d6cfcZhongxing Xu const A &x = A(3); 25c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 260e38d5d6775a26f8f39df353e34b0dc14c2d6cfcZhongxing Xu} 270e38d5d6775a26f8f39df353e34b0dc14c2d6cfcZhongxing Xu 28b76fdf69df5f35c3af9ebe3afc72b0d3c9bf76e7Argyrios Kyrtzidisvoid f3() { 29b76fdf69df5f35c3af9ebe3afc72b0d3c9bf76e7Argyrios Kyrtzidis const A &x = (A)3; 30c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 31c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rose} 32c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rose 33c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rosevoid f4() { 34c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rose A x = 3; 35c210cb7a358d14cdd93b58562f33ff5ed2d895c1Jordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 36b76fdf69df5f35c3af9ebe3afc72b0d3c9bf76e7Argyrios Kyrtzidis} 37