summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-move
diff options
context:
space:
mode:
authorHaojian Wu <hokein@google.com>2016-11-10 05:33:26 +0000
committerHaojian Wu <hokein@google.com>2016-11-10 05:33:26 +0000
commitb53ec46773c5819ad70f4d63924f18c6a88965ee (patch)
tree55af2ee47bc9386197104f3baf1ba1d2648e3214 /clang-tools-extra/clang-move
parentbbaeda3fe5d132d4b58f7606663704e408ef9796 (diff)
downloadbcm5719-llvm-b53ec46773c5819ad70f4d63924f18c6a88965ee.tar.gz
bcm5719-llvm-b53ec46773c5819ad70f4d63924f18c6a88965ee.zip
[clang-move] Support template class.
Reviewers: ioeric Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D26423 llvm-svn: 286427
Diffstat (limited to 'clang-tools-extra/clang-move')
-rw-r--r--clang-tools-extra/clang-move/ClangMove.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/clang-tools-extra/clang-move/ClangMove.cpp b/clang-tools-extra/clang-move/ClangMove.cpp
index e23db7474b4..61922f78b5a 100644
--- a/clang-tools-extra/clang-move/ClangMove.cpp
+++ b/clang-tools-extra/clang-move/ClangMove.cpp
@@ -364,16 +364,15 @@ void ClangMoveTool::registerMatchers(ast_matchers::MatchFinder *Finder) {
isDefinition())
.bind("class_method"),
this);
-
- //============================================================================
- // Matchers for old cc
- //============================================================================
// Match static member variable definition of the moved class.
Finder->addMatcher(
- varDecl(InMovedClass, InOldCC, isDefinition(), isStaticDataMember())
+ varDecl(InMovedClass, InOldFiles, isDefinition(), isStaticDataMember())
.bind("class_static_var_decl"),
this);
+ //============================================================================
+ // Matchers for old cc
+ //============================================================================
auto InOldCCNamedNamespace =
allOf(hasParent(namespaceDecl(unless(isAnonymous()))), InOldCC);
// Matching using decls/type alias decls which are in named namespace. Those
@@ -412,25 +411,36 @@ void ClangMoveTool::run(const ast_matchers::MatchFinder::MatchResult &Result) {
if (!CMD->isInlined()) {
MovedDecls.emplace_back(CMD, &Result.Context->getSourceManager());
RemovedDecls.push_back(MovedDecls.back());
+ // Get template class method from its method declaration as
+ // UnremovedDecls stores template class method.
+ if (const auto *FTD = CMD->getDescribedFunctionTemplate())
+ UnremovedDeclsInOldHeader.erase(FTD);
+ else
+ UnremovedDeclsInOldHeader.erase(CMD);
}
} else if (const auto *VD = Result.Nodes.getNodeAs<clang::VarDecl>(
"class_static_var_decl")) {
MovedDecls.emplace_back(VD, &Result.Context->getSourceManager());
RemovedDecls.push_back(MovedDecls.back());
- } else if (const auto *class_decl =
+ UnremovedDeclsInOldHeader.erase(MovedDecls.back().Decl);
+ } else if (const auto *CD =
Result.Nodes.getNodeAs<clang::CXXRecordDecl>("moved_class")) {
- MovedDecls.emplace_back(class_decl, &Result.Context->getSourceManager());
+ // Get class template from its class declaration as UnremovedDecls stores
+ // class template.
+ if (const auto * TC = CD->getDescribedClassTemplate())
+ MovedDecls.emplace_back(TC, &Result.Context->getSourceManager());
+ else
+ MovedDecls.emplace_back(CD, &Result.Context->getSourceManager());
RemovedDecls.push_back(MovedDecls.back());
- UnremovedDeclsInOldHeader.erase(class_decl);
+ UnremovedDeclsInOldHeader.erase(MovedDecls.back().Decl);
} 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()) {
- if (const auto *DCT = FWD->getDescribedClassTemplate()) {
+ if (const auto *DCT = FWD->getDescribedClassTemplate())
MovedDecls.emplace_back(DCT, &Result.Context->getSourceManager());
- } else {
+ else
MovedDecls.emplace_back(FWD, &Result.Context->getSourceManager());
- }
}
} else if (const auto *ANS =
Result.Nodes.getNodeAs<clang::NamespaceDecl>("anonymous_ns")) {
OpenPOWER on IntegriCloud