[clang-tools-extra] r324886 - [clang-move] Fix the incorrect expansion end location.

Haojian Wu via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 12 04:26:13 PST 2018


Author: hokein
Date: Mon Feb 12 04:26:12 2018
New Revision: 324886

URL: http://llvm.org/viewvc/llvm-project?rev=324886&view=rev
Log:
[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

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=324886&r1=324885&r2=324886&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-move/ClangMove.cpp (original)
+++ clang-tools-extra/trunk/clang-move/ClangMove.cpp Mon Feb 12 04:26:12 2018
@@ -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<FileID, unsigned> LocInfo = SM.getDecomposedLoc(EndExpansionLoc);
   // Try to load the file buffer.
   bool InvalidTemp = false;

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=324886&r1=324885&r2=324886&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp Mon Feb 12 04:26:12 2018
@@ -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";




More information about the cfe-commits mailing list