summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-10-23 22:18:29 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-10-23 22:18:29 +0000
commita182530633c46ef772bb346eca16b471b591c899 (patch)
treebe4592df825469b53d7232636288ebf8f7119e94 /clang/lib/Serialization
parente927a170221282d238c70f59145e8a7f3f61a606 (diff)
downloadbcm5719-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.cpp14
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;
}
}
OpenPOWER on IntegriCloud