From c282fd8e3026070fd33e80eb6644a6d1534c31f3 Mon Sep 17 00:00:00 2001 From: dcheng Date: Tue, 28 Oct 2014 22:02:41 -0700 Subject: [PATCH] Check {virtual,override,final} specifiers on pure functions as well. BUG=417463,428099 Review URL: https://codereview.chromium.org/684993003 Cr-Commit-Position: refs/heads/master@{#301789} --- tools/clang/plugins/FindBadConstructsConsumer.cpp | 2 +- tools/clang/plugins/tests/virtual_specifiers.cpp | 17 +++++++++++++++++ tools/clang/plugins/tests/virtual_specifiers.txt | 17 ++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/tools/clang/plugins/FindBadConstructsConsumer.cpp b/tools/clang/plugins/FindBadConstructsConsumer.cpp index a608cd29d172..0a230e0fcdb1 100644 --- a/tools/clang/plugins/FindBadConstructsConsumer.cpp +++ b/tools/clang/plugins/FindBadConstructsConsumer.cpp @@ -364,7 +364,7 @@ void FindBadConstructsConsumer::CheckVirtualSpecifiers( OverrideAttr* override_attr = method->getAttr(); FinalAttr* final_attr = method->getAttr(); - if (method->isPure()) + if (method->isPure() && !options_.strict_virtual_specifiers) return; if (IsMethodInBannedOrTestingNamespace(method)) diff --git a/tools/clang/plugins/tests/virtual_specifiers.cpp b/tools/clang/plugins/tests/virtual_specifiers.cpp index 4d9acd38ac03..28321e8bdf5c 100644 --- a/tools/clang/plugins/tests/virtual_specifiers.cpp +++ b/tools/clang/plugins/tests/virtual_specifiers.cpp @@ -62,6 +62,23 @@ class OverrideAndFinal : public Base { void F() OVERRIDE FINAL {} }; +// Also warn on pure functions. +class CorrectPureVirtual : public Base { + virtual void F() = 0; +}; + +class Pure : public Base { + void F() = 0; +}; + +class PureOverride : public Base { + void F() override = 0; +}; + +class PureVirtualOverride : public Base { + virtual void F() override = 0; +}; + // Finally, some simple sanity tests that overrides in the testing namespace // don't trigger warnings, except for testing::Test. namespace testing { diff --git a/tools/clang/plugins/tests/virtual_specifiers.txt b/tools/clang/plugins/tests/virtual_specifiers.txt index 1f2e4755a09d..a51236c674e1 100644 --- a/tools/clang/plugins/tests/virtual_specifiers.txt +++ b/tools/clang/plugins/tests/virtual_specifiers.txt @@ -48,11 +48,22 @@ virtual_specifiers.cpp:62:12: warning: [chromium-style] 'override' is redundant; virtual_specifiers.cpp:10:18: note: expanded from macro 'OVERRIDE' #define OVERRIDE override ^ -virtual_specifiers.cpp:85:20: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. +virtual_specifiers.cpp:67:19: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. + virtual void F() = 0; + ^ + override +virtual_specifiers.cpp:71:11: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. + void F() = 0; + ^ + override +virtual_specifiers.cpp:79:3: warning: [chromium-style] 'virtual' is redundant; 'override' implies 'virtual'. + virtual void F() override = 0; + ^~~~~~~~ +virtual_specifiers.cpp:102:20: warning: [chromium-style] Overriding method must be marked with 'override' or 'final'. virtual ~MyTest(); ^ override -virtual_specifiers.cpp:86:3: warning: [chromium-style] 'virtual' is redundant; 'override' implies 'virtual'. +virtual_specifiers.cpp:103:3: warning: [chromium-style] 'virtual' is redundant; 'override' implies 'virtual'. virtual void SetUp() override; ^~~~~~~~ -14 warnings generated. +17 warnings generated. -- 2.11.4.GIT