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