diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-10-27 23:01:16 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-10-27 23:01:16 +0000 |
commit | d4b230b3780bf645991e99986a510124f64dabed (patch) | |
tree | 26b104f6557dfcff20421c588c21c50361fad1a7 /clang/lib/Serialization/ASTReader.cpp | |
parent | 40d3ad33190d8f8bd74639705927556fcace5e7a (diff) | |
download | bcm5719-llvm-d4b230b3780bf645991e99986a510124f64dabed.tar.gz bcm5719-llvm-d4b230b3780bf645991e99986a510124f64dabed.zip |
[modules] Load .pcm files specified by -fmodule-file lazily.
llvm-svn: 220731
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 29fa263bda8..7e4e20c70a7 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -4188,6 +4188,7 @@ bool ASTReader::readASTFileControlBlock(StringRef Filename, bool NeedsInputFiles = Listener.needsInputFileVisitation(); bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation(); + bool NeedsImports = Listener.needsImportVisitation(); BitstreamCursor InputFilesCursor; if (NeedsInputFiles) { InputFilesCursor = Stream; @@ -4306,6 +4307,24 @@ bool ASTReader::readASTFileControlBlock(StringRef Filename, break; } + case IMPORTS: { + if (!NeedsImports) + break; + + unsigned Idx = 0, N = Record.size(); + while (Idx < N) { + // Read information about the AST file. + ModuleKind ImportedKind = (ModuleKind)Record[Idx++]; + Idx += 4; // ImportLoc, Size, ModTime, Signature + unsigned Length = Record[Idx++]; + SmallString<128> ImportedFile(Record.begin() + Idx, + Record.begin() + Idx + Length); + Idx += Length; + Listener.visitImport(ImportedFile); + } + break; + } + default: // No other validation to perform. break; |