1*184c6242SDominic Chen // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -analyzer-config c++-inlining=constructors -verify %s 2627a1868SZhongxing Xu 36d5a8caaSJordy Rose void clang_analyzer_eval(bool); 46d5a8caaSJordy Rose 583e4049dSJordan Rose 652c28fe6SZhongxing Xu struct A { 752c28fe6SZhongxing Xu int x; AA852c28fe6SZhongxing Xu A(int a) { x = a; } getxA98be65a79SZhongxing Xu int getx() const { return x; } 1052c28fe6SZhongxing Xu }; 1152c28fe6SZhongxing Xu 127bd0674dSAnna Zaks struct B{ 137bd0674dSAnna Zaks int x; 147bd0674dSAnna Zaks }; 157bd0674dSAnna Zaks testNullObject(A * a)1683e4049dSJordan Rosevoid testNullObject(A *a) { 1783e4049dSJordan Rose clang_analyzer_eval(a); // expected-warning{{UNKNOWN}} 1883e4049dSJordan Rose (void)a->getx(); // assume we know what we're doing 1983e4049dSJordan Rose clang_analyzer_eval(a); // expected-warning{{TRUE}} 2083e4049dSJordan Rose } 2183e4049dSJordan Rose f1()2252c28fe6SZhongxing Xuvoid f1() { 2352c28fe6SZhongxing Xu A x(3); 24c9318304SJordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 2552c28fe6SZhongxing Xu } 2652c28fe6SZhongxing Xu f2()2733f13595SZhongxing Xuvoid f2() { 2833f13595SZhongxing Xu const A &x = A(3); 29c9318304SJordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 3033f13595SZhongxing Xu } 3133f13595SZhongxing Xu f3()321227f3afSArgyrios Kyrtzidisvoid f3() { 331227f3afSArgyrios Kyrtzidis const A &x = (A)3; 34c9318304SJordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 35c9318304SJordan Rose } 36c9318304SJordan Rose f4()37c9318304SJordan Rosevoid f4() { 38c9318304SJordan Rose A x = 3; 39c9318304SJordan Rose clang_analyzer_eval(x.getx() == 3); // expected-warning{{TRUE}} 401227f3afSArgyrios Kyrtzidis } 417bd0674dSAnna Zaks checkThatCopyConstructorDoesNotInvalidateObjectBeingCopied()427bd0674dSAnna Zaksvoid checkThatCopyConstructorDoesNotInvalidateObjectBeingCopied() { 437bd0674dSAnna Zaks B t; 447bd0674dSAnna Zaks t.x = 0; 457bd0674dSAnna Zaks B t2(t); 467bd0674dSAnna Zaks clang_analyzer_eval(t.x == 0); // expected-warning{{TRUE}} 477bd0674dSAnna Zaks } 48