// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s void clang_analyzer_eval(bool); namespace basic_tests { struct A { int x; A(int x): x(x) {} }; struct B : A { using A::A; }; struct C : B { using B::B; }; void test_B() { B b(1); clang_analyzer_eval(b.x == 1); // expected-warning{{TRUE}} } void test_C() { C c(2); clang_analyzer_eval(c.x == 2); // expected-warning{{TRUE}} } } // namespace basic_tests namespace arguments_with_constructors { struct S { int x, y; S(int x, int y): x(x), y(y) {} ~S() {} }; struct A { S s; int z; A(S s, int z) : s(s), z(z) {} }; struct B : A { using A::A; }; void test_B() { B b(S(1, 2), 3); // FIXME: There should be no execution path on which this is false. clang_analyzer_eval(b.s.x == 1); // expected-warning{{TRUE}} // expected-warning@-1{{FALSE}} // FIXME: There should be no execution path on which this is false. clang_analyzer_eval(b.s.y == 2); // expected-warning{{TRUE}} // expected-warning@-1{{FALSE}} clang_analyzer_eval(b.z == 3); // expected-warning{{TRUE}} } } // namespace arguments_with_constructors namespace inherited_constructor_crash { class a { public: a(int); }; struct b : a { using a::a; // Ihnerited ctor. }; void c() { int d; // This construct expr utilizes the inherited ctor. // Note that d must be uninitialized to cause the crash. (b(d)); // expected-warning{{1st function call argument is an uninitialized value}} } } // namespace inherited_constructor_crash