1 // RUN: %clang_analyze_cc1 -analyzer-checker=webkit.RefCntblBaseVirtualDtor -verify %s
2 
3 struct RefCountedBase {
refRefCountedBase4   void ref() {}
5 };
6 
7 template<typename T> struct RefCounted : RefCountedBase {
8 public:
derefRefCounted9   void deref() const { }
10 };
11 
12 struct Base : RefCounted<Base> {
13 // expected-warning@-1{{Struct 'RefCounted<Base>' is used as a base of struct 'Base' but doesn't have virtual destructor}}
fooBase14   virtual void foo() { }
15 };
16 
17 struct Derived : Base { };
18 // expected-warning@-1{{Struct 'Base' is used as a base of struct 'Derived' but doesn't have virtual destructor}}
19 
foo()20 void foo () {
21   Derived d;
22   d.deref();
23 }
24