[clang-tools-extra] r347470 - [clang-tidy] Ignore template instantiations in modernize-use-using

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 22 08:10:18 PST 2018


Author: alexfh
Date: Thu Nov 22 08:10:18 2018
New Revision: 347470

URL: http://llvm.org/viewvc/llvm-project?rev=347470&view=rev
Log:
[clang-tidy] Ignore template instantiations in modernize-use-using

The test I'm adding passes without the change due to the deduplication logic in
ClangTidyDiagnosticConsumer::take(). However this bug manifests in our internal
integration with clang-tidy.
I've verified the fix by locally changing LessClangTidyError to consider
replacements.

Modified:
    clang-tools-extra/trunk/clang-tidy/modernize/UseUsingCheck.cpp
    clang-tools-extra/trunk/test/clang-tidy/modernize-use-using.cpp

Modified: clang-tools-extra/trunk/clang-tidy/modernize/UseUsingCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/UseUsingCheck.cpp?rev=347470&r1=347469&r2=347470&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/modernize/UseUsingCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/modernize/UseUsingCheck.cpp Thu Nov 22 08:10:18 2018
@@ -24,7 +24,8 @@ UseUsingCheck::UseUsingCheck(StringRef N
 void UseUsingCheck::registerMatchers(MatchFinder *Finder) {
   if (!getLangOpts().CPlusPlus11)
     return;
-  Finder->addMatcher(typedefDecl().bind("typedef"), this);
+  Finder->addMatcher(typedefDecl(unless(isInstantiated())).bind("typedef"),
+                     this);
 }
 
 // Checks if 'typedef' keyword can be removed - we do it only if

Modified: clang-tools-extra/trunk/test/clang-tidy/modernize-use-using.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-use-using.cpp?rev=347470&r1=347469&r2=347470&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/modernize-use-using.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/modernize-use-using.cpp Thu Nov 22 08:10:18 2018
@@ -162,3 +162,24 @@ typedef unsigned Map[lol];
 typedef void (*fun_type)();
 // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: use 'using' instead of 'typedef'
 // CHECK-FIXES: using fun_type = void (*)();
+
+namespace template_instantiations {
+template <typename T>
+class C {
+ protected:
+  typedef C<T> super;
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use 'using' instead of 'typedef'
+  // CHECK-FIXES: using super = C<T>;
+  virtual void f();
+
+public:
+  virtual ~C();
+};
+
+class D : public C<D> {
+  void f() override { super::f(); }
+};
+class E : public C<E> {
+  void f() override { super::f(); }
+};
+}




More information about the cfe-commits mailing list