diff options
author | Ariel J. Bernal <ariel.j.bernal@intel.com> | 2013-10-18 18:38:24 +0000 |
---|---|---|
committer | Ariel J. Bernal <ariel.j.bernal@intel.com> | 2013-10-18 18:38:24 +0000 |
commit | 4dc53c20fcf72db48adc59c66f6ac797a8acf179 (patch) | |
tree | e2c026844332489b02c661a61a4cf7328367d229 /clang/lib/Tooling/Refactoring.cpp | |
parent | 11a66c1240595eef13aafe26ea07a5354d541f82 (diff) | |
download | llvm-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.cpp | 14 |
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; } |