brintos

brintos / llvm-project-archived public Read only

0
0
Text · 948 B · b89a324 Raw
40 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UncheckedCallArgsChecker -verify %s2 3void WTFCrash(void);4 5enum class Tag : bool { Value };6 7template <typename StorageType, Tag> class CanMakeCheckedPtrBase {8public:9  void incrementCheckedPtrCount() const { ++m_checkedPtrCount; }10  inline void decrementCheckedPtrCount() const11  {12      if (!m_checkedPtrCount)13        WTFCrash();14      --m_checkedPtrCount;15  }16 17private:18  mutable StorageType m_checkedPtrCount { 0 };19};20 21template<typename T, Tag tag>22class CanMakeCheckedPtr : public CanMakeCheckedPtrBase<unsigned int, tag> {23};24 25class CheckedObject : public CanMakeCheckedPtr<CheckedObject, Tag::Value> {26public:27  void doWork();28};29 30CheckedObject* provide();31void foo() {32  provide()->doWork();33  // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}}34}35 36void doWorkWithObject(const CheckedObject&);37void bar() {38  doWorkWithObject(CheckedObject());39}40