blob: 789710eccf729fbbad43d591fb07507d9840ba93 [file] [log] [blame] [edit]
// RUN: %clang_cc1 -fsyntax-only -verify -Wunnecessary-virtual-specifier -Wno-inconsistent-missing-override %s
struct Foo final {
Foo() = default;
virtual ~Foo() = default; // expected-warning {{virtual method}}
virtual Foo& operator=(Foo& other) = default; // expected-warning {{virtual method}}
virtual Foo& operator=(Foo&& other) = default; // expected-warning {{virtual method}}
void f();
virtual void f(int); // expected-warning {{virtual method}}
int g(int x) { return x; };
virtual int g(bool); // expected-warning {{virtual method}}
static int s();
};
struct BarBase {
virtual ~BarBase() = delete;
virtual void virt() {}
virtual int virt2(int);
virtual bool virt3(bool);
int nonvirt();
};
struct Bar final : BarBase {
~Bar() override = delete;
void virt() override {};
virtual int virt2(int) override; // `virtual ... override;` is a common pattern, so don't warn
virtual bool virt3(bool); // Already virtual in the base class; triggers
// -Winconsistent-missing-override or -Wsuggest-override instead
virtual int new_virt(bool); // expected-warning {{virtual method}}
int nonvirt();
};