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