Author: hokein Date: Fri Oct 21 14:26:43 2016 New Revision: 284859 URL: http://llvm.org/viewvc/llvm-project?rev=284859&view=rev Log: [clang-move] Support moving template class forward declarations.
Modified: clang-tools-extra/trunk/clang-move/ClangMove.cpp clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp Modified: clang-tools-extra/trunk/clang-move/ClangMove.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-move/ClangMove.cpp?rev=284859&r1=284858&r2=284859&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-move/ClangMove.cpp (original) +++ clang-tools-extra/trunk/clang-move/ClangMove.cpp Fri Oct 21 14:26:43 2016 @@ -406,8 +406,13 @@ void ClangMoveTool::run(const ast_matche } 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()); Modified: clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp?rev=284859&r1=284858&r2=284859&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp (original) +++ clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp Fri Oct 21 14:26:43 2016 @@ -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\ 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[] = "#ifnde "#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" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits