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. llvm-svn: 191776
This commit is contained in:
parent
a9ac0e0f75
commit
31c181b061
|
@ -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(SourceManager &Sources,
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -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;
|
Loading…
Reference in New Issue