diff options
author | Daniel Dunbar <daniel@zuster.org> | 2012-11-05 22:53:33 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2012-11-05 22:53:33 +0000 |
commit | ce36ecd5a509af8fc5924d21694df36e8bc94a95 (patch) | |
tree | 5667bb2e64c31c73424e4c1cc73cdf7b41b0de65 /lib/Frontend/CompilerInstance.cpp | |
parent | 95b66fca551d5148413f66db63143620e5846818 (diff) |
Frontend: Add support for reading named pipes as the main file.
- The whole {File,Source}Manager is built around wanting to pre-determine the
size of files, so we can't fit this in naturally. Instead, we handle it like
we do STDIN, where we just replace the main file contents upfront.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167419 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/CompilerInstance.cpp')
-rw-r--r-- | lib/Frontend/CompilerInstance.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index c6c5fb5fe2..b85832208b 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -610,6 +610,19 @@ bool CompilerInstance::InitializeSourceManager(StringRef InputFile, return false; } SourceMgr.createMainFileID(File, Kind); + + // The natural SourceManager infrastructure can't currently handle named + // pipes, but we would at least like to accept them for the main + // file. Detect them here, read them with the more generic MemoryBuffer + // function, and simply override their contents as we do for STDIN. + if (File->isNamedPipe()) { + OwningPtr<llvm::MemoryBuffer> MB; + if (llvm::error_code ec = llvm::MemoryBuffer::getFile(InputFile, MB)) { + Diags.Report(diag::err_cannot_open_file) << InputFile << ec.message(); + return false; + } + SourceMgr.overrideFileContents(File, MB.take()); + } } else { OwningPtr<llvm::MemoryBuffer> SB; if (llvm::MemoryBuffer::getSTDIN(SB)) { |