31 lines
935 B
C++
31 lines
935 B
C++
|
// RUN: %clang_analyze_cc1 -analyzer-checker=webkit.RefCntblBaseVirtualDtor -verify %s
|
||
|
|
||
|
struct RefCntblBase {
|
||
|
void ref() {}
|
||
|
void deref() {}
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct DerivedClassTmpl1 : T { };
|
||
|
// expected-warning@-1{{Struct 'RefCntblBase' is used as a base of struct 'DerivedClassTmpl1<RefCntblBase>' but doesn't have virtual destructor}}
|
||
|
|
||
|
DerivedClassTmpl1<RefCntblBase> a;
|
||
|
|
||
|
|
||
|
|
||
|
template<class T>
|
||
|
struct DerivedClassTmpl2 : T { };
|
||
|
// expected-warning@-1{{Struct 'RefCntblBase' is used as a base of struct 'DerivedClassTmpl2<RefCntblBase>' but doesn't have virtual destructor}}
|
||
|
|
||
|
template<class T> int foo(T) { DerivedClassTmpl2<T> f; return 42; }
|
||
|
int b = foo(RefCntblBase{});
|
||
|
|
||
|
|
||
|
|
||
|
template<class T>
|
||
|
struct DerivedClassTmpl3 : T { };
|
||
|
// expected-warning@-1{{Struct 'RefCntblBase' is used as a base of struct 'DerivedClassTmpl3<RefCntblBase>' but doesn't have virtual destructor}}
|
||
|
|
||
|
typedef DerivedClassTmpl3<RefCntblBase> Foo;
|
||
|
Foo c;
|