// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection\ // RUN: -analyzer-checker cplusplus.Move,cplusplus.SmartPtr\ // RUN: -std=c++11 -verify %s #include "Inputs/system-header-simulator-cxx.h" void clang_analyzer_warnIfReached(); void derefAfterMove(std::unique_ptr P) { std::unique_ptr Q = std::move(P); if (Q) clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}} *Q.get() = 1; // no-warning if (P) clang_analyzer_warnIfReached(); // no-warning // TODO: Report a null dereference (instead). *P.get() = 1; // expected-warning {{Method called on moved-from object 'P'}} } // Don't crash when attempting to model a call with unknown callee. namespace testUnknownCallee { struct S { void foo(); }; void bar(S *s, void (S::*func)(void)) { (s->*func)(); // no-crash } } // namespace testUnknownCallee