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