Use the name of the file on disk to issue a new diagnostic about non-portable #include and #import paths.
Differential Revision: http://reviews.llvm.org/D19843 Corresponding LLVM change: http://reviews.llvm.org/D19842 Patch by Eric Niebler llvm-svn: 271708
This commit is contained in:
@@ -140,16 +140,19 @@ namespace {
|
||||
class RealFile : public File {
|
||||
int FD;
|
||||
Status S;
|
||||
std::string RealName;
|
||||
friend class RealFileSystem;
|
||||
RealFile(int FD, StringRef NewName)
|
||||
RealFile(int FD, StringRef NewName, StringRef NewRealPathName)
|
||||
: FD(FD), S(NewName, {}, {}, {}, {}, {},
|
||||
llvm::sys::fs::file_type::status_error, {}) {
|
||||
llvm::sys::fs::file_type::status_error, {}),
|
||||
RealName(NewRealPathName.str()) {
|
||||
assert(FD >= 0 && "Invalid or inactive file descriptor");
|
||||
}
|
||||
|
||||
public:
|
||||
~RealFile() override;
|
||||
ErrorOr<Status> status() override;
|
||||
ErrorOr<StringRef> getName() override;
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> getBuffer(const Twine &Name,
|
||||
int64_t FileSize,
|
||||
bool RequiresNullTerminator,
|
||||
@@ -170,6 +173,10 @@ ErrorOr<Status> RealFile::status() {
|
||||
return S;
|
||||
}
|
||||
|
||||
ErrorOr<StringRef> RealFile::getName() {
|
||||
return RealName.empty() ? S.getName() : StringRef(RealName);
|
||||
}
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
RealFile::getBuffer(const Twine &Name, int64_t FileSize,
|
||||
bool RequiresNullTerminator, bool IsVolatile) {
|
||||
@@ -207,9 +214,10 @@ ErrorOr<Status> RealFileSystem::status(const Twine &Path) {
|
||||
ErrorOr<std::unique_ptr<File>>
|
||||
RealFileSystem::openFileForRead(const Twine &Name) {
|
||||
int FD;
|
||||
if (std::error_code EC = sys::fs::openFileForRead(Name, FD))
|
||||
SmallString<256> RealName;
|
||||
if (std::error_code EC = sys::fs::openFileForRead(Name, FD, &RealName))
|
||||
return EC;
|
||||
return std::unique_ptr<File>(new RealFile(FD, Name.str()));
|
||||
return std::unique_ptr<File>(new RealFile(FD, Name.str(), RealName.str()));
|
||||
}
|
||||
|
||||
llvm::ErrorOr<std::string> RealFileSystem::getCurrentWorkingDirectory() const {
|
||||
|
||||
Reference in New Issue
Block a user