aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Tooling/Refactoring.cpp
diff options
context:
space:
mode:
authorAriel J. Bernal <ariel.j.bernal@intel.com>2013-10-18 18:38:24 +0000
committerAriel J. Bernal <ariel.j.bernal@intel.com>2013-10-18 18:38:24 +0000
commit4dc53c20fcf72db48adc59c66f6ac797a8acf179 (patch)
treee2c026844332489b02c661a61a4cf7328367d229 /clang/lib/Tooling/Refactoring.cpp
parent11a66c1240595eef13aafe26ea07a5354d541f82 (diff)
downloadllvm-4dc53c20fcf72db48adc59c66f6ac797a8acf179.zip
llvm-4dc53c20fcf72db48adc59c66f6ac797a8acf179.tar.gz
llvm-4dc53c20fcf72db48adc59c66f6ac797a8acf179.tar.bz2
This patch fixes replacements that are not applied when relative paths are
specified. In particular it makes sure that relative paths for non-virtual files aren't made absolute. Added unittest. llvm-svn: 192992
Diffstat (limited to 'clang/lib/Tooling/Refactoring.cpp')
-rw-r--r--clang/lib/Tooling/Refactoring.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Tooling/Refactoring.cpp b/clang/lib/Tooling/Refactoring.cpp
index 9e58db0..175dbd4 100644
--- a/clang/lib/Tooling/Refactoring.cpp
+++ b/clang/lib/Tooling/Refactoring.cpp
@@ -107,10 +107,16 @@ void Replacement::setFromSourceLocation(SourceManager &Sources,
const FileEntry *Entry = Sources.getFileEntryForID(DecomposedLocation.first);
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);
- this->FilePath = EC ? FilePath.c_str() : Entry->getName();
+ // relative paths for files are used. But we don't want to change virtual
+ // files.
+ if (llvm::sys::fs::exists(Entry->getName())) {
+ llvm::SmallString<256> FilePath(Entry->getName());
+ llvm::sys::fs::make_absolute(FilePath);
+ this->FilePath = FilePath.c_str();
+ }
+ else {
+ this->FilePath = Entry->getName();
+ }
} else {
this->FilePath = InvalidLocation;
}