diff options
Diffstat (limited to 'lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | lib/Serialization/ASTReaderDecl.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp index 8190eabc00..4d2da8decb 100644 --- a/lib/Serialization/ASTReaderDecl.cpp +++ b/lib/Serialization/ASTReaderDecl.cpp @@ -1661,22 +1661,26 @@ Decl *ASTReader::ReadDeclRecord(unsigned Index, DeclID ID) { // so we need to make sure we insert in front. For all other contexts, // the vector is empty here anyway, so there's no loss in efficiency. Infos.insert(Infos.begin(), Info); + } - // Now add the pending visible updates for this decl context, if it has - // any. - DeclContextVisibleUpdatesPending::iterator I = - PendingVisibleUpdates.find(ID); - if (I != PendingVisibleUpdates.end()) { - DeclContextVisibleUpdates &U = I->second; - Info.LexicalDecls = 0; - Info.NumLexicalDecls = 0; - for (DeclContextVisibleUpdates::iterator UI = U.begin(), UE = U.end(); - UI != UE; ++UI) { - Info.NameLookupTableData = *UI; - Infos.push_back(Info); - } - PendingVisibleUpdates.erase(I); + // Now add the pending visible updates for this decl context, if it has any. + DeclContextVisibleUpdatesPending::iterator I = + PendingVisibleUpdates.find(ID); + if (I != PendingVisibleUpdates.end()) { + // There are updates. This means the context has external visible + // storage, even if the original stored version didn't. + DC->setHasExternalVisibleStorage(true); + DeclContextVisibleUpdates &U = I->second; + DeclContextInfos &Infos = DeclContextOffsets[DC]; + DeclContextInfo Info; + Info.LexicalDecls = 0; + Info.NumLexicalDecls = 0; + for (DeclContextVisibleUpdates::iterator UI = U.begin(), UE = U.end(); + UI != UE; ++UI) { + Info.NameLookupTableData = *UI; + Infos.push_back(Info); } + PendingVisibleUpdates.erase(I); } } assert(Idx == Record.size()); |