On Thu, Feb 11, 2016 at 8:03 AM, Cong Liu via cfe-commits < cfe-commits@lists.llvm.org> wrote:
> Author: congliu > Date: Thu Feb 11 10:03:27 2016 > New Revision: 260532 > > URL: http://llvm.org/viewvc/llvm-project?rev=260532&view=rev > Log: > Merge branch 'arcpatch-D16922' > Please be sure to check/correct your commit message(s) next time :) > > Modified: > clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.cpp > clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.h > clang-tools-extra/trunk/test/clang-tidy/misc-virtual-near-miss.cpp > > Modified: clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.cpp > URL: > http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.cpp?rev=260532&r1=260531&r2=260532&view=diff > > ============================================================================== > --- clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.cpp > (original) > +++ clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.cpp Thu > Feb 11 10:03:27 2016 > @@ -249,11 +249,19 @@ void VirtualNearMissCheck::check(const M > if (EditDistance > 0 && EditDistance <= EditDistanceThreshold) { > if (checkOverrideWithoutName(Context, BaseMD, DerivedMD)) { > // A "virtual near miss" is found. > - diag(DerivedMD->getLocStart(), > - "method '%0' has a similar name and the same signature > as " > - "virtual method '%1'; did you mean to override it?") > + auto Range = CharSourceRange::getTokenRange( > + SourceRange(DerivedMD->getLocation())); > + > + bool ApplyFix = !BaseMD->isTemplateInstantiation() && > + !DerivedMD->isTemplateInstantiation(); > + auto Diag = > + diag(DerivedMD->getLocStart(), > + "method '%0' has a similar name and the same > signature as " > + "virtual method '%1'; did you mean to override it?") > << DerivedMD->getQualifiedNameAsString() > << BaseMD->getQualifiedNameAsString(); > + if (ApplyFix) > + Diag << FixItHint::CreateReplacement(Range, > BaseMD->getName()); > } > } > } > > Modified: clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.h > URL: > http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.h?rev=260532&r1=260531&r2=260532&view=diff > > ============================================================================== > --- clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.h > (original) > +++ clang-tools-extra/trunk/clang-tidy/misc/VirtualNearMissCheck.h Thu Feb > 11 10:03:27 2016 > @@ -12,7 +12,6 @@ > > #include "../ClangTidy.h" > #include <map> > -#include <string> > > namespace clang { > namespace tidy { > @@ -46,12 +45,12 @@ private: > bool isOverriddenByDerivedClass(const CXXMethodDecl *BaseMD, > const CXXRecordDecl *DerivedRD); > > - /// key: the unique ID of a method; > - /// value: whether the method is possible to be overridden. > + /// Key: the unique ID of a method. > + /// Value: whether the method is possible to be overridden. > std::map<const CXXMethodDecl *, bool> PossibleMap; > > - /// key: <unique ID of base method, name of derived class> > - /// value: whether the base method is overridden by some method in the > derived > + /// Key: <unique ID of base method, name of derived class> > + /// Value: whether the base method is overridden by some method in the > derived > /// class. > std::map<std::pair<const CXXMethodDecl *, const CXXRecordDecl *>, bool> > OverriddenMap; > > Modified: > clang-tools-extra/trunk/test/clang-tidy/misc-virtual-near-miss.cpp > URL: > http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-virtual-near-miss.cpp?rev=260532&r1=260531&r2=260532&view=diff > > ============================================================================== > --- clang-tools-extra/trunk/test/clang-tidy/misc-virtual-near-miss.cpp > (original) > +++ clang-tools-extra/trunk/test/clang-tidy/misc-virtual-near-miss.cpp Thu > Feb 11 10:03:27 2016 > @@ -16,9 +16,11 @@ struct Derived : Base { > // overriden by this class. > virtual void funk(); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Derived::funk' has > a similar name and the same signature as virtual method 'Base::func'; did > you mean to override it? [misc-virtual-near-miss] > + // CHECK-FIXES: virtual void func(); > > void func2(); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Derived::func2' has > {{.*}} 'Base::func' > + // CHECK-FIXES: void func(); > > void func22(); // Should not warn. > > @@ -26,12 +28,46 @@ struct Derived : Base { > > void fun(); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Derived::fun' has > {{.*}} 'Base::func' > + // CHECK-FIXES: void func(); > > Derived &operator==(const Base &); // Should not warn: operators are > ignored. > > virtual NoDefinedClass2 *f1(); // Should not crash: non-defined class > return type is ignored. > }; > > +template <typename T> > +struct TBase { > + virtual void tfunc(T t); > +}; > + > +template <typename T> > +struct TDerived : TBase<T> { > + virtual void tfunk(T t); > + // Should not apply fix for template. > + // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: method > 'TDerived<double>::tfunk' has {{.*}} 'TBase<double>::tfunc' > + // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: method > 'TDerived<int>::tfunk' has {{.*}} 'TBase<int>::tfunc' > + // CHECK-FIXES: virtual void tfunk(T t); > +}; > + > +TDerived<int> T1; > +TDerived<double> T2; > + > +// Should not fix macro definition > +#define MACRO1 void funcM() > +// CHECK-FIXES: #define MACRO1 void funcM() > +#define MACRO2(m) void m() > +// CHECK-FIXES: #define MACRO2(m) void m() > + > +struct DerivedMacro : Base { > + MACRO1; > + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method > 'DerivedMacro::funcM' has {{.*}} 'Base::func' > + // CHECK-FIXES: MACRO1; > + > + MACRO2(func3); > + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method > 'DerivedMacro::func3' has {{.*}} 'Base::func' > + // CHECK-FIXES: MACRO2(func); > +}; > + > typedef Derived derived_type; > > class Father { > @@ -58,32 +94,40 @@ public: > > virtual void func2(); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::func2' has > {{.*}} 'Father::func' > + // CHECK-FIXES: virtual void func(); > > int methoe(int x, char **strs); // Should not warn: parameter types > don't match. > > int methoe(int x); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::methoe' has > {{.*}} 'Mother::method' > + // CHECK-FIXES: int method(int x); > > void methof(int x, const char **strs); // Should not warn: return types > don't match. > > int methoh(int x, const char **strs); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::methoh' has > {{.*}} 'Mother::method' > + // CHECK-FIXES: int method(int x, const char **strs); > > virtual Child *creat(int i); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::creat' has > {{.*}} 'Father::create' > + // CHECK-FIXES: virtual Child *create(int i); > > virtual Derived &&generat(); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::generat' has > {{.*}} 'Father::generate' > + // CHECK-FIXES: virtual Derived &&generate(); > > int decaz(const char str[]); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::decaz' has > {{.*}} 'Mother::decay' > + // CHECK-FIXES: int decay(const char str[]); > > operator bool(); > > derived_type *canonica(derived_type D); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::canonica' > has {{.*}} 'Father::canonical' > + // CHECK-FIXES: derived_type *canonical(derived_type D); > > private: > void funk(); > // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: method 'Child::funk' has > {{.*}} 'Father::func' > + // CHECK-FIXES: void func(); > }; > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits