r191776 - Fixed replacements for files with relative paths are not applied.
Ariel J. Bernal
ariel.j.bernal at intel.com
Tue Oct 1 07:59:00 PDT 2013
Author: ajbernal
Date: Tue Oct 1 09:59:00 2013
New Revision: 191776
URL: http://llvm.org/viewvc/llvm-project?rev=191776&view=rev
Log:
Fixed replacements for files with relative paths are not applied.
Replacements were no applied when using a compilation database with paths in the
compilation command relative to the compile directory. This patch makes those
paths abosulte.
Added:
cfe/trunk/test/Tooling/clang-check-rel-path.cpp
Modified:
cfe/trunk/lib/Tooling/Refactoring.cpp
Modified: cfe/trunk/lib/Tooling/Refactoring.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Refactoring.cpp?rev=191776&r1=191775&r2=191776&view=diff
==============================================================================
--- cfe/trunk/lib/Tooling/Refactoring.cpp (original)
+++ cfe/trunk/lib/Tooling/Refactoring.cpp Tue Oct 1 09:59:00 2013
@@ -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,16 @@ void Replacement::setFromSourceLocation(
const std::pair<FileID, unsigned> DecomposedLocation =
Sources.getDecomposedLoc(Start);
const FileEntry *Entry = Sources.getFileEntryForID(DecomposedLocation.first);
- this->FilePath = Entry != NULL ? Entry->getName() : InvalidLocation;
+
+ if (Entry != NULL) {
+ // Make FilePath absolute so replacements can be applied correctly when
+ // relative paths for files are used.
+ llvm::SmallString<256> FilePath(Entry->getName());
+ llvm::error_code EC = llvm::sys::fs::make_absolute(FilePath);
+ // Don't change the FilePath if the file is a virtual file.
+ this->FilePath = EC ? FilePath.c_str() : Entry->getName();
+ } else
+ this->FilePath = InvalidLocation;
this->ReplacementRange = Range(DecomposedLocation.second, Length);
this->ReplacementText = ReplacementText;
}
Added: cfe/trunk/test/Tooling/clang-check-rel-path.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-check-rel-path.cpp?rev=191776&view=auto
==============================================================================
--- cfe/trunk/test/Tooling/clang-check-rel-path.cpp (added)
+++ cfe/trunk/test/Tooling/clang-check-rel-path.cpp Tue Oct 1 09:59:00 2013
@@ -0,0 +1,10 @@
+// This block test a compilation database with files relative to the directory
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: echo '[{"directory":"%t","command":"clang++ -c test.cpp","file":"test.cpp"}]' | sed -e 's/\\/\//g' > %t/compile_commands.json
+// RUN: cp "%s" "%t/test.cpp"
+// RUN: not clang-check -p "%t" "%t/test.cpp" 2>&1|FileCheck %s
+// FIXME: Make the above easier.
+
+// CHECK: C++ requires
+invalid;
More information about the cfe-commits
mailing list