Home | History | Annotate | Download | only in Serialization
      1 //===--- ASTReaderDecl.cpp - Decl Deserialization ---------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the ASTReader::ReadDeclRecord method, which is the
     11 // entrypoint for loading a decl.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "clang/Serialization/ASTReader.h"
     16 #include "ASTCommon.h"
     17 #include "ASTReaderInternals.h"
     18 #include "clang/AST/ASTConsumer.h"
     19 #include "clang/AST/ASTContext.h"
     20 #include "clang/AST/DeclCXX.h"
     21 #include "clang/AST/DeclGroup.h"
     22 #include "clang/AST/DeclTemplate.h"
     23 #include "clang/AST/DeclVisitor.h"
     24 #include "clang/AST/Expr.h"
     25 #include "clang/Sema/IdentifierResolver.h"
     26 #include "clang/Sema/Sema.h"
     27 #include "clang/Sema/SemaDiagnostic.h"
     28 #include "llvm/Support/SaveAndRestore.h"
     29 
     30 using namespace clang;
     31 using namespace clang::serialization;
     32 
     33 //===----------------------------------------------------------------------===//
     34 // Declaration deserialization
     35 //===----------------------------------------------------------------------===//
     36 
     37 namespace clang {
     38   class ASTDeclReader : public DeclVisitor<ASTDeclReader, void> {
     39     ASTReader &Reader;
     40     ModuleFile &F;
     41     const DeclID ThisDeclID;
     42     const unsigned RawLocation;
     43     typedef ASTReader::RecordData RecordData;
     44     const RecordData &Record;
     45     unsigned &Idx;
     46     TypeID TypeIDForTypeDecl;
     47     unsigned AnonymousDeclNumber;
     48     GlobalDeclID NamedDeclForTagDecl;
     49     IdentifierInfo *TypedefNameForLinkage;
     50 
     51     bool HasPendingBody;
     52 
     53     uint64_t GetCurrentCursorOffset();
     54 
     55     SourceLocation ReadSourceLocation(const RecordData &R, unsigned &I) {
     56       return Reader.ReadSourceLocation(F, R, I);
     57     }
     58 
     59     SourceRange ReadSourceRange(const RecordData &R, unsigned &I) {
     60       return Reader.ReadSourceRange(F, R, I);
     61     }
     62 
     63     TypeSourceInfo *GetTypeSourceInfo(const RecordData &R, unsigned &I) {
     64       return Reader.GetTypeSourceInfo(F, R, I);
     65     }
     66 
     67     serialization::DeclID ReadDeclID(const RecordData &R, unsigned &I) {
     68       return Reader.ReadDeclID(F, R, I);
     69     }
     70 
     71     void ReadDeclIDList(SmallVectorImpl<DeclID> &IDs) {
     72       for (unsigned I = 0, Size = Record[Idx++]; I != Size; ++I)
     73         IDs.push_back(ReadDeclID(Record, Idx));
     74     }
     75 
     76     Decl *ReadDecl(const RecordData &R, unsigned &I) {
     77       return Reader.ReadDecl(F, R, I);
     78     }
     79 
     80     template<typename T>
     81     T *ReadDeclAs(const RecordData &R, unsigned &I) {
     82       return Reader.ReadDeclAs<T>(F, R, I);
     83     }
     84 
     85     void ReadQualifierInfo(QualifierInfo &Info,
     86                            const RecordData &R, unsigned &I) {
     87       Reader.ReadQualifierInfo(F, Info, R, I);
     88     }
     89 
     90     void ReadDeclarationNameLoc(DeclarationNameLoc &DNLoc, DeclarationName Name,
     91                                 const RecordData &R, unsigned &I) {
     92       Reader.ReadDeclarationNameLoc(F, DNLoc, Name, R, I);
     93     }
     94 
     95     void ReadDeclarationNameInfo(DeclarationNameInfo &NameInfo,
     96                                 const RecordData &R, unsigned &I) {
     97       Reader.ReadDeclarationNameInfo(F, NameInfo, R, I);
     98     }
     99 
    100     serialization::SubmoduleID readSubmoduleID(const RecordData &R,
    101                                                unsigned &I) {
    102       if (I >= R.size())
    103         return 0;
    104 
    105       return Reader.getGlobalSubmoduleID(F, R[I++]);
    106     }
    107 
    108     Module *readModule(const RecordData &R, unsigned &I) {
    109       return Reader.getSubmodule(readSubmoduleID(R, I));
    110     }
    111 
    112     void ReadCXXRecordDefinition(CXXRecordDecl *D, bool Update);
    113     void ReadCXXDefinitionData(struct CXXRecordDecl::DefinitionData &Data,
    114                                const RecordData &R, unsigned &I);
    115     void MergeDefinitionData(CXXRecordDecl *D,
    116                              struct CXXRecordDecl::DefinitionData &&NewDD);
    117 
    118     static NamedDecl *getAnonymousDeclForMerging(ASTReader &Reader,
    119                                                  DeclContext *DC,
    120                                                  unsigned Index);
    121     static void setAnonymousDeclForMerging(ASTReader &Reader, DeclContext *DC,
    122                                            unsigned Index, NamedDecl *D);
    123 
    124     /// Results from loading a RedeclarableDecl.
    125     class RedeclarableResult {
    126       GlobalDeclID FirstID;
    127       Decl *MergeWith;
    128       bool IsKeyDecl;
    129 
    130     public:
    131       RedeclarableResult(GlobalDeclID FirstID, Decl *MergeWith, bool IsKeyDecl)
    132           : FirstID(FirstID), MergeWith(MergeWith), IsKeyDecl(IsKeyDecl) {}
    133 
    134       /// \brief Retrieve the first ID.
    135       GlobalDeclID getFirstID() const { return FirstID; }
    136 
    137       /// \brief Is this declaration a key declaration?
    138       bool isKeyDecl() const { return IsKeyDecl; }
    139 
    140       /// \brief Get a known declaration that this should be merged with, if
    141       /// any.
    142       Decl *getKnownMergeTarget() const { return MergeWith; }
    143     };
    144 
    145     /// \brief Class used to capture the result of searching for an existing
    146     /// declaration of a specific kind and name, along with the ability
    147     /// to update the place where this result was found (the declaration
    148     /// chain hanging off an identifier or the DeclContext we searched in)
    149     /// if requested.
    150     class FindExistingResult {
    151       ASTReader &Reader;
    152       NamedDecl *New;
    153       NamedDecl *Existing;
    154       mutable bool AddResult;
    155 
    156       unsigned AnonymousDeclNumber;
    157       IdentifierInfo *TypedefNameForLinkage;
    158 
    159       void operator=(FindExistingResult&) = delete;
    160 
    161     public:
    162       FindExistingResult(ASTReader &Reader)
    163           : Reader(Reader), New(nullptr), Existing(nullptr), AddResult(false),
    164             AnonymousDeclNumber(0), TypedefNameForLinkage(nullptr) {}
    165 
    166       FindExistingResult(ASTReader &Reader, NamedDecl *New, NamedDecl *Existing,
    167                          unsigned AnonymousDeclNumber,
    168                          IdentifierInfo *TypedefNameForLinkage)
    169           : Reader(Reader), New(New), Existing(Existing), AddResult(true),
    170             AnonymousDeclNumber(AnonymousDeclNumber),
    171             TypedefNameForLinkage(TypedefNameForLinkage) {}
    172 
    173       FindExistingResult(const FindExistingResult &Other)
    174           : Reader(Other.Reader), New(Other.New), Existing(Other.Existing),
    175             AddResult(Other.AddResult),
    176             AnonymousDeclNumber(Other.AnonymousDeclNumber),
    177             TypedefNameForLinkage(Other.TypedefNameForLinkage) {
    178         Other.AddResult = false;
    179       }
    180 
    181       ~FindExistingResult();
    182 
    183       /// \brief Suppress the addition of this result into the known set of
    184       /// names.
    185       void suppress() { AddResult = false; }
    186 
    187       operator NamedDecl*() const { return Existing; }
    188 
    189       template<typename T>
    190       operator T*() const { return dyn_cast_or_null<T>(Existing); }
    191     };
    192 
    193     static DeclContext *getPrimaryContextForMerging(ASTReader &Reader,
    194                                                     DeclContext *DC);
    195     FindExistingResult findExisting(NamedDecl *D);
    196 
    197   public:
    198     ASTDeclReader(ASTReader &Reader, ModuleFile &F, DeclID thisDeclID,
    199                   unsigned RawLocation, const RecordData &Record, unsigned &Idx)
    200         : Reader(Reader), F(F), ThisDeclID(thisDeclID),
    201           RawLocation(RawLocation), Record(Record), Idx(Idx),
    202           TypeIDForTypeDecl(0), NamedDeclForTagDecl(0),
    203           TypedefNameForLinkage(nullptr), HasPendingBody(false) {}
    204 
    205     template <typename DeclT>
    206     static Decl *getMostRecentDeclImpl(Redeclarable<DeclT> *D);
    207     static Decl *getMostRecentDeclImpl(...);
    208     static Decl *getMostRecentDecl(Decl *D);
    209 
    210     template <typename DeclT>
    211     static void attachPreviousDeclImpl(ASTReader &Reader,
    212                                        Redeclarable<DeclT> *D, Decl *Previous,
    213                                        Decl *Canon);
    214     static void attachPreviousDeclImpl(ASTReader &Reader, ...);
    215     static void attachPreviousDecl(ASTReader &Reader, Decl *D, Decl *Previous,
    216                                    Decl *Canon);
    217 
    218     template <typename DeclT>
    219     static void attachLatestDeclImpl(Redeclarable<DeclT> *D, Decl *Latest);
    220     static void attachLatestDeclImpl(...);
    221     static void attachLatestDecl(Decl *D, Decl *latest);
    222 
    223     template <typename DeclT>
    224     static void markIncompleteDeclChainImpl(Redeclarable<DeclT> *D);
    225     static void markIncompleteDeclChainImpl(...);
    226 
    227     /// \brief Determine whether this declaration has a pending body.
    228     bool hasPendingBody() const { return HasPendingBody; }
    229 
    230     void Visit(Decl *D);
    231 
    232     void UpdateDecl(Decl *D, ModuleFile &ModuleFile,
    233                     const RecordData &Record);
    234 
    235     static void setNextObjCCategory(ObjCCategoryDecl *Cat,
    236                                     ObjCCategoryDecl *Next) {
    237       Cat->NextClassCategory = Next;
    238     }
    239 
    240     void VisitDecl(Decl *D);
    241     void VisitTranslationUnitDecl(TranslationUnitDecl *TU);
    242     void VisitNamedDecl(NamedDecl *ND);
    243     void VisitLabelDecl(LabelDecl *LD);
    244     void VisitNamespaceDecl(NamespaceDecl *D);
    245     void VisitUsingDirectiveDecl(UsingDirectiveDecl *D);
    246     void VisitNamespaceAliasDecl(NamespaceAliasDecl *D);
    247     void VisitTypeDecl(TypeDecl *TD);
    248     RedeclarableResult VisitTypedefNameDecl(TypedefNameDecl *TD);
    249     void VisitTypedefDecl(TypedefDecl *TD);
    250     void VisitTypeAliasDecl(TypeAliasDecl *TD);
    251     void VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D);
    252     RedeclarableResult VisitTagDecl(TagDecl *TD);
    253     void VisitEnumDecl(EnumDecl *ED);
    254     RedeclarableResult VisitRecordDeclImpl(RecordDecl *RD);
    255     void VisitRecordDecl(RecordDecl *RD) { VisitRecordDeclImpl(RD); }
    256     RedeclarableResult VisitCXXRecordDeclImpl(CXXRecordDecl *D);
    257     void VisitCXXRecordDecl(CXXRecordDecl *D) { VisitCXXRecordDeclImpl(D); }
    258     RedeclarableResult VisitClassTemplateSpecializationDeclImpl(
    259                                             ClassTemplateSpecializationDecl *D);
    260     void VisitClassTemplateSpecializationDecl(
    261         ClassTemplateSpecializationDecl *D) {
    262       VisitClassTemplateSpecializationDeclImpl(D);
    263     }
    264     void VisitClassTemplatePartialSpecializationDecl(
    265                                      ClassTemplatePartialSpecializationDecl *D);
    266     void VisitClassScopeFunctionSpecializationDecl(
    267                                        ClassScopeFunctionSpecializationDecl *D);
    268     RedeclarableResult
    269     VisitVarTemplateSpecializationDeclImpl(VarTemplateSpecializationDecl *D);
    270     void VisitVarTemplateSpecializationDecl(VarTemplateSpecializationDecl *D) {
    271       VisitVarTemplateSpecializationDeclImpl(D);
    272     }
    273     void VisitVarTemplatePartialSpecializationDecl(
    274         VarTemplatePartialSpecializationDecl *D);
    275     void VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D);
    276     void VisitValueDecl(ValueDecl *VD);
    277     void VisitEnumConstantDecl(EnumConstantDecl *ECD);
    278     void VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D);
    279     void VisitDeclaratorDecl(DeclaratorDecl *DD);
    280     void VisitFunctionDecl(FunctionDecl *FD);
    281     void VisitCXXMethodDecl(CXXMethodDecl *D);
    282     void VisitCXXConstructorDecl(CXXConstructorDecl *D);
    283     void VisitCXXDestructorDecl(CXXDestructorDecl *D);
    284     void VisitCXXConversionDecl(CXXConversionDecl *D);
    285     void VisitFieldDecl(FieldDecl *FD);
    286     void VisitMSPropertyDecl(MSPropertyDecl *FD);
    287     void VisitIndirectFieldDecl(IndirectFieldDecl *FD);
    288     RedeclarableResult VisitVarDeclImpl(VarDecl *D);
    289     void VisitVarDecl(VarDecl *VD) { VisitVarDeclImpl(VD); }
    290     void VisitImplicitParamDecl(ImplicitParamDecl *PD);
    291     void VisitParmVarDecl(ParmVarDecl *PD);
    292     void VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D);
    293     DeclID VisitTemplateDecl(TemplateDecl *D);
    294     RedeclarableResult VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D);
    295     void VisitClassTemplateDecl(ClassTemplateDecl *D);
    296     void VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D);
    297     void VisitVarTemplateDecl(VarTemplateDecl *D);
    298     void VisitFunctionTemplateDecl(FunctionTemplateDecl *D);
    299     void VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D);
    300     void VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D);
    301     void VisitUsingDecl(UsingDecl *D);
    302     void VisitUsingShadowDecl(UsingShadowDecl *D);
    303     void VisitLinkageSpecDecl(LinkageSpecDecl *D);
    304     void VisitFileScopeAsmDecl(FileScopeAsmDecl *AD);
    305     void VisitImportDecl(ImportDecl *D);
    306     void VisitAccessSpecDecl(AccessSpecDecl *D);
    307     void VisitFriendDecl(FriendDecl *D);
    308     void VisitFriendTemplateDecl(FriendTemplateDecl *D);
    309     void VisitStaticAssertDecl(StaticAssertDecl *D);
    310     void VisitBlockDecl(BlockDecl *BD);
    311     void VisitCapturedDecl(CapturedDecl *CD);
    312     void VisitEmptyDecl(EmptyDecl *D);
    313 
    314     std::pair<uint64_t, uint64_t> VisitDeclContext(DeclContext *DC);
    315 
    316     template<typename T>
    317     RedeclarableResult VisitRedeclarable(Redeclarable<T> *D);
    318 
    319     template<typename T>
    320     void mergeRedeclarable(Redeclarable<T> *D, RedeclarableResult &Redecl,
    321                            DeclID TemplatePatternID = 0);
    322 
    323     template<typename T>
    324     void mergeRedeclarable(Redeclarable<T> *D, T *Existing,
    325                            RedeclarableResult &Redecl,
    326                            DeclID TemplatePatternID = 0);
    327 
    328     template<typename T>
    329     void mergeMergeable(Mergeable<T> *D);
    330 
    331     void mergeTemplatePattern(RedeclarableTemplateDecl *D,
    332                               RedeclarableTemplateDecl *Existing,
    333                               DeclID DsID, bool IsKeyDecl);
    334 
    335     ObjCTypeParamList *ReadObjCTypeParamList();
    336 
    337     // FIXME: Reorder according to DeclNodes.td?
    338     void VisitObjCMethodDecl(ObjCMethodDecl *D);
    339     void VisitObjCTypeParamDecl(ObjCTypeParamDecl *D);
    340     void VisitObjCContainerDecl(ObjCContainerDecl *D);
    341     void VisitObjCInterfaceDecl(ObjCInterfaceDecl *D);
    342     void VisitObjCIvarDecl(ObjCIvarDecl *D);
    343     void VisitObjCProtocolDecl(ObjCProtocolDecl *D);
    344     void VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *D);
    345     void VisitObjCCategoryDecl(ObjCCategoryDecl *D);
    346     void VisitObjCImplDecl(ObjCImplDecl *D);
    347     void VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D);
    348     void VisitObjCImplementationDecl(ObjCImplementationDecl *D);
    349     void VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *D);
    350     void VisitObjCPropertyDecl(ObjCPropertyDecl *D);
    351     void VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D);
    352     void VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D);
    353 
    354     /// We've merged the definition \p MergedDef into the existing definition
    355     /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
    356     /// visible.
    357     void mergeDefinitionVisibility(NamedDecl *Def, NamedDecl *MergedDef) {
    358       if (Def->isHidden()) {
    359         // If MergedDef is visible or becomes visible, make the definition visible.
    360         if (!MergedDef->isHidden())
    361           Def->Hidden = false;
    362         else if (Reader.getContext().getLangOpts().ModulesLocalVisibility) {
    363           Reader.getContext().mergeDefinitionIntoModule(
    364               Def, MergedDef->getImportedOwningModule(),
    365               /*NotifyListeners*/ false);
    366           Reader.PendingMergedDefinitionsToDeduplicate.insert(Def);
    367         } else {
    368           auto SubmoduleID = MergedDef->getOwningModuleID();
    369           assert(SubmoduleID && "hidden definition in no module");
    370           Reader.HiddenNamesMap[Reader.getSubmodule(SubmoduleID)].push_back(Def);
    371         }
    372       }
    373     }
    374   };
    375 } // end namespace clang
    376 
    377 namespace {
    378 /// Iterator over the redeclarations of a declaration that have already
    379 /// been merged into the same redeclaration chain.
    380 template<typename DeclT>
    381 class MergedRedeclIterator {
    382   DeclT *Start, *Canonical, *Current;
    383 public:
    384   MergedRedeclIterator() : Current(nullptr) {}
    385   MergedRedeclIterator(DeclT *Start)
    386       : Start(Start), Canonical(nullptr), Current(Start) {}
    387 
    388   DeclT *operator*() { return Current; }
    389 
    390   MergedRedeclIterator &operator++() {
    391     if (Current->isFirstDecl()) {
    392       Canonical = Current;
    393       Current = Current->getMostRecentDecl();
    394     } else
    395       Current = Current->getPreviousDecl();
    396 
    397     // If we started in the merged portion, we'll reach our start position
    398     // eventually. Otherwise, we'll never reach it, but the second declaration
    399     // we reached was the canonical declaration, so stop when we see that one
    400     // again.
    401     if (Current == Start || Current == Canonical)
    402       Current = nullptr;
    403     return *this;
    404   }
    405 
    406   friend bool operator!=(const MergedRedeclIterator &A,
    407                          const MergedRedeclIterator &B) {
    408     return A.Current != B.Current;
    409   }
    410 };
    411 } // end anonymous namespace
    412 
    413 template<typename DeclT>
    414 llvm::iterator_range<MergedRedeclIterator<DeclT>> merged_redecls(DeclT *D) {
    415   return llvm::make_range(MergedRedeclIterator<DeclT>(D),
    416                           MergedRedeclIterator<DeclT>());
    417 }
    418 
    419 uint64_t ASTDeclReader::GetCurrentCursorOffset() {
    420   return F.DeclsCursor.GetCurrentBitNo() + F.GlobalBitOffset;
    421 }
    422 
    423 void ASTDeclReader::Visit(Decl *D) {
    424   DeclVisitor<ASTDeclReader, void>::Visit(D);
    425 
    426   if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)) {
    427     if (DD->DeclInfo) {
    428       DeclaratorDecl::ExtInfo *Info =
    429           DD->DeclInfo.get<DeclaratorDecl::ExtInfo *>();
    430       Info->TInfo =
    431           GetTypeSourceInfo(Record, Idx);
    432     }
    433     else {
    434       DD->DeclInfo = GetTypeSourceInfo(Record, Idx);
    435     }
    436   }
    437 
    438   if (TypeDecl *TD = dyn_cast<TypeDecl>(D)) {
    439     // We have a fully initialized TypeDecl. Read its type now.
    440     TD->setTypeForDecl(Reader.GetType(TypeIDForTypeDecl).getTypePtrOrNull());
    441 
    442     // If this is a tag declaration with a typedef name for linkage, it's safe
    443     // to load that typedef now.
    444     if (NamedDeclForTagDecl)
    445       cast<TagDecl>(D)->TypedefNameDeclOrQualifier =
    446           cast<TypedefNameDecl>(Reader.GetDecl(NamedDeclForTagDecl));
    447   } else if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(D)) {
    448     // if we have a fully initialized TypeDecl, we can safely read its type now.
    449     ID->TypeForDecl = Reader.GetType(TypeIDForTypeDecl).getTypePtrOrNull();
    450   } else if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
    451     // FunctionDecl's body was written last after all other Stmts/Exprs.
    452     // We only read it if FD doesn't already have a body (e.g., from another
    453     // module).
    454     // FIXME: Can we diagnose ODR violations somehow?
    455     if (Record[Idx++]) {
    456       if (auto *CD = dyn_cast<CXXConstructorDecl>(FD)) {
    457         CD->NumCtorInitializers = Record[Idx++];
    458         if (CD->NumCtorInitializers)
    459           CD->CtorInitializers =
    460               Reader.ReadCXXCtorInitializersRef(F, Record, Idx);
    461       }
    462       Reader.PendingBodies[FD] = GetCurrentCursorOffset();
    463       HasPendingBody = true;
    464     }
    465   }
    466 }
    467 
    468 void ASTDeclReader::VisitDecl(Decl *D) {
    469   if (D->isTemplateParameter() || D->isTemplateParameterPack() ||
    470       isa<ParmVarDecl>(D)) {
    471     // We don't want to deserialize the DeclContext of a template
    472     // parameter or of a parameter of a function template immediately.   These
    473     // entities might be used in the formulation of its DeclContext (for
    474     // example, a function parameter can be used in decltype() in trailing
    475     // return type of the function).  Use the translation unit DeclContext as a
    476     // placeholder.
    477     GlobalDeclID SemaDCIDForTemplateParmDecl = ReadDeclID(Record, Idx);
    478     GlobalDeclID LexicalDCIDForTemplateParmDecl = ReadDeclID(Record, Idx);
    479     if (!LexicalDCIDForTemplateParmDecl)
    480       LexicalDCIDForTemplateParmDecl = SemaDCIDForTemplateParmDecl;
    481     Reader.addPendingDeclContextInfo(D,
    482                                      SemaDCIDForTemplateParmDecl,
    483                                      LexicalDCIDForTemplateParmDecl);
    484     D->setDeclContext(Reader.getContext().getTranslationUnitDecl());
    485   } else {
    486     DeclContext *SemaDC = ReadDeclAs<DeclContext>(Record, Idx);
    487     DeclContext *LexicalDC = ReadDeclAs<DeclContext>(Record, Idx);
    488     if (!LexicalDC)
    489       LexicalDC = SemaDC;
    490     DeclContext *MergedSemaDC = Reader.MergedDeclContexts.lookup(SemaDC);
    491     // Avoid calling setLexicalDeclContext() directly because it uses
    492     // Decl::getASTContext() internally which is unsafe during derialization.
    493     D->setDeclContextsImpl(MergedSemaDC ? MergedSemaDC : SemaDC, LexicalDC,
    494                            Reader.getContext());
    495   }
    496   D->setLocation(Reader.ReadSourceLocation(F, RawLocation));
    497   D->setInvalidDecl(Record[Idx++]);
    498   if (Record[Idx++]) { // hasAttrs
    499     AttrVec Attrs;
    500     Reader.ReadAttributes(F, Attrs, Record, Idx);
    501     // Avoid calling setAttrs() directly because it uses Decl::getASTContext()
    502     // internally which is unsafe during derialization.
    503     D->setAttrsImpl(Attrs, Reader.getContext());
    504   }
    505   D->setImplicit(Record[Idx++]);
    506   D->Used = Record[Idx++];
    507   D->setReferenced(Record[Idx++]);
    508   D->setTopLevelDeclInObjCContainer(Record[Idx++]);
    509   D->setAccess((AccessSpecifier)Record[Idx++]);
    510   D->FromASTFile = true;
    511   D->setModulePrivate(Record[Idx++]);
    512   D->Hidden = D->isModulePrivate();
    513 
    514   // Determine whether this declaration is part of a (sub)module. If so, it
    515   // may not yet be visible.
    516   if (unsigned SubmoduleID = readSubmoduleID(Record, Idx)) {
    517     // Store the owning submodule ID in the declaration.
    518     D->setOwningModuleID(SubmoduleID);
    519 
    520     if (D->Hidden) {
    521       // Module-private declarations are never visible, so there is no work to do.
    522     } else if (Reader.getContext().getLangOpts().ModulesLocalVisibility) {
    523       // If local visibility is being tracked, this declaration will become
    524       // hidden and visible as the owning module does. Inform Sema that this
    525       // declaration might not be visible.
    526       D->Hidden = true;
    527     } else if (Module *Owner = Reader.getSubmodule(SubmoduleID)) {
    528       if (Owner->NameVisibility != Module::AllVisible) {
    529         // The owning module is not visible. Mark this declaration as hidden.
    530         D->Hidden = true;
    531 
    532         // Note that this declaration was hidden because its owning module is
    533         // not yet visible.
    534         Reader.HiddenNamesMap[Owner].push_back(D);
    535       }
    536     }
    537   }
    538 }
    539 
    540 void ASTDeclReader::VisitTranslationUnitDecl(TranslationUnitDecl *TU) {
    541   llvm_unreachable("Translation units are not serialized");
    542 }
    543 
    544 void ASTDeclReader::VisitNamedDecl(NamedDecl *ND) {
    545   VisitDecl(ND);
    546   ND->setDeclName(Reader.ReadDeclarationName(F, Record, Idx));
    547   AnonymousDeclNumber = Record[Idx++];
    548 }
    549 
    550 void ASTDeclReader::VisitTypeDecl(TypeDecl *TD) {
    551   VisitNamedDecl(TD);
    552   TD->setLocStart(ReadSourceLocation(Record, Idx));
    553   // Delay type reading until after we have fully initialized the decl.
    554   TypeIDForTypeDecl = Reader.getGlobalTypeID(F, Record[Idx++]);
    555 }
    556 
    557 ASTDeclReader::RedeclarableResult
    558 ASTDeclReader::VisitTypedefNameDecl(TypedefNameDecl *TD) {
    559   RedeclarableResult Redecl = VisitRedeclarable(TD);
    560   VisitTypeDecl(TD);
    561   TypeSourceInfo *TInfo = GetTypeSourceInfo(Record, Idx);
    562   if (Record[Idx++]) { // isModed
    563     QualType modedT = Reader.readType(F, Record, Idx);
    564     TD->setModedTypeSourceInfo(TInfo, modedT);
    565   } else
    566     TD->setTypeSourceInfo(TInfo);
    567   return Redecl;
    568 }
    569 
    570 void ASTDeclReader::VisitTypedefDecl(TypedefDecl *TD) {
    571   RedeclarableResult Redecl = VisitTypedefNameDecl(TD);
    572   mergeRedeclarable(TD, Redecl);
    573 }
    574 
    575 void ASTDeclReader::VisitTypeAliasDecl(TypeAliasDecl *TD) {
    576   RedeclarableResult Redecl = VisitTypedefNameDecl(TD);
    577   if (auto *Template = ReadDeclAs<TypeAliasTemplateDecl>(Record, Idx))
    578     // Merged when we merge the template.
    579     TD->setDescribedAliasTemplate(Template);
    580   else
    581     mergeRedeclarable(TD, Redecl);
    582 }
    583 
    584 ASTDeclReader::RedeclarableResult ASTDeclReader::VisitTagDecl(TagDecl *TD) {
    585   RedeclarableResult Redecl = VisitRedeclarable(TD);
    586   VisitTypeDecl(TD);
    587 
    588   TD->IdentifierNamespace = Record[Idx++];
    589   TD->setTagKind((TagDecl::TagKind)Record[Idx++]);
    590   if (!isa<CXXRecordDecl>(TD))
    591     TD->setCompleteDefinition(Record[Idx++]);
    592   TD->setEmbeddedInDeclarator(Record[Idx++]);
    593   TD->setFreeStanding(Record[Idx++]);
    594   TD->setCompleteDefinitionRequired(Record[Idx++]);
    595   TD->setRBraceLoc(ReadSourceLocation(Record, Idx));
    596 
    597   switch (Record[Idx++]) {
    598   case 0:
    599     break;
    600   case 1: { // ExtInfo
    601     TagDecl::ExtInfo *Info = new (Reader.getContext()) TagDecl::ExtInfo();
    602     ReadQualifierInfo(*Info, Record, Idx);
    603     TD->TypedefNameDeclOrQualifier = Info;
    604     break;
    605   }
    606   case 2: // TypedefNameForAnonDecl
    607     NamedDeclForTagDecl = ReadDeclID(Record, Idx);
    608     TypedefNameForLinkage = Reader.GetIdentifierInfo(F, Record, Idx);
    609     break;
    610   default:
    611     llvm_unreachable("unexpected tag info kind");
    612   }
    613 
    614   if (!isa<CXXRecordDecl>(TD))
    615     mergeRedeclarable(TD, Redecl);
    616   return Redecl;
    617 }
    618 
    619 void ASTDeclReader::VisitEnumDecl(EnumDecl *ED) {
    620   VisitTagDecl(ED);
    621   if (TypeSourceInfo *TI = Reader.GetTypeSourceInfo(F, Record, Idx))
    622     ED->setIntegerTypeSourceInfo(TI);
    623   else
    624     ED->setIntegerType(Reader.readType(F, Record, Idx));
    625   ED->setPromotionType(Reader.readType(F, Record, Idx));
    626   ED->setNumPositiveBits(Record[Idx++]);
    627   ED->setNumNegativeBits(Record[Idx++]);
    628   ED->IsScoped = Record[Idx++];
    629   ED->IsScopedUsingClassTag = Record[Idx++];
    630   ED->IsFixed = Record[Idx++];
    631 
    632   // If this is a definition subject to the ODR, and we already have a
    633   // definition, merge this one into it.
    634   if (ED->IsCompleteDefinition &&
    635       Reader.getContext().getLangOpts().Modules &&
    636       Reader.getContext().getLangOpts().CPlusPlus) {
    637     EnumDecl *&OldDef = Reader.EnumDefinitions[ED->getCanonicalDecl()];
    638     if (!OldDef) {
    639       // This is the first time we've seen an imported definition. Look for a
    640       // local definition before deciding that we are the first definition.
    641       for (auto *D : merged_redecls(ED->getCanonicalDecl())) {
    642         if (!D->isFromASTFile() && D->isCompleteDefinition()) {
    643           OldDef = D;
    644           break;
    645         }
    646       }
    647     }
    648     if (OldDef) {
    649       Reader.MergedDeclContexts.insert(std::make_pair(ED, OldDef));
    650       ED->IsCompleteDefinition = false;
    651       mergeDefinitionVisibility(OldDef, ED);
    652     } else {
    653       OldDef = ED;
    654     }
    655   }
    656 
    657   if (EnumDecl *InstED = ReadDeclAs<EnumDecl>(Record, Idx)) {
    658     TemplateSpecializationKind TSK = (TemplateSpecializationKind)Record[Idx++];
    659     SourceLocation POI = ReadSourceLocation(Record, Idx);
    660     ED->setInstantiationOfMemberEnum(Reader.getContext(), InstED, TSK);
    661     ED->getMemberSpecializationInfo()->setPointOfInstantiation(POI);
    662   }
    663 }
    664 
    665 ASTDeclReader::RedeclarableResult
    666 ASTDeclReader::VisitRecordDeclImpl(RecordDecl *RD) {
    667   RedeclarableResult Redecl = VisitTagDecl(RD);
    668   RD->setHasFlexibleArrayMember(Record[Idx++]);
    669   RD->setAnonymousStructOrUnion(Record[Idx++]);
    670   RD->setHasObjectMember(Record[Idx++]);
    671   RD->setHasVolatileMember(Record[Idx++]);
    672   return Redecl;
    673 }
    674 
    675 void ASTDeclReader::VisitValueDecl(ValueDecl *VD) {
    676   VisitNamedDecl(VD);
    677   VD->setType(Reader.readType(F, Record, Idx));
    678 }
    679 
    680 void ASTDeclReader::VisitEnumConstantDecl(EnumConstantDecl *ECD) {
    681   VisitValueDecl(ECD);
    682   if (Record[Idx++])
    683     ECD->setInitExpr(Reader.ReadExpr(F));
    684   ECD->setInitVal(Reader.ReadAPSInt(Record, Idx));
    685   mergeMergeable(ECD);
    686 }
    687 
    688 void ASTDeclReader::VisitDeclaratorDecl(DeclaratorDecl *DD) {
    689   VisitValueDecl(DD);
    690   DD->setInnerLocStart(ReadSourceLocation(Record, Idx));
    691   if (Record[Idx++]) { // hasExtInfo
    692     DeclaratorDecl::ExtInfo *Info
    693         = new (Reader.getContext()) DeclaratorDecl::ExtInfo();
    694     ReadQualifierInfo(*Info, Record, Idx);
    695     DD->DeclInfo = Info;
    696   }
    697 }
    698 
    699 void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) {
    700   RedeclarableResult Redecl = VisitRedeclarable(FD);
    701   VisitDeclaratorDecl(FD);
    702 
    703   ReadDeclarationNameLoc(FD->DNLoc, FD->getDeclName(), Record, Idx);
    704   FD->IdentifierNamespace = Record[Idx++];
    705 
    706   // FunctionDecl's body is handled last at ASTDeclReader::Visit,
    707   // after everything else is read.
    708 
    709   FD->SClass = (StorageClass)Record[Idx++];
    710   FD->IsInline = Record[Idx++];
    711   FD->IsInlineSpecified = Record[Idx++];
    712   FD->IsVirtualAsWritten = Record[Idx++];
    713   FD->IsPure = Record[Idx++];
    714   FD->HasInheritedPrototype = Record[Idx++];
    715   FD->HasWrittenPrototype = Record[Idx++];
    716   FD->IsDeleted = Record[Idx++];
    717   FD->IsTrivial = Record[Idx++];
    718   FD->IsDefaulted = Record[Idx++];
    719   FD->IsExplicitlyDefaulted = Record[Idx++];
    720   FD->HasImplicitReturnZero = Record[Idx++];
    721   FD->IsConstexpr = Record[Idx++];
    722   FD->HasSkippedBody = Record[Idx++];
    723   FD->IsLateTemplateParsed = Record[Idx++];
    724   FD->setCachedLinkage(Linkage(Record[Idx++]));
    725   FD->EndRangeLoc = ReadSourceLocation(Record, Idx);
    726 
    727   switch ((FunctionDecl::TemplatedKind)Record[Idx++]) {
    728   case FunctionDecl::TK_NonTemplate:
    729     mergeRedeclarable(FD, Redecl);
    730     break;
    731   case FunctionDecl::TK_FunctionTemplate:
    732     // Merged when we merge the template.
    733     FD->setDescribedFunctionTemplate(ReadDeclAs<FunctionTemplateDecl>(Record,
    734                                                                       Idx));
    735     break;
    736   case FunctionDecl::TK_MemberSpecialization: {
    737     FunctionDecl *InstFD = ReadDeclAs<FunctionDecl>(Record, Idx);
    738     TemplateSpecializationKind TSK = (TemplateSpecializationKind)Record[Idx++];
    739     SourceLocation POI = ReadSourceLocation(Record, Idx);
    740     FD->setInstantiationOfMemberFunction(Reader.getContext(), InstFD, TSK);
    741     FD->getMemberSpecializationInfo()->setPointOfInstantiation(POI);
    742     mergeRedeclarable(FD, Redecl);
    743     break;
    744   }
    745   case FunctionDecl::TK_FunctionTemplateSpecialization: {
    746     FunctionTemplateDecl *Template = ReadDeclAs<FunctionTemplateDecl>(Record,
    747                                                                       Idx);
    748     TemplateSpecializationKind TSK = (TemplateSpecializationKind)Record[Idx++];
    749 
    750     // Template arguments.
    751     SmallVector<TemplateArgument, 8> TemplArgs;
    752     Reader.ReadTemplateArgumentList(TemplArgs, F, Record, Idx,
    753                                     /*Canonicalize*/ true);
    754 
    755     // Template args as written.
    756     SmallVector<TemplateArgumentLoc, 8> TemplArgLocs;
    757     SourceLocation LAngleLoc, RAngleLoc;
    758     bool HasTemplateArgumentsAsWritten = Record[Idx++];
    759     if (HasTemplateArgumentsAsWritten) {
    760       unsigned NumTemplateArgLocs = Record[Idx++];
    761       TemplArgLocs.reserve(NumTemplateArgLocs);
    762       for (unsigned i=0; i != NumTemplateArgLocs; ++i)
    763         TemplArgLocs.push_back(
    764             Reader.ReadTemplateArgumentLoc(F, Record, Idx));
    765 
    766       LAngleLoc = ReadSourceLocation(Record, Idx);
    767       RAngleLoc = ReadSourceLocation(Record, Idx);
    768     }
    769 
    770     SourceLocation POI = ReadSourceLocation(Record, Idx);
    771 
    772     ASTContext &C = Reader.getContext();
    773     TemplateArgumentList *TemplArgList
    774       = TemplateArgumentList::CreateCopy(C, TemplArgs.data(), TemplArgs.size());
    775     TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
    776     for (unsigned i=0, e = TemplArgLocs.size(); i != e; ++i)
    777       TemplArgsInfo.addArgument(TemplArgLocs[i]);
    778     FunctionTemplateSpecializationInfo *FTInfo
    779         = FunctionTemplateSpecializationInfo::Create(C, FD, Template, TSK,
    780                                                      TemplArgList,
    781                              HasTemplateArgumentsAsWritten ? &TemplArgsInfo
    782                                                            : nullptr,
    783                                                      POI);
    784     FD->TemplateOrSpecialization = FTInfo;
    785 
    786     if (FD->isCanonicalDecl()) { // if canonical add to template's set.
    787       // The template that contains the specializations set. It's not safe to
    788       // use getCanonicalDecl on Template since it may still be initializing.
    789       FunctionTemplateDecl *CanonTemplate
    790         = ReadDeclAs<FunctionTemplateDecl>(Record, Idx);
    791       // Get the InsertPos by FindNodeOrInsertPos() instead of calling
    792       // InsertNode(FTInfo) directly to avoid the getASTContext() call in
    793       // FunctionTemplateSpecializationInfo's Profile().
    794       // We avoid getASTContext because a decl in the parent hierarchy may
    795       // be initializing.
    796       llvm::FoldingSetNodeID ID;
    797       FunctionTemplateSpecializationInfo::Profile(ID, TemplArgs, C);
    798       void *InsertPos = nullptr;
    799       FunctionTemplateDecl::Common *CommonPtr = CanonTemplate->getCommonPtr();
    800       FunctionTemplateSpecializationInfo *ExistingInfo =
    801           CommonPtr->Specializations.FindNodeOrInsertPos(ID, InsertPos);
    802       if (InsertPos)
    803         CommonPtr->Specializations.InsertNode(FTInfo, InsertPos);
    804       else {
    805         assert(Reader.getContext().getLangOpts().Modules &&
    806                "already deserialized this template specialization");
    807         mergeRedeclarable(FD, ExistingInfo->Function, Redecl);
    808       }
    809     }
    810     break;
    811   }
    812   case FunctionDecl::TK_DependentFunctionTemplateSpecialization: {
    813     // Templates.
    814     UnresolvedSet<8> TemplDecls;
    815     unsigned NumTemplates = Record[Idx++];
    816     while (NumTemplates--)
    817       TemplDecls.addDecl(ReadDeclAs<NamedDecl>(Record, Idx));
    818 
    819     // Templates args.
    820     TemplateArgumentListInfo TemplArgs;
    821     unsigned NumArgs = Record[Idx++];
    822     while (NumArgs--)
    823       TemplArgs.addArgument(Reader.ReadTemplateArgumentLoc(F, Record, Idx));
    824     TemplArgs.setLAngleLoc(ReadSourceLocation(Record, Idx));
    825     TemplArgs.setRAngleLoc(ReadSourceLocation(Record, Idx));
    826 
    827     FD->setDependentTemplateSpecialization(Reader.getContext(),
    828                                            TemplDecls, TemplArgs);
    829     // These are not merged; we don't need to merge redeclarations of dependent
    830     // template friends.
    831     break;
    832   }
    833   }
    834 
    835   // Read in the parameters.
    836   unsigned NumParams = Record[Idx++];
    837   SmallVector<ParmVarDecl *, 16> Params;
    838   Params.reserve(NumParams);
    839   for (unsigned I = 0; I != NumParams; ++I)
    840     Params.push_back(ReadDeclAs<ParmVarDecl>(Record, Idx));
    841   FD->setParams(Reader.getContext(), Params);
    842 }
    843 
    844 void ASTDeclReader::VisitObjCMethodDecl(ObjCMethodDecl *MD) {
    845   VisitNamedDecl(MD);
    846   if (Record[Idx++]) {
    847     // Load the body on-demand. Most clients won't care, because method
    848     // definitions rarely show up in headers.
    849     Reader.PendingBodies[MD] = GetCurrentCursorOffset();
    850     HasPendingBody = true;
    851     MD->setSelfDecl(ReadDeclAs<ImplicitParamDecl>(Record, Idx));
    852     MD->setCmdDecl(ReadDeclAs<ImplicitParamDecl>(Record, Idx));
    853   }
    854   MD->setInstanceMethod(Record[Idx++]);
    855   MD->setVariadic(Record[Idx++]);
    856   MD->setPropertyAccessor(Record[Idx++]);
    857   MD->setDefined(Record[Idx++]);
    858   MD->IsOverriding = Record[Idx++];
    859   MD->HasSkippedBody = Record[Idx++];
    860 
    861   MD->IsRedeclaration = Record[Idx++];
    862   MD->HasRedeclaration = Record[Idx++];
    863   if (MD->HasRedeclaration)
    864     Reader.getContext().setObjCMethodRedeclaration(MD,
    865                                        ReadDeclAs<ObjCMethodDecl>(Record, Idx));
    866 
    867   MD->setDeclImplementation((ObjCMethodDecl::ImplementationControl)Record[Idx++]);
    868   MD->setObjCDeclQualifier((Decl::ObjCDeclQualifier)Record[Idx++]);
    869   MD->SetRelatedResultType(Record[Idx++]);
    870   MD->setReturnType(Reader.readType(F, Record, Idx));
    871   MD->setReturnTypeSourceInfo(GetTypeSourceInfo(Record, Idx));
    872   MD->DeclEndLoc = ReadSourceLocation(Record, Idx);
    873   unsigned NumParams = Record[Idx++];
    874   SmallVector<ParmVarDecl *, 16> Params;
    875   Params.reserve(NumParams);
    876   for (unsigned I = 0; I != NumParams; ++I)
    877     Params.push_back(ReadDeclAs<ParmVarDecl>(Record, Idx));
    878 
    879   MD->SelLocsKind = Record[Idx++];
    880   unsigned NumStoredSelLocs = Record[Idx++];
    881   SmallVector<SourceLocation, 16> SelLocs;
    882   SelLocs.reserve(NumStoredSelLocs);
    883   for (unsigned i = 0; i != NumStoredSelLocs; ++i)
    884     SelLocs.push_back(ReadSourceLocation(Record, Idx));
    885 
    886   MD->setParamsAndSelLocs(Reader.getContext(), Params, SelLocs);
    887 }
    888 
    889 void ASTDeclReader::VisitObjCTypeParamDecl(ObjCTypeParamDecl *D) {
    890   VisitTypedefNameDecl(D);
    891 
    892   D->Variance = Record[Idx++];
    893   D->Index = Record[Idx++];
    894   D->VarianceLoc = ReadSourceLocation(Record, Idx);
    895   D->ColonLoc = ReadSourceLocation(Record, Idx);
    896 }
    897 
    898 void ASTDeclReader::VisitObjCContainerDecl(ObjCContainerDecl *CD) {
    899   VisitNamedDecl(CD);
    900   CD->setAtStartLoc(ReadSourceLocation(Record, Idx));
    901   CD->setAtEndRange(ReadSourceRange(Record, Idx));
    902 }
    903 
    904 ObjCTypeParamList *ASTDeclReader::ReadObjCTypeParamList() {
    905   unsigned numParams = Record[Idx++];
    906   if (numParams == 0)
    907     return nullptr;
    908 
    909   SmallVector<ObjCTypeParamDecl *, 4> typeParams;
    910   typeParams.reserve(numParams);
    911   for (unsigned i = 0; i != numParams; ++i) {
    912     auto typeParam = ReadDeclAs<ObjCTypeParamDecl>(Record, Idx);
    913     if (!typeParam)
    914       return nullptr;
    915 
    916     typeParams.push_back(typeParam);
    917   }
    918 
    919   SourceLocation lAngleLoc = ReadSourceLocation(Record, Idx);
    920   SourceLocation rAngleLoc = ReadSourceLocation(Record, Idx);
    921 
    922   return ObjCTypeParamList::create(Reader.getContext(), lAngleLoc,
    923                                    typeParams, rAngleLoc);
    924 }
    925 
    926 void ASTDeclReader::VisitObjCInterfaceDecl(ObjCInterfaceDecl *ID) {
    927   RedeclarableResult Redecl = VisitRedeclarable(ID);
    928   VisitObjCContainerDecl(ID);
    929   TypeIDForTypeDecl = Reader.getGlobalTypeID(F, Record[Idx++]);
    930   mergeRedeclarable(ID, Redecl);
    931 
    932   ID->TypeParamList = ReadObjCTypeParamList();
    933   if (Record[Idx++]) {
    934     // Read the definition.
    935     ID->allocateDefinitionData();
    936 
    937     // Set the definition data of the canonical declaration, so other
    938     // redeclarations will see it.
    939     ID->getCanonicalDecl()->Data = ID->Data;
    940 
    941     ObjCInterfaceDecl::DefinitionData &Data = ID->data();
    942 
    943     // Read the superclass.
    944     Data.SuperClassTInfo = GetTypeSourceInfo(Record, Idx);
    945 
    946     Data.EndLoc = ReadSourceLocation(Record, Idx);
    947     Data.HasDesignatedInitializers = Record[Idx++];
    948 
    949     // Read the directly referenced protocols and their SourceLocations.
    950     unsigned NumProtocols = Record[Idx++];
    951     SmallVector<ObjCProtocolDecl *, 16> Protocols;
    952     Protocols.reserve(NumProtocols);
    953     for (unsigned I = 0; I != NumProtocols; ++I)
    954       Protocols.push_back(ReadDeclAs<ObjCProtocolDecl>(Record, Idx));
    955     SmallVector<SourceLocation, 16> ProtoLocs;
    956     ProtoLocs.reserve(NumProtocols);
    957     for (unsigned I = 0; I != NumProtocols; ++I)
    958       ProtoLocs.push_back(ReadSourceLocation(Record, Idx));
    959     ID->setProtocolList(Protocols.data(), NumProtocols, ProtoLocs.data(),
    960                         Reader.getContext());
    961 
    962     // Read the transitive closure of protocols referenced by this class.
    963     NumProtocols = Record[Idx++];
    964     Protocols.clear();
    965     Protocols.reserve(NumProtocols);
    966     for (unsigned I = 0; I != NumProtocols; ++I)
    967       Protocols.push_back(ReadDeclAs<ObjCProtocolDecl>(Record, Idx));
    968     ID->data().AllReferencedProtocols.set(Protocols.data(), NumProtocols,
    969                                           Reader.getContext());
    970 
    971     // We will rebuild this list lazily.
    972     ID->setIvarList(nullptr);
    973 
    974     // Note that we have deserialized a definition.
    975     Reader.PendingDefinitions.insert(ID);
    976 
    977     // Note that we've loaded this Objective-C class.
    978     Reader.ObjCClassesLoaded.push_back(ID);
    979   } else {
    980     ID->Data = ID->getCanonicalDecl()->Data;
    981   }
    982 }
    983 
    984 void ASTDeclReader::VisitObjCIvarDecl(ObjCIvarDecl *IVD) {
    985   VisitFieldDecl(IVD);
    986   IVD->setAccessControl((ObjCIvarDecl::AccessControl)Record[Idx++]);
    987   // This field will be built lazily.
    988   IVD->setNextIvar(nullptr);
    989   bool synth = Record[Idx++];
    990   IVD->setSynthesize(synth);
    991 }
    992 
    993 void ASTDeclReader::VisitObjCProtocolDecl(ObjCProtocolDecl *PD) {
    994   RedeclarableResult Redecl = VisitRedeclarable(PD);
    995   VisitObjCContainerDecl(PD);
    996   mergeRedeclarable(PD, Redecl);
    997 
    998   if (Record[Idx++]) {
    999     // Read the definition.
   1000     PD->allocateDefinitionData();
   1001 
   1002     // Set the definition data of the canonical declaration, so other
   1003     // redeclarations will see it.
   1004     PD->getCanonicalDecl()->Data = PD->Data;
   1005 
   1006     unsigned NumProtoRefs = Record[Idx++];
   1007     SmallVector<ObjCProtocolDecl *, 16> ProtoRefs;
   1008     ProtoRefs.reserve(NumProtoRefs);
   1009     for (unsigned I = 0; I != NumProtoRefs; ++I)
   1010       ProtoRefs.push_back(ReadDeclAs<ObjCProtocolDecl>(Record, Idx));
   1011     SmallVector<SourceLocation, 16> ProtoLocs;
   1012     ProtoLocs.reserve(NumProtoRefs);
   1013     for (unsigned I = 0; I != NumProtoRefs; ++I)
   1014       ProtoLocs.push_back(ReadSourceLocation(Record, Idx));
   1015     PD->setProtocolList(ProtoRefs.data(), NumProtoRefs, ProtoLocs.data(),
   1016                         Reader.getContext());
   1017 
   1018     // Note that we have deserialized a definition.
   1019     Reader.PendingDefinitions.insert(PD);
   1020   } else {
   1021     PD->Data = PD->getCanonicalDecl()->Data;
   1022   }
   1023 }
   1024 
   1025 void ASTDeclReader::VisitObjCAtDefsFieldDecl(ObjCAtDefsFieldDecl *FD) {
   1026   VisitFieldDecl(FD);
   1027 }
   1028 
   1029 void ASTDeclReader::VisitObjCCategoryDecl(ObjCCategoryDecl *CD) {
   1030   VisitObjCContainerDecl(CD);
   1031   CD->setCategoryNameLoc(ReadSourceLocation(Record, Idx));
   1032   CD->setIvarLBraceLoc(ReadSourceLocation(Record, Idx));
   1033   CD->setIvarRBraceLoc(ReadSourceLocation(Record, Idx));
   1034 
   1035   // Note that this category has been deserialized. We do this before
   1036   // deserializing the interface declaration, so that it will consider this
   1037   /// category.
   1038   Reader.CategoriesDeserialized.insert(CD);
   1039 
   1040   CD->ClassInterface = ReadDeclAs<ObjCInterfaceDecl>(Record, Idx);
   1041   CD->TypeParamList = ReadObjCTypeParamList();
   1042   unsigned NumProtoRefs = Record[Idx++];
   1043   SmallVector<ObjCProtocolDecl *, 16> ProtoRefs;
   1044   ProtoRefs.reserve(NumProtoRefs);
   1045   for (unsigned I = 0; I != NumProtoRefs; ++I)
   1046     ProtoRefs.push_back(ReadDeclAs<ObjCProtocolDecl>(Record, Idx));
   1047   SmallVector<SourceLocation, 16> ProtoLocs;
   1048   ProtoLocs.reserve(NumProtoRefs);
   1049   for (unsigned I = 0; I != NumProtoRefs; ++I)
   1050     ProtoLocs.push_back(ReadSourceLocation(Record, Idx));
   1051   CD->setProtocolList(ProtoRefs.data(), NumProtoRefs, ProtoLocs.data(),
   1052                       Reader.getContext());
   1053 }
   1054 
   1055 void ASTDeclReader::VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *CAD) {
   1056   VisitNamedDecl(CAD);
   1057   CAD->setClassInterface(ReadDeclAs<ObjCInterfaceDecl>(Record, Idx));
   1058 }
   1059 
   1060 void ASTDeclReader::VisitObjCPropertyDecl(ObjCPropertyDecl *D) {
   1061   VisitNamedDecl(D);
   1062   D->setAtLoc(ReadSourceLocation(Record, Idx));
   1063   D->setLParenLoc(ReadSourceLocation(Record, Idx));
   1064   QualType T = Reader.readType(F, Record, Idx);
   1065   TypeSourceInfo *TSI = GetTypeSourceInfo(Record, Idx);
   1066   D->setType(T, TSI);
   1067   D->setPropertyAttributes(
   1068                       (ObjCPropertyDecl::PropertyAttributeKind)Record[Idx++]);
   1069   D->setPropertyAttributesAsWritten(
   1070                       (ObjCPropertyDecl::PropertyAttributeKind)Record[Idx++]);
   1071   D->setPropertyImplementation(
   1072                             (ObjCPropertyDecl::PropertyControl)Record[Idx++]);
   1073   D->setGetterName(Reader.ReadDeclarationName(F,Record, Idx).getObjCSelector());
   1074   D->setSetterName(Reader.ReadDeclarationName(F,Record, Idx).getObjCSelector());
   1075   D->setGetterMethodDecl(ReadDeclAs<ObjCMethodDecl>(Record, Idx));
   1076   D->setSetterMethodDecl(ReadDeclAs<ObjCMethodDecl>(Record, Idx));
   1077   D->setPropertyIvarDecl(ReadDeclAs<ObjCIvarDecl>(Record, Idx));
   1078 }
   1079 
   1080 void ASTDeclReader::VisitObjCImplDecl(ObjCImplDecl *D) {
   1081   VisitObjCContainerDecl(D);
   1082   D->setClassInterface(ReadDeclAs<ObjCInterfaceDecl>(Record, Idx));
   1083 }
   1084 
   1085 void ASTDeclReader::VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D) {
   1086   VisitObjCImplDecl(D);
   1087   D->setIdentifier(Reader.GetIdentifierInfo(F, Record, Idx));
   1088   D->CategoryNameLoc = ReadSourceLocation(Record, Idx);
   1089 }
   1090 
   1091 void ASTDeclReader::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
   1092   VisitObjCImplDecl(D);
   1093   D->setSuperClass(ReadDeclAs<ObjCInterfaceDecl>(Record, Idx));
   1094   D->SuperLoc = ReadSourceLocation(Record, Idx);
   1095   D->setIvarLBraceLoc(ReadSourceLocation(Record, Idx));
   1096   D->setIvarRBraceLoc(ReadSourceLocation(Record, Idx));
   1097   D->setHasNonZeroConstructors(Record[Idx++]);
   1098   D->setHasDestructors(Record[Idx++]);
   1099   D->NumIvarInitializers = Record[Idx++];
   1100   if (D->NumIvarInitializers)
   1101     D->IvarInitializers = Reader.ReadCXXCtorInitializersRef(F, Record, Idx);
   1102 }
   1103 
   1104 void ASTDeclReader::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {
   1105   VisitDecl(D);
   1106   D->setAtLoc(ReadSourceLocation(Record, Idx));
   1107   D->setPropertyDecl(ReadDeclAs<ObjCPropertyDecl>(Record, Idx));
   1108   D->PropertyIvarDecl = ReadDeclAs<ObjCIvarDecl>(Record, Idx);
   1109   D->IvarLoc = ReadSourceLocation(Record, Idx);
   1110   D->setGetterCXXConstructor(Reader.ReadExpr(F));
   1111   D->setSetterCXXAssignment(Reader.ReadExpr(F));
   1112 }
   1113 
   1114 void ASTDeclReader::VisitFieldDecl(FieldDecl *FD) {
   1115   VisitDeclaratorDecl(FD);
   1116   FD->Mutable = Record[Idx++];
   1117   if (int BitWidthOrInitializer = Record[Idx++]) {
   1118     FD->InitStorage.setInt(
   1119           static_cast<FieldDecl::InitStorageKind>(BitWidthOrInitializer - 1));
   1120     if (FD->InitStorage.getInt() == FieldDecl::ISK_CapturedVLAType) {
   1121       // Read captured variable length array.
   1122       FD->InitStorage.setPointer(
   1123           Reader.readType(F, Record, Idx).getAsOpaquePtr());
   1124     } else {
   1125       FD->InitStorage.setPointer(Reader.ReadExpr(F));
   1126     }
   1127   }
   1128   if (!FD->getDeclName()) {
   1129     if (FieldDecl *Tmpl = ReadDeclAs<FieldDecl>(Record, Idx))
   1130       Reader.getContext().setInstantiatedFromUnnamedFieldDecl(FD, Tmpl);
   1131   }
   1132   mergeMergeable(FD);
   1133 }
   1134 
   1135 void ASTDeclReader::VisitMSPropertyDecl(MSPropertyDecl *PD) {
   1136   VisitDeclaratorDecl(PD);
   1137   PD->GetterId = Reader.GetIdentifierInfo(F, Record, Idx);
   1138   PD->SetterId = Reader.GetIdentifierInfo(F, Record, Idx);
   1139 }
   1140 
   1141 void ASTDeclReader::VisitIndirectFieldDecl(IndirectFieldDecl *FD) {
   1142   VisitValueDecl(FD);
   1143 
   1144   FD->ChainingSize = Record[Idx++];
   1145   assert(FD->ChainingSize >= 2 && "Anonymous chaining must be >= 2");
   1146   FD->Chaining = new (Reader.getContext())NamedDecl*[FD->ChainingSize];
   1147 
   1148   for (unsigned I = 0; I != FD->ChainingSize; ++I)
   1149     FD->Chaining[I] = ReadDeclAs<NamedDecl>(Record, Idx);
   1150 
   1151   mergeMergeable(FD);
   1152 }
   1153 
   1154 ASTDeclReader::RedeclarableResult ASTDeclReader::VisitVarDeclImpl(VarDecl *VD) {
   1155   RedeclarableResult Redecl = VisitRedeclarable(VD);
   1156   VisitDeclaratorDecl(VD);
   1157 
   1158   VD->VarDeclBits.SClass = (StorageClass)Record[Idx++];
   1159   VD->VarDeclBits.TSCSpec = Record[Idx++];
   1160   VD->VarDeclBits.InitStyle = Record[Idx++];
   1161   if (!isa<ParmVarDecl>(VD)) {
   1162     VD->NonParmVarDeclBits.ExceptionVar = Record[Idx++];
   1163     VD->NonParmVarDeclBits.NRVOVariable = Record[Idx++];
   1164     VD->NonParmVarDeclBits.CXXForRangeDecl = Record[Idx++];
   1165     VD->NonParmVarDeclBits.ARCPseudoStrong = Record[Idx++];
   1166     VD->NonParmVarDeclBits.IsConstexpr = Record[Idx++];
   1167     VD->NonParmVarDeclBits.IsInitCapture = Record[Idx++];
   1168     VD->NonParmVarDeclBits.PreviousDeclInSameBlockScope = Record[Idx++];
   1169   }
   1170   Linkage VarLinkage = Linkage(Record[Idx++]);
   1171   VD->setCachedLinkage(VarLinkage);
   1172 
   1173   // Reconstruct the one piece of the IdentifierNamespace that we need.
   1174   if (VD->getStorageClass() == SC_Extern && VarLinkage != NoLinkage &&
   1175       VD->getLexicalDeclContext()->isFunctionOrMethod())
   1176     VD->setLocalExternDecl();
   1177 
   1178   if (uint64_t Val = Record[Idx++]) {
   1179     VD->setInit(Reader.ReadExpr(F));
   1180     if (Val > 1) {
   1181       EvaluatedStmt *Eval = VD->ensureEvaluatedStmt();
   1182       Eval->CheckedICE = true;
   1183       Eval->IsICE = Val == 3;
   1184     }
   1185   }
   1186 
   1187   enum VarKind {
   1188     VarNotTemplate = 0, VarTemplate, StaticDataMemberSpecialization
   1189   };
   1190   switch ((VarKind)Record[Idx++]) {
   1191   case VarNotTemplate:
   1192     // Only true variables (not parameters or implicit parameters) can be
   1193     // merged; the other kinds are not really redeclarable at all.
   1194     if (!isa<ParmVarDecl>(VD) && !isa<ImplicitParamDecl>(VD) &&
   1195         !isa<VarTemplateSpecializationDecl>(VD))
   1196       mergeRedeclarable(VD, Redecl);
   1197     break;
   1198   case VarTemplate:
   1199     // Merged when we merge the template.
   1200     VD->setDescribedVarTemplate(ReadDeclAs<VarTemplateDecl>(Record, Idx));
   1201     break;
   1202   case StaticDataMemberSpecialization: { // HasMemberSpecializationInfo.
   1203     VarDecl *Tmpl = ReadDeclAs<VarDecl>(Record, Idx);
   1204     TemplateSpecializationKind TSK = (TemplateSpecializationKind)Record[Idx++];
   1205     SourceLocation POI = ReadSourceLocation(Record, Idx);
   1206     Reader.getContext().setInstantiatedFromStaticDataMember(VD, Tmpl, TSK,POI);
   1207     mergeRedeclarable(VD, Redecl);
   1208     break;
   1209   }
   1210   }
   1211 
   1212   return Redecl;
   1213 }
   1214 
   1215 void ASTDeclReader::VisitImplicitParamDecl(ImplicitParamDecl *PD) {
   1216   VisitVarDecl(PD);
   1217 }
   1218 
   1219 void ASTDeclReader::VisitParmVarDecl(ParmVarDecl *PD) {
   1220   VisitVarDecl(PD);
   1221   unsigned isObjCMethodParam = Record[Idx++];
   1222   unsigned scopeDepth = Record[Idx++];
   1223   unsigned scopeIndex = Record[Idx++];
   1224   unsigned declQualifier = Record[Idx++];
   1225   if (isObjCMethodParam) {
   1226     assert(scopeDepth == 0);
   1227     PD->setObjCMethodScopeInfo(scopeIndex);
   1228     PD->ParmVarDeclBits.ScopeDepthOrObjCQuals = declQualifier;
   1229   } else {
   1230     PD->setScopeInfo(scopeDepth, scopeIndex);
   1231   }
   1232   PD->ParmVarDeclBits.IsKNRPromoted = Record[Idx++];
   1233   PD->ParmVarDeclBits.HasInheritedDefaultArg = Record[Idx++];
   1234   if (Record[Idx++]) // hasUninstantiatedDefaultArg.
   1235     PD->setUninstantiatedDefaultArg(Reader.ReadExpr(F));
   1236 
   1237   // FIXME: If this is a redeclaration of a function from another module, handle
   1238   // inheritance of default arguments.
   1239 }
   1240 
   1241 void ASTDeclReader::VisitFileScopeAsmDecl(FileScopeAsmDecl *AD) {
   1242   VisitDecl(AD);
   1243   AD->setAsmString(cast<StringLiteral>(Reader.ReadExpr(F)));
   1244   AD->setRParenLoc(ReadSourceLocation(Record, Idx));
   1245 }
   1246 
   1247 void ASTDeclReader::VisitBlockDecl(BlockDecl *BD) {
   1248   VisitDecl(BD);
   1249   BD->setBody(cast_or_null<CompoundStmt>(Reader.ReadStmt(F)));
   1250   BD->setSignatureAsWritten(GetTypeSourceInfo(Record, Idx));
   1251   unsigned NumParams = Record[Idx++];
   1252   SmallVector<ParmVarDecl *, 16> Params;
   1253   Params.reserve(NumParams);
   1254   for (unsigned I = 0; I != NumParams; ++I)
   1255     Params.push_back(ReadDeclAs<ParmVarDecl>(Record, Idx));
   1256   BD->setParams(Params);
   1257 
   1258   BD->setIsVariadic(Record[Idx++]);
   1259   BD->setBlockMissingReturnType(Record[Idx++]);
   1260   BD->setIsConversionFromLambda(Record[Idx++]);
   1261 
   1262   bool capturesCXXThis = Record[Idx++];
   1263   unsigned numCaptures = Record[Idx++];
   1264   SmallVector<BlockDecl::Capture, 16> captures;
   1265   captures.reserve(numCaptures);
   1266   for (unsigned i = 0; i != numCaptures; ++i) {
   1267     VarDecl *decl = ReadDeclAs<VarDecl>(Record, Idx);
   1268     unsigned flags = Record[Idx++];
   1269     bool byRef = (flags & 1);
   1270     bool nested = (flags & 2);
   1271     Expr *copyExpr = ((flags & 4) ? Reader.ReadExpr(F) : nullptr);
   1272 
   1273     captures.push_back(BlockDecl::Capture(decl, byRef, nested, copyExpr));
   1274   }
   1275   BD->setCaptures(Reader.getContext(), captures, capturesCXXThis);
   1276 }
   1277 
   1278 void ASTDeclReader::VisitCapturedDecl(CapturedDecl *CD) {
   1279   VisitDecl(CD);
   1280   unsigned ContextParamPos = Record[Idx++];
   1281   CD->setNothrow(Record[Idx++] != 0);
   1282   // Body is set by VisitCapturedStmt.
   1283   for (unsigned I = 0; I < CD->NumParams; ++I) {
   1284     if (I != ContextParamPos)
   1285       CD->setParam(I, ReadDeclAs<ImplicitParamDecl>(Record, Idx));
   1286     else
   1287       CD->setContextParam(I, ReadDeclAs<ImplicitParamDecl>(Record, Idx));
   1288   }
   1289 }
   1290 
   1291 void ASTDeclReader::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
   1292   VisitDecl(D);
   1293   D->setLanguage((LinkageSpecDecl::LanguageIDs)Record[Idx++]);
   1294   D->setExternLoc(ReadSourceLocation(Record, Idx));
   1295   D->setRBraceLoc(ReadSourceLocation(Record, Idx));
   1296 }
   1297 
   1298 void ASTDeclReader::VisitLabelDecl(LabelDecl *D) {
   1299   VisitNamedDecl(D);
   1300   D->setLocStart(ReadSourceLocation(Record, Idx));
   1301 }
   1302 
   1303 void ASTDeclReader::VisitNamespaceDecl(NamespaceDecl *D) {
   1304   RedeclarableResult Redecl = VisitRedeclarable(D);
   1305   VisitNamedDecl(D);
   1306   D->setInline(Record[Idx++]);
   1307   D->LocStart = ReadSourceLocation(Record, Idx);
   1308   D->RBraceLoc = ReadSourceLocation(Record, Idx);
   1309 
   1310   // Defer loading the anonymous namespace until we've finished merging
   1311   // this namespace; loading it might load a later declaration of the
   1312   // same namespace, and we have an invariant that older declarations
   1313   // get merged before newer ones try to merge.
   1314   GlobalDeclID AnonNamespace = 0;
   1315   if (Redecl.getFirstID() == ThisDeclID) {
   1316     AnonNamespace = ReadDeclID(Record, Idx);
   1317   } else {
   1318     // Link this namespace back to the first declaration, which has already
   1319     // been deserialized.
   1320     D->AnonOrFirstNamespaceAndInline.setPointer(D->getFirstDecl());
   1321   }
   1322 
   1323   mergeRedeclarable(D, Redecl);
   1324 
   1325   if (AnonNamespace) {
   1326     // Each module has its own anonymous namespace, which is disjoint from
   1327     // any other module's anonymous namespaces, so don't attach the anonymous
   1328     // namespace at all.
   1329     NamespaceDecl *Anon = cast<NamespaceDecl>(Reader.GetDecl(AnonNamespace));
   1330     if (F.Kind != MK_ImplicitModule && F.Kind != MK_ExplicitModule)
   1331       D->setAnonymousNamespace(Anon);
   1332   }
   1333 }
   1334 
   1335 void ASTDeclReader::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
   1336   RedeclarableResult Redecl = VisitRedeclarable(D);
   1337   VisitNamedDecl(D);
   1338   D->NamespaceLoc = ReadSourceLocation(Record, Idx);
   1339   D->IdentLoc = ReadSourceLocation(Record, Idx);
   1340   D->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
   1341   D->Namespace = ReadDeclAs<NamedDecl>(Record, Idx);
   1342   mergeRedeclarable(D, Redecl);
   1343 }
   1344 
   1345 void ASTDeclReader::VisitUsingDecl(UsingDecl *D) {
   1346   VisitNamedDecl(D);
   1347   D->setUsingLoc(ReadSourceLocation(Record, Idx));
   1348   D->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
   1349   ReadDeclarationNameLoc(D->DNLoc, D->getDeclName(), Record, Idx);
   1350   D->FirstUsingShadow.setPointer(ReadDeclAs<UsingShadowDecl>(Record, Idx));
   1351   D->setTypename(Record[Idx++]);
   1352   if (NamedDecl *Pattern = ReadDeclAs<NamedDecl>(Record, Idx))
   1353     Reader.getContext().setInstantiatedFromUsingDecl(D, Pattern);
   1354   mergeMergeable(D);
   1355 }
   1356 
   1357 void ASTDeclReader::VisitUsingShadowDecl(UsingShadowDecl *D) {
   1358   RedeclarableResult Redecl = VisitRedeclarable(D);
   1359   VisitNamedDecl(D);
   1360   D->setTargetDecl(ReadDeclAs<NamedDecl>(Record, Idx));
   1361   D->UsingOrNextShadow = ReadDeclAs<NamedDecl>(Record, Idx);
   1362   UsingShadowDecl *Pattern = ReadDeclAs<UsingShadowDecl>(Record, Idx);
   1363   if (Pattern)
   1364     Reader.getContext().setInstantiatedFromUsingShadowDecl(D, Pattern);
   1365   mergeRedeclarable(D, Redecl);
   1366 }
   1367 
   1368 void ASTDeclReader::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
   1369   VisitNamedDecl(D);
   1370   D->UsingLoc = ReadSourceLocation(Record, Idx);
   1371   D->NamespaceLoc = ReadSourceLocation(Record, Idx);
   1372   D->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
   1373   D->NominatedNamespace = ReadDeclAs<NamedDecl>(Record, Idx);
   1374   D->CommonAncestor = ReadDeclAs<DeclContext>(Record, Idx);
   1375 }
   1376 
   1377 void ASTDeclReader::VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D) {
   1378   VisitValueDecl(D);
   1379   D->setUsingLoc(ReadSourceLocation(Record, Idx));
   1380   D->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
   1381   ReadDeclarationNameLoc(D->DNLoc, D->getDeclName(), Record, Idx);
   1382   mergeMergeable(D);
   1383 }
   1384 
   1385 void ASTDeclReader::VisitUnresolvedUsingTypenameDecl(
   1386                                                UnresolvedUsingTypenameDecl *D) {
   1387   VisitTypeDecl(D);
   1388   D->TypenameLocation = ReadSourceLocation(Record, Idx);
   1389   D->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
   1390   mergeMergeable(D);
   1391 }
   1392 
   1393 void ASTDeclReader::ReadCXXDefinitionData(
   1394                                    struct CXXRecordDecl::DefinitionData &Data,
   1395                                    const RecordData &Record, unsigned &Idx) {
   1396   // Note: the caller has deserialized the IsLambda bit already.
   1397   Data.UserDeclaredConstructor = Record[Idx++];
   1398   Data.UserDeclaredSpecialMembers = Record[Idx++];
   1399   Data.Aggregate = Record[Idx++];
   1400   Data.PlainOldData = Record[Idx++];
   1401   Data.Empty = Record[Idx++];
   1402   Data.Polymorphic = Record[Idx++];
   1403   Data.Abstract = Record[Idx++];
   1404   Data.IsStandardLayout = Record[Idx++];
   1405   Data.HasNoNonEmptyBases = Record[Idx++];
   1406   Data.HasPrivateFields = Record[Idx++];
   1407   Data.HasProtectedFields = Record[Idx++];
   1408   Data.HasPublicFields = Record[Idx++];
   1409   Data.HasMutableFields = Record[Idx++];
   1410   Data.HasVariantMembers = Record[Idx++];
   1411   Data.HasOnlyCMembers = Record[Idx++];
   1412   Data.HasInClassInitializer = Record[Idx++];
   1413   Data.HasUninitializedReferenceMember = Record[Idx++];
   1414   Data.NeedOverloadResolutionForMoveConstructor = Record[Idx++];
   1415   Data.NeedOverloadResolutionForMoveAssignment = Record[Idx++];
   1416   Data.NeedOverloadResolutionForDestructor = Record[Idx++];
   1417   Data.DefaultedMoveConstructorIsDeleted = Record[Idx++];
   1418   Data.DefaultedMoveAssignmentIsDeleted = Record[Idx++];
   1419   Data.DefaultedDestructorIsDeleted = Record[Idx++];
   1420   Data.HasTrivialSpecialMembers = Record[Idx++];
   1421   Data.DeclaredNonTrivialSpecialMembers = Record[Idx++];
   1422   Data.HasIrrelevantDestructor = Record[Idx++];
   1423   Data.HasConstexprNonCopyMoveConstructor = Record[Idx++];
   1424   Data.DefaultedDefaultConstructorIsConstexpr = Record[Idx++];
   1425   Data.HasConstexprDefaultConstructor = Record[Idx++];
   1426   Data.HasNonLiteralTypeFieldsOrBases = Record[Idx++];
   1427   Data.ComputedVisibleConversions = Record[Idx++];
   1428   Data.UserProvidedDefaultConstructor = Record[Idx++];
   1429   Data.DeclaredSpecialMembers = Record[Idx++];
   1430   Data.ImplicitCopyConstructorHasConstParam = Record[Idx++];
   1431   Data.ImplicitCopyAssignmentHasConstParam = Record[Idx++];
   1432   Data.HasDeclaredCopyConstructorWithConstParam = Record[Idx++];
   1433   Data.HasDeclaredCopyAssignmentWithConstParam = Record[Idx++];
   1434 
   1435   Data.NumBases = Record[Idx++];
   1436   if (Data.NumBases)
   1437     Data.Bases = Reader.readCXXBaseSpecifiers(F, Record, Idx);
   1438   Data.NumVBases = Record[Idx++];
   1439   if (Data.NumVBases)
   1440     Data.VBases = Reader.readCXXBaseSpecifiers(F, Record, Idx);
   1441 
   1442   Reader.ReadUnresolvedSet(F, Data.Conversions, Record, Idx);
   1443   Reader.ReadUnresolvedSet(F, Data.VisibleConversions, Record, Idx);
   1444   assert(Data.Definition && "Data.Definition should be already set!");
   1445   Data.FirstFriend = ReadDeclID(Record, Idx);
   1446 
   1447   if (Data.IsLambda) {
   1448     typedef LambdaCapture Capture;
   1449     CXXRecordDecl::LambdaDefinitionData &Lambda
   1450       = static_cast<CXXRecordDecl::LambdaDefinitionData &>(Data);
   1451     Lambda.Dependent = Record[Idx++];
   1452     Lambda.IsGenericLambda = Record[Idx++];
   1453     Lambda.CaptureDefault = Record[Idx++];
   1454     Lambda.NumCaptures = Record[Idx++];
   1455     Lambda.NumExplicitCaptures = Record[Idx++];
   1456     Lambda.ManglingNumber = Record[Idx++];
   1457     Lambda.ContextDecl = ReadDecl(Record, Idx);
   1458     Lambda.Captures
   1459       = (Capture*)Reader.Context.Allocate(sizeof(Capture)*Lambda.NumCaptures);
   1460     Capture *ToCapture = Lambda.Captures;
   1461     Lambda.MethodTyInfo = GetTypeSourceInfo(Record, Idx);
   1462     for (unsigned I = 0, N = Lambda.NumCaptures; I != N; ++I) {
   1463       SourceLocation Loc = ReadSourceLocation(Record, Idx);
   1464       bool IsImplicit = Record[Idx++];
   1465       LambdaCaptureKind Kind = static_cast<LambdaCaptureKind>(Record[Idx++]);
   1466       switch (Kind) {
   1467       case LCK_This:
   1468       case LCK_VLAType:
   1469         *ToCapture++ = Capture(Loc, IsImplicit, Kind, nullptr,SourceLocation());
   1470         break;
   1471       case LCK_ByCopy:
   1472       case LCK_ByRef:
   1473         VarDecl *Var = ReadDeclAs<VarDecl>(Record, Idx);
   1474         SourceLocation EllipsisLoc = ReadSourceLocation(Record, Idx);
   1475         *ToCapture++ = Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
   1476         break;
   1477       }
   1478     }
   1479   }
   1480 }
   1481 
   1482 void ASTDeclReader::MergeDefinitionData(
   1483     CXXRecordDecl *D, struct CXXRecordDecl::DefinitionData &&MergeDD) {
   1484   assert(D->DefinitionData.getNotUpdated() &&
   1485          "merging class definition into non-definition");
   1486   auto &DD = *D->DefinitionData.getNotUpdated();
   1487 
   1488   if (DD.Definition != MergeDD.Definition) {
   1489     // Track that we merged the definitions.
   1490     Reader.MergedDeclContexts.insert(std::make_pair(MergeDD.Definition,
   1491                                                     DD.Definition));
   1492     Reader.PendingDefinitions.erase(MergeDD.Definition);
   1493     MergeDD.Definition->IsCompleteDefinition = false;
   1494     mergeDefinitionVisibility(DD.Definition, MergeDD.Definition);
   1495     assert(Reader.Lookups.find(MergeDD.Definition) == Reader.Lookups.end() &&
   1496            "already loaded pending lookups for merged definition");
   1497   }
   1498 
   1499   auto PFDI = Reader.PendingFakeDefinitionData.find(&DD);
   1500   if (PFDI != Reader.PendingFakeDefinitionData.end() &&
   1501       PFDI->second == ASTReader::PendingFakeDefinitionKind::Fake) {
   1502     // We faked up this definition data because we found a class for which we'd
   1503     // not yet loaded the definition. Replace it with the real thing now.
   1504     assert(!DD.IsLambda && !MergeDD.IsLambda && "faked up lambda definition?");
   1505     PFDI->second = ASTReader::PendingFakeDefinitionKind::FakeLoaded;
   1506 
   1507     // Don't change which declaration is the definition; that is required
   1508     // to be invariant once we select it.
   1509     auto *Def = DD.Definition;
   1510     DD = std::move(MergeDD);
   1511     DD.Definition = Def;
   1512     return;
   1513   }
   1514 
   1515   // FIXME: Move this out into a .def file?
   1516   bool DetectedOdrViolation = false;
   1517 #define OR_FIELD(Field) DD.Field |= MergeDD.Field;
   1518 #define MATCH_FIELD(Field) \
   1519     DetectedOdrViolation |= DD.Field != MergeDD.Field; \
   1520     OR_FIELD(Field)
   1521   MATCH_FIELD(UserDeclaredConstructor)
   1522   MATCH_FIELD(UserDeclaredSpecialMembers)
   1523   MATCH_FIELD(Aggregate)
   1524   MATCH_FIELD(PlainOldData)
   1525   MATCH_FIELD(Empty)
   1526   MATCH_FIELD(Polymorphic)
   1527   MATCH_FIELD(Abstract)
   1528   MATCH_FIELD(IsStandardLayout)
   1529   MATCH_FIELD(HasNoNonEmptyBases)
   1530   MATCH_FIELD(HasPrivateFields)
   1531   MATCH_FIELD(HasProtectedFields)
   1532   MATCH_FIELD(HasPublicFields)
   1533   MATCH_FIELD(HasMutableFields)
   1534   MATCH_FIELD(HasVariantMembers)
   1535   MATCH_FIELD(HasOnlyCMembers)
   1536   MATCH_FIELD(HasInClassInitializer)
   1537   MATCH_FIELD(HasUninitializedReferenceMember)
   1538   MATCH_FIELD(NeedOverloadResolutionForMoveConstructor)
   1539   MATCH_FIELD(NeedOverloadResolutionForMoveAssignment)
   1540   MATCH_FIELD(NeedOverloadResolutionForDestructor)
   1541   MATCH_FIELD(DefaultedMoveConstructorIsDeleted)
   1542   MATCH_FIELD(DefaultedMoveAssignmentIsDeleted)
   1543   MATCH_FIELD(DefaultedDestructorIsDeleted)
   1544   OR_FIELD(HasTrivialSpecialMembers)
   1545   OR_FIELD(DeclaredNonTrivialSpecialMembers)
   1546   MATCH_FIELD(HasIrrelevantDestructor)
   1547   OR_FIELD(HasConstexprNonCopyMoveConstructor)
   1548   MATCH_FIELD(DefaultedDefaultConstructorIsConstexpr)
   1549   OR_FIELD(HasConstexprDefaultConstructor)
   1550   MATCH_FIELD(HasNonLiteralTypeFieldsOrBases)
   1551   // ComputedVisibleConversions is handled below.
   1552   MATCH_FIELD(UserProvidedDefaultConstructor)
   1553   OR_FIELD(DeclaredSpecialMembers)
   1554   MATCH_FIELD(ImplicitCopyConstructorHasConstParam)
   1555   MATCH_FIELD(ImplicitCopyAssignmentHasConstParam)
   1556   OR_FIELD(HasDeclaredCopyConstructorWithConstParam)
   1557   OR_FIELD(HasDeclaredCopyAssignmentWithConstParam)
   1558   MATCH_FIELD(IsLambda)
   1559 #undef OR_FIELD
   1560 #undef MATCH_FIELD
   1561 
   1562   if (DD.NumBases != MergeDD.NumBases || DD.NumVBases != MergeDD.NumVBases)
   1563     DetectedOdrViolation = true;
   1564   // FIXME: Issue a diagnostic if the base classes don't match when we come
   1565   // to lazily load them.
   1566 
   1567   // FIXME: Issue a diagnostic if the list of conversion functions doesn't
   1568   // match when we come to lazily load them.
   1569   if (MergeDD.ComputedVisibleConversions && !DD.ComputedVisibleConversions) {
   1570     DD.VisibleConversions = std::move(MergeDD.VisibleConversions);
   1571     DD.ComputedVisibleConversions = true;
   1572   }
   1573 
   1574   // FIXME: Issue a diagnostic if FirstFriend doesn't match when we come to
   1575   // lazily load it.
   1576 
   1577   if (DD.IsLambda) {
   1578     // FIXME: ODR-checking for merging lambdas (this happens, for instance,
   1579     // when they occur within the body of a function template specialization).
   1580   }
   1581 
   1582   if (DetectedOdrViolation)
   1583     Reader.PendingOdrMergeFailures[DD.Definition].push_back(MergeDD.Definition);
   1584 }
   1585 
   1586 void ASTDeclReader::ReadCXXRecordDefinition(CXXRecordDecl *D, bool Update) {
   1587   struct CXXRecordDecl::DefinitionData *DD;
   1588   ASTContext &C = Reader.getContext();
   1589 
   1590   // Determine whether this is a lambda closure type, so that we can
   1591   // allocate the appropriate DefinitionData structure.
   1592   bool IsLambda = Record[Idx++];
   1593   if (IsLambda)
   1594     DD = new (C) CXXRecordDecl::LambdaDefinitionData(D, nullptr, false, false,
   1595                                                      LCD_None);
   1596   else
   1597     DD = new (C) struct CXXRecordDecl::DefinitionData(D);
   1598 
   1599   ReadCXXDefinitionData(*DD, Record, Idx);
   1600 
   1601   // We might already have a definition for this record. This can happen either
   1602   // because we're reading an update record, or because we've already done some
   1603   // merging. Either way, just merge into it.
   1604   CXXRecordDecl *Canon = D->getCanonicalDecl();
   1605   if (Canon->DefinitionData.getNotUpdated()) {
   1606     MergeDefinitionData(Canon, std::move(*DD));
   1607     D->DefinitionData = Canon->DefinitionData;
   1608     return;
   1609   }
   1610 
   1611   // Mark this declaration as being a definition.
   1612   D->IsCompleteDefinition = true;
   1613   D->DefinitionData = DD;
   1614 
   1615   // If this is not the first declaration or is an update record, we can have
   1616   // other redeclarations already. Make a note that we need to propagate the
   1617   // DefinitionData pointer onto them.
   1618   if (Update || Canon != D) {
   1619     Canon->DefinitionData = D->DefinitionData;
   1620     Reader.PendingDefinitions.insert(D);
   1621   }
   1622 }
   1623 
   1624 ASTDeclReader::RedeclarableResult
   1625 ASTDeclReader::VisitCXXRecordDeclImpl(CXXRecordDecl *D) {
   1626   RedeclarableResult Redecl = VisitRecordDeclImpl(D);
   1627 
   1628   ASTContext &C = Reader.getContext();
   1629 
   1630   enum CXXRecKind {
   1631     CXXRecNotTemplate = 0, CXXRecTemplate, CXXRecMemberSpecialization
   1632   };
   1633   switch ((CXXRecKind)Record[Idx++]) {
   1634   case CXXRecNotTemplate:
   1635     // Merged when we merge the folding set entry in the primary template.
   1636     if (!isa<ClassTemplateSpecializationDecl>(D))
   1637       mergeRedeclarable(D, Redecl);
   1638     break;
   1639   case CXXRecTemplate: {
   1640     // Merged when we merge the template.
   1641     ClassTemplateDecl *Template = ReadDeclAs<ClassTemplateDecl>(Record, Idx);
   1642     D->TemplateOrInstantiation = Template;
   1643     if (!Template->getTemplatedDecl()) {
   1644       // We've not actually loaded the ClassTemplateDecl yet, because we're
   1645       // currently being loaded as its pattern. Rely on it to set up our
   1646       // TypeForDecl (see VisitClassTemplateDecl).
   1647       //
   1648       // Beware: we do not yet know our canonical declaration, and may still
   1649       // get merged once the surrounding class template has got off the ground.
   1650       TypeIDForTypeDecl = 0;
   1651     }
   1652     break;
   1653   }
   1654   case CXXRecMemberSpecialization: {
   1655     CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(Record, Idx);
   1656     TemplateSpecializationKind TSK = (TemplateSpecializationKind)Record[Idx++];
   1657     SourceLocation POI = ReadSourceLocation(Record, Idx);
   1658     MemberSpecializationInfo *MSI = new (C) MemberSpecializationInfo(RD, TSK);
   1659     MSI->setPointOfInstantiation(POI);
   1660     D->TemplateOrInstantiation = MSI;
   1661     mergeRedeclarable(D, Redecl);
   1662     break;
   1663   }
   1664   }
   1665 
   1666   bool WasDefinition = Record[Idx++];
   1667   if (WasDefinition)
   1668     ReadCXXRecordDefinition(D, /*Update*/false);
   1669   else
   1670     // Propagate DefinitionData pointer from the canonical declaration.
   1671     D->DefinitionData = D->getCanonicalDecl()->DefinitionData;
   1672 
   1673   // Lazily load the key function to avoid deserializing every method so we can
   1674   // compute it.
   1675   if (WasDefinition) {
   1676     DeclID KeyFn = ReadDeclID(Record, Idx);
   1677     if (KeyFn && D->IsCompleteDefinition)
   1678       // FIXME: This is wrong for the ARM ABI, where some other module may have
   1679       // made this function no longer be a key function. We need an update
   1680       // record or similar for that case.
   1681       C.KeyFunctions[D] = KeyFn;
   1682   }
   1683 
   1684   return Redecl;
   1685 }
   1686 
   1687 void ASTDeclReader::VisitCXXMethodDecl(CXXMethodDecl *D) {
   1688   VisitFunctionDecl(D);
   1689 
   1690   unsigned NumOverridenMethods = Record[Idx++];
   1691   if (D->isCanonicalDecl()) {
   1692     while (NumOverridenMethods--) {
   1693       // Avoid invariant checking of CXXMethodDecl::addOverriddenMethod,
   1694       // MD may be initializing.
   1695       if (CXXMethodDecl *MD = ReadDeclAs<CXXMethodDecl>(Record, Idx))
   1696         Reader.getContext().addOverriddenMethod(D, MD->getCanonicalDecl());
   1697     }
   1698   } else {
   1699     // We don't care about which declarations this used to override; we get
   1700     // the relevant information from the canonical declaration.
   1701     Idx += NumOverridenMethods;
   1702   }
   1703 }
   1704 
   1705 void ASTDeclReader::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
   1706   VisitCXXMethodDecl(D);
   1707 
   1708   if (auto *CD = ReadDeclAs<CXXConstructorDecl>(Record, Idx))
   1709     if (D->isCanonicalDecl())
   1710       D->setInheritedConstructor(CD->getCanonicalDecl());
   1711   D->IsExplicitSpecified = Record[Idx++];
   1712 }
   1713 
   1714 void ASTDeclReader::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
   1715   VisitCXXMethodDecl(D);
   1716 
   1717   if (auto *OperatorDelete = ReadDeclAs<FunctionDecl>(Record, Idx)) {
   1718     auto *Canon = cast<CXXDestructorDecl>(D->getCanonicalDecl());
   1719     // FIXME: Check consistency if we have an old and new operator delete.
   1720     if (!Canon->OperatorDelete)
   1721       Canon->OperatorDelete = OperatorDelete;
   1722   }
   1723 }
   1724 
   1725 void ASTDeclReader::VisitCXXConversionDecl(CXXConversionDecl *D) {
   1726   VisitCXXMethodDecl(D);
   1727   D->IsExplicitSpecified = Record[Idx++];
   1728 }
   1729 
   1730 void ASTDeclReader::VisitImportDecl(ImportDecl *D) {
   1731   VisitDecl(D);
   1732   D->ImportedAndComplete.setPointer(readModule(Record, Idx));
   1733   D->ImportedAndComplete.setInt(Record[Idx++]);
   1734   SourceLocation *StoredLocs = reinterpret_cast<SourceLocation *>(D + 1);
   1735   for (unsigned I = 0, N = Record.back(); I != N; ++I)
   1736     StoredLocs[I] = ReadSourceLocation(Record, Idx);
   1737   ++Idx; // The number of stored source locations.
   1738 }
   1739 
   1740 void ASTDeclReader::VisitAccessSpecDecl(AccessSpecDecl *D) {
   1741   VisitDecl(D);
   1742   D->setColonLoc(ReadSourceLocation(Record, Idx));
   1743 }
   1744 
   1745 void ASTDeclReader::VisitFriendDecl(FriendDecl *D) {
   1746   VisitDecl(D);
   1747   if (Record[Idx++]) // hasFriendDecl
   1748     D->Friend = ReadDeclAs<NamedDecl>(Record, Idx);
   1749   else
   1750     D->Friend = GetTypeSourceInfo(Record, Idx);
   1751   for (unsigned i = 0; i != D->NumTPLists; ++i)
   1752     D->getTPLists()[i] = Reader.ReadTemplateParameterList(F, Record, Idx);
   1753   D->NextFriend = ReadDeclID(Record, Idx);
   1754   D->UnsupportedFriend = (Record[Idx++] != 0);
   1755   D->FriendLoc = ReadSourceLocation(Record, Idx);
   1756 }
   1757 
   1758 void ASTDeclReader::VisitFriendTemplateDecl(FriendTemplateDecl *D) {
   1759   VisitDecl(D);
   1760   unsigned NumParams = Record[Idx++];
   1761   D->NumParams = NumParams;
   1762   D->Params = new TemplateParameterList*[NumParams];
   1763   for (unsigned i = 0; i != NumParams; ++i)
   1764     D->Params[i] = Reader.ReadTemplateParameterList(F, Record, Idx);
   1765   if (Record[Idx++]) // HasFriendDecl
   1766     D->Friend = ReadDeclAs<NamedDecl>(Record, Idx);
   1767   else
   1768     D->Friend = GetTypeSourceInfo(Record, Idx);
   1769   D->FriendLoc = ReadSourceLocation(Record, Idx);
   1770 }
   1771 
   1772 DeclID ASTDeclReader::VisitTemplateDecl(TemplateDecl *D) {
   1773   VisitNamedDecl(D);
   1774 
   1775   DeclID PatternID = ReadDeclID(Record, Idx);
   1776   NamedDecl *TemplatedDecl = cast_or_null<NamedDecl>(Reader.GetDecl(PatternID));
   1777   TemplateParameterList* TemplateParams
   1778       = Reader.ReadTemplateParameterList(F, Record, Idx);
   1779   D->init(TemplatedDecl, TemplateParams);
   1780 
   1781   return PatternID;
   1782 }
   1783 
   1784 ASTDeclReader::RedeclarableResult
   1785 ASTDeclReader::VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D) {
   1786   RedeclarableResult Redecl = VisitRedeclarable(D);
   1787 
   1788   // Make sure we've allocated the Common pointer first. We do this before
   1789   // VisitTemplateDecl so that getCommonPtr() can be used during initialization.
   1790   RedeclarableTemplateDecl *CanonD = D->getCanonicalDecl();
   1791   if (!CanonD->Common) {
   1792     CanonD->Common = CanonD->newCommon(Reader.getContext());
   1793     Reader.PendingDefinitions.insert(CanonD);
   1794   }
   1795   D->Common = CanonD->Common;
   1796 
   1797   // If this is the first declaration of the template, fill in the information
   1798   // for the 'common' pointer.
   1799   if (ThisDeclID == Redecl.getFirstID()) {
   1800     if (RedeclarableTemplateDecl *RTD
   1801           = ReadDeclAs<RedeclarableTemplateDecl>(Record, Idx)) {
   1802       assert(RTD->getKind() == D->getKind() &&
   1803              "InstantiatedFromMemberTemplate kind mismatch");
   1804       D->setInstantiatedFromMemberTemplate(RTD);
   1805       if (Record[Idx++])
   1806         D->setMemberSpecialization();
   1807     }
   1808   }
   1809 
   1810   DeclID PatternID = VisitTemplateDecl(D);
   1811   D->IdentifierNamespace = Record[Idx++];
   1812 
   1813   mergeRedeclarable(D, Redecl, PatternID);
   1814 
   1815   // If we merged the template with a prior declaration chain, merge the common
   1816   // pointer.
   1817   // FIXME: Actually merge here, don't just overwrite.
   1818   D->Common = D->getCanonicalDecl()->Common;
   1819 
   1820   return Redecl;
   1821 }
   1822 
   1823 static DeclID *newDeclIDList(ASTContext &Context, DeclID *Old,
   1824                              SmallVectorImpl<DeclID> &IDs) {
   1825   assert(!IDs.empty() && "no IDs to add to list");
   1826   if (Old) {
   1827     IDs.insert(IDs.end(), Old + 1, Old + 1 + Old[0]);
   1828     std::sort(IDs.begin(), IDs.end());
   1829     IDs.erase(std::unique(IDs.begin(), IDs.end()), IDs.end());
   1830   }
   1831 
   1832   auto *Result = new (Context) DeclID[1 + IDs.size()];
   1833   *Result = IDs.size();
   1834   std::copy(IDs.begin(), IDs.end(), Result + 1);
   1835   return Result;
   1836 }
   1837 
   1838 void ASTDeclReader::VisitClassTemplateDecl(ClassTemplateDecl *D) {
   1839   RedeclarableResult Redecl = VisitRedeclarableTemplateDecl(D);
   1840 
   1841   if (ThisDeclID == Redecl.getFirstID()) {
   1842     // This ClassTemplateDecl owns a CommonPtr; read it to keep track of all of
   1843     // the specializations.
   1844     SmallVector<serialization::DeclID, 32> SpecIDs;
   1845     ReadDeclIDList(SpecIDs);
   1846 
   1847     if (!SpecIDs.empty()) {
   1848       auto *CommonPtr = D->getCommonPtr();
   1849       CommonPtr->LazySpecializations = newDeclIDList(
   1850           Reader.getContext(), CommonPtr->LazySpecializations, SpecIDs);
   1851     }
   1852   }
   1853 
   1854   if (D->getTemplatedDecl()->TemplateOrInstantiation) {
   1855     // We were loaded before our templated declaration was. We've not set up
   1856     // its corresponding type yet (see VisitCXXRecordDeclImpl), so reconstruct
   1857     // it now.
   1858     Reader.Context.getInjectedClassNameType(
   1859         D->getTemplatedDecl(), D->getInjectedClassNameSpecialization());
   1860   }
   1861 }
   1862 
   1863 void ASTDeclReader::VisitBuiltinTemplateDecl(BuiltinTemplateDecl *D) {
   1864   llvm_unreachable("BuiltinTemplates are not serialized");
   1865 }
   1866 
   1867 /// TODO: Unify with ClassTemplateDecl version?
   1868 ///       May require unifying ClassTemplateDecl and
   1869 ///        VarTemplateDecl beyond TemplateDecl...
   1870 void ASTDeclReader::VisitVarTemplateDecl(VarTemplateDecl *D) {
   1871   RedeclarableResult Redecl = VisitRedeclarableTemplateDecl(D);
   1872 
   1873   if (ThisDeclID == Redecl.getFirstID()) {
   1874     // This VarTemplateDecl owns a CommonPtr; read it to keep track of all of
   1875     // the specializations.
   1876     SmallVector<serialization::DeclID, 32> SpecIDs;
   1877     ReadDeclIDList(SpecIDs);
   1878 
   1879     if (!SpecIDs.empty()) {
   1880       auto *CommonPtr = D->getCommonPtr();
   1881       CommonPtr->LazySpecializations = newDeclIDList(
   1882           Reader.getContext(), CommonPtr->LazySpecializations, SpecIDs);
   1883     }
   1884   }
   1885 }
   1886 
   1887 ASTDeclReader::RedeclarableResult
   1888 ASTDeclReader::VisitClassTemplateSpecializationDeclImpl(
   1889     ClassTemplateSpecializationDecl *D) {
   1890   RedeclarableResult Redecl = VisitCXXRecordDeclImpl(D);
   1891 
   1892   ASTContext &C = Reader.getContext();
   1893   if (Decl *InstD = ReadDecl(Record, Idx)) {
   1894     if (ClassTemplateDecl *CTD = dyn_cast<ClassTemplateDecl>(InstD)) {
   1895       D->SpecializedTemplate = CTD;
   1896     } else {
   1897       SmallVector<TemplateArgument, 8> TemplArgs;
   1898       Reader.ReadTemplateArgumentList(TemplArgs, F, Record, Idx);
   1899       TemplateArgumentList *ArgList
   1900         = TemplateArgumentList::CreateCopy(C, TemplArgs.data(),
   1901                                            TemplArgs.size());
   1902       ClassTemplateSpecializationDecl::SpecializedPartialSpecialization *PS
   1903           = new (C) ClassTemplateSpecializationDecl::
   1904                                              SpecializedPartialSpecialization();
   1905       PS->PartialSpecialization
   1906           = cast<ClassTemplatePartialSpecializationDecl>(InstD);
   1907       PS->TemplateArgs = ArgList;
   1908       D->SpecializedTemplate = PS;
   1909     }
   1910   }
   1911 
   1912   SmallVector<TemplateArgument, 8> TemplArgs;
   1913   Reader.ReadTemplateArgumentList(TemplArgs, F, Record, Idx,
   1914                                   /*Canonicalize*/ true);
   1915   D->TemplateArgs = TemplateArgumentList::CreateCopy(C, TemplArgs.data(),
   1916                                                      TemplArgs.size());
   1917   D->PointOfInstantiation = ReadSourceLocation(Record, Idx);
   1918   D->SpecializationKind = (TemplateSpecializationKind)Record[Idx++];
   1919 
   1920   bool writtenAsCanonicalDecl = Record[Idx++];
   1921   if (writtenAsCanonicalDecl) {
   1922     ClassTemplateDecl *CanonPattern = ReadDeclAs<ClassTemplateDecl>(Record,Idx);
   1923     if (D->isCanonicalDecl()) { // It's kept in the folding set.
   1924       // Set this as, or find, the canonical declaration for this specialization
   1925       ClassTemplateSpecializationDecl *CanonSpec;
   1926       if (ClassTemplatePartialSpecializationDecl *Partial =
   1927               dyn_cast<ClassTemplatePartialSpecializationDecl>(D)) {
   1928         CanonSpec = CanonPattern->getCommonPtr()->PartialSpecializations
   1929             .GetOrInsertNode(Partial);
   1930       } else {
   1931         CanonSpec =
   1932             CanonPattern->getCommonPtr()->Specializations.GetOrInsertNode(D);
   1933       }
   1934       // If there was already a canonical specialization, merge into it.
   1935       if (CanonSpec != D) {
   1936         mergeRedeclarable<TagDecl>(D, CanonSpec, Redecl);
   1937 
   1938         // This declaration might be a definition. Merge with any existing
   1939         // definition.
   1940         if (auto *DDD = D->DefinitionData.getNotUpdated()) {
   1941           if (CanonSpec->DefinitionData.getNotUpdated())
   1942             MergeDefinitionData(CanonSpec, std::move(*DDD));
   1943           else
   1944             CanonSpec->DefinitionData = D->DefinitionData;
   1945         }
   1946         D->DefinitionData = CanonSpec->DefinitionData;
   1947       }
   1948     }
   1949   }
   1950 
   1951   // Explicit info.
   1952   if (TypeSourceInfo *TyInfo = GetTypeSourceInfo(Record, Idx)) {
   1953     ClassTemplateSpecializationDecl::ExplicitSpecializationInfo *ExplicitInfo
   1954         = new (C) ClassTemplateSpecializationDecl::ExplicitSpecializationInfo;
   1955     ExplicitInfo->TypeAsWritten = TyInfo;
   1956     ExplicitInfo->ExternLoc = ReadSourceLocation(Record, Idx);
   1957     ExplicitInfo->TemplateKeywordLoc = ReadSourceLocation(Record, Idx);
   1958     D->ExplicitInfo = ExplicitInfo;
   1959   }
   1960 
   1961   return Redecl;
   1962 }
   1963 
   1964 void ASTDeclReader::VisitClassTemplatePartialSpecializationDecl(
   1965                                     ClassTemplatePartialSpecializationDecl *D) {
   1966   RedeclarableResult Redecl = VisitClassTemplateSpecializationDeclImpl(D);
   1967 
   1968   D->TemplateParams = Reader.ReadTemplateParameterList(F, Record, Idx);
   1969   D->ArgsAsWritten = Reader.ReadASTTemplateArgumentListInfo(F, Record, Idx);
   1970 
   1971   // These are read/set from/to the first declaration.
   1972   if (ThisDeclID == Redecl.getFirstID()) {
   1973     D->InstantiatedFromMember.setPointer(
   1974       ReadDeclAs<ClassTemplatePartialSpecializationDecl>(Record, Idx));
   1975     D->InstantiatedFromMember.setInt(Record[Idx++]);
   1976   }
   1977 }
   1978 
   1979 void ASTDeclReader::VisitClassScopeFunctionSpecializationDecl(
   1980                                     ClassScopeFunctionSpecializationDecl *D) {
   1981   VisitDecl(D);
   1982   D->Specialization = ReadDeclAs<CXXMethodDecl>(Record, Idx);
   1983 }
   1984 
   1985 void ASTDeclReader::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
   1986   RedeclarableResult Redecl = VisitRedeclarableTemplateDecl(D);
   1987 
   1988   if (ThisDeclID == Redecl.getFirstID()) {
   1989     // This FunctionTemplateDecl owns a CommonPtr; read it.
   1990     SmallVector<serialization::DeclID, 32> SpecIDs;
   1991     ReadDeclIDList(SpecIDs);
   1992 
   1993     if (!SpecIDs.empty()) {
   1994       auto *CommonPtr = D->getCommonPtr();
   1995       CommonPtr->LazySpecializations = newDeclIDList(
   1996           Reader.getContext(), CommonPtr->LazySpecializations, SpecIDs);
   1997     }
   1998   }
   1999 }
   2000 
   2001 /// TODO: Unify with ClassTemplateSpecializationDecl version?
   2002 ///       May require unifying ClassTemplate(Partial)SpecializationDecl and
   2003 ///        VarTemplate(Partial)SpecializationDecl with a new data
   2004 ///        structure Template(Partial)SpecializationDecl, and
   2005 ///        using Template(Partial)SpecializationDecl as input type.
   2006 ASTDeclReader::RedeclarableResult
   2007 ASTDeclReader::VisitVarTemplateSpecializationDeclImpl(
   2008     VarTemplateSpecializationDecl *D) {
   2009   RedeclarableResult Redecl = VisitVarDeclImpl(D);
   2010 
   2011   ASTContext &C = Reader.getContext();
   2012   if (Decl *InstD = ReadDecl(Record, Idx)) {
   2013     if (VarTemplateDecl *VTD = dyn_cast<VarTemplateDecl>(InstD)) {
   2014       D->SpecializedTemplate = VTD;
   2015     } else {
   2016       SmallVector<TemplateArgument, 8> TemplArgs;
   2017       Reader.ReadTemplateArgumentList(TemplArgs, F, Record, Idx);
   2018       TemplateArgumentList *ArgList = TemplateArgumentList::CreateCopy(
   2019           C, TemplArgs.data(), TemplArgs.size());
   2020       VarTemplateSpecializationDecl::SpecializedPartialSpecialization *PS =
   2021           new (C)
   2022           VarTemplateSpecializationDecl::SpecializedPartialSpecialization();
   2023       PS->PartialSpecialization =
   2024           cast<VarTemplatePartialSpecializationDecl>(InstD);
   2025       PS->TemplateArgs = ArgList;
   2026       D->SpecializedTemplate = PS;
   2027     }
   2028   }
   2029 
   2030   // Explicit info.
   2031   if (TypeSourceInfo *TyInfo = GetTypeSourceInfo(Record, Idx)) {
   2032     VarTemplateSpecializationDecl::ExplicitSpecializationInfo *ExplicitInfo =
   2033         new (C) VarTemplateSpecializationDecl::ExplicitSpecializationInfo;
   2034     ExplicitInfo->TypeAsWritten = TyInfo;
   2035     ExplicitInfo->ExternLoc = ReadSourceLocation(Record, Idx);
   2036     ExplicitInfo->TemplateKeywordLoc = ReadSourceLocation(Record, Idx);
   2037     D->ExplicitInfo = ExplicitInfo;
   2038   }
   2039 
   2040   SmallVector<TemplateArgument, 8> TemplArgs;
   2041   Reader.ReadTemplateArgumentList(TemplArgs, F, Record, Idx,
   2042                                   /*Canonicalize*/ true);
   2043   D->TemplateArgs =
   2044       TemplateArgumentList::CreateCopy(C, TemplArgs.data(), TemplArgs.size());
   2045   D->PointOfInstantiation = ReadSourceLocation(Record, Idx);
   2046   D->SpecializationKind = (TemplateSpecializationKind)Record[Idx++];
   2047 
   2048   bool writtenAsCanonicalDecl = Record[Idx++];
   2049   if (writtenAsCanonicalDecl) {
   2050     VarTemplateDecl *CanonPattern = ReadDeclAs<VarTemplateDecl>(Record, Idx);
   2051     if (D->isCanonicalDecl()) { // It's kept in the folding set.
   2052       // FIXME: If it's already present, merge it.
   2053       if (VarTemplatePartialSpecializationDecl *Partial =
   2054               dyn_cast<VarTemplatePartialSpecializationDecl>(D)) {
   2055         CanonPattern->getCommonPtr()->PartialSpecializations
   2056             .GetOrInsertNode(Partial);
   2057       } else {
   2058         CanonPattern->getCommonPtr()->Specializations.GetOrInsertNode(D);
   2059       }
   2060     }
   2061   }
   2062 
   2063   return Redecl;
   2064 }
   2065 
   2066 /// TODO: Unify with ClassTemplatePartialSpecializationDecl version?
   2067 ///       May require unifying ClassTemplate(Partial)SpecializationDecl and
   2068 ///        VarTemplate(Partial)SpecializationDecl with a new data
   2069 ///        structure Template(Partial)SpecializationDecl, and
   2070 ///        using Template(Partial)SpecializationDecl as input type.
   2071 void ASTDeclReader::VisitVarTemplatePartialSpecializationDecl(
   2072     VarTemplatePartialSpecializationDecl *D) {
   2073   RedeclarableResult Redecl = VisitVarTemplateSpecializationDeclImpl(D);
   2074 
   2075   D->TemplateParams = Reader.ReadTemplateParameterList(F, Record, Idx);
   2076   D->ArgsAsWritten = Reader.ReadASTTemplateArgumentListInfo(F, Record, Idx);
   2077 
   2078   // These are read/set from/to the first declaration.
   2079   if (ThisDeclID == Redecl.getFirstID()) {
   2080     D->InstantiatedFromMember.setPointer(
   2081         ReadDeclAs<VarTemplatePartialSpecializationDecl>(Record, Idx));
   2082     D->InstantiatedFromMember.setInt(Record[Idx++]);
   2083   }
   2084 }
   2085 
   2086 void ASTDeclReader::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
   2087   VisitTypeDecl(D);
   2088 
   2089   D->setDeclaredWithTypename(Record[Idx++]);
   2090 
   2091   if (Record[Idx++])
   2092     D->setDefaultArgument(GetTypeSourceInfo(Record, Idx));
   2093 }
   2094 
   2095 void ASTDeclReader::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) {
   2096   VisitDeclaratorDecl(D);
   2097   // TemplateParmPosition.
   2098   D->setDepth(Record[Idx++]);
   2099   D->setPosition(Record[Idx++]);
   2100   if (D->isExpandedParameterPack()) {
   2101     void **Data = reinterpret_cast<void **>(D + 1);
   2102     for (unsigned I = 0, N = D->getNumExpansionTypes(); I != N; ++I) {
   2103       Data[2*I] = Reader.readType(F, Record, Idx).getAsOpaquePtr();
   2104       Data[2*I + 1] = GetTypeSourceInfo(Record, Idx);
   2105     }
   2106   } else {
   2107     // Rest of NonTypeTemplateParmDecl.
   2108     D->ParameterPack = Record[Idx++];
   2109     if (Record[Idx++])
   2110       D->setDefaultArgument(Reader.ReadExpr(F));
   2111   }
   2112 }
   2113 
   2114 void ASTDeclReader::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
   2115   VisitTemplateDecl(D);
   2116   // TemplateParmPosition.
   2117   D->setDepth(Record[Idx++]);
   2118   D->setPosition(Record[Idx++]);
   2119   if (D->isExpandedParameterPack()) {
   2120     void **Data = reinterpret_cast<void **>(D + 1);
   2121     for (unsigned I = 0, N = D->getNumExpansionTemplateParameters();
   2122          I != N; ++I)
   2123       Data[I] = Reader.ReadTemplateParameterList(F, Record, Idx);
   2124   } else {
   2125     // Rest of TemplateTemplateParmDecl.
   2126     D->ParameterPack = Record[Idx++];
   2127     if (Record[Idx++])
   2128       D->setDefaultArgument(Reader.getContext(),
   2129                             Reader.ReadTemplateArgumentLoc(F, Record, Idx));
   2130   }
   2131 }
   2132 
   2133 void ASTDeclReader::VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D) {
   2134   VisitRedeclarableTemplateDecl(D);
   2135 }
   2136 
   2137 void ASTDeclReader::VisitStaticAssertDecl(StaticAssertDecl *D) {
   2138   VisitDecl(D);
   2139   D->AssertExprAndFailed.setPointer(Reader.ReadExpr(F));
   2140   D->AssertExprAndFailed.setInt(Record[Idx++]);
   2141   D->Message = cast<StringLiteral>(Reader.ReadExpr(F));
   2142   D->RParenLoc = ReadSourceLocation(Record, Idx);
   2143 }
   2144 
   2145 void ASTDeclReader::VisitEmptyDecl(EmptyDecl *D) {
   2146   VisitDecl(D);
   2147 }
   2148 
   2149 std::pair<uint64_t, uint64_t>
   2150 ASTDeclReader::VisitDeclContext(DeclContext *DC) {
   2151   uint64_t LexicalOffset = Record[Idx++];
   2152   uint64_t VisibleOffset = Record[Idx++];
   2153   return std::make_pair(LexicalOffset, VisibleOffset);
   2154 }
   2155 
   2156 template <typename T>
   2157 ASTDeclReader::RedeclarableResult
   2158 ASTDeclReader::VisitRedeclarable(Redeclarable<T> *D) {
   2159   DeclID FirstDeclID = ReadDeclID(Record, Idx);
   2160   Decl *MergeWith = nullptr;
   2161 
   2162   bool IsKeyDecl = ThisDeclID == FirstDeclID;
   2163   bool IsFirstLocalDecl = false;
   2164 
   2165   uint64_t RedeclOffset = 0;
   2166 
   2167   // 0 indicates that this declaration was the only declaration of its entity,
   2168   // and is used for space optimization.
   2169   if (FirstDeclID == 0) {
   2170     FirstDeclID = ThisDeclID;
   2171     IsKeyDecl = true;
   2172     IsFirstLocalDecl = true;
   2173   } else if (unsigned N = Record[Idx++]) {
   2174     // This declaration was the first local declaration, but may have imported
   2175     // other declarations.
   2176     IsKeyDecl = N == 1;
   2177     IsFirstLocalDecl = true;
   2178 
   2179     // We have some declarations that must be before us in our redeclaration
   2180     // chain. Read them now, and remember that we ought to merge with one of
   2181     // them.
   2182     // FIXME: Provide a known merge target to the second and subsequent such
   2183     // declaration.
   2184     for (unsigned I = 0; I != N - 1; ++I)
   2185       MergeWith = ReadDecl(Record, Idx/*, MergeWith*/);
   2186 
   2187     RedeclOffset = Record[Idx++];
   2188   } else {
   2189     // This declaration was not the first local declaration. Read the first
   2190     // local declaration now, to trigger the import of other redeclarations.
   2191     (void)ReadDecl(Record, Idx);
   2192   }
   2193 
   2194   T *FirstDecl = cast_or_null<T>(Reader.GetDecl(FirstDeclID));
   2195   if (FirstDecl != D) {
   2196     // We delay loading of the redeclaration chain to avoid deeply nested calls.
   2197     // We temporarily set the first (canonical) declaration as the previous one
   2198     // which is the one that matters and mark the real previous DeclID to be
   2199     // loaded & attached later on.
   2200     D->RedeclLink = Redeclarable<T>::PreviousDeclLink(FirstDecl);
   2201     D->First = FirstDecl->getCanonicalDecl();
   2202   }
   2203 
   2204   T *DAsT = static_cast<T*>(D);
   2205 
   2206   // Note that we need to load local redeclarations of this decl and build a
   2207   // decl chain for them. This must happen *after* we perform the preloading
   2208   // above; this ensures that the redeclaration chain is built in the correct
   2209   // order.
   2210   if (IsFirstLocalDecl)
   2211     Reader.PendingDeclChains.push_back(std::make_pair(DAsT, RedeclOffset));
   2212 
   2213   return RedeclarableResult(FirstDeclID, MergeWith, IsKeyDecl);
   2214 }
   2215 
   2216 /// \brief Attempts to merge the given declaration (D) with another declaration
   2217 /// of the same entity.
   2218 template<typename T>
   2219 void ASTDeclReader::mergeRedeclarable(Redeclarable<T> *DBase,
   2220                                       RedeclarableResult &Redecl,
   2221                                       DeclID TemplatePatternID) {
   2222   T *D = static_cast<T*>(DBase);
   2223 
   2224   // If modules are not available, there is no reason to perform this merge.
   2225   if (!Reader.getContext().getLangOpts().Modules)
   2226     return;
   2227 
   2228   // If we're not the canonical declaration, we don't need to merge.
   2229   if (!DBase->isFirstDecl())
   2230     return;
   2231 
   2232   if (auto *Existing = Redecl.getKnownMergeTarget())
   2233     // We already know of an existing declaration we should merge with.
   2234     mergeRedeclarable(D, cast<T>(Existing), Redecl, TemplatePatternID);
   2235   else if (FindExistingResult ExistingRes = findExisting(D))
   2236     if (T *Existing = ExistingRes)
   2237       mergeRedeclarable(D, Existing, Redecl, TemplatePatternID);
   2238 }
   2239 
   2240 /// \brief "Cast" to type T, asserting if we don't have an implicit conversion.
   2241 /// We use this to put code in a template that will only be valid for certain
   2242 /// instantiations.
   2243 template<typename T> static T assert_cast(T t) { return t; }
   2244 template<typename T> static T assert_cast(...) {
   2245   llvm_unreachable("bad assert_cast");
   2246 }
   2247 
   2248 /// \brief Merge together the pattern declarations from two template
   2249 /// declarations.
   2250 void ASTDeclReader::mergeTemplatePattern(RedeclarableTemplateDecl *D,
   2251                                          RedeclarableTemplateDecl *Existing,
   2252                                          DeclID DsID, bool IsKeyDecl) {
   2253   auto *DPattern = D->getTemplatedDecl();
   2254   auto *ExistingPattern = Existing->getTemplatedDecl();
   2255   RedeclarableResult Result(DPattern->getCanonicalDecl()->getGlobalID(),
   2256                             /*MergeWith*/ ExistingPattern, IsKeyDecl);
   2257 
   2258   if (auto *DClass = dyn_cast<CXXRecordDecl>(DPattern)) {
   2259     // Merge with any existing definition.
   2260     // FIXME: This is duplicated in several places. Refactor.
   2261     auto *ExistingClass =
   2262         cast<CXXRecordDecl>(ExistingPattern)->getCanonicalDecl();
   2263     if (auto *DDD = DClass->DefinitionData.getNotUpdated()) {
   2264       if (ExistingClass->DefinitionData.getNotUpdated()) {
   2265         MergeDefinitionData(ExistingClass, std::move(*DDD));
   2266       } else {
   2267         ExistingClass->DefinitionData = DClass->DefinitionData;
   2268         // We may have skipped this before because we thought that DClass
   2269         // was the canonical declaration.
   2270         Reader.PendingDefinitions.insert(DClass);
   2271       }
   2272     }
   2273     DClass->DefinitionData = ExistingClass->DefinitionData;
   2274 
   2275     return mergeRedeclarable(DClass, cast<TagDecl>(ExistingPattern),
   2276                              Result);
   2277   }
   2278   if (auto *DFunction = dyn_cast<FunctionDecl>(DPattern))
   2279     return mergeRedeclarable(DFunction, cast<FunctionDecl>(ExistingPattern),
   2280                              Result);
   2281   if (auto *DVar = dyn_cast<VarDecl>(DPattern))
   2282     return mergeRedeclarable(DVar, cast<VarDecl>(ExistingPattern), Result);
   2283   if (auto *DAlias = dyn_cast<TypeAliasDecl>(DPattern))
   2284     return mergeRedeclarable(DAlias, cast<TypedefNameDecl>(ExistingPattern),
   2285                              Result);
   2286   llvm_unreachable("merged an unknown kind of redeclarable template");
   2287 }
   2288 
   2289 /// \brief Attempts to merge the given declaration (D) with another declaration
   2290 /// of the same entity.
   2291 template<typename T>
   2292 void ASTDeclReader::mergeRedeclarable(Redeclarable<T> *DBase, T *Existing,
   2293                                       RedeclarableResult &Redecl,
   2294                                       DeclID TemplatePatternID) {
   2295   T *D = static_cast<T*>(DBase);
   2296   T *ExistingCanon = Existing->getCanonicalDecl();
   2297   T *DCanon = D->getCanonicalDecl();
   2298   if (ExistingCanon != DCanon) {
   2299     assert(DCanon->getGlobalID() == Redecl.getFirstID() &&
   2300            "already merged this declaration");
   2301 
   2302     // Have our redeclaration link point back at the canonical declaration
   2303     // of the existing declaration, so that this declaration has the
   2304     // appropriate canonical declaration.
   2305     D->RedeclLink = Redeclarable<T>::PreviousDeclLink(ExistingCanon);
   2306     D->First = ExistingCanon;
   2307 
   2308     // When we merge a namespace, update its pointer to the first namespace.
   2309     // We cannot have loaded any redeclarations of this declaration yet, so
   2310     // there's nothing else that needs to be updated.
   2311     if (auto *Namespace = dyn_cast<NamespaceDecl>(D))
   2312       Namespace->AnonOrFirstNamespaceAndInline.setPointer(
   2313           assert_cast<NamespaceDecl*>(ExistingCanon));
   2314 
   2315     // When we merge a template, merge its pattern.
   2316     if (auto *DTemplate = dyn_cast<RedeclarableTemplateDecl>(D))
   2317       mergeTemplatePattern(
   2318           DTemplate, assert_cast<RedeclarableTemplateDecl*>(ExistingCanon),
   2319           TemplatePatternID, Redecl.isKeyDecl());
   2320 
   2321     // If this declaration is a key declaration, make a note of that.
   2322     if (Redecl.isKeyDecl())
   2323       Reader.KeyDecls[ExistingCanon].push_back(Redecl.getFirstID());
   2324   }
   2325 }
   2326 
   2327 /// \brief Attempts to merge the given declaration (D) with another declaration
   2328 /// of the same entity, for the case where the entity is not actually
   2329 /// redeclarable. This happens, for instance, when merging the fields of
   2330 /// identical class definitions from two different modules.
   2331 template<typename T>
   2332 void ASTDeclReader::mergeMergeable(Mergeable<T> *D) {
   2333   // If modules are not available, there is no reason to perform this merge.
   2334   if (!Reader.getContext().getLangOpts().Modules)
   2335     return;
   2336 
   2337   // ODR-based merging is only performed in C++. In C, identically-named things
   2338   // in different translation units are not redeclarations (but may still have
   2339   // compatible types).
   2340   if (!Reader.getContext().getLangOpts().CPlusPlus)
   2341     return;
   2342 
   2343   if (FindExistingResult ExistingRes = findExisting(static_cast<T*>(D)))
   2344     if (T *Existing = ExistingRes)
   2345       Reader.Context.setPrimaryMergedDecl(static_cast<T*>(D),
   2346                                           Existing->getCanonicalDecl());
   2347 }
   2348 
   2349 void ASTDeclReader::VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D) {
   2350   VisitDecl(D);
   2351   unsigned NumVars = D->varlist_size();
   2352   SmallVector<Expr *, 16> Vars;
   2353   Vars.reserve(NumVars);
   2354   for (unsigned i = 0; i != NumVars; ++i) {
   2355     Vars.push_back(Reader.ReadExpr(F));
   2356   }
   2357   D->setVars(Vars);
   2358 }
   2359 
   2360 //===----------------------------------------------------------------------===//
   2361 // Attribute Reading
   2362 //===----------------------------------------------------------------------===//
   2363 
   2364 /// \brief Reads attributes from the current stream position.
   2365 void ASTReader::ReadAttributes(ModuleFile &F, AttrVec &Attrs,
   2366                                const RecordData &Record, unsigned &Idx) {
   2367   for (unsigned i = 0, e = Record[Idx++]; i != e; ++i) {
   2368     Attr *New = nullptr;
   2369     attr::Kind Kind = (attr::Kind)Record[Idx++];
   2370     SourceRange Range = ReadSourceRange(F, Record, Idx);
   2371 
   2372 #include "clang/Serialization/AttrPCHRead.inc"
   2373 
   2374     assert(New && "Unable to decode attribute?");
   2375     Attrs.push_back(New);
   2376   }
   2377 }
   2378 
   2379 //===----------------------------------------------------------------------===//
   2380 // ASTReader Implementation
   2381 //===----------------------------------------------------------------------===//
   2382 
   2383 /// \brief Note that we have loaded the declaration with the given
   2384 /// Index.
   2385 ///
   2386 /// This routine notes that this declaration has already been loaded,
   2387 /// so that future GetDecl calls will return this declaration rather
   2388 /// than trying to load a new declaration.
   2389 inline void ASTReader::LoadedDecl(unsigned Index, Decl *D) {
   2390   assert(!DeclsLoaded[Index] && "Decl loaded twice?");
   2391   DeclsLoaded[Index] = D;
   2392 }
   2393 
   2394 
   2395 /// \brief Determine whether the consumer will be interested in seeing
   2396 /// this declaration (via HandleTopLevelDecl).
   2397 ///
   2398 /// This routine should return true for anything that might affect
   2399 /// code generation, e.g., inline function definitions, Objective-C
   2400 /// declarations with metadata, etc.
   2401 static bool isConsumerInterestedIn(Decl *D, bool HasBody) {
   2402   // An ObjCMethodDecl is never considered as "interesting" because its
   2403   // implementation container always is.
   2404 
   2405   if (isa<FileScopeAsmDecl>(D) ||
   2406       isa<ObjCProtocolDecl>(D) ||
   2407       isa<ObjCImplDecl>(D) ||
   2408       isa<ImportDecl>(D) ||
   2409       isa<OMPThreadPrivateDecl>(D))
   2410     return true;
   2411   if (VarDecl *Var = dyn_cast<VarDecl>(D))
   2412     return Var->isFileVarDecl() &&
   2413            Var->isThisDeclarationADefinition() == VarDecl::Definition;
   2414   if (FunctionDecl *Func = dyn_cast<FunctionDecl>(D))
   2415     return Func->doesThisDeclarationHaveABody() || HasBody;
   2416 
   2417   return false;
   2418 }
   2419 
   2420 /// \brief Get the correct cursor and offset for loading a declaration.
   2421 ASTReader::RecordLocation
   2422 ASTReader::DeclCursorForID(DeclID ID, unsigned &RawLocation) {
   2423   // See if there's an override.
   2424   DeclReplacementMap::iterator It = ReplacedDecls.find(ID);
   2425   if (It != ReplacedDecls.end()) {
   2426     RawLocation = It->second.RawLoc;
   2427     return RecordLocation(It->second.Mod, It->second.Offset);
   2428   }
   2429 
   2430   GlobalDeclMapType::iterator I = GlobalDeclMap.find(ID);
   2431   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
   2432   ModuleFile *M = I->second;
   2433   const DeclOffset &
   2434     DOffs =  M->DeclOffsets[ID - M->BaseDeclID - NUM_PREDEF_DECL_IDS];
   2435   RawLocation = DOffs.Loc;
   2436   return RecordLocation(M, DOffs.BitOffset);
   2437 }
   2438 
   2439 ASTReader::RecordLocation ASTReader::getLocalBitOffset(uint64_t GlobalOffset) {
   2440   ContinuousRangeMap<uint64_t, ModuleFile*, 4>::iterator I
   2441     = GlobalBitOffsetsMap.find(GlobalOffset);
   2442 
   2443   assert(I != GlobalBitOffsetsMap.end() && "Corrupted global bit offsets map");
   2444   return RecordLocation(I->second, GlobalOffset - I->second->GlobalBitOffset);
   2445 }
   2446 
   2447 uint64_t ASTReader::getGlobalBitOffset(ModuleFile &M, uint32_t LocalOffset) {
   2448   return LocalOffset + M.GlobalBitOffset;
   2449 }
   2450 
   2451 static bool isSameTemplateParameterList(const TemplateParameterList *X,
   2452                                         const TemplateParameterList *Y);
   2453 
   2454 /// \brief Determine whether two template parameters are similar enough
   2455 /// that they may be used in declarations of the same template.
   2456 static bool isSameTemplateParameter(const NamedDecl *X,
   2457                                     const NamedDecl *Y) {
   2458   if (X->getKind() != Y->getKind())
   2459     return false;
   2460 
   2461   if (const TemplateTypeParmDecl *TX = dyn_cast<TemplateTypeParmDecl>(X)) {
   2462     const TemplateTypeParmDecl *TY = cast<TemplateTypeParmDecl>(Y);
   2463     return TX->isParameterPack() == TY->isParameterPack();
   2464   }
   2465 
   2466   if (const NonTypeTemplateParmDecl *TX = dyn_cast<NonTypeTemplateParmDecl>(X)) {
   2467     const NonTypeTemplateParmDecl *TY = cast<NonTypeTemplateParmDecl>(Y);
   2468     return TX->isParameterPack() == TY->isParameterPack() &&
   2469            TX->getASTContext().hasSameType(TX->getType(), TY->getType());
   2470   }
   2471 
   2472   const TemplateTemplateParmDecl *TX = cast<TemplateTemplateParmDecl>(X);
   2473   const TemplateTemplateParmDecl *TY = cast<TemplateTemplateParmDecl>(Y);
   2474   return TX->isParameterPack() == TY->isParameterPack() &&
   2475          isSameTemplateParameterList(TX->getTemplateParameters(),
   2476                                      TY->getTemplateParameters());
   2477 }
   2478 
   2479 static NamespaceDecl *getNamespace(const NestedNameSpecifier *X) {
   2480   if (auto *NS = X->getAsNamespace())
   2481     return NS;
   2482   if (auto *NAS = X->getAsNamespaceAlias())
   2483     return NAS->getNamespace();
   2484   return nullptr;
   2485 }
   2486 
   2487 static bool isSameQualifier(const NestedNameSpecifier *X,
   2488                             const NestedNameSpecifier *Y) {
   2489   if (auto *NSX = getNamespace(X)) {
   2490     auto *NSY = getNamespace(Y);
   2491     if (!NSY || NSX->getCanonicalDecl() != NSY->getCanonicalDecl())
   2492       return false;
   2493   } else if (X->getKind() != Y->getKind())
   2494     return false;
   2495 
   2496   // FIXME: For namespaces and types, we're permitted to check that the entity
   2497   // is named via the same tokens. We should probably do so.
   2498   switch (X->getKind()) {
   2499   case NestedNameSpecifier::Identifier:
   2500     if (X->getAsIdentifier() != Y->getAsIdentifier())
   2501       return false;
   2502     break;
   2503   case NestedNameSpecifier::Namespace:
   2504   case NestedNameSpecifier::NamespaceAlias:
   2505     // We've already checked that we named the same namespace.
   2506     break;
   2507   case NestedNameSpecifier::TypeSpec:
   2508   case NestedNameSpecifier::TypeSpecWithTemplate:
   2509     if (X->getAsType()->getCanonicalTypeInternal() !=
   2510         Y->getAsType()->getCanonicalTypeInternal())
   2511       return false;
   2512     break;
   2513   case NestedNameSpecifier::Global:
   2514   case NestedNameSpecifier::Super:
   2515     return true;
   2516   }
   2517 
   2518   // Recurse into earlier portion of NNS, if any.
   2519   auto *PX = X->getPrefix();
   2520   auto *PY = Y->getPrefix();
   2521   if (PX && PY)
   2522     return isSameQualifier(PX, PY);
   2523   return !PX && !PY;
   2524 }
   2525 
   2526 /// \brief Determine whether two template parameter lists are similar enough
   2527 /// that they may be used in declarations of the same template.
   2528 static bool isSameTemplateParameterList(const TemplateParameterList *X,
   2529                                         const TemplateParameterList *Y) {
   2530   if (X->size() != Y->size())
   2531     return false;
   2532 
   2533   for (unsigned I = 0, N = X->size(); I != N; ++I)
   2534     if (!isSameTemplateParameter(X->getParam(I), Y->getParam(I)))
   2535       return false;
   2536 
   2537   return true;
   2538 }
   2539 
   2540 /// \brief Determine whether the two declarations refer to the same entity.
   2541 static bool isSameEntity(NamedDecl *X, NamedDecl *Y) {
   2542   assert(X->getDeclName() == Y->getDeclName() && "Declaration name mismatch!");
   2543 
   2544   if (X == Y)
   2545     return true;
   2546 
   2547   // Must be in the same context.
   2548   if (!X->getDeclContext()->getRedeclContext()->Equals(
   2549          Y->getDeclContext()->getRedeclContext()))
   2550     return false;
   2551 
   2552   // Two typedefs refer to the same entity if they have the same underlying
   2553   // type.
   2554   if (TypedefNameDecl *TypedefX = dyn_cast<TypedefNameDecl>(X))
   2555     if (TypedefNameDecl *TypedefY = dyn_cast<TypedefNameDecl>(Y))
   2556       return X->getASTContext().hasSameType(TypedefX->getUnderlyingType(),
   2557                                             TypedefY->getUnderlyingType());
   2558 
   2559   // Must have the same kind.
   2560   if (X->getKind() != Y->getKind())
   2561     return false;
   2562 
   2563   // Objective-C classes and protocols with the same name always match.
   2564   if (isa<ObjCInterfaceDecl>(X) || isa<ObjCProtocolDecl>(X))
   2565     return true;
   2566 
   2567   if (isa<ClassTemplateSpecializationDecl>(X)) {
   2568     // No need to handle these here: we merge them when adding them to the
   2569     // template.
   2570     return false;
   2571   }
   2572 
   2573   // Compatible tags match.
   2574   if (TagDecl *TagX = dyn_cast<TagDecl>(X)) {
   2575     TagDecl *TagY = cast<TagDecl>(Y);
   2576     return (TagX->getTagKind() == TagY->getTagKind()) ||
   2577       ((TagX->getTagKind() == TTK_Struct || TagX->getTagKind() == TTK_Class ||
   2578         TagX->getTagKind() == TTK_Interface) &&
   2579        (TagY->getTagKind() == TTK_Struct || TagY->getTagKind() == TTK_Class ||
   2580         TagY->getTagKind() == TTK_Interface));
   2581   }
   2582 
   2583   // Functions with the same type and linkage match.
   2584   // FIXME: This needs to cope with merging of prototyped/non-prototyped
   2585   // functions, etc.
   2586   if (FunctionDecl *FuncX = dyn_cast<FunctionDecl>(X)) {
   2587     FunctionDecl *FuncY = cast<FunctionDecl>(Y);
   2588     return (FuncX->getLinkageInternal() == FuncY->getLinkageInternal()) &&
   2589       FuncX->getASTContext().hasSameType(FuncX->getType(), FuncY->getType());
   2590   }
   2591 
   2592   // Variables with the same type and linkage match.
   2593   if (VarDecl *VarX = dyn_cast<VarDecl>(X)) {
   2594     VarDecl *VarY = cast<VarDecl>(Y);
   2595     return (VarX->getLinkageInternal() == VarY->getLinkageInternal()) &&
   2596       VarX->getASTContext().hasSameType(VarX->getType(), VarY->getType());
   2597   }
   2598 
   2599   // Namespaces with the same name and inlinedness match.
   2600   if (NamespaceDecl *NamespaceX = dyn_cast<NamespaceDecl>(X)) {
   2601     NamespaceDecl *NamespaceY = cast<NamespaceDecl>(Y);
   2602     return NamespaceX->isInline() == NamespaceY->isInline();
   2603   }
   2604 
   2605   // Identical template names and kinds match if their template parameter lists
   2606   // and patterns match.
   2607   if (TemplateDecl *TemplateX = dyn_cast<TemplateDecl>(X)) {
   2608     TemplateDecl *TemplateY = cast<TemplateDecl>(Y);
   2609     return isSameEntity(TemplateX->getTemplatedDecl(),
   2610                         TemplateY->getTemplatedDecl()) &&
   2611            isSameTemplateParameterList(TemplateX->getTemplateParameters(),
   2612                                        TemplateY->getTemplateParameters());
   2613   }
   2614 
   2615   // Fields with the same name and the same type match.
   2616   if (FieldDecl *FDX = dyn_cast<FieldDecl>(X)) {
   2617     FieldDecl *FDY = cast<FieldDecl>(Y);
   2618     // FIXME: Also check the bitwidth is odr-equivalent, if any.
   2619     return X->getASTContext().hasSameType(FDX->getType(), FDY->getType());
   2620   }
   2621 
   2622   // Indirect fields with the same target field match.
   2623   if (auto *IFDX = dyn_cast<IndirectFieldDecl>(X)) {
   2624     auto *IFDY = cast<IndirectFieldDecl>(Y);
   2625     return IFDX->getAnonField()->getCanonicalDecl() ==
   2626            IFDY->getAnonField()->getCanonicalDecl();
   2627   }
   2628 
   2629   // Enumerators with the same name match.
   2630   if (isa<EnumConstantDecl>(X))
   2631     // FIXME: Also check the value is odr-equivalent.
   2632     return true;
   2633 
   2634   // Using shadow declarations with the same target match.
   2635   if (UsingShadowDecl *USX = dyn_cast<UsingShadowDecl>(X)) {
   2636     UsingShadowDecl *USY = cast<UsingShadowDecl>(Y);
   2637     return USX->getTargetDecl() == USY->getTargetDecl();
   2638   }
   2639 
   2640   // Using declarations with the same qualifier match. (We already know that
   2641   // the name matches.)
   2642   if (auto *UX = dyn_cast<UsingDecl>(X)) {
   2643     auto *UY = cast<UsingDecl>(Y);
   2644     return isSameQualifier(UX->getQualifier(), UY->getQualifier()) &&
   2645            UX->hasTypename() == UY->hasTypename() &&
   2646            UX->isAccessDeclaration() == UY->isAccessDeclaration();
   2647   }
   2648   if (auto *UX = dyn_cast<UnresolvedUsingValueDecl>(X)) {
   2649     auto *UY = cast<UnresolvedUsingValueDecl>(Y);
   2650     return isSameQualifier(UX->getQualifier(), UY->getQualifier()) &&
   2651            UX->isAccessDeclaration() == UY->isAccessDeclaration();
   2652   }
   2653   if (auto *UX = dyn_cast<UnresolvedUsingTypenameDecl>(X))
   2654     return isSameQualifier(
   2655         UX->getQualifier(),
   2656         cast<UnresolvedUsingTypenameDecl>(Y)->getQualifier());
   2657 
   2658   // Namespace alias definitions with the same target match.
   2659   if (auto *NAX = dyn_cast<NamespaceAliasDecl>(X)) {
   2660     auto *NAY = cast<NamespaceAliasDecl>(Y);
   2661     return NAX->getNamespace()->Equals(NAY->getNamespace());
   2662   }
   2663 
   2664   return false;
   2665 }
   2666 
   2667 /// Find the context in which we should search for previous declarations when
   2668 /// looking for declarations to merge.
   2669 DeclContext *ASTDeclReader::getPrimaryContextForMerging(ASTReader &Reader,
   2670                                                         DeclContext *DC) {
   2671   if (NamespaceDecl *ND = dyn_cast<NamespaceDecl>(DC))
   2672     return ND->getOriginalNamespace();
   2673 
   2674   if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {
   2675     // Try to dig out the definition.
   2676     auto *DD = RD->DefinitionData.getNotUpdated();
   2677     if (!DD)
   2678       DD = RD->getCanonicalDecl()->DefinitionData.getNotUpdated();
   2679 
   2680     // If there's no definition yet, then DC's definition is added by an update
   2681     // record, but we've not yet loaded that update record. In this case, we
   2682     // commit to DC being the canonical definition now, and will fix this when
   2683     // we load the update record.
   2684     if (!DD) {
   2685       DD = new (Reader.Context) struct CXXRecordDecl::DefinitionData(RD);
   2686       RD->IsCompleteDefinition = true;
   2687       RD->DefinitionData = DD;
   2688       RD->getCanonicalDecl()->DefinitionData = DD;
   2689 
   2690       // Track that we did this horrible thing so that we can fix it later.
   2691       Reader.PendingFakeDefinitionData.insert(
   2692           std::make_pair(DD, ASTReader::PendingFakeDefinitionKind::Fake));
   2693     }
   2694 
   2695     return DD->Definition;
   2696   }
   2697 
   2698   if (EnumDecl *ED = dyn_cast<EnumDecl>(DC))
   2699     return ED->getASTContext().getLangOpts().CPlusPlus? ED->getDefinition()
   2700                                                       : nullptr;
   2701 
   2702   // We can see the TU here only if we have no Sema object. In that case,
   2703   // there's no TU scope to look in, so using the DC alone is sufficient.
   2704   if (auto *TU = dyn_cast<TranslationUnitDecl>(DC))
   2705     return TU;
   2706 
   2707   return nullptr;
   2708 }
   2709 
   2710 ASTDeclReader::FindExistingResult::~FindExistingResult() {
   2711   // Record that we had a typedef name for linkage whether or not we merge
   2712   // with that declaration.
   2713   if (TypedefNameForLinkage) {
   2714     DeclContext *DC = New->getDeclContext()->getRedeclContext();
   2715     Reader.ImportedTypedefNamesForLinkage.insert(
   2716         std::make_pair(std::make_pair(DC, TypedefNameForLinkage), New));
   2717     return;
   2718   }
   2719 
   2720   if (!AddResult || Existing)
   2721     return;
   2722 
   2723   DeclarationName Name = New->getDeclName();
   2724   DeclContext *DC = New->getDeclContext()->getRedeclContext();
   2725   if (needsAnonymousDeclarationNumber(New)) {
   2726     setAnonymousDeclForMerging(Reader, New->getLexicalDeclContext(),
   2727                                AnonymousDeclNumber, New);
   2728   } else if (DC->isTranslationUnit() && Reader.SemaObj &&
   2729              !Reader.getContext().getLangOpts().CPlusPlus) {
   2730     if (Reader.SemaObj->IdResolver.tryAddTopLevelDecl(New, Name))
   2731       Reader.PendingFakeLookupResults[Name.getAsIdentifierInfo()]
   2732             .push_back(New);
   2733   } else if (DeclContext *MergeDC = getPrimaryContextForMerging(Reader, DC)) {
   2734     // Add the declaration to its redeclaration context so later merging
   2735     // lookups will find it.
   2736     MergeDC->makeDeclVisibleInContextImpl(New, /*Internal*/true);
   2737   }
   2738 }
   2739 
   2740 /// Find the declaration that should be merged into, given the declaration found
   2741 /// by name lookup. If we're merging an anonymous declaration within a typedef,
   2742 /// we need a matching typedef, and we merge with the type inside it.
   2743 static NamedDecl *getDeclForMerging(NamedDecl *Found,
   2744                                     bool IsTypedefNameForLinkage) {
   2745   if (!IsTypedefNameForLinkage)
   2746     return Found;
   2747 
   2748   // If we found a typedef declaration that gives a name to some other
   2749   // declaration, then we want that inner declaration. Declarations from
   2750   // AST files are handled via ImportedTypedefNamesForLinkage.
   2751   if (Found->isFromASTFile())
   2752     return nullptr;
   2753 
   2754   if (auto *TND = dyn_cast<TypedefNameDecl>(Found))
   2755     return TND->getAnonDeclWithTypedefName();
   2756 
   2757   return nullptr;
   2758 }
   2759 
   2760 NamedDecl *ASTDeclReader::getAnonymousDeclForMerging(ASTReader &Reader,
   2761                                                      DeclContext *DC,
   2762                                                      unsigned Index) {
   2763   // If the lexical context has been merged, look into the now-canonical
   2764   // definition.
   2765   if (auto *Merged = Reader.MergedDeclContexts.lookup(DC))
   2766     DC = Merged;
   2767 
   2768   // If we've seen this before, return the canonical declaration.
   2769   auto &Previous = Reader.AnonymousDeclarationsForMerging[DC];
   2770   if (Index < Previous.size() && Previous[Index])
   2771     return Previous[Index];
   2772 
   2773   // If this is the first time, but we have parsed a declaration of the context,
   2774   // build the anonymous declaration list from the parsed declaration.
   2775   if (!cast<Decl>(DC)->isFromASTFile()) {
   2776     numberAnonymousDeclsWithin(DC, [&](NamedDecl *ND, unsigned Number) {
   2777       if (Previous.size() == Number)
   2778         Previous.push_back(cast<NamedDecl>(ND->getCanonicalDecl()));
   2779       else
   2780         Previous[Number] = cast<NamedDecl>(ND->getCanonicalDecl());
   2781     });
   2782   }
   2783 
   2784   return Index < Previous.size() ? Previous[Index] : nullptr;
   2785 }
   2786 
   2787 void ASTDeclReader::setAnonymousDeclForMerging(ASTReader &Reader,
   2788                                                DeclContext *DC, unsigned Index,
   2789                                                NamedDecl *D) {
   2790   if (auto *Merged = Reader.MergedDeclContexts.lookup(DC))
   2791     DC = Merged;
   2792 
   2793   auto &Previous = Reader.AnonymousDeclarationsForMerging[DC];
   2794   if (Index >= Previous.size())
   2795     Previous.resize(Index + 1);
   2796   if (!Previous[Index])
   2797     Previous[Index] = D;
   2798 }
   2799 
   2800 ASTDeclReader::FindExistingResult ASTDeclReader::findExisting(NamedDecl *D) {
   2801   DeclarationName Name = TypedefNameForLinkage ? TypedefNameForLinkage
   2802                                                : D->getDeclName();
   2803 
   2804   if (!Name && !needsAnonymousDeclarationNumber(D)) {
   2805     // Don't bother trying to find unnamed declarations that are in
   2806     // unmergeable contexts.
   2807     FindExistingResult Result(Reader, D, /*Existing=*/nullptr,
   2808                               AnonymousDeclNumber, TypedefNameForLinkage);
   2809     Result.suppress();
   2810     return Result;
   2811   }
   2812 
   2813   DeclContext *DC = D->getDeclContext()->getRedeclContext();
   2814   if (TypedefNameForLinkage) {
   2815     auto It = Reader.ImportedTypedefNamesForLinkage.find(
   2816         std::make_pair(DC, TypedefNameForLinkage));
   2817     if (It != Reader.ImportedTypedefNamesForLinkage.end())
   2818       if (isSameEntity(It->second, D))
   2819         return FindExistingResult(Reader, D, It->second, AnonymousDeclNumber,
   2820                                   TypedefNameForLinkage);
   2821     // Go on to check in other places in case an existing typedef name
   2822     // was not imported.
   2823   }
   2824 
   2825   if (needsAnonymousDeclarationNumber(D)) {
   2826     // This is an anonymous declaration that we may need to merge. Look it up
   2827     // in its context by number.
   2828     if (auto *Existing = getAnonymousDeclForMerging(
   2829             Reader, D->getLexicalDeclContext(), AnonymousDeclNumber))
   2830       if (isSameEntity(Existing, D))
   2831         return FindExistingResult(Reader, D, Existing, AnonymousDeclNumber,
   2832                                   TypedefNameForLinkage);
   2833   } else if (DC->isTranslationUnit() && Reader.SemaObj &&
   2834              !Reader.getContext().getLangOpts().CPlusPlus) {
   2835     IdentifierResolver &IdResolver = Reader.SemaObj->IdResolver;
   2836 
   2837     // Temporarily consider the identifier to be up-to-date. We don't want to
   2838     // cause additional lookups here.
   2839     class UpToDateIdentifierRAII {
   2840       IdentifierInfo *II;
   2841       bool WasOutToDate;
   2842 
   2843     public:
   2844       explicit UpToDateIdentifierRAII(IdentifierInfo *II)
   2845         : II(II), WasOutToDate(false)
   2846       {
   2847         if (II) {
   2848           WasOutToDate = II->isOutOfDate();
   2849           if (WasOutToDate)
   2850             II->setOutOfDate(false);
   2851         }
   2852       }
   2853 
   2854       ~UpToDateIdentifierRAII() {
   2855         if (WasOutToDate)
   2856           II->setOutOfDate(true);
   2857       }
   2858     } UpToDate(Name.getAsIdentifierInfo());
   2859 
   2860     for (IdentifierResolver::iterator I = IdResolver.begin(Name),
   2861                                    IEnd = IdResolver.end();
   2862          I != IEnd; ++I) {
   2863       if (NamedDecl *Existing = getDeclForMerging(*I, TypedefNameForLinkage))
   2864         if (isSameEntity(Existing, D))
   2865           return FindExistingResult(Reader, D, Existing, AnonymousDeclNumber,
   2866                                     TypedefNameForLinkage);
   2867     }
   2868   } else if (DeclContext *MergeDC = getPrimaryContextForMerging(Reader, DC)) {
   2869     DeclContext::lookup_result R = MergeDC->noload_lookup(Name);
   2870     for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {
   2871       if (NamedDecl *Existing = getDeclForMerging(*I, TypedefNameForLinkage))
   2872         if (isSameEntity(Existing, D))
   2873           return FindExistingResult(Reader, D, Existing, AnonymousDeclNumber,
   2874                                     TypedefNameForLinkage);
   2875     }
   2876   } else {
   2877     // Not in a mergeable context.
   2878     return FindExistingResult(Reader);
   2879   }
   2880 
   2881   // If this declaration is from a merged context, make a note that we need to
   2882   // check that the canonical definition of that context contains the decl.
   2883   //
   2884   // FIXME: We should do something similar if we merge two definitions of the
   2885   // same template specialization into the same CXXRecordDecl.
   2886   auto MergedDCIt = Reader.MergedDeclContexts.find(D->getLexicalDeclContext());
   2887   if (MergedDCIt != Reader.MergedDeclContexts.end() &&
   2888       MergedDCIt->second == D->getDeclContext())
   2889     Reader.PendingOdrMergeChecks.push_back(D);
   2890 
   2891   return FindExistingResult(Reader, D, /*Existing=*/nullptr,
   2892                             AnonymousDeclNumber, TypedefNameForLinkage);
   2893 }
   2894 
   2895 template<typename DeclT>
   2896 Decl *ASTDeclReader::getMostRecentDeclImpl(Redeclarable<DeclT> *D) {
   2897   return D->RedeclLink.getLatestNotUpdated();
   2898 }
   2899 Decl *ASTDeclReader::getMostRecentDeclImpl(...) {
   2900   llvm_unreachable("getMostRecentDecl on non-redeclarable declaration");
   2901 }
   2902 
   2903 Decl *ASTDeclReader::getMostRecentDecl(Decl *D) {
   2904   assert(D);
   2905 
   2906   switch (D->getKind()) {
   2907 #define ABSTRACT_DECL(TYPE)
   2908 #define DECL(TYPE, BASE)                               \
   2909   case Decl::TYPE:                                     \
   2910     return getMostRecentDeclImpl(cast<TYPE##Decl>(D));
   2911 #include "clang/AST/DeclNodes.inc"
   2912   }
   2913   llvm_unreachable("unknown decl kind");
   2914 }
   2915 
   2916 Decl *ASTReader::getMostRecentExistingDecl(Decl *D) {
   2917   return ASTDeclReader::getMostRecentDecl(D->getCanonicalDecl());
   2918 }
   2919 
   2920 template<typename DeclT>
   2921 void ASTDeclReader::attachPreviousDeclImpl(ASTReader &Reader,
   2922                                            Redeclarable<DeclT> *D,
   2923                                            Decl *Previous, Decl *Canon) {
   2924   D->RedeclLink.setPrevious(cast<DeclT>(Previous));
   2925   D->First = cast<DeclT>(Previous)->First;
   2926 }
   2927 
   2928 namespace clang {
   2929 template<>
   2930 void ASTDeclReader::attachPreviousDeclImpl(ASTReader &Reader,
   2931                                            Redeclarable<FunctionDecl> *D,
   2932                                            Decl *Previous, Decl *Canon) {
   2933   FunctionDecl *FD = static_cast<FunctionDecl*>(D);
   2934   FunctionDecl *PrevFD = cast<FunctionDecl>(Previous);
   2935 
   2936   FD->RedeclLink.setPrevious(PrevFD);
   2937   FD->First = PrevFD->First;
   2938 
   2939   // If the previous declaration is an inline function declaration, then this
   2940   // declaration is too.
   2941   if (PrevFD->IsInline != FD->IsInline) {
   2942     // FIXME: [dcl.fct.spec]p4:
   2943     //   If a function with external linkage is declared inline in one
   2944     //   translation unit, it shall be declared inline in all translation
   2945     //   units in which it appears.
   2946     //
   2947     // Be careful of this case:
   2948     //
   2949     // module A:
   2950     //   template<typename T> struct X { void f(); };
   2951     //   template<typename T> inline void X<T>::f() {}
   2952     //
   2953     // module B instantiates the declaration of X<int>::f
   2954     // module C instantiates the definition of X<int>::f
   2955     //
   2956     // If module B and C are merged, we do not have a violation of this rule.
   2957     FD->IsInline = true;
   2958   }
   2959 
   2960   // If we need to propagate an exception specification along the redecl
   2961   // chain, make a note of that so that we can do so later.
   2962   auto *FPT = FD->getType()->getAs<FunctionProtoType>();
   2963   auto *PrevFPT = PrevFD->getType()->getAs<FunctionProtoType>();
   2964   if (FPT && PrevFPT) {
   2965     bool IsUnresolved = isUnresolvedExceptionSpec(FPT->getExceptionSpecType());
   2966     bool WasUnresolved =
   2967         isUnresolvedExceptionSpec(PrevFPT->getExceptionSpecType());
   2968     if (IsUnresolved != WasUnresolved)
   2969       Reader.PendingExceptionSpecUpdates.insert(
   2970           std::make_pair(Canon, IsUnresolved ? PrevFD : FD));
   2971   }
   2972 }
   2973 } // end namespace clang
   2974 
   2975 void ASTDeclReader::attachPreviousDeclImpl(ASTReader &Reader, ...) {
   2976   llvm_unreachable("attachPreviousDecl on non-redeclarable declaration");
   2977 }
   2978 
   2979 /// Inherit the default template argument from \p From to \p To. Returns
   2980 /// \c false if there is no default template for \p From.
   2981 template <typename ParmDecl>
   2982 static bool inheritDefaultTemplateArgument(ASTContext &Context, ParmDecl *From,
   2983                                            Decl *ToD) {
   2984   auto *To = cast<ParmDecl>(ToD);
   2985   if (!From->hasDefaultArgument())
   2986     return false;
   2987   To->setInheritedDefaultArgument(Context, From);
   2988   return true;
   2989 }
   2990 
   2991 static void inheritDefaultTemplateArguments(ASTContext &Context,
   2992                                             TemplateDecl *From,
   2993                                             TemplateDecl *To) {
   2994   auto *FromTP = From->getTemplateParameters();
   2995   auto *ToTP = To->getTemplateParameters();
   2996   assert(FromTP->size() == ToTP->size() && "merged mismatched templates?");
   2997 
   2998   for (unsigned I = 0, N = FromTP->size(); I != N; ++I) {
   2999     NamedDecl *FromParam = FromTP->getParam(N - I - 1);
   3000     NamedDecl *ToParam = ToTP->getParam(N - I - 1);
   3001 
   3002     if (auto *FTTP = dyn_cast<TemplateTypeParmDecl>(FromParam)) {
   3003       if (!inheritDefaultTemplateArgument(Context, FTTP, ToParam))
   3004         break;
   3005     } else if (auto *FNTTP = dyn_cast<NonTypeTemplateParmDecl>(FromParam)) {
   3006       if (!inheritDefaultTemplateArgument(Context, FNTTP, ToParam))
   3007         break;
   3008     } else {
   3009       if (!inheritDefaultTemplateArgument(
   3010               Context, cast<TemplateTemplateParmDecl>(FromParam), ToParam))
   3011         break;
   3012     }
   3013   }
   3014 }
   3015 
   3016 void ASTDeclReader::attachPreviousDecl(ASTReader &Reader, Decl *D,
   3017                                        Decl *Previous, Decl *Canon) {
   3018   assert(D && Previous);
   3019 
   3020   switch (D->getKind()) {
   3021 #define ABSTRACT_DECL(TYPE)
   3022 #define DECL(TYPE, BASE)                                                  \
   3023   case Decl::TYPE:                                                        \
   3024     attachPreviousDeclImpl(Reader, cast<TYPE##Decl>(D), Previous, Canon); \
   3025     break;
   3026 #include "clang/AST/DeclNodes.inc"
   3027   }
   3028 
   3029   // If the declaration was visible in one module, a redeclaration of it in
   3030   // another module remains visible even if it wouldn't be visible by itself.
   3031   //
   3032   // FIXME: In this case, the declaration should only be visible if a module
   3033   //        that makes it visible has been imported.
   3034   D->IdentifierNamespace |=
   3035       Previous->IdentifierNamespace &
   3036       (Decl::IDNS_Ordinary | Decl::IDNS_Tag | Decl::IDNS_Type);
   3037 
   3038   // If the previous declaration is marked as used, then this declaration should
   3039   // be too.
   3040   if (Previous->Used)
   3041     D->Used = true;
   3042 
   3043   // If the declaration declares a template, it may inherit default arguments
   3044   // from the previous declaration.
   3045   if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D))
   3046     inheritDefaultTemplateArguments(Reader.getContext(),
   3047                                     cast<TemplateDecl>(Previous), TD);
   3048 }
   3049 
   3050 template<typename DeclT>
   3051 void ASTDeclReader::attachLatestDeclImpl(Redeclarable<DeclT> *D, Decl *Latest) {
   3052   D->RedeclLink.setLatest(cast<DeclT>(Latest));
   3053 }
   3054 void ASTDeclReader::attachLatestDeclImpl(...) {
   3055   llvm_unreachable("attachLatestDecl on non-redeclarable declaration");
   3056 }
   3057 
   3058 void ASTDeclReader::attachLatestDecl(Decl *D, Decl *Latest) {
   3059   assert(D && Latest);
   3060 
   3061   switch (D->getKind()) {
   3062 #define ABSTRACT_DECL(TYPE)
   3063 #define DECL(TYPE, BASE)                                  \
   3064   case Decl::TYPE:                                        \
   3065     attachLatestDeclImpl(cast<TYPE##Decl>(D), Latest); \
   3066     break;
   3067 #include "clang/AST/DeclNodes.inc"
   3068   }
   3069 }
   3070 
   3071 template<typename DeclT>
   3072 void ASTDeclReader::markIncompleteDeclChainImpl(Redeclarable<DeclT> *D) {
   3073   D->RedeclLink.markIncomplete();
   3074 }
   3075 void ASTDeclReader::markIncompleteDeclChainImpl(...) {
   3076   llvm_unreachable("markIncompleteDeclChain on non-redeclarable declaration");
   3077 }
   3078 
   3079 void ASTReader::markIncompleteDeclChain(Decl *D) {
   3080   switch (D->getKind()) {
   3081 #define ABSTRACT_DECL(TYPE)
   3082 #define DECL(TYPE, BASE)                                             \
   3083   case Decl::TYPE:                                                   \
   3084     ASTDeclReader::markIncompleteDeclChainImpl(cast<TYPE##Decl>(D)); \
   3085     break;
   3086 #include "clang/AST/DeclNodes.inc"
   3087   }
   3088 }
   3089 
   3090 /// \brief Read the declaration at the given offset from the AST file.
   3091 Decl *ASTReader::ReadDeclRecord(DeclID ID) {
   3092   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
   3093   unsigned RawLocation = 0;
   3094   RecordLocation Loc = DeclCursorForID(ID, RawLocation);
   3095   llvm::BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
   3096   // Keep track of where we are in the stream, then jump back there
   3097   // after reading this declaration.
   3098   SavedStreamPosition SavedPosition(DeclsCursor);
   3099 
   3100   ReadingKindTracker ReadingKind(Read_Decl, *this);
   3101 
   3102   // Note that we are loading a declaration record.
   3103   Deserializing ADecl(this);
   3104 
   3105   DeclsCursor.JumpToBit(Loc.Offset);
   3106   RecordData Record;
   3107   unsigned Code = DeclsCursor.ReadCode();
   3108   unsigned Idx = 0;
   3109   ASTDeclReader Reader(*this, *Loc.F, ID, RawLocation, Record,Idx);
   3110 
   3111   Decl *D = nullptr;
   3112   switch ((DeclCode)DeclsCursor.readRecord(Code, Record)) {
   3113   case DECL_CONTEXT_LEXICAL:
   3114   case DECL_CONTEXT_VISIBLE:
   3115     llvm_unreachable("Record cannot be de-serialized with ReadDeclRecord");
   3116   case DECL_TYPEDEF:
   3117     D = TypedefDecl::CreateDeserialized(Context, ID);
   3118     break;
   3119   case DECL_TYPEALIAS:
   3120     D = TypeAliasDecl::CreateDeserialized(Context, ID);
   3121     break;
   3122   case DECL_ENUM:
   3123     D = EnumDecl::CreateDeserialized(Context, ID);
   3124     break;
   3125   case DECL_RECORD:
   3126     D = RecordDecl::CreateDeserialized(Context, ID);
   3127     break;
   3128   case DECL_ENUM_CONSTANT:
   3129     D = EnumConstantDecl::CreateDeserialized(Context, ID);
   3130     break;
   3131   case DECL_FUNCTION:
   3132     D = FunctionDecl::CreateDeserialized(Context, ID);
   3133     break;
   3134   case DECL_LINKAGE_SPEC:
   3135     D = LinkageSpecDecl::CreateDeserialized(Context, ID);
   3136     break;
   3137   case DECL_LABEL:
   3138     D = LabelDecl::CreateDeserialized(Context, ID);
   3139     break;
   3140   case DECL_NAMESPACE:
   3141     D = NamespaceDecl::CreateDeserialized(Context, ID);
   3142     break;
   3143   case DECL_NAMESPACE_ALIAS:
   3144     D = NamespaceAliasDecl::CreateDeserialized(Context, ID);
   3145     break;
   3146   case DECL_USING:
   3147     D = UsingDecl::CreateDeserialized(Context, ID);
   3148     break;
   3149   case DECL_USING_SHADOW:
   3150     D = UsingShadowDecl::CreateDeserialized(Context, ID);
   3151     break;
   3152   case DECL_USING_DIRECTIVE:
   3153     D = UsingDirectiveDecl::CreateDeserialized(Context, ID);
   3154     break;
   3155   case DECL_UNRESOLVED_USING_VALUE:
   3156     D = UnresolvedUsingValueDecl::CreateDeserialized(Context, ID);
   3157     break;
   3158   case DECL_UNRESOLVED_USING_TYPENAME:
   3159     D = UnresolvedUsingTypenameDecl::CreateDeserialized(Context, ID);
   3160     break;
   3161   case DECL_CXX_RECORD:
   3162     D = CXXRecordDecl::CreateDeserialized(Context, ID);
   3163     break;
   3164   case DECL_CXX_METHOD:
   3165     D = CXXMethodDecl::CreateDeserialized(Context, ID);
   3166     break;
   3167   case DECL_CXX_CONSTRUCTOR:
   3168     D = CXXConstructorDecl::CreateDeserialized(Context, ID);
   3169     break;
   3170   case DECL_CXX_DESTRUCTOR:
   3171     D = CXXDestructorDecl::CreateDeserialized(Context, ID);
   3172     break;
   3173   case DECL_CXX_CONVERSION:
   3174     D = CXXConversionDecl::CreateDeserialized(Context, ID);
   3175     break;
   3176   case DECL_ACCESS_SPEC:
   3177     D = AccessSpecDecl::CreateDeserialized(Context, ID);
   3178     break;
   3179   case DECL_FRIEND:
   3180     D = FriendDecl::CreateDeserialized(Context, ID, Record[Idx++]);
   3181     break;
   3182   case DECL_FRIEND_TEMPLATE:
   3183     D = FriendTemplateDecl::CreateDeserialized(Context, ID);
   3184     break;
   3185   case DECL_CLASS_TEMPLATE:
   3186     D = ClassTemplateDecl::CreateDeserialized(Context, ID);
   3187     break;
   3188   case DECL_CLASS_TEMPLATE_SPECIALIZATION:
   3189     D = ClassTemplateSpecializationDecl::CreateDeserialized(Context, ID);
   3190     break;
   3191   case DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION:
   3192     D = ClassTemplatePartialSpecializationDecl::CreateDeserialized(Context, ID);
   3193     break;
   3194   case DECL_VAR_TEMPLATE:
   3195     D = VarTemplateDecl::CreateDeserialized(Context, ID);
   3196     break;
   3197   case DECL_VAR_TEMPLATE_SPECIALIZATION:
   3198     D = VarTemplateSpecializationDecl::CreateDeserialized(Context, ID);
   3199     break;
   3200   case DECL_VAR_TEMPLATE_PARTIAL_SPECIALIZATION:
   3201     D = VarTemplatePartialSpecializationDecl::CreateDeserialized(Context, ID);
   3202     break;
   3203   case DECL_CLASS_SCOPE_FUNCTION_SPECIALIZATION:
   3204     D = ClassScopeFunctionSpecializationDecl::CreateDeserialized(Context, ID);
   3205     break;
   3206   case DECL_FUNCTION_TEMPLATE:
   3207     D = FunctionTemplateDecl::CreateDeserialized(Context, ID);
   3208     break;
   3209   case DECL_TEMPLATE_TYPE_PARM:
   3210     D = TemplateTypeParmDecl::CreateDeserialized(Context, ID);
   3211     break;
   3212   case DECL_NON_TYPE_TEMPLATE_PARM:
   3213     D = NonTypeTemplateParmDecl::CreateDeserialized(Context, ID);
   3214     break;
   3215   case DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK:
   3216     D = NonTypeTemplateParmDecl::CreateDeserialized(Context, ID, Record[Idx++]);
   3217     break;
   3218   case DECL_TEMPLATE_TEMPLATE_PARM:
   3219     D = TemplateTemplateParmDecl::CreateDeserialized(Context, ID);
   3220     break;
   3221   case DECL_EXPANDED_TEMPLATE_TEMPLATE_PARM_PACK:
   3222     D = TemplateTemplateParmDecl::CreateDeserialized(Context, ID,
   3223                                                      Record[Idx++]);
   3224     break;
   3225   case DECL_TYPE_ALIAS_TEMPLATE:
   3226     D = TypeAliasTemplateDecl::CreateDeserialized(Context, ID);
   3227     break;
   3228   case DECL_STATIC_ASSERT:
   3229     D = StaticAssertDecl::CreateDeserialized(Context, ID);
   3230     break;
   3231   case DECL_OBJC_METHOD:
   3232     D = ObjCMethodDecl::CreateDeserialized(Context, ID);
   3233     break;
   3234   case DECL_OBJC_INTERFACE:
   3235     D = ObjCInterfaceDecl::CreateDeserialized(Context, ID);
   3236     break;
   3237   case DECL_OBJC_IVAR:
   3238     D = ObjCIvarDecl::CreateDeserialized(Context, ID);
   3239     break;
   3240   case DECL_OBJC_PROTOCOL:
   3241     D = ObjCProtocolDecl::CreateDeserialized(Context, ID);
   3242     break;
   3243   case DECL_OBJC_AT_DEFS_FIELD:
   3244     D = ObjCAtDefsFieldDecl::CreateDeserialized(Context, ID);
   3245     break;
   3246   case DECL_OBJC_CATEGORY:
   3247     D = ObjCCategoryDecl::CreateDeserialized(Context, ID);
   3248     break;
   3249   case DECL_OBJC_CATEGORY_IMPL:
   3250     D = ObjCCategoryImplDecl::CreateDeserialized(Context, ID);
   3251     break;
   3252   case DECL_OBJC_IMPLEMENTATION:
   3253     D = ObjCImplementationDecl::CreateDeserialized(Context, ID);
   3254     break;
   3255   case DECL_OBJC_COMPATIBLE_ALIAS:
   3256     D = ObjCCompatibleAliasDecl::CreateDeserialized(Context, ID);
   3257     break;
   3258   case DECL_OBJC_PROPERTY:
   3259     D = ObjCPropertyDecl::CreateDeserialized(Context, ID);
   3260     break;
   3261   case DECL_OBJC_PROPERTY_IMPL:
   3262     D = ObjCPropertyImplDecl::CreateDeserialized(Context, ID);
   3263     break;
   3264   case DECL_FIELD:
   3265     D = FieldDecl::CreateDeserialized(Context, ID);
   3266     break;
   3267   case DECL_INDIRECTFIELD:
   3268     D = IndirectFieldDecl::CreateDeserialized(Context, ID);
   3269     break;
   3270   case DECL_VAR:
   3271     D = VarDecl::CreateDeserialized(Context, ID);
   3272     break;
   3273   case DECL_IMPLICIT_PARAM:
   3274     D = ImplicitParamDecl::CreateDeserialized(Context, ID);
   3275     break;
   3276   case DECL_PARM_VAR:
   3277     D = ParmVarDecl::CreateDeserialized(Context, ID);
   3278     break;
   3279   case DECL_FILE_SCOPE_ASM:
   3280     D = FileScopeAsmDecl::CreateDeserialized(Context, ID);
   3281     break;
   3282   case DECL_BLOCK:
   3283     D = BlockDecl::CreateDeserialized(Context, ID);
   3284     break;
   3285   case DECL_MS_PROPERTY:
   3286     D = MSPropertyDecl::CreateDeserialized(Context, ID);
   3287     break;
   3288   case DECL_CAPTURED:
   3289     D = CapturedDecl::CreateDeserialized(Context, ID, Record[Idx++]);
   3290     break;
   3291   case DECL_CXX_BASE_SPECIFIERS:
   3292     Error("attempt to read a C++ base-specifier record as a declaration");
   3293     return nullptr;
   3294   case DECL_CXX_CTOR_INITIALIZERS:
   3295     Error("attempt to read a C++ ctor initializer record as a declaration");
   3296     return nullptr;
   3297   case DECL_IMPORT:
   3298     // Note: last entry of the ImportDecl record is the number of stored source
   3299     // locations.
   3300     D = ImportDecl::CreateDeserialized(Context, ID, Record.back());
   3301     break;
   3302   case DECL_OMP_THREADPRIVATE:
   3303     D = OMPThreadPrivateDecl::CreateDeserialized(Context, ID, Record[Idx++]);
   3304     break;
   3305   case DECL_EMPTY:
   3306     D = EmptyDecl::CreateDeserialized(Context, ID);
   3307     break;
   3308   case DECL_OBJC_TYPE_PARAM:
   3309     D = ObjCTypeParamDecl::CreateDeserialized(Context, ID);
   3310     break;
   3311   }
   3312 
   3313   assert(D && "Unknown declaration reading AST file");
   3314   LoadedDecl(Index, D);
   3315   // Set the DeclContext before doing any deserialization, to make sure internal
   3316   // calls to Decl::getASTContext() by Decl's methods will find the
   3317   // TranslationUnitDecl without crashing.
   3318   D->setDeclContext(Context.getTranslationUnitDecl());
   3319   Reader.Visit(D);
   3320 
   3321   // If this declaration is also a declaration context, get the
   3322   // offsets for its tables of lexical and visible declarations.
   3323   if (DeclContext *DC = dyn_cast<DeclContext>(D)) {
   3324     std::pair<uint64_t, uint64_t> Offsets = Reader.VisitDeclContext(DC);
   3325     if (Offsets.first &&
   3326         ReadLexicalDeclContextStorage(*Loc.F, DeclsCursor, Offsets.first, DC))
   3327       return nullptr;
   3328     if (Offsets.second &&
   3329         ReadVisibleDeclContextStorage(*Loc.F, DeclsCursor, Offsets.second, ID))
   3330       return nullptr;
   3331   }
   3332   assert(Idx == Record.size());
   3333 
   3334   // Load any relevant update records.
   3335   PendingUpdateRecords.push_back(std::make_pair(ID, D));
   3336 
   3337   // Load the categories after recursive loading is finished.
   3338   if (ObjCInterfaceDecl *Class = dyn_cast<ObjCInterfaceDecl>(D))
   3339     if (Class->isThisDeclarationADefinition())
   3340       loadObjCCategories(ID, Class);
   3341 
   3342   // If we have deserialized a declaration that has a definition the
   3343   // AST consumer might need to know about, queue it.
   3344   // We don't pass it to the consumer immediately because we may be in recursive
   3345   // loading, and some declarations may still be initializing.
   3346   if (isConsumerInterestedIn(D, Reader.hasPendingBody()))
   3347     InterestingDecls.push_back(D);
   3348 
   3349   return D;
   3350 }
   3351 
   3352 void ASTReader::loadDeclUpdateRecords(serialization::DeclID ID, Decl *D) {
   3353   // Load the pending visible updates for this decl context, if it has any.
   3354   auto I = PendingVisibleUpdates.find(ID);
   3355   if (I != PendingVisibleUpdates.end()) {
   3356     auto VisibleUpdates = std::move(I->second);
   3357     PendingVisibleUpdates.erase(I);
   3358 
   3359     auto *DC = cast<DeclContext>(D)->getPrimaryContext();
   3360     for (const PendingVisibleUpdate &Update : VisibleUpdates)
   3361       Lookups[DC].Table.add(
   3362           Update.Mod, Update.Data,
   3363           reader::ASTDeclContextNameLookupTrait(*this, *Update.Mod));
   3364     DC->setHasExternalVisibleStorage(true);
   3365   }
   3366 
   3367   // The declaration may have been modified by files later in the chain.
   3368   // If this is the case, read the record containing the updates from each file
   3369   // and pass it to ASTDeclReader to make the modifications.
   3370   DeclUpdateOffsetsMap::iterator UpdI = DeclUpdateOffsets.find(ID);
   3371   if (UpdI != DeclUpdateOffsets.end()) {
   3372     auto UpdateOffsets = std::move(UpdI->second);
   3373     DeclUpdateOffsets.erase(UpdI);
   3374 
   3375     bool WasInteresting = isConsumerInterestedIn(D, false);
   3376     for (auto &FileAndOffset : UpdateOffsets) {
   3377       ModuleFile *F = FileAndOffset.first;
   3378       uint64_t Offset = FileAndOffset.second;
   3379       llvm::BitstreamCursor &Cursor = F->DeclsCursor;
   3380       SavedStreamPosition SavedPosition(Cursor);
   3381       Cursor.JumpToBit(Offset);
   3382       RecordData Record;
   3383       unsigned Code = Cursor.ReadCode();
   3384       unsigned RecCode = Cursor.readRecord(Code, Record);
   3385       (void)RecCode;
   3386       assert(RecCode == DECL_UPDATES && "Expected DECL_UPDATES record!");
   3387 
   3388       unsigned Idx = 0;
   3389       ASTDeclReader Reader(*this, *F, ID, 0, Record, Idx);
   3390       Reader.UpdateDecl(D, *F, Record);
   3391 
   3392       // We might have made this declaration interesting. If so, remember that
   3393       // we need to hand it off to the consumer.
   3394       if (!WasInteresting &&
   3395           isConsumerInterestedIn(D, Reader.hasPendingBody())) {
   3396         InterestingDecls.push_back(D);
   3397         WasInteresting = true;
   3398       }
   3399     }
   3400   }
   3401 }
   3402 
   3403 void ASTReader::loadPendingDeclChain(Decl *FirstLocal, uint64_t LocalOffset) {
   3404   // Attach FirstLocal to the end of the decl chain.
   3405   Decl *CanonDecl = FirstLocal->getCanonicalDecl();
   3406   if (FirstLocal != CanonDecl) {
   3407     Decl *PrevMostRecent = ASTDeclReader::getMostRecentDecl(CanonDecl);
   3408     ASTDeclReader::attachPreviousDecl(
   3409         *this, FirstLocal, PrevMostRecent ? PrevMostRecent : CanonDecl,
   3410         CanonDecl);
   3411   }
   3412 
   3413   if (!LocalOffset) {
   3414     ASTDeclReader::attachLatestDecl(CanonDecl, FirstLocal);
   3415     return;
   3416   }
   3417 
   3418   // Load the list of other redeclarations from this module file.
   3419   ModuleFile *M = getOwningModuleFile(FirstLocal);
   3420   assert(M && "imported decl from no module file");
   3421 
   3422   llvm::BitstreamCursor &Cursor = M->DeclsCursor;
   3423   SavedStreamPosition SavedPosition(Cursor);
   3424   Cursor.JumpToBit(LocalOffset);
   3425 
   3426   RecordData Record;
   3427   unsigned Code = Cursor.ReadCode();
   3428   unsigned RecCode = Cursor.readRecord(Code, Record);
   3429   (void)RecCode;
   3430   assert(RecCode == LOCAL_REDECLARATIONS && "expected LOCAL_REDECLARATIONS record!");
   3431 
   3432   // FIXME: We have several different dispatches on decl kind here; maybe
   3433   // we should instead generate one loop per kind and dispatch up-front?
   3434   Decl *MostRecent = FirstLocal;
   3435   for (unsigned I = 0, N = Record.size(); I != N; ++I) {
   3436     auto *D = GetLocalDecl(*M, Record[N - I - 1]);
   3437     ASTDeclReader::attachPreviousDecl(*this, D, MostRecent, CanonDecl);
   3438     MostRecent = D;
   3439   }
   3440   ASTDeclReader::attachLatestDecl(CanonDecl, MostRecent);
   3441 }
   3442 
   3443 namespace {
   3444   /// \brief Given an ObjC interface, goes through the modules and links to the
   3445   /// interface all the categories for it.
   3446   class ObjCCategoriesVisitor {
   3447     ASTReader &Reader;
   3448     serialization::GlobalDeclID InterfaceID;
   3449     ObjCInterfaceDecl *Interface;
   3450     llvm::SmallPtrSetImpl<ObjCCategoryDecl *> &Deserialized;
   3451     unsigned PreviousGeneration;
   3452     ObjCCategoryDecl *Tail;
   3453     llvm::DenseMap<DeclarationName, ObjCCategoryDecl *> NameCategoryMap;
   3454 
   3455     void add(ObjCCategoryDecl *Cat) {
   3456       // Only process each category once.
   3457       if (!Deserialized.erase(Cat))
   3458         return;
   3459 
   3460       // Check for duplicate categories.
   3461       if (Cat->getDeclName()) {
   3462         ObjCCategoryDecl *&Existing = NameCategoryMap[Cat->getDeclName()];
   3463         if (Existing &&
   3464             Reader.getOwningModuleFile(Existing)
   3465                                           != Reader.getOwningModuleFile(Cat)) {
   3466           // FIXME: We should not warn for duplicates in diamond:
   3467           //
   3468           //   MT     //
   3469           //  /  \    //
   3470           // ML  MR   //
   3471           //  \  /    //
   3472           //   MB     //
   3473           //
   3474           // If there are duplicates in ML/MR, there will be warning when
   3475           // creating MB *and* when importing MB. We should not warn when
   3476           // importing.
   3477           Reader.Diag(Cat->getLocation(), diag::warn_dup_category_def)
   3478             << Interface->getDeclName() << Cat->getDeclName();
   3479           Reader.Diag(Existing->getLocation(), diag::note_previous_definition);
   3480         } else if (!Existing) {
   3481           // Record this category.
   3482           Existing = Cat;
   3483         }
   3484       }
   3485 
   3486       // Add this category to the end of the chain.
   3487       if (Tail)
   3488         ASTDeclReader::setNextObjCCategory(Tail, Cat);
   3489       else
   3490         Interface->setCategoryListRaw(Cat);
   3491       Tail = Cat;
   3492     }
   3493 
   3494   public:
   3495     ObjCCategoriesVisitor(ASTReader &Reader,
   3496                           serialization::GlobalDeclID InterfaceID,
   3497                           ObjCInterfaceDecl *Interface,
   3498                         llvm::SmallPtrSetImpl<ObjCCategoryDecl *> &Deserialized,
   3499                           unsigned PreviousGeneration)
   3500       : Reader(Reader), InterfaceID(InterfaceID), Interface(Interface),
   3501         Deserialized(Deserialized), PreviousGeneration(PreviousGeneration),
   3502         Tail(nullptr)
   3503     {
   3504       // Populate the name -> category map with the set of known categories.
   3505       for (auto *Cat : Interface->known_categories()) {
   3506         if (Cat->getDeclName())
   3507           NameCategoryMap[Cat->getDeclName()] = Cat;
   3508 
   3509         // Keep track of the tail of the category list.
   3510         Tail = Cat;
   3511       }
   3512     }
   3513 
   3514     bool operator()(ModuleFile &M) {
   3515       // If we've loaded all of the category information we care about from
   3516       // this module file, we're done.
   3517       if (M.Generation <= PreviousGeneration)
   3518         return true;
   3519 
   3520       // Map global ID of the definition down to the local ID used in this
   3521       // module file. If there is no such mapping, we'll find nothing here
   3522       // (or in any module it imports).
   3523       DeclID LocalID = Reader.mapGlobalIDToModuleFileGlobalID(M, InterfaceID);
   3524       if (!LocalID)
   3525         return true;
   3526 
   3527       // Perform a binary search to find the local redeclarations for this
   3528       // declaration (if any).
   3529       const ObjCCategoriesInfo Compare = { LocalID, 0 };
   3530       const ObjCCategoriesInfo *Result
   3531         = std::lower_bound(M.ObjCCategoriesMap,
   3532                            M.ObjCCategoriesMap + M.LocalNumObjCCategoriesInMap,
   3533                            Compare);
   3534       if (Result == M.ObjCCategoriesMap + M.LocalNumObjCCategoriesInMap ||
   3535           Result->DefinitionID != LocalID) {
   3536         // We didn't find anything. If the class definition is in this module
   3537         // file, then the module files it depends on cannot have any categories,
   3538         // so suppress further lookup.
   3539         return Reader.isDeclIDFromModule(InterfaceID, M);
   3540       }
   3541 
   3542       // We found something. Dig out all of the categories.
   3543       unsigned Offset = Result->Offset;
   3544       unsigned N = M.ObjCCategories[Offset];
   3545       M.ObjCCategories[Offset++] = 0; // Don't try to deserialize again
   3546       for (unsigned I = 0; I != N; ++I)
   3547         add(cast_or_null<ObjCCategoryDecl>(
   3548               Reader.GetLocalDecl(M, M.ObjCCategories[Offset++])));
   3549       return true;
   3550     }
   3551   };
   3552 } // end anonymous namespace
   3553 
   3554 void ASTReader::loadObjCCategories(serialization::GlobalDeclID ID,
   3555                                    ObjCInterfaceDecl *D,
   3556                                    unsigned PreviousGeneration) {
   3557   ObjCCategoriesVisitor Visitor(*this, ID, D, CategoriesDeserialized,
   3558                                 PreviousGeneration);
   3559   ModuleMgr.visit(Visitor);
   3560 }
   3561 
   3562 template<typename DeclT, typename Fn>
   3563 static void forAllLaterRedecls(DeclT *D, Fn F) {
   3564   F(D);
   3565 
   3566   // Check whether we've already merged D into its redeclaration chain.
   3567   // MostRecent may or may not be nullptr if D has not been merged. If
   3568   // not, walk the merged redecl chain and see if it's there.
   3569   auto *MostRecent = D->getMostRecentDecl();
   3570   bool Found = false;
   3571   for (auto *Redecl = MostRecent; Redecl && !Found;
   3572        Redecl = Redecl->getPreviousDecl())
   3573     Found = (Redecl == D);
   3574 
   3575   // If this declaration is merged, apply the functor to all later decls.
   3576   if (Found) {
   3577     for (auto *Redecl = MostRecent; Redecl != D;
   3578          Redecl = Redecl->getPreviousDecl())
   3579       F(Redecl);
   3580   }
   3581 }
   3582 
   3583 void ASTDeclReader::UpdateDecl(Decl *D, ModuleFile &ModuleFile,
   3584                                const RecordData &Record) {
   3585   while (Idx < Record.size()) {
   3586     switch ((DeclUpdateKind)Record[Idx++]) {
   3587     case UPD_CXX_ADDED_IMPLICIT_MEMBER: {
   3588       auto *RD = cast<CXXRecordDecl>(D);
   3589       // FIXME: If we also have an update record for instantiating the
   3590       // definition of D, we need that to happen before we get here.
   3591       Decl *MD = Reader.ReadDecl(ModuleFile, Record, Idx);
   3592       assert(MD && "couldn't read decl from update record");
   3593       // FIXME: We should call addHiddenDecl instead, to add the member
   3594       // to its DeclContext.
   3595       RD->addedMember(MD);
   3596       break;
   3597     }
   3598 
   3599     case UPD_CXX_ADDED_TEMPLATE_SPECIALIZATION:
   3600       // It will be added to the template's specializations set when loaded.
   3601       (void)Reader.ReadDecl(ModuleFile, Record, Idx);
   3602       break;
   3603 
   3604     case UPD_CXX_ADDED_ANONYMOUS_NAMESPACE: {
   3605       NamespaceDecl *Anon
   3606         = Reader.ReadDeclAs<NamespaceDecl>(ModuleFile, Record, Idx);
   3607 
   3608       // Each module has its own anonymous namespace, which is disjoint from
   3609       // any other module's anonymous namespaces, so don't attach the anonymous
   3610       // namespace at all.
   3611       if (ModuleFile.Kind != MK_ImplicitModule &&
   3612           ModuleFile.Kind != MK_ExplicitModule) {
   3613         if (TranslationUnitDecl *TU = dyn_cast<TranslationUnitDecl>(D))
   3614           TU->setAnonymousNamespace(Anon);
   3615         else
   3616           cast<NamespaceDecl>(D)->setAnonymousNamespace(Anon);
   3617       }
   3618       break;
   3619     }
   3620 
   3621     case UPD_CXX_INSTANTIATED_STATIC_DATA_MEMBER:
   3622       cast<VarDecl>(D)->getMemberSpecializationInfo()->setPointOfInstantiation(
   3623           Reader.ReadSourceLocation(ModuleFile, Record, Idx));
   3624       break;
   3625 
   3626     case UPD_CXX_ADDED_FUNCTION_DEFINITION: {
   3627       FunctionDecl *FD = cast<FunctionDecl>(D);
   3628       if (Reader.PendingBodies[FD]) {
   3629         // FIXME: Maybe check for ODR violations.
   3630         // It's safe to stop now because this update record is always last.
   3631         return;
   3632       }
   3633 
   3634       if (Record[Idx++]) {
   3635         // Maintain AST consistency: any later redeclarations of this function
   3636         // are inline if this one is. (We might have merged another declaration
   3637         // into this one.)
   3638         forAllLaterRedecls(FD, [](FunctionDecl *FD) {
   3639           FD->setImplicitlyInline();
   3640         });
   3641       }
   3642       FD->setInnerLocStart(Reader.ReadSourceLocation(ModuleFile, Record, Idx));
   3643       if (auto *CD = dyn_cast<CXXConstructorDecl>(FD)) {
   3644         CD->NumCtorInitializers = Record[Idx++];
   3645         if (CD->NumCtorInitializers)
   3646           CD->CtorInitializers =
   3647               Reader.ReadCXXCtorInitializersRef(F, Record, Idx);
   3648       }
   3649       // Store the offset of the body so we can lazily load it later.
   3650       Reader.PendingBodies[FD] = GetCurrentCursorOffset();
   3651       HasPendingBody = true;
   3652       assert(Idx == Record.size() && "lazy body must be last");
   3653       break;
   3654     }
   3655 
   3656     case UPD_CXX_INSTANTIATED_CLASS_DEFINITION: {
   3657       auto *RD = cast<CXXRecordDecl>(D);
   3658       auto *OldDD = RD->DefinitionData.getNotUpdated();
   3659       bool HadRealDefinition =
   3660           OldDD && (OldDD->Definition != RD ||
   3661                     !Reader.PendingFakeDefinitionData.count(OldDD));
   3662       ReadCXXRecordDefinition(RD, /*Update*/true);
   3663 
   3664       // Visible update is handled separately.
   3665       uint64_t LexicalOffset = Record[Idx++];
   3666       if (!HadRealDefinition && LexicalOffset) {
   3667         Reader.ReadLexicalDeclContextStorage(ModuleFile, ModuleFile.DeclsCursor,
   3668                                              LexicalOffset, RD);
   3669         Reader.PendingFakeDefinitionData.erase(OldDD);
   3670       }
   3671 
   3672       auto TSK = (TemplateSpecializationKind)Record[Idx++];
   3673       SourceLocation POI = Reader.ReadSourceLocation(ModuleFile, Record, Idx);
   3674       if (MemberSpecializationInfo *MSInfo =
   3675               RD->getMemberSpecializationInfo()) {
   3676         MSInfo->setTemplateSpecializationKind(TSK);
   3677         MSInfo->setPointOfInstantiation(POI);
   3678       } else {
   3679         ClassTemplateSpecializationDecl *Spec =
   3680             cast<ClassTemplateSpecializationDecl>(RD);
   3681         Spec->setTemplateSpecializationKind(TSK);
   3682         Spec->setPointOfInstantiation(POI);
   3683 
   3684         if (Record[Idx++]) {
   3685           auto PartialSpec =
   3686               ReadDeclAs<ClassTemplatePartialSpecializationDecl>(Record, Idx);
   3687           SmallVector<TemplateArgument, 8> TemplArgs;
   3688           Reader.ReadTemplateArgumentList(TemplArgs, F, Record, Idx);
   3689           auto *TemplArgList = TemplateArgumentList::CreateCopy(
   3690               Reader.getContext(), TemplArgs.data(), TemplArgs.size());
   3691 
   3692           // FIXME: If we already have a partial specialization set,
   3693           // check that it matches.
   3694           if (!Spec->getSpecializedTemplateOrPartial()
   3695                    .is<ClassTemplatePartialSpecializationDecl *>())
   3696             Spec->setInstantiationOf(PartialSpec, TemplArgList);
   3697         }
   3698       }
   3699 
   3700       RD->setTagKind((TagTypeKind)Record[Idx++]);
   3701       RD->setLocation(Reader.ReadSourceLocation(ModuleFile, Record, Idx));
   3702       RD->setLocStart(Reader.ReadSourceLocation(ModuleFile, Record, Idx));
   3703       RD->setRBraceLoc(Reader.ReadSourceLocation(ModuleFile, Record, Idx));
   3704 
   3705       if (Record[Idx++]) {
   3706         AttrVec Attrs;
   3707         Reader.ReadAttributes(F, Attrs, Record, Idx);
   3708         D->setAttrsImpl(Attrs, Reader.getContext());
   3709       }
   3710       break;
   3711     }
   3712 
   3713     case UPD_CXX_RESOLVED_DTOR_DELETE: {
   3714       // Set the 'operator delete' directly to avoid emitting another update
   3715       // record.
   3716       auto *Del = Reader.ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
   3717       auto *First = cast<CXXDestructorDecl>(D->getCanonicalDecl());
   3718       // FIXME: Check consistency if we have an old and new operator delete.
   3719       if (!First->OperatorDelete)
   3720         First->OperatorDelete = Del;
   3721       break;
   3722     }
   3723 
   3724     case UPD_CXX_RESOLVED_EXCEPTION_SPEC: {
   3725       FunctionProtoType::ExceptionSpecInfo ESI;
   3726       SmallVector<QualType, 8> ExceptionStorage;
   3727       Reader.readExceptionSpec(ModuleFile, ExceptionStorage, ESI, Record, Idx);
   3728 
   3729       // Update this declaration's exception specification, if needed.
   3730       auto *FD = cast<FunctionDecl>(D);
   3731       auto *FPT = FD->getType()->castAs<FunctionProtoType>();
   3732       // FIXME: If the exception specification is already present, check that it
   3733       // matches.
   3734       if (isUnresolvedExceptionSpec(FPT->getExceptionSpecType())) {
   3735         FD->setType(Reader.Context.getFunctionType(
   3736             FPT->getReturnType(), FPT->getParamTypes(),
   3737             FPT->getExtProtoInfo().withExceptionSpec(ESI)));
   3738 
   3739         // When we get to the end of deserializing, see if there are other decls
   3740         // that we need to propagate this exception specification onto.
   3741         Reader.PendingExceptionSpecUpdates.insert(
   3742             std::make_pair(FD->getCanonicalDecl(), FD));
   3743       }
   3744       break;
   3745     }
   3746 
   3747     case UPD_CXX_DEDUCED_RETURN_TYPE: {
   3748       // FIXME: Also do this when merging redecls.
   3749       QualType DeducedResultType = Reader.readType(ModuleFile, Record, Idx);
   3750       for (auto *Redecl : merged_redecls(D)) {
   3751         // FIXME: If the return type is already deduced, check that it matches.
   3752         FunctionDecl *FD = cast<FunctionDecl>(Redecl);
   3753         Reader.Context.adjustDeducedFunctionResultType(FD, DeducedResultType);
   3754       }
   3755       break;
   3756     }
   3757 
   3758     case UPD_DECL_MARKED_USED: {
   3759       // FIXME: This doesn't send the right notifications if there are
   3760       // ASTMutationListeners other than an ASTWriter.
   3761 
   3762       // Maintain AST consistency: any later redeclarations are used too.
   3763       forAllLaterRedecls(D, [](Decl *D) { D->Used = true; });
   3764       break;
   3765     }
   3766 
   3767     case UPD_MANGLING_NUMBER:
   3768       Reader.Context.setManglingNumber(cast<NamedDecl>(D), Record[Idx++]);
   3769       break;
   3770 
   3771     case UPD_STATIC_LOCAL_NUMBER:
   3772       Reader.Context.setStaticLocalNumber(cast<VarDecl>(D), Record[Idx++]);
   3773       break;
   3774 
   3775     case UPD_DECL_MARKED_OPENMP_THREADPRIVATE:
   3776       D->addAttr(OMPThreadPrivateDeclAttr::CreateImplicit(
   3777           Reader.Context, ReadSourceRange(Record, Idx)));
   3778       break;
   3779 
   3780     case UPD_DECL_EXPORTED: {
   3781       unsigned SubmoduleID = readSubmoduleID(Record, Idx);
   3782       auto *Exported = cast<NamedDecl>(D);
   3783       if (auto *TD = dyn_cast<TagDecl>(Exported))
   3784         Exported = TD->getDefinition();
   3785       Module *Owner = SubmoduleID ? Reader.getSubmodule(SubmoduleID) : nullptr;
   3786       if (Reader.getContext().getLangOpts().ModulesLocalVisibility) {
   3787         // FIXME: This doesn't send the right notifications if there are
   3788         // ASTMutationListeners other than an ASTWriter.
   3789         Reader.getContext().mergeDefinitionIntoModule(
   3790             cast<NamedDecl>(Exported), Owner,
   3791             /*NotifyListeners*/ false);
   3792         Reader.PendingMergedDefinitionsToDeduplicate.insert(
   3793             cast<NamedDecl>(Exported));
   3794       } else if (Owner && Owner->NameVisibility != Module::AllVisible) {
   3795         // If Owner is made visible at some later point, make this declaration
   3796         // visible too.
   3797         Reader.HiddenNamesMap[Owner].push_back(Exported);
   3798       } else {
   3799         // The declaration is now visible.
   3800         Exported->Hidden = false;
   3801       }
   3802       break;
   3803     }
   3804 
   3805     case UPD_ADDED_ATTR_TO_RECORD:
   3806       AttrVec Attrs;
   3807       Reader.ReadAttributes(F, Attrs, Record, Idx);
   3808       assert(Attrs.size() == 1);
   3809       D->addAttr(Attrs[0]);
   3810       break;
   3811     }
   3812   }
   3813 }
   3814