xref: /llvm-project/clang/test/Analysis/Checkers/WebKit/uncounted-members-ref-deref-on-diff-classes.cpp (revision 09273d408da97022f3146cfd11328c1a8ce50d10)
1*09273d40SRyosuke Niwa // RUN: %clang_analyze_cc1 -analyzer-checker=webkit.NoUncountedMemberChecker -verify %s
2*09273d40SRyosuke Niwa 
3*09273d40SRyosuke Niwa #include "mock-types.h"
4*09273d40SRyosuke Niwa 
5*09273d40SRyosuke Niwa class RefCountedBase {
6*09273d40SRyosuke Niwa public:
ref() const7*09273d40SRyosuke Niwa   void ref() const { }
8*09273d40SRyosuke Niwa };
9*09273d40SRyosuke Niwa 
10*09273d40SRyosuke Niwa template<typename T> class RefCounted : public RefCountedBase {
11*09273d40SRyosuke Niwa public:
~RefCounted()12*09273d40SRyosuke Niwa   virtual ~RefCounted() { }
deref() const13*09273d40SRyosuke Niwa   void deref() const { }
14*09273d40SRyosuke Niwa };
15*09273d40SRyosuke Niwa 
16*09273d40SRyosuke Niwa class TreeNode : public RefCounted<TreeNode> {
17*09273d40SRyosuke Niwa public:
setParent(TreeNode & parent)18*09273d40SRyosuke Niwa   void setParent(TreeNode& parent) { m_parent = &parent; }
19*09273d40SRyosuke Niwa 
20*09273d40SRyosuke Niwa private:
21*09273d40SRyosuke Niwa   TreeNode* m_parent;
22*09273d40SRyosuke Niwa // expected-warning@-1{{Member variable 'm_parent' in 'TreeNode' is a raw pointer to ref-countable type 'TreeNode'}}
23*09273d40SRyosuke Niwa };
24