summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-03-09 17:21:42 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-03-09 17:21:42 +0000
commit35dcda792241569a65db70e555b6dd50c332898b (patch)
treec137163265cbefe585ddbdda6a3fd6a644f212a0 /clang/lib/Serialization/ASTReader.cpp
parent709b108ae117092d7d6a2c4abcd8f65918db81e3 (diff)
downloadbcm5719-llvm-35dcda792241569a65db70e555b6dd50c332898b.tar.gz
bcm5719-llvm-35dcda792241569a65db70e555b6dd50c332898b.zip
Introduce '-chain-include' option to specify headers that will be converted to chained PCHs in memory
without having to use multiple runs and intermediate files. Intended for testing & debugging of chained PCH. llvm-svn: 127339
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 4717cd62684..030e6521694 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -2461,20 +2461,26 @@ ASTReader::ASTReadResult ASTReader::ReadASTCore(llvm::StringRef FileName,
if (CurrentDir.empty()) CurrentDir = ".";
}
- // Open the AST file.
- //
- // FIXME: This shouldn't be here, we should just take a raw_ostream.
- std::string ErrStr;
- llvm::error_code ec;
- if (FileName == "-") {
- ec = llvm::MemoryBuffer::getSTDIN(F.Buffer);
- if (ec)
- ErrStr = ec.message();
- } else
- F.Buffer.reset(FileMgr.getBufferForFile(FileName, &ErrStr));
- if (!F.Buffer) {
- Error(ErrStr.c_str());
- return IgnorePCH;
+ if (!ASTBuffers.empty()) {
+ F.Buffer.reset(ASTBuffers.front());
+ ASTBuffers.pop_front();
+ assert(F.Buffer && "Passed null buffer");
+ } else {
+ // Open the AST file.
+ //
+ // FIXME: This shouldn't be here, we should just take a raw_ostream.
+ std::string ErrStr;
+ llvm::error_code ec;
+ if (FileName == "-") {
+ ec = llvm::MemoryBuffer::getSTDIN(F.Buffer);
+ if (ec)
+ ErrStr = ec.message();
+ } else
+ F.Buffer.reset(FileMgr.getBufferForFile(FileName, &ErrStr));
+ if (!F.Buffer) {
+ Error(ErrStr.c_str());
+ return IgnorePCH;
+ }
}
// Initialize the stream
OpenPOWER on IntegriCloud