brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 3fe15d8 Raw
84 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.NoUncheckedPtrMemberChecker -verify %s2 3#include "mock-types.h"4 5namespace members {6 7  struct Foo {8  private:9    CheckedObj* a = nullptr;10// expected-warning@-1{{Member variable 'a' in 'members::Foo' is a raw pointer to CheckedPtr capable type 'CheckedObj'}}11    CheckedObj& b;12// expected-warning@-1{{Member variable 'b' in 'members::Foo' is a reference to CheckedPtr capable type 'CheckedObj'}}13 14    [[clang::suppress]]15    CheckedObj* a_suppressed = nullptr;16 17    [[clang::suppress]]18    CheckedObj& b_suppressed;19 20    CheckedPtr<CheckedObj> c;21    CheckedRef<CheckedObj> d;22 23  public:24    Foo();25  };26 27  template <typename S>28  struct FooTmpl {29    S* e;30// expected-warning@-1{{Member variable 'e' in 'members::FooTmpl<CheckedObj>' is a raw pointer to CheckedPtr capable type 'CheckedObj'}}31  };32 33  void forceTmplToInstantiate(FooTmpl<CheckedObj>) { }34 35} // namespace members36 37namespace unions {38 39  union Foo {40    CheckedObj* a;41    // expected-warning@-1{{Member variable 'a' in 'unions::Foo' is a raw pointer to CheckedPtr capable type 'CheckedObj'}}42    CheckedPtr<CheckedObj> c;43    CheckedRef<CheckedObj> d;44  };45 46  template<class T>47  union FooTmpl {48    T* a;49    // expected-warning@-1{{Member variable 'a' in 'unions::FooTmpl<CheckedObj>' is a raw pointer to CheckedPtr capable type 'CheckedObj'}}50  };51 52  void forceTmplToInstantiate(FooTmpl<CheckedObj>) { }53 54} // namespace unions55 56namespace checked_ptr_ref_ptr_capable {57 58  RefCountableAndCheckable* provide();59  void foo() {60    RefPtr<RefCountableAndCheckable> foo = provide();61  }62 63} // checked_ptr_ref_ptr_capable64 65namespace ptr_to_ptr_to_checked_ptr_capable {66 67  struct List {68    CheckedObj** elements;69    // expected-warning@-1{{Member variable 'elements' in 'ptr_to_ptr_to_checked_ptr_capable::List' contains a raw pointer to CheckedPtr capable type 'CheckedObj'}}70  };71 72  template <typename T>73  struct TemplateList {74    T** elements;75    // expected-warning@-1{{Member variable 'elements' in 'ptr_to_ptr_to_checked_ptr_capable::TemplateList<CheckedObj>' contains a raw pointer to CheckedPtr capable type 'CheckedObj'}}76  };77  TemplateList<CheckedObj> list;78 79  struct SafeList {80    CheckedPtr<CheckedObj>* elements;81  };82 83} // namespace ptr_to_ptr_to_checked_ptr_capable84