diff options
-rw-r--r-- | clang-tools-extra/clang-move/ClangMove.cpp | 9 | ||||
-rw-r--r-- | clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp | 3 |
2 files changed, 10 insertions, 2 deletions
diff --git a/clang-tools-extra/clang-move/ClangMove.cpp b/clang-tools-extra/clang-move/ClangMove.cpp index 62356d278e7..dea41b2cfff 100644 --- a/clang-tools-extra/clang-move/ClangMove.cpp +++ b/clang-tools-extra/clang-move/ClangMove.cpp @@ -406,8 +406,13 @@ void ClangMoveTool::run(const ast_matchers::MatchFinder::MatchResult &Result) { } else if (const auto *FWD = Result.Nodes.getNodeAs<clang::CXXRecordDecl>("fwd_decl")) { // Skip all forwad declarations which appear after moved class declaration. - if (RemovedDecls.empty()) - MovedDecls.emplace_back(FWD, &Result.Context->getSourceManager()); + if (RemovedDecls.empty()) { + if (const auto *DCT = FWD->getDescribedClassTemplate()) { + MovedDecls.emplace_back(DCT, &Result.Context->getSourceManager()); + } else { + MovedDecls.emplace_back(FWD, &Result.Context->getSourceManager()); + } + } } else if (const auto *ANS = Result.Nodes.getNodeAs<clang::NamespaceDecl>( "anonymous_ns")) { MovedDecls.emplace_back(ANS, &Result.Context->getSourceManager()); diff --git a/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp b/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp index b4b4ae9ffe3..572a0f096dc 100644 --- a/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp +++ b/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp @@ -30,6 +30,7 @@ const char TestCCName[] = "foo.cc"; const char TestHeader[] = "namespace a {\n" "class C1; // test\n" + "template <typename T> class C2;\n" "namespace b {\n" "// This is a Foo class\n" "// which is used in\n" @@ -87,6 +88,7 @@ const char TestCC[] = "#include \"foo.h\"\n" const char ExpectedTestHeader[] = "namespace a {\n" "class C1; // test\n" + "template <typename T> class C2;\n" "namespace b {\n" "\n" "class Foo2 {\n" @@ -127,6 +129,7 @@ const char ExpectedNewHeader[] = "#ifndef NEW_FOO_H\n" "#define NEW_FOO_H\n" "namespace a {\n" "class C1; // test\n" + "template <typename T> class C2;\n" "namespace b {\n" "// This is a Foo class\n" "// which is used in\n" |