32 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -Wunnecessary-virtual-specifier -Wno-inconsistent-missing-override %s2 3struct Foo final {4 Foo() = default;5 virtual ~Foo() = default; // expected-warning {{virtual method}}6 virtual Foo& operator=(Foo& other) = default; // expected-warning {{virtual method}}7 virtual Foo& operator=(Foo&& other) = default; // expected-warning {{virtual method}}8 void f();9 virtual void f(int); // expected-warning {{virtual method}}10 int g(int x) { return x; };11 virtual int g(bool); // expected-warning {{virtual method}}12 static int s();13};14 15struct BarBase {16 virtual ~BarBase() = delete;17 virtual void virt() {}18 virtual int virt2(int);19 virtual bool virt3(bool);20 int nonvirt();21};22 23struct Bar final : BarBase {24 ~Bar() override = delete;25 void virt() override {};26 virtual int virt2(int) override; // `virtual ... override;` is a common pattern, so don't warn27 virtual bool virt3(bool); // Already virtual in the base class; triggers28 // -Winconsistent-missing-override or -Wsuggest-override instead29 virtual int new_virt(bool); // expected-warning {{virtual method}}30 int nonvirt();31};32