// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s
// XFAIL: asserts
void clang_analyzer_eval(bool);
// TODO: The following test will work properly once reinterpret_cast on pointer-to-member is handled properly
namespace testReinterpretCasting {
struct Base {
int field;
};
struct Derived : public Base {};
struct DoubleDerived : public Derived {};
struct Some {};
void f() {
int DoubleDerived::*ddf = &Base::field;
int Base::*bf = reinterpret_cast<int Base::*>(reinterpret_cast<int Derived::*>(reinterpret_cast<int Base::*>(ddf)));
int Some::*sf = reinterpret_cast<int Some::*>(ddf);
Base base;
base.field = 13;
clang_analyzer_eval(base.*bf == 13); // expected-warning{{TRUE}}
}
} // namespace testReinterpretCasting