[PATCH] Fix replacements for files with relative paths are not applied.

Ariel Bernal ariel.j.bernal at intel.com
Fri Sep 27 09:51:54 PDT 2013


Hi tareqsiraj, revane, klimek,

When using a compilation database where paths in the command are specified relative to the directory then replacements for these files are not applied since there is no path associated to the files.

http://llvm-reviews.chandlerc.com/D1771

Files:
  lib/Tooling/Refactoring.cpp

Index: lib/Tooling/Refactoring.cpp
===================================================================
--- lib/Tooling/Refactoring.cpp
+++ lib/Tooling/Refactoring.cpp
@@ -19,6 +19,8 @@
 #include "clang/Rewrite/Core/Rewriter.h"
 #include "clang/Tooling/Refactoring.h"
 #include "llvm/Support/raw_os_ostream.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
 
 namespace clang {
 namespace tooling {
@@ -103,7 +105,11 @@
   const std::pair<FileID, unsigned> DecomposedLocation =
       Sources.getDecomposedLoc(Start);
   const FileEntry *Entry = Sources.getFileEntryForID(DecomposedLocation.first);
-  this->FilePath = Entry != NULL ? Entry->getName() : InvalidLocation;
+  // Make FilePath absolute so replacements can be applied correctly when
+  // relative paths for files are used.
+  llvm::SmallString<256> FilePath(Entry->getName());
+  llvm::sys::fs::make_absolute(FilePath);
+  this->FilePath = FilePath.c_str();
   this->ReplacementRange = Range(DecomposedLocation.second, Length);
   this->ReplacementText = ReplacementText;
 }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1771.1.patch
Type: text/x-patch
Size: 1061 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130927/51df6070/attachment.bin>


More information about the cfe-commits mailing list