diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-08-17 21:07:30 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-08-17 21:07:30 +0000 |
commit | 29cc642f6851a7142de4f7bc0f78d71f4f699f5c (patch) | |
tree | ceb9c7aaaf4d2de331bd0d06a419b7a762d2ec04 /clang/lib/Serialization/ASTReader.cpp | |
parent | c14efa71220dd2c2205b33f2cc5f3c6983549f6b (diff) | |
download | bcm5719-llvm-29cc642f6851a7142de4f7bc0f78d71f4f699f5c.tar.gz bcm5719-llvm-29cc642f6851a7142de4f7bc0f78d71f4f699f5c.zip |
In the AST file format, eliminate the CHAINED_METADATA record. Instead,
all AST files have a normal METADATA record that has the same form
regardless of whether we refer to a chained PCH or any other kind of
AST file.
Introduce the IMPORTS record, which describes all of the AST files
that are imported by this AST file, and how (as a module, a PCH file,
etc.). Currently, we emit at most one entry to this record, to support
chained PCH.
llvm-svn: 137869
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 53790fb8cc3..1d7ea1346fc 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2033,25 +2033,25 @@ ASTReader::ReadASTBlock(Module &F) { break; } - case CHAINED_METADATA: { - if (!First) { - Error("CHAINED_METADATA is not first record in block"); - return Failure; - } - if (Record[0] != VERSION_MAJOR && !DisableValidation) { - Diag(Record[0] < VERSION_MAJOR? diag::warn_pch_version_too_old - : diag::warn_pch_version_too_new); - return IgnorePCH; + case IMPORTS: { + // Load each of the imported PCH files. + unsigned Idx = 0, N = Record.size(); + while (Idx < N) { + // Read information about the AST file. + ModuleKind ImportedKind = (ModuleKind)Record[Idx++]; + unsigned Length = Record[Idx++]; + llvm::SmallString<128> ImportedFile(Record.begin() + Idx, + Record.begin() + Idx + Length); + Idx += Length; + + // Load the AST file. + switch(ReadASTCore(ImportedFile, ImportedKind)) { + case Failure: return Failure; + // If we have to ignore the dependency, we'll have to ignore this too. + case IgnorePCH: return IgnorePCH; + case Success: break; + } } - - // Load the chained file, which is always a PCH file. - // FIXME: This could end up being a module. - switch(ReadASTCore(StringRef(BlobStart, BlobLen), MK_PCH)) { - case Failure: return Failure; - // If we have to ignore the dependency, we'll have to ignore this too. - case IgnorePCH: return IgnorePCH; - case Success: break; - } break; } |