// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UncheckedCallArgsChecker -verify %s void WTFCrash(void); enum class Tag : bool { Value }; template class CanMakeCheckedPtrBase { public: void incrementCheckedPtrCount() const { ++m_checkedPtrCount; } inline void decrementCheckedPtrCount() const { if (!m_checkedPtrCount) WTFCrash(); --m_checkedPtrCount; } private: mutable StorageType m_checkedPtrCount { 0 }; }; template class CanMakeCheckedPtr : public CanMakeCheckedPtrBase { }; class CheckedObject : public CanMakeCheckedPtr { public: void doWork(); }; CheckedObject* provide(); void foo() { provide()->doWork(); // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}} } void doWorkWithObject(const CheckedObject&); void bar() { doWorkWithObject(CheckedObject()); }