brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · fd4144d Raw
81 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=webkit.RefCntblBaseVirtualDtor -verify %s2 3namespace WTF {4 5class NoVirtualDestructorBase { };6 7};8 9using WTF::NoVirtualDestructorBase;10 11struct RefCntblBase {12  void ref() {}13  void deref() {}14};15 16struct Derived : RefCntblBase { };17// expected-warning@-1{{Struct 'RefCntblBase' is used as a base of struct 'Derived' but doesn't have virtual destructor}}18 19struct DerivedWithVirtualDtor : RefCntblBase {20// expected-warning@-1{{Struct 'RefCntblBase' is used as a base of struct 'DerivedWithVirtualDtor' but doesn't have virtual destructor}}21  virtual ~DerivedWithVirtualDtor() {}22};23 24// Confirm that the checker respects [[clang::suppress]]25struct [[clang::suppress]] SuppressedDerived : RefCntblBase { };26struct [[clang::suppress]] SuppressedDerivedWithVirtualDtor : RefCntblBase {27  virtual ~SuppressedDerivedWithVirtualDtor() {}28};29 30class ClassWithoutVirtualDestructor : public NoVirtualDestructorBase {31public:32  void ref() const;33  void deref() const;34};35 36class DerivedClassWithoutVirtualDestructor : public ClassWithoutVirtualDestructor {37};38 39// FIXME: Support attributes on base specifiers? Currently clang40// doesn't support such attributes at all, even though it knows41// how to parse them.42//43// struct SuppressedBaseSpecDerived : [[clang::suppress]] RefCntblBase { };44 45template<class T>46struct DerivedClassTmpl : T { };47typedef DerivedClassTmpl<RefCntblBase> Foo;48 49 50 51struct RandomBase {};52struct RandomDerivedClass : RandomBase { };53 54 55 56struct FakeRefCntblBase1 {57  private:58  void ref() {}59  void deref() {}60};61struct Quiet1 : FakeRefCntblBase1 {};62 63struct FakeRefCntblBase2 {64  protected:65  void ref() {}66  void deref() {}67};68struct Quiet2 : FakeRefCntblBase2 {};69 70class FakeRefCntblBase3 {71  void ref() {}72  void deref() {}73};74struct Quiet3 : FakeRefCntblBase3 {};75struct Quiet4 : private RefCntblBase {};76class Quiet5 : RefCntblBase {};77 78void foo () {79  Derived d;80}81