1 // RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.NoUncheckedPtrMemberChecker -verify %s 2 3 #include "mock-types.h" 4 5 namespace 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 members 36 37 namespace ignore_unions { 38 39 union Foo { 40 CheckedObj* a; 41 CheckedPtr<CheckedObj> c; 42 CheckedRef<CheckedObj> d; 43 }; 44 45 template<class T> 46 union FooTmpl { 47 T* a; 48 }; 49 50 void forceTmplToInstantiate(FooTmpl<CheckedObj>) { } 51 52 } // namespace ignore_unions 53