diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-10-23 22:18:29 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-10-23 22:18:29 +0000 |
commit | a182530633c46ef772bb346eca16b471b591c899 (patch) | |
tree | be4592df825469b53d7232636288ebf8f7119e94 /clang/lib/Serialization | |
parent | e927a170221282d238c70f59145e8a7f3f61a606 (diff) | |
download | bcm5719-llvm-a182530633c46ef772bb346eca16b471b591c899.tar.gz bcm5719-llvm-a182530633c46ef772bb346eca16b471b591c899.zip |
[modules] Simplify reading of INPUT_FILE_OFFSETS record and make it robust against changes to record order.
llvm-svn: 220524
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index e392e5e31ce..1fd39faab7f 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2252,6 +2252,8 @@ ASTReader::ReadControlBlock(ModuleFile &F, // Read all of the records and blocks in the control block. RecordData Record; + unsigned NumInputs = 0; + unsigned NumUserInputs = 0; while (1) { llvm::BitstreamEntry Entry = Stream.advance(); @@ -2264,12 +2266,8 @@ ASTReader::ReadControlBlock(ModuleFile &F, const HeaderSearchOptions &HSOpts = PP.getHeaderSearchInfo().getHeaderSearchOpts(); - // All user input files reside at the index range [0, Record[1]), and - // system input files reside at [Record[1], Record[0]). - // Record is the one from INPUT_FILE_OFFSETS. - unsigned NumInputs = Record[0]; - unsigned NumUserInputs = Record[1]; - + // All user input files reside at the index range [0, NumUserInputs), and + // system input files reside at [NumUserInputs, NumInputs). if (!DisableValidation && (ValidateSystemInputs || !HSOpts.ModulesValidateOncePerBuildSession || F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp)) { @@ -2485,8 +2483,10 @@ ASTReader::ReadControlBlock(ModuleFile &F, ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities)) return Result; case INPUT_FILE_OFFSETS: + NumInputs = Record[0]; + NumUserInputs = Record[1]; F.InputFileOffsets = (const uint32_t *)Blob.data(); - F.InputFilesLoaded.resize(Record[0]); + F.InputFilesLoaded.resize(NumInputs); break; } } |