summaryrefslogtreecommitdiffstats
path: root/clang/lib/Tooling
diff options
context:
space:
mode:
authorAriel J. Bernal <ariel.j.bernal@intel.com>2013-10-09 16:09:23 +0000
committerAriel J. Bernal <ariel.j.bernal@intel.com>2013-10-09 16:09:23 +0000
commitee863cedc29d45c1976fcd3b9f0a5bce34097238 (patch)
tree24853d1ffbc074b5acc1b4964fb9c29eba666c1f /clang/lib/Tooling
parentcaa435664aa4825b90579102b24a79339a57b5d4 (diff)
downloadbcm5719-llvm-ee863cedc29d45c1976fcd3b9f0a5bce34097238.tar.gz
bcm5719-llvm-ee863cedc29d45c1976fcd3b9f0a5bce34097238.zip
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 test. llvm-svn: 192299
Diffstat (limited to 'clang/lib/Tooling')
-rw-r--r--clang/lib/Tooling/Refactoring.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/clang/lib/Tooling/Refactoring.cpp b/clang/lib/Tooling/Refactoring.cpp
index 13811648eef..175dbd42ace 100644
--- a/clang/lib/Tooling/Refactoring.cpp
+++ b/clang/lib/Tooling/Refactoring.cpp
@@ -105,16 +105,21 @@ void Replacement::setFromSourceLocation(SourceManager &Sources,
const std::pair<FileID, unsigned> DecomposedLocation =
Sources.getDecomposedLoc(Start);
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);
- // Don't change the FilePath if the file is a virtual file.
- this->FilePath = EC ? FilePath.c_str() : Entry->getName();
- } else
+ // 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;
+ }
this->ReplacementRange = Range(DecomposedLocation.second, Length);
this->ReplacementText = ReplacementText;
}
OpenPOWER on IntegriCloud