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