[clang-tools-extra] r296337 - [clang-move] Extend clang-move to support moving global variable.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 27 05:19:13 PST 2017
Author: hokein
Date: Mon Feb 27 07:19:13 2017
New Revision: 296337
URL: http://llvm.org/viewvc/llvm-project?rev=296337&view=rev
Log:
[clang-move] Extend clang-move to support moving global variable.
Summary: Also support dumping global variables.
Reviewers: ioeric
Reviewed By: ioeric
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D30337
Added:
clang-tools-extra/trunk/test/clang-move/Inputs/var_test.cpp
clang-tools-extra/trunk/test/clang-move/Inputs/var_test.h
clang-tools-extra/trunk/test/clang-move/move-var.cpp
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=296337&r1=296336&r2=296337&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-move/ClangMove.cpp (original)
+++ clang-tools-extra/trunk/clang-move/ClangMove.cpp Mon Feb 27 07:19:13 2017
@@ -168,6 +168,21 @@ private:
ClangMoveTool *MoveTool;
};
+class VarDeclarationMatch : public MatchFinder::MatchCallback {
+public:
+ explicit VarDeclarationMatch(ClangMoveTool *MoveTool)
+ : MoveTool(MoveTool) {}
+
+ void run(const MatchFinder::MatchResult &Result) override {
+ const auto *VD = Result.Nodes.getNodeAs<clang::VarDecl>("var");
+ assert(VD);
+ MoveDeclFromOldFileToNewFile(MoveTool, VD);
+ }
+
+private:
+ ClangMoveTool *MoveTool;
+};
+
class TypeAliasMatch : public MatchFinder::MatchCallback {
public:
explicit TypeAliasMatch(ClangMoveTool *MoveTool)
@@ -618,6 +633,11 @@ void ClangMoveTool::registerMatchers(ast
.bind("function"),
MatchCallbacks.back().get());
+ MatchCallbacks.push_back(llvm::make_unique<VarDeclarationMatch>(this));
+ Finder->addMatcher(
+ varDecl(InOldFiles, *HasAnySymbolNames, TopLevelDecl).bind("var"),
+ MatchCallbacks.back().get());
+
// Match enum definition in old.h. Enum helpers (which are defined in old.cc)
// will not be moved for now no matter whether they are used or not.
MatchCallbacks.push_back(llvm::make_unique<EnumDeclarationMatch>(this));
@@ -852,7 +872,10 @@ void ClangMoveTool::onEndOfTranslationUn
for (const auto *Decl : UnremovedDeclsInOldHeader) {
auto Kind = Decl->getKind();
const std::string QualifiedName = Decl->getQualifiedNameAsString();
- if (Kind == Decl::Kind::Function || Kind == Decl::Kind::FunctionTemplate)
+ if (Kind == Decl::Kind::Var)
+ Reporter->reportDeclaration(QualifiedName, "Variable");
+ else if (Kind == Decl::Kind::Function ||
+ Kind == Decl::Kind::FunctionTemplate)
Reporter->reportDeclaration(QualifiedName, "Function");
else if (Kind == Decl::Kind::ClassTemplate ||
Kind == Decl::Kind::CXXRecord)
@@ -883,6 +906,7 @@ void ClangMoveTool::onEndOfTranslationUn
case Decl::Kind::Typedef:
case Decl::Kind::TypeAlias:
case Decl::Kind::TypeAliasTemplate:
+ case Decl::Kind::Var:
return true;
default:
return false;
Added: clang-tools-extra/trunk/test/clang-move/Inputs/var_test.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-move/Inputs/var_test.cpp?rev=296337&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clang-move/Inputs/var_test.cpp (added)
+++ clang-tools-extra/trunk/test/clang-move/Inputs/var_test.cpp Mon Feb 27 07:19:13 2017
@@ -0,0 +1,6 @@
+#include "var_test.h"
+
+namespace a{
+int kGlobalInt = 1;
+const char *const kGlobalStr = "Hello";
+}
Added: clang-tools-extra/trunk/test/clang-move/Inputs/var_test.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-move/Inputs/var_test.h?rev=296337&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clang-move/Inputs/var_test.h (added)
+++ clang-tools-extra/trunk/test/clang-move/Inputs/var_test.h Mon Feb 27 07:19:13 2017
@@ -0,0 +1,11 @@
+namespace a {
+extern int kGlobalInt;
+extern const char *const kGlobalStr;
+}
+
+int kEvilInt = 2;
+
+inline void f1() {
+ int kGlobalInt = 3;
+ const char *const kGlobalStr = "Hello2";
+}
Added: clang-tools-extra/trunk/test/clang-move/move-var.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-move/move-var.cpp?rev=296337&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clang-move/move-var.cpp (added)
+++ clang-tools-extra/trunk/test/clang-move/move-var.cpp Mon Feb 27 07:19:13 2017
@@ -0,0 +1,46 @@
+// RUN: mkdir -p %T/move-var
+// RUN: cp %S/Inputs/var_test* %T/move-var
+// RUN: cd %T/move-var
+// RUN: clang-move -names="a::kGlobalInt" -new_header=%T/move-var/new_var_test.h -old_header=../move-var/var_test.h -old_cc=../move-var/var_test.cpp -new_cc=%T/move-var/new_var_test.cpp %T/move-var/var_test.cpp --
+// RUN: FileCheck -input-file=%T/move-var/var_test.h -check-prefix=CHECK-OLD-VAR-H-CASE1 %s
+// RUN: FileCheck -input-file=%T/move-var/var_test.cpp -check-prefix=CHECK-OLD-VAR-CPP-CASE1 %s
+// RUN: FileCheck -input-file=%T/move-var/new_var_test.h -check-prefix=CHECK-NEW-VAR-H-CASE1 %s
+// RUN: FileCheck -input-file=%T/move-var/new_var_test.cpp -check-prefix=CHECK-NEW-VAR-CPP-CASE1 %s
+
+// CHECK-OLD-VAR-H-CASE1-NOT: extern int kGlobalInt;
+// CHECK-OLD-VAR-H-CASE1: int kGlobalInt = 3;
+
+// CHECK-OLD-VAR-CPP-CASE1-NOT: int kGlobalInt = 1;
+
+// CHECK-NEW-VAR-H-CASE1: extern int kGlobalInt;
+// CHECK-NEW-VAR-H-CASE1-NOT: int kGlobalInt = 3;
+
+// CHECK-NEW-VAR-CPP-CASE1: int kGlobalInt = 1;
+
+
+// RUN: cp %S/Inputs/var_test* %T/move-var
+// RUN: clang-move -names="a::kGlobalStr" -new_header=%T/move-var/new_var_test.h -old_header=../move-var/var_test.h -old_cc=../move-var/var_test.cpp -new_cc=%T/move-var/new_var_test.cpp %T/move-var/var_test.cpp --
+// RUN: FileCheck -input-file=%T/move-var/var_test.h -check-prefix=CHECK-OLD-VAR-H-CASE2 %s
+// RUN: FileCheck -input-file=%T/move-var/var_test.cpp -check-prefix=CHECK-OLD-VAR-CPP-CASE2 %s
+// RUN: FileCheck -input-file=%T/move-var/new_var_test.h -check-prefix=CHECK-NEW-VAR-H-CASE2 %s
+// RUN: FileCheck -input-file=%T/move-var/new_var_test.cpp -check-prefix=CHECK-NEW-VAR-CPP-CASE2 %s
+
+// CHECK-OLD-VAR-H-CASE2-NOT: extern const char *const kGlobalStr;
+// CHECK-OLD-VAR-H-CASE2: const char *const kGlobalStr = "Hello2";
+
+// CHECK-OLD-VAR-CPP-CASE2-NOT: const char *const kGlobalStr = "Hello";
+
+// CHECK-NEW-VAR-H-CASE2: extern const char *const kGlobalStr;
+// CHECK-NEW-VAR-H-CASE2-NOT: const char *const kGlobalStr = "Hello2";
+
+// CHECK-NEW-VAR-CPP-CASE2: const char *const kGlobalStr = "Hello";
+
+
+// RUN: cp %S/Inputs/var_test* %T/move-var
+// RUN: clang-move -names="kEvilInt" -new_header=%T/move-var/new_var_test.h -old_header=../move-var/var_test.h -old_cc=../move-var/var_test.cpp -new_cc=%T/move-var/new_var_test.cpp %T/move-var/var_test.cpp --
+// RUN: FileCheck -input-file=%T/move-var/var_test.h -check-prefix=CHECK-OLD-VAR-H-CASE3 %s
+// RUN: FileCheck -input-file=%T/move-var/new_var_test.h -check-prefix=CHECK-NEW-VAR-H-CASE3 %s
+
+// CHECK-OLD-VAR-H-CASE3-NOT: int kEvilInt = 2;
+
+// CHECK-NEW-VAR-H-CASE3: int kEvilInt = 2;
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=296337&r1=296336&r2=296337&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp Mon Feb 27 07:19:13 2017
@@ -539,6 +539,8 @@ TEST(ClangMove, DumpDecls) {
"enum class E2 { Red };\n"
"typedef int Int2;\n"
"using Int = int;\n"
+ "extern int kGlobalInt;\n"
+ "extern const char* const kGlobalStr;\n"
"} // namespace b\n"
"} // namespace a\n";
const char TestCode[] = "#include \"foo.h\"\n";
@@ -553,7 +555,8 @@ TEST(ClangMove, DumpDecls) {
{"A", "Class"}, {"B", "Class"}, {"a::Move1", "Class"},
{"a::f1", "Function"}, {"a::f2", "Function"}, {"a::b::Move1", "Class"},
{"a::b::f", "Function"}, {"a::b::E1", "Enum"}, {"a::b::E2", "Enum"},
- {"a::b::Int2", "TypeAlias"}, {"a::b::Int", "TypeAlias"} };
+ {"a::b::Int2", "TypeAlias"}, {"a::b::Int", "TypeAlias"},
+ {"a::b::kGlobalInt", "Variable"}, {"a::b::kGlobalStr", "Variable"}};
runClangMoveOnCode(Spec, TestHeader, TestCode, &Reporter);
std::set<DeclarationReporter::DeclarationPair> Results;
for (const auto& DelPair : Reporter.getDeclarationList())
More information about the cfe-commits
mailing list