diff options
author | Rui Ueyama <ruiu@google.com> | 2019-01-22 18:44:04 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2019-01-22 18:44:04 +0000 |
commit | 4063cfc7451fb02b52b27e6298703743c7661cdd (patch) | |
tree | 7f82abee119fc514f7ad7ed8f8ca0f46b25349ea /llvm/lib/Support/FileOutputBuffer.cpp | |
parent | a5840c3c39baec957c673cf5e0b257f923480ff3 (diff) | |
download | llvm-4063cfc7451fb02b52b27e6298703743c7661cdd.zip llvm-4063cfc7451fb02b52b27e6298703743c7661cdd.tar.gz llvm-4063cfc7451fb02b52b27e6298703743c7661cdd.tar.bz2 |
FileOutputBuffer: Handle "-" as stdout.
I was honestly a bit surprised that we didn't do this before. This
patch is to handle "-" as the stdout so that if you pass `-o -` to
lld, for example, it writes an output to stdout instead of file `-`.
I thought that we might want to handle this at a higher level than
FileOutputBuffer, because if we land this patch, we can no longer
create a file whose name is `-` (there's a workaround though; you can
pass `./-` instead of `-`). However, because raw_fd_ostream already
handles `-` as a special file name, I think it's okay and actually
consistent to handle `-` as a special name in FileOutputBuffer.
Differential Revision: https://reviews.llvm.org/D56940
llvm-svn: 351852
Diffstat (limited to 'llvm/lib/Support/FileOutputBuffer.cpp')
-rw-r--r-- | llvm/lib/Support/FileOutputBuffer.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Support/FileOutputBuffer.cpp b/llvm/lib/Support/FileOutputBuffer.cpp index 8a2bb6c..cf21cc1 100644 --- a/llvm/lib/Support/FileOutputBuffer.cpp +++ b/llvm/lib/Support/FileOutputBuffer.cpp @@ -87,6 +87,12 @@ public: size_t getBufferSize() const override { return Buffer.size(); } Error commit() override { + if (FinalPath == "-") { + llvm::outs() << StringRef((const char *)Buffer.base(), Buffer.size()); + llvm::outs().flush(); + return Error::success(); + } + using namespace sys::fs; int FD; std::error_code EC; @@ -149,6 +155,10 @@ createOnDiskBuffer(StringRef Path, size_t Size, unsigned Mode) { // Create an instance of FileOutputBuffer. Expected<std::unique_ptr<FileOutputBuffer>> FileOutputBuffer::create(StringRef Path, size_t Size, unsigned Flags) { + // Handle "-" as stdout just like llvm::raw_ostream does. + if (Path == "-") + return createInMemoryBuffer("-", Size, /*Mode=*/0); + unsigned Mode = fs::all_read | fs::all_write; if (Flags & F_executable) Mode |= fs::all_exe; |