brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 7959daf Raw
103 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UncheckedCallArgsChecker -verify %s2 3#include "mock-types.h"4 5namespace call_args_const_checkedptr_member {6 7class Foo {8public:9  Foo();10  void bar();11 12private:13  const CheckedPtr<CheckedObj> m_obj1;14  CheckedPtr<CheckedObj> m_obj2;15};16 17void Foo::bar() {18  m_obj1->method();19  m_obj2->method();20  // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}}21}22 23} // namespace call_args_const_checkedptr_member24 25namespace call_args_const_checkedref_member {26 27class Foo {28public:29  Foo();30  void bar();31 32private:33  const CheckedRef<CheckedObj> m_obj1;34  CheckedRef<CheckedObj> m_obj2;35};36 37void Foo::bar() {38  m_obj1->method();39  m_obj2->method();40  // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}}41}42 43} // namespace call_args_const_checkedref_member44 45namespace call_args_const_unique_ptr {46 47class Foo {48public:49  Foo();50  void bar();51 52  CheckedObj& ensureObj3() {53    if (!m_obj3)54      const_cast<std::unique_ptr<CheckedObj>&>(m_obj3) = new CheckedObj;55    return *m_obj3;56  }57 58  CheckedObj& badEnsureObj4() {59    if (!m_obj4)60      const_cast<std::unique_ptr<CheckedObj>&>(m_obj4) = new CheckedObj;61    if (auto* next = m_obj4->next())62      return *next;63    return *m_obj4;64  }65 66  CheckedObj* ensureObj5() {67    if (!m_obj5)68      const_cast<std::unique_ptr<CheckedObj>&>(m_obj5) = new CheckedObj;69    if (m_obj5->next())70      return nullptr;71    return m_obj5.get();72  }73 74  CheckedObj* ensureObj6() {75    if (!m_obj6)76      const_cast<std::unique_ptr<CheckedObj>&>(m_obj6) = new CheckedObj;77    if (m_obj6->next())78      return (CheckedObj *)0;79    return m_obj6.get();80  }81 82private:83  const std::unique_ptr<CheckedObj> m_obj1;84  std::unique_ptr<CheckedObj> m_obj2;85  const std::unique_ptr<CheckedObj> m_obj3;86  const std::unique_ptr<CheckedObj> m_obj4;87  const std::unique_ptr<CheckedObj> m_obj5;88  const std::unique_ptr<CheckedObj> m_obj6;89};90 91void Foo::bar() {92  m_obj1->method();93  m_obj2->method();94  // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}}95  ensureObj3().method();96  badEnsureObj4().method();97  // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}}98  ensureObj5()->method();99  ensureObj6()->method();100}101 102} // namespace call_args_const_unique_ptr103