diff options
author | Alexander Kornienko <alexfh@google.com> | 2015-02-27 16:50:32 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2015-02-27 16:50:32 +0000 |
commit | dd836f238d05aaebdefc108bce41616f336ba3fd (patch) | |
tree | 9899ff6238e18ed085277a2a4bee79b33457585a /clang-tools-extra/test | |
parent | 6bdd9b060801f1aa46cddfc307e52ae5ff104fb1 (diff) | |
download | bcm5719-llvm-dd836f238d05aaebdefc108bce41616f336ba3fd.tar.gz bcm5719-llvm-dd836f238d05aaebdefc108bce41616f336ba3fd.zip |
[clang-tidy] Various improvements in misc-use-override
* Better error message when more than one of 'virtual', 'override' and 'final'
is present ("X is/are redundant since the function is already declared Y").
* Convert the messages to the style used in Clang diagnostics: lower case
initial letter, no trailing period.
* Don't run the check for files compiled in pre-C++11 mode
(http://llvm.org/PR22638).
llvm-svn: 230765
Diffstat (limited to 'clang-tools-extra/test')
3 files changed, 66 insertions, 36 deletions
diff --git a/clang-tools-extra/test/clang-tidy/clang-tidy-diff.cpp b/clang-tools-extra/test/clang-tidy/clang-tidy-diff.cpp index 4b328521efc..b6006b3c143 100644 --- a/clang-tools-extra/test/clang-tidy/clang-tidy-diff.cpp +++ b/clang-tools-extra/test/clang-tidy/clang-tidy-diff.cpp @@ -9,10 +9,10 @@ struct A { // CHECK-NOT: warning: struct B : public A { void placeholder_for_f() {} -// CHECK-SANITY: [[@LINE-1]]:8: warning: Annotate this -// CHECK: [[@LINE-2]]:8: warning: Annotate this +// CHECK-SANITY: [[@LINE-1]]:8: warning: annotate this +// CHECK: [[@LINE-2]]:8: warning: annotate this void g() {} -// CHECK-SANITY: [[@LINE-1]]:8: warning: Annotate this +// CHECK-SANITY: [[@LINE-1]]:8: warning: annotate this // CHECK-NOT: warning: }; // CHECK-SANITY-NOT: Suppressed diff --git a/clang-tools-extra/test/clang-tidy/misc-use-override-cxx98.cpp b/clang-tools-extra/test/clang-tidy/misc-use-override-cxx98.cpp new file mode 100644 index 00000000000..429d402eb26 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/misc-use-override-cxx98.cpp @@ -0,0 +1,20 @@ +// RUN: $(dirname %s)/check_clang_tidy.sh %s misc-use-override %t -- -std=c++98 +// REQUIRES: shell + +struct Base { + virtual ~Base() {} + virtual void a(); + virtual void b(); +}; + +struct SimpleCases : public Base { +public: + virtual ~SimpleCases(); + // CHECK-FIXES: {{^}} virtual ~SimpleCases(); + + void a(); + // CHECK-FIXES: {{^}} void a(); + + virtual void b(); + // CHECK-FIXES: {{^}} virtual void b(); +}; diff --git a/clang-tools-extra/test/clang-tidy/misc-use-override.cpp b/clang-tools-extra/test/clang-tidy/misc-use-override.cpp index 6b9faa43a5d..973ba2732ae 100644 --- a/clang-tools-extra/test/clang-tidy/misc-use-override.cpp +++ b/clang-tools-extra/test/clang-tidy/misc-use-override.cpp @@ -19,6 +19,7 @@ struct Base { virtual void b(); virtual void c(); virtual void d(); + virtual void d2(); virtual void e() = 0; virtual void f() = 0; virtual void g() = 0; @@ -29,17 +30,18 @@ struct Base { virtual bool n() MUST_USE_RESULT UNUSED; virtual void m(); + virtual void m2(); virtual void o() __attribute__((unused)); }; struct SimpleCases : public Base { public: virtual ~SimpleCases(); - // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: Prefer using 'override' or (rarely) 'final' instead of 'virtual' + // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: prefer using 'override' or (rarely) 'final' instead of 'virtual' // CHECK-FIXES: {{^}} ~SimpleCases() override; void a(); - // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: annotate this // CHECK-FIXES: {{^}} void a() override; void b() override; @@ -47,47 +49,55 @@ public: // CHECK-FIXES: {{^}} void b() override; virtual void c(); - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void c() override; virtual void d() override; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant since the function is already declared 'override' // CHECK-FIXES: {{^}} void d() override; + virtual void d2() final; + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant since the function is already declared 'final' + // CHECK-FIXES: {{^}} void d2() final; + virtual void e() = 0; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void e() override = 0; virtual void f()=0; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void f()override =0; virtual void g() ABSTRACT; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void g() override ABSTRACT; virtual void j() const; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void j() const override; virtual MustUseResultObject k(); // Has an implicit attribute. - // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: prefer using // CHECK-FIXES: {{^}} MustUseResultObject k() override; virtual bool l() MUST_USE_RESULT UNUSED; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} bool l() override MUST_USE_RESULT UNUSED; virtual bool n() UNUSED MUST_USE_RESULT; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} bool n() override UNUSED MUST_USE_RESULT; - virtual void m() override final; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + void m() override final; + // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: 'override' is redundant since the function is already declared 'final' // CHECK-FIXES: {{^}} void m() final; + virtual void m2() override final; + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' and 'override' are redundant since the function is already declared 'final' + // CHECK-FIXES: {{^}} void m2() final; + virtual void o() __attribute__((unused)); - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void o() override __attribute__((unused)); }; @@ -102,14 +112,14 @@ SimpleCases::~SimpleCases() {} struct DefaultedDestructor : public Base { DefaultedDestructor() {} virtual ~DefaultedDestructor() = default; - // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: prefer using // CHECK-FIXES: {{^}} ~DefaultedDestructor() override = default; }; struct FinalSpecified : public Base { public: virtual ~FinalSpecified() final; - // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: 'virtual' is redundant since the function is already declared 'final' // CHECK-FIXES: {{^}} ~FinalSpecified() final; void b() final; @@ -117,30 +127,30 @@ public: // CHECK-FIXES: {{^}} void b() final; virtual void d() final; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant // CHECK-FIXES: {{^}} void d() final; virtual void e() final = 0; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant // CHECK-FIXES: {{^}} void e() final = 0; virtual void j() const final; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant // CHECK-FIXES: {{^}} void j() const final; virtual bool l() final MUST_USE_RESULT UNUSED; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant // CHECK-FIXES: {{^}} bool l() final MUST_USE_RESULT UNUSED; }; struct InlineDefinitions : public Base { public: virtual ~InlineDefinitions() {} - // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: prefer using // CHECK-FIXES: {{^}} ~InlineDefinitions() override {} void a() {} - // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: annotate this // CHECK-FIXES: {{^}} void a() override {} void b() override {} @@ -148,23 +158,23 @@ public: // CHECK-FIXES: {{^}} void b() override {} virtual void c() {} - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void c() override {} virtual void d() override {} - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant // CHECK-FIXES: {{^}} void d() override {} virtual void j() const {} - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void j() const override {} virtual MustUseResultObject k() {} // Has an implicit attribute. - // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: prefer using // CHECK-FIXES: {{^}} MustUseResultObject k() override {} virtual bool l() MUST_USE_RESULT UNUSED {} - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} bool l() override MUST_USE_RESULT UNUSED {} }; @@ -172,11 +182,11 @@ struct Macros : public Base { // Tests for 'virtual' and 'override' being defined through macros. Basically // give up for now. NOT_VIRTUAL void a() NOT_OVERRIDE; - // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: annotate this // CHECK-FIXES: {{^}} NOT_VIRTUAL void a() override NOT_OVERRIDE; VIRTUAL void b() NOT_OVERRIDE; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} VIRTUAL void b() override NOT_OVERRIDE; NOT_VIRTUAL void c() OVERRIDE; @@ -184,7 +194,7 @@ struct Macros : public Base { // CHECK-FIXES: {{^}} NOT_VIRTUAL void c() OVERRIDE; VIRTUAL void d() OVERRIDE; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant // CHECK-FIXES: {{^}} VIRTUAL void d() OVERRIDE; #define FUNC(return_type, name) return_type name() @@ -196,7 +206,7 @@ struct Macros : public Base { // CHECK-FIXES: {{^}} F VIRTUAL void g() OVERRIDE final; - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Annotate this + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' and 'override' are redundant // CHECK-FIXES: {{^}} VIRTUAL void g() final; }; @@ -207,7 +217,7 @@ template <typename T> struct TemplateBase { template <typename T> struct DerivedFromTemplate : public TemplateBase<T> { virtual void f(T t); - // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using // CHECK-FIXES: {{^}} void f(T t) override; }; void f() { DerivedFromTemplate<int>().f(2); } @@ -215,7 +225,7 @@ void f() { DerivedFromTemplate<int>().f(2); } template <class C> struct UnusedMemberInstantiation : public C { virtual ~UnusedMemberInstantiation() {} - // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: Prefer using + // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: prefer using // CHECK-FIXES: {{^}} ~UnusedMemberInstantiation() override {} }; struct IntantiateWithoutUse : public UnusedMemberInstantiation<Base> {}; |