// RUN: %clang_analyze_cc1 -Wno-unused -std=c++11 -analyzer-checker=debug.ExprInspection -verify %s void clang_analyzer_eval(bool); namespace pr17001_call_wrong_destructor { bool x; struct A { int *a; A() {} ~A() {} }; struct B : public A { B() {} ~B() { x = true; } }; void f() { { const A &a = B(); } clang_analyzer_eval(x); // expected-warning{{TRUE}} } } // end namespace pr17001_call_wrong_destructor namespace pr19539_crash_on_destroying_an_integer { struct A { int i; int j[2]; A() : i(1) { j[0] = 2; j[1] = 3; } ~A() {} }; void f() { const int &x = A().i; // no-crash const int &y = A().j[1]; // no-crash const int &z = (A().j[1], A().j[0]); // no-crash // FIXME: All of these should be TRUE, but constructors aren't inlined. clang_analyzer_eval(x == 1); // expected-warning{{UNKNOWN}} clang_analyzer_eval(y == 3); // expected-warning{{UNKNOWN}} clang_analyzer_eval(z == 2); // expected-warning{{UNKNOWN}} } } // end namespace pr19539_crash_on_destroying_an_integer