From cee2059f9ba2b4fa20efa4e2cccaffe29df8b764 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Mon, 12 Feb 2018 12:26:12 +0000 Subject: [PATCH] [clang-move] Fix the incorrect expansion end location. Summary: Before the fix, if clang-move decides to move the following macro statement, it only moves the first line `DEFINE(A,`. ``` DEFINE(A, B); ``` Reviewers: ioeric Reviewed By: ioeric Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D43174 llvm-svn: 324886 --- clang-tools-extra/clang-move/ClangMove.cpp | 2 +- .../unittests/clang-move/ClangMoveTests.cpp | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/clang-move/ClangMove.cpp b/clang-tools-extra/clang-move/ClangMove.cpp index e32e490ec6ba..796e3fec311f 100644 --- a/clang-tools-extra/clang-move/ClangMove.cpp +++ b/clang-tools-extra/clang-move/ClangMove.cpp @@ -280,7 +280,7 @@ SourceLocation getLocForEndOfDecl(const clang::Decl *D, const LangOptions &LangOpts = clang::LangOptions()) { const auto &SM = D->getASTContext().getSourceManager(); - auto EndExpansionLoc = SM.getExpansionLoc(D->getLocEnd()); + auto EndExpansionLoc = SM.getExpansionRange(D->getLocEnd()).second; std::pair LocInfo = SM.getDecomposedLoc(EndExpansionLoc); // Try to load the file buffer. bool InvalidTemp = false; diff --git a/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp b/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp index 15097fd29e5a..220c086566c4 100644 --- a/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp +++ b/clang-tools-extra/unittests/clang-move/ClangMoveTests.cpp @@ -431,12 +431,16 @@ TEST(ClangMove, MacroInFunction) { TEST(ClangMove, DefinitionInMacro) { const char TestHeader[] = "#define DEF(CLASS) void CLASS##_::f() {}\n" - "class A_ {\nvoid f();\n};\n" + "#define DEF2(CLASS, ...) void CLASS##_::f2() {}\n" + "class A_ {\nvoid f();\nvoid f2();\n};\n" "class B {};\n"; const char TestCode[] = "#include \"foo.h\"\n" - "DEF(A)\n"; + "DEF(A)\n\n" + "DEF2(A,\n" + " 123)\n"; const char ExpectedNewCode[] = "#include \"new_foo.h\"\n\n" - "DEF(A)\n"; + "DEF(A)\n\n" + "DEF2(A, 123)\n"; move::MoveDefinitionSpec Spec; Spec.Names.push_back("A_"); Spec.OldHeader = "foo.h";