@@ -414,9 +414,7 @@ class ASTDeclReader : public DeclVisitor<ASTDeclReader, void> {
414414 void VisitOpenACCDeclareDecl (OpenACCDeclareDecl *D);
415415 void VisitOpenACCRoutineDecl (OpenACCRoutineDecl *D);
416416
417- void VisitDeclContext (DeclContext *DC, uint64_t &LexicalOffset,
418- uint64_t &VisibleOffset, uint64_t &ModuleLocalOffset,
419- uint64_t &TULocalOffset);
417+ void VisitDeclContext (DeclContext *DC, LookupBlockOffsets &Offsets);
420418
421419 template <typename T>
422420 RedeclarableResult VisitRedeclarable (Redeclarable<T> *D);
@@ -1875,12 +1873,8 @@ void ASTDeclReader::VisitNamespaceDecl(NamespaceDecl *D) {
18751873
18761874void ASTDeclReader::VisitHLSLBufferDecl (HLSLBufferDecl *D) {
18771875 VisitNamedDecl (D);
1878- uint64_t LexicalOffset = 0 ;
1879- uint64_t VisibleOffset = 0 ;
1880- uint64_t ModuleLocalOffset = 0 ;
1881- uint64_t TULocalOffset = 0 ;
1882- VisitDeclContext (D, LexicalOffset, VisibleOffset, ModuleLocalOffset,
1883- TULocalOffset);
1876+ LookupBlockOffsets Offsets;
1877+ VisitDeclContext (D, Offsets);
18841878 D->IsCBuffer = Record.readBool ();
18851879 D->KwLoc = readSourceLocation ();
18861880 D->LBraceLoc = readSourceLocation ();
@@ -2794,14 +2788,12 @@ void ASTDeclReader::VisitLifetimeExtendedTemporaryDecl(
27942788 mergeMergeable (D);
27952789}
27962790
2797- void ASTDeclReader::VisitDeclContext (DeclContext *DC, uint64_t &LexicalOffset,
2798- uint64_t &VisibleOffset,
2799- uint64_t &ModuleLocalOffset,
2800- uint64_t &TULocalOffset) {
2801- LexicalOffset = ReadLocalOffset ();
2802- VisibleOffset = ReadLocalOffset ();
2803- ModuleLocalOffset = ReadLocalOffset ();
2804- TULocalOffset = ReadLocalOffset ();
2791+ void ASTDeclReader::VisitDeclContext (DeclContext *DC,
2792+ LookupBlockOffsets &Offsets) {
2793+ Offsets.LexicalOffset = ReadLocalOffset ();
2794+ Offsets.VisibleOffset = ReadLocalOffset ();
2795+ Offsets.ModuleLocalOffset = ReadLocalOffset ();
2796+ Offsets.TULocalOffset = ReadLocalOffset ();
28052797}
28062798
28072799template <typename T>
@@ -4249,42 +4241,37 @@ Decl *ASTReader::ReadDeclRecord(GlobalDeclID ID) {
42494241 // If this declaration is also a declaration context, get the
42504242 // offsets for its tables of lexical and visible declarations.
42514243 if (auto *DC = dyn_cast<DeclContext>(D)) {
4252- uint64_t LexicalOffset = 0 ;
4253- uint64_t VisibleOffset = 0 ;
4254- uint64_t ModuleLocalOffset = 0 ;
4255- uint64_t TULocalOffset = 0 ;
4244+ LookupBlockOffsets Offsets;
42564245
4257- Reader.VisitDeclContext (DC, LexicalOffset, VisibleOffset, ModuleLocalOffset,
4258- TULocalOffset);
4246+ Reader.VisitDeclContext (DC, Offsets);
42594247
42604248 // Get the lexical and visible block for the delayed namespace.
42614249 // It is sufficient to judge if ID is in DelayedNamespaceOffsetMap.
42624250 // But it may be more efficient to filter the other cases.
4263- if (!LexicalOffset && !VisibleOffset && !ModuleLocalOffset &&
4264- isa<NamespaceDecl>(D))
4251+ if (!Offsets && isa<NamespaceDecl>(D))
42654252 if (auto Iter = DelayedNamespaceOffsetMap.find (ID);
4266- Iter != DelayedNamespaceOffsetMap.end ()) {
4267- LexicalOffset = Iter->second .LexicalOffset ;
4268- VisibleOffset = Iter->second .VisibleOffset ;
4269- ModuleLocalOffset = Iter->second .ModuleLocalOffset ;
4270- TULocalOffset = Iter->second .TULocalOffset ;
4271- }
4253+ Iter != DelayedNamespaceOffsetMap.end ())
4254+ Offsets = Iter->second ;
42724255
4273- if (LexicalOffset &&
4274- ReadLexicalDeclContextStorage (*Loc.F , DeclsCursor, LexicalOffset, DC))
4275- return nullptr ;
4276- if (VisibleOffset && ReadVisibleDeclContextStorage (
4277- *Loc.F , DeclsCursor, VisibleOffset, ID,
4278- VisibleDeclContextStorageKind::GenerallyVisible))
4256+ if (Offsets.VisibleOffset &&
4257+ ReadVisibleDeclContextStorage (
4258+ *Loc.F , DeclsCursor, Offsets.VisibleOffset , ID,
4259+ VisibleDeclContextStorageKind::GenerallyVisible))
42794260 return nullptr ;
4280- if (ModuleLocalOffset &&
4261+ if (Offsets. ModuleLocalOffset &&
42814262 ReadVisibleDeclContextStorage (
4282- *Loc.F , DeclsCursor, ModuleLocalOffset, ID,
4263+ *Loc.F , DeclsCursor, Offsets. ModuleLocalOffset , ID,
42834264 VisibleDeclContextStorageKind::ModuleLocalVisible))
42844265 return nullptr ;
4285- if (TULocalOffset && ReadVisibleDeclContextStorage (
4286- *Loc.F , DeclsCursor, TULocalOffset, ID,
4287- VisibleDeclContextStorageKind::TULocalVisible))
4266+ if (Offsets.TULocalOffset &&
4267+ ReadVisibleDeclContextStorage (
4268+ *Loc.F , DeclsCursor, Offsets.TULocalOffset , ID,
4269+ VisibleDeclContextStorageKind::TULocalVisible))
4270+ return nullptr ;
4271+
4272+ if (Offsets.LexicalOffset &&
4273+ ReadLexicalDeclContextStorage (*Loc.F , DeclsCursor,
4274+ Offsets.LexicalOffset , DC))
42884275 return nullptr ;
42894276 }
42904277 assert (Record.getIdx () == Record.size ());
0 commit comments