xref: /llvm-project/clang/test/Analysis/Checkers/WebKit/unchecked-members.cpp (revision 3c0984309ed338560f902a918d6f99959b4c7c33)
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