// RUN: %clang_analyze_cc1 -analyzer-checker=webkit.RefCntblBaseVirtualDtor -verify %s

struct RefCntblBase {
  void ref() {}
  void deref() {}
};

struct Derived : RefCntblBase { };
// expected-warning@-1{{Struct 'RefCntblBase' is used as a base of struct 'Derived' but doesn't have virtual destructor}}

struct DerivedWithVirtualDtor : RefCntblBase {
// expected-warning@-1{{Struct 'RefCntblBase' is used as a base of struct 'DerivedWithVirtualDtor' but doesn't have virtual destructor}}
  virtual ~DerivedWithVirtualDtor() {}
};

// Confirm that the checker respects [[clang::suppress]]
struct [[clang::suppress]] SuppressedDerived : RefCntblBase { };
struct [[clang::suppress]] SuppressedDerivedWithVirtualDtor : RefCntblBase {
  virtual ~SuppressedDerivedWithVirtualDtor() {}
};

// FIXME: Support attributes on base specifiers? Currently clang
// doesn't support such attributes at all, even though it knows
// how to parse them.
//
// struct SuppressedBaseSpecDerived : [[clang::suppress]] RefCntblBase { };

template<class T>
struct DerivedClassTmpl : T { };
typedef DerivedClassTmpl<RefCntblBase> Foo;



struct RandomBase {};
struct RandomDerivedClass : RandomBase { };



struct FakeRefCntblBase1 {
  private:
  void ref() {}
  void deref() {}
};
struct Quiet1 : FakeRefCntblBase1 {};

struct FakeRefCntblBase2 {
  protected:
  void ref() {}
  void deref() {}
};
struct Quiet2 : FakeRefCntblBase2 {};

class FakeRefCntblBase3 {
  void ref() {}
  void deref() {}
};
struct Quiet3 : FakeRefCntblBase3 {};
struct Quiet4 : private RefCntblBase {};
class Quiet5 : RefCntblBase {};

void foo () {
  Derived d;
}
