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