[clang-tools-extra] r284859 - [clang-move] Support moving template class forward declarations.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 21 12:26:44 PDT 2016
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"
More information about the cfe-commits
mailing list