1 //===--- ASTReader.cpp - AST File Reader ----------------------------------===// 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 defines the ASTReader class, which reads AST files. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "clang/Serialization/ASTReader.h" 15 #include "ASTCommon.h" 16 #include "ASTReaderInternals.h" 17 #include "clang/AST/ASTConsumer.h" 18 #include "clang/AST/ASTContext.h" 19 #include "clang/AST/DeclTemplate.h" 20 #include "clang/AST/Expr.h" 21 #include "clang/AST/ExprCXX.h" 22 #include "clang/AST/NestedNameSpecifier.h" 23 #include "clang/AST/Type.h" 24 #include "clang/AST/TypeLocVisitor.h" 25 #include "clang/Basic/DiagnosticOptions.h" 26 #include "clang/Basic/FileManager.h" 27 #include "clang/Basic/SourceManager.h" 28 #include "clang/Basic/SourceManagerInternals.h" 29 #include "clang/Basic/TargetInfo.h" 30 #include "clang/Basic/TargetOptions.h" 31 #include "clang/Basic/Version.h" 32 #include "clang/Basic/VersionTuple.h" 33 #include "clang/Frontend/Utils.h" 34 #include "clang/Lex/HeaderSearch.h" 35 #include "clang/Lex/HeaderSearchOptions.h" 36 #include "clang/Lex/MacroInfo.h" 37 #include "clang/Lex/PreprocessingRecord.h" 38 #include "clang/Lex/Preprocessor.h" 39 #include "clang/Lex/PreprocessorOptions.h" 40 #include "clang/Sema/Scope.h" 41 #include "clang/Sema/Sema.h" 42 #include "clang/Serialization/ASTDeserializationListener.h" 43 #include "clang/Serialization/GlobalModuleIndex.h" 44 #include "clang/Serialization/ModuleManager.h" 45 #include "clang/Serialization/SerializationDiagnostic.h" 46 #include "llvm/ADT/Hashing.h" 47 #include "llvm/ADT/StringExtras.h" 48 #include "llvm/Bitcode/BitstreamReader.h" 49 #include "llvm/Support/ErrorHandling.h" 50 #include "llvm/Support/FileSystem.h" 51 #include "llvm/Support/MemoryBuffer.h" 52 #include "llvm/Support/Path.h" 53 #include "llvm/Support/SaveAndRestore.h" 54 #include "llvm/Support/raw_ostream.h" 55 #include <algorithm> 56 #include <cstdio> 57 #include <iterator> 58 #include <system_error> 59 60 using namespace clang; 61 using namespace clang::serialization; 62 using namespace clang::serialization::reader; 63 using llvm::BitstreamCursor; 64 65 66 //===----------------------------------------------------------------------===// 67 // ChainedASTReaderListener implementation 68 //===----------------------------------------------------------------------===// 69 70 bool 71 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) { 72 return First->ReadFullVersionInformation(FullVersion) || 73 Second->ReadFullVersionInformation(FullVersion); 74 } 75 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) { 76 First->ReadModuleName(ModuleName); 77 Second->ReadModuleName(ModuleName); 78 } 79 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) { 80 First->ReadModuleMapFile(ModuleMapPath); 81 Second->ReadModuleMapFile(ModuleMapPath); 82 } 83 bool 84 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts, 85 bool Complain, 86 bool AllowCompatibleDifferences) { 87 return First->ReadLanguageOptions(LangOpts, Complain, 88 AllowCompatibleDifferences) || 89 Second->ReadLanguageOptions(LangOpts, Complain, 90 AllowCompatibleDifferences); 91 } 92 bool 93 ChainedASTReaderListener::ReadTargetOptions(const TargetOptions &TargetOpts, 94 bool Complain) { 95 return First->ReadTargetOptions(TargetOpts, Complain) || 96 Second->ReadTargetOptions(TargetOpts, Complain); 97 } 98 bool ChainedASTReaderListener::ReadDiagnosticOptions( 99 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) { 100 return First->ReadDiagnosticOptions(DiagOpts, Complain) || 101 Second->ReadDiagnosticOptions(DiagOpts, Complain); 102 } 103 bool 104 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts, 105 bool Complain) { 106 return First->ReadFileSystemOptions(FSOpts, Complain) || 107 Second->ReadFileSystemOptions(FSOpts, Complain); 108 } 109 110 bool ChainedASTReaderListener::ReadHeaderSearchOptions( 111 const HeaderSearchOptions &HSOpts, bool Complain) { 112 return First->ReadHeaderSearchOptions(HSOpts, Complain) || 113 Second->ReadHeaderSearchOptions(HSOpts, Complain); 114 } 115 bool ChainedASTReaderListener::ReadPreprocessorOptions( 116 const PreprocessorOptions &PPOpts, bool Complain, 117 std::string &SuggestedPredefines) { 118 return First->ReadPreprocessorOptions(PPOpts, Complain, 119 SuggestedPredefines) || 120 Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines); 121 } 122 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M, 123 unsigned Value) { 124 First->ReadCounter(M, Value); 125 Second->ReadCounter(M, Value); 126 } 127 bool ChainedASTReaderListener::needsInputFileVisitation() { 128 return First->needsInputFileVisitation() || 129 Second->needsInputFileVisitation(); 130 } 131 bool ChainedASTReaderListener::needsSystemInputFileVisitation() { 132 return First->needsSystemInputFileVisitation() || 133 Second->needsSystemInputFileVisitation(); 134 } 135 void ChainedASTReaderListener::visitModuleFile(StringRef Filename) { 136 First->visitModuleFile(Filename); 137 Second->visitModuleFile(Filename); 138 } 139 bool ChainedASTReaderListener::visitInputFile(StringRef Filename, 140 bool isSystem, 141 bool isOverridden) { 142 bool Continue = false; 143 if (First->needsInputFileVisitation() && 144 (!isSystem || First->needsSystemInputFileVisitation())) 145 Continue |= First->visitInputFile(Filename, isSystem, isOverridden); 146 if (Second->needsInputFileVisitation() && 147 (!isSystem || Second->needsSystemInputFileVisitation())) 148 Continue |= Second->visitInputFile(Filename, isSystem, isOverridden); 149 return Continue; 150 } 151 152 //===----------------------------------------------------------------------===// 153 // PCH validator implementation 154 //===----------------------------------------------------------------------===// 155 156 ASTReaderListener::~ASTReaderListener() {} 157 158 /// \brief Compare the given set of language options against an existing set of 159 /// language options. 160 /// 161 /// \param Diags If non-NULL, diagnostics will be emitted via this engine. 162 /// \param AllowCompatibleDifferences If true, differences between compatible 163 /// language options will be permitted. 164 /// 165 /// \returns true if the languagae options mis-match, false otherwise. 166 static bool checkLanguageOptions(const LangOptions &LangOpts, 167 const LangOptions &ExistingLangOpts, 168 DiagnosticsEngine *Diags, 169 bool AllowCompatibleDifferences = true) { 170 #define LANGOPT(Name, Bits, Default, Description) \ 171 if (ExistingLangOpts.Name != LangOpts.Name) { \ 172 if (Diags) \ 173 Diags->Report(diag::err_pch_langopt_mismatch) \ 174 << Description << LangOpts.Name << ExistingLangOpts.Name; \ 175 return true; \ 176 } 177 178 #define VALUE_LANGOPT(Name, Bits, Default, Description) \ 179 if (ExistingLangOpts.Name != LangOpts.Name) { \ 180 if (Diags) \ 181 Diags->Report(diag::err_pch_langopt_value_mismatch) \ 182 << Description; \ 183 return true; \ 184 } 185 186 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ 187 if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) { \ 188 if (Diags) \ 189 Diags->Report(diag::err_pch_langopt_value_mismatch) \ 190 << Description; \ 191 return true; \ 192 } 193 194 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description) \ 195 if (!AllowCompatibleDifferences) \ 196 LANGOPT(Name, Bits, Default, Description) 197 198 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description) \ 199 if (!AllowCompatibleDifferences) \ 200 ENUM_LANGOPT(Name, Bits, Default, Description) 201 202 #define BENIGN_LANGOPT(Name, Bits, Default, Description) 203 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) 204 #include "clang/Basic/LangOptions.def" 205 206 if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) { 207 if (Diags) 208 Diags->Report(diag::err_pch_langopt_value_mismatch) 209 << "target Objective-C runtime"; 210 return true; 211 } 212 213 if (ExistingLangOpts.CommentOpts.BlockCommandNames != 214 LangOpts.CommentOpts.BlockCommandNames) { 215 if (Diags) 216 Diags->Report(diag::err_pch_langopt_value_mismatch) 217 << "block command names"; 218 return true; 219 } 220 221 return false; 222 } 223 224 /// \brief Compare the given set of target options against an existing set of 225 /// target options. 226 /// 227 /// \param Diags If non-NULL, diagnostics will be emitted via this engine. 228 /// 229 /// \returns true if the target options mis-match, false otherwise. 230 static bool checkTargetOptions(const TargetOptions &TargetOpts, 231 const TargetOptions &ExistingTargetOpts, 232 DiagnosticsEngine *Diags) { 233 #define CHECK_TARGET_OPT(Field, Name) \ 234 if (TargetOpts.Field != ExistingTargetOpts.Field) { \ 235 if (Diags) \ 236 Diags->Report(diag::err_pch_targetopt_mismatch) \ 237 << Name << TargetOpts.Field << ExistingTargetOpts.Field; \ 238 return true; \ 239 } 240 241 CHECK_TARGET_OPT(Triple, "target"); 242 CHECK_TARGET_OPT(CPU, "target CPU"); 243 CHECK_TARGET_OPT(ABI, "target ABI"); 244 #undef CHECK_TARGET_OPT 245 246 // Compare feature sets. 247 SmallVector<StringRef, 4> ExistingFeatures( 248 ExistingTargetOpts.FeaturesAsWritten.begin(), 249 ExistingTargetOpts.FeaturesAsWritten.end()); 250 SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(), 251 TargetOpts.FeaturesAsWritten.end()); 252 std::sort(ExistingFeatures.begin(), ExistingFeatures.end()); 253 std::sort(ReadFeatures.begin(), ReadFeatures.end()); 254 255 unsigned ExistingIdx = 0, ExistingN = ExistingFeatures.size(); 256 unsigned ReadIdx = 0, ReadN = ReadFeatures.size(); 257 while (ExistingIdx < ExistingN && ReadIdx < ReadN) { 258 if (ExistingFeatures[ExistingIdx] == ReadFeatures[ReadIdx]) { 259 ++ExistingIdx; 260 ++ReadIdx; 261 continue; 262 } 263 264 if (ReadFeatures[ReadIdx] < ExistingFeatures[ExistingIdx]) { 265 if (Diags) 266 Diags->Report(diag::err_pch_targetopt_feature_mismatch) 267 << false << ReadFeatures[ReadIdx]; 268 return true; 269 } 270 271 if (Diags) 272 Diags->Report(diag::err_pch_targetopt_feature_mismatch) 273 << true << ExistingFeatures[ExistingIdx]; 274 return true; 275 } 276 277 if (ExistingIdx < ExistingN) { 278 if (Diags) 279 Diags->Report(diag::err_pch_targetopt_feature_mismatch) 280 << true << ExistingFeatures[ExistingIdx]; 281 return true; 282 } 283 284 if (ReadIdx < ReadN) { 285 if (Diags) 286 Diags->Report(diag::err_pch_targetopt_feature_mismatch) 287 << false << ReadFeatures[ReadIdx]; 288 return true; 289 } 290 291 return false; 292 } 293 294 bool 295 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts, 296 bool Complain, 297 bool AllowCompatibleDifferences) { 298 const LangOptions &ExistingLangOpts = PP.getLangOpts(); 299 return checkLanguageOptions(LangOpts, ExistingLangOpts, 300 Complain ? &Reader.Diags : nullptr, 301 AllowCompatibleDifferences); 302 } 303 304 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts, 305 bool Complain) { 306 const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts(); 307 return checkTargetOptions(TargetOpts, ExistingTargetOpts, 308 Complain? &Reader.Diags : nullptr); 309 } 310 311 namespace { 312 typedef llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/> > 313 MacroDefinitionsMap; 314 typedef llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8> > 315 DeclsMap; 316 } 317 318 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags, 319 DiagnosticsEngine &Diags, 320 bool Complain) { 321 typedef DiagnosticsEngine::Level Level; 322 323 // Check current mappings for new -Werror mappings, and the stored mappings 324 // for cases that were explicitly mapped to *not* be errors that are now 325 // errors because of options like -Werror. 326 DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags }; 327 328 for (DiagnosticsEngine *MappingSource : MappingSources) { 329 for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) { 330 diag::kind DiagID = DiagIDMappingPair.first; 331 Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation()); 332 if (CurLevel < DiagnosticsEngine::Error) 333 continue; // not significant 334 Level StoredLevel = 335 StoredDiags.getDiagnosticLevel(DiagID, SourceLocation()); 336 if (StoredLevel < DiagnosticsEngine::Error) { 337 if (Complain) 338 Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" + 339 Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str(); 340 return true; 341 } 342 } 343 } 344 345 return false; 346 } 347 348 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) { 349 diag::Severity Ext = Diags.getExtensionHandlingBehavior(); 350 if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors()) 351 return true; 352 return Ext >= diag::Severity::Error; 353 } 354 355 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, 356 DiagnosticsEngine &Diags, 357 bool IsSystem, bool Complain) { 358 // Top-level options 359 if (IsSystem) { 360 if (Diags.getSuppressSystemWarnings()) 361 return false; 362 // If -Wsystem-headers was not enabled before, be conservative 363 if (StoredDiags.getSuppressSystemWarnings()) { 364 if (Complain) 365 Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers"; 366 return true; 367 } 368 } 369 370 if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) { 371 if (Complain) 372 Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror"; 373 return true; 374 } 375 376 if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() && 377 !StoredDiags.getEnableAllWarnings()) { 378 if (Complain) 379 Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror"; 380 return true; 381 } 382 383 if (isExtHandlingFromDiagsError(Diags) && 384 !isExtHandlingFromDiagsError(StoredDiags)) { 385 if (Complain) 386 Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors"; 387 return true; 388 } 389 390 return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain); 391 } 392 393 bool PCHValidator::ReadDiagnosticOptions( 394 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) { 395 DiagnosticsEngine &ExistingDiags = PP.getDiagnostics(); 396 IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs()); 397 IntrusiveRefCntPtr<DiagnosticsEngine> Diags( 398 new DiagnosticsEngine(DiagIDs, DiagOpts.get())); 399 // This should never fail, because we would have processed these options 400 // before writing them to an ASTFile. 401 ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false); 402 403 ModuleManager &ModuleMgr = Reader.getModuleManager(); 404 assert(ModuleMgr.size() >= 1 && "what ASTFile is this then"); 405 406 // If the original import came from a file explicitly generated by the user, 407 // don't check the diagnostic mappings. 408 // FIXME: currently this is approximated by checking whether this is not a 409 // module import of an implicitly-loaded module file. 410 // Note: ModuleMgr.rbegin() may not be the current module, but it must be in 411 // the transitive closure of its imports, since unrelated modules cannot be 412 // imported until after this module finishes validation. 413 ModuleFile *TopImport = *ModuleMgr.rbegin(); 414 while (!TopImport->ImportedBy.empty()) 415 TopImport = TopImport->ImportedBy[0]; 416 if (TopImport->Kind != MK_ImplicitModule) 417 return false; 418 419 StringRef ModuleName = TopImport->ModuleName; 420 assert(!ModuleName.empty() && "diagnostic options read before module name"); 421 422 Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName); 423 assert(M && "missing module"); 424 425 // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that 426 // contains the union of their flags. 427 return checkDiagnosticMappings(*Diags, ExistingDiags, M->IsSystem, Complain); 428 } 429 430 /// \brief Collect the macro definitions provided by the given preprocessor 431 /// options. 432 static void 433 collectMacroDefinitions(const PreprocessorOptions &PPOpts, 434 MacroDefinitionsMap &Macros, 435 SmallVectorImpl<StringRef> *MacroNames = nullptr) { 436 for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) { 437 StringRef Macro = PPOpts.Macros[I].first; 438 bool IsUndef = PPOpts.Macros[I].second; 439 440 std::pair<StringRef, StringRef> MacroPair = Macro.split('='); 441 StringRef MacroName = MacroPair.first; 442 StringRef MacroBody = MacroPair.second; 443 444 // For an #undef'd macro, we only care about the name. 445 if (IsUndef) { 446 if (MacroNames && !Macros.count(MacroName)) 447 MacroNames->push_back(MacroName); 448 449 Macros[MacroName] = std::make_pair("", true); 450 continue; 451 } 452 453 // For a #define'd macro, figure out the actual definition. 454 if (MacroName.size() == Macro.size()) 455 MacroBody = "1"; 456 else { 457 // Note: GCC drops anything following an end-of-line character. 458 StringRef::size_type End = MacroBody.find_first_of("\n\r"); 459 MacroBody = MacroBody.substr(0, End); 460 } 461 462 if (MacroNames && !Macros.count(MacroName)) 463 MacroNames->push_back(MacroName); 464 Macros[MacroName] = std::make_pair(MacroBody, false); 465 } 466 } 467 468 /// \brief Check the preprocessor options deserialized from the control block 469 /// against the preprocessor options in an existing preprocessor. 470 /// 471 /// \param Diags If non-null, produce diagnostics for any mismatches incurred. 472 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, 473 const PreprocessorOptions &ExistingPPOpts, 474 DiagnosticsEngine *Diags, 475 FileManager &FileMgr, 476 std::string &SuggestedPredefines, 477 const LangOptions &LangOpts) { 478 // Check macro definitions. 479 MacroDefinitionsMap ASTFileMacros; 480 collectMacroDefinitions(PPOpts, ASTFileMacros); 481 MacroDefinitionsMap ExistingMacros; 482 SmallVector<StringRef, 4> ExistingMacroNames; 483 collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames); 484 485 for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) { 486 // Dig out the macro definition in the existing preprocessor options. 487 StringRef MacroName = ExistingMacroNames[I]; 488 std::pair<StringRef, bool> Existing = ExistingMacros[MacroName]; 489 490 // Check whether we know anything about this macro name or not. 491 llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/> >::iterator Known 492 = ASTFileMacros.find(MacroName); 493 if (Known == ASTFileMacros.end()) { 494 // FIXME: Check whether this identifier was referenced anywhere in the 495 // AST file. If so, we should reject the AST file. Unfortunately, this 496 // information isn't in the control block. What shall we do about it? 497 498 if (Existing.second) { 499 SuggestedPredefines += "#undef "; 500 SuggestedPredefines += MacroName.str(); 501 SuggestedPredefines += '\n'; 502 } else { 503 SuggestedPredefines += "#define "; 504 SuggestedPredefines += MacroName.str(); 505 SuggestedPredefines += ' '; 506 SuggestedPredefines += Existing.first.str(); 507 SuggestedPredefines += '\n'; 508 } 509 continue; 510 } 511 512 // If the macro was defined in one but undef'd in the other, we have a 513 // conflict. 514 if (Existing.second != Known->second.second) { 515 if (Diags) { 516 Diags->Report(diag::err_pch_macro_def_undef) 517 << MacroName << Known->second.second; 518 } 519 return true; 520 } 521 522 // If the macro was #undef'd in both, or if the macro bodies are identical, 523 // it's fine. 524 if (Existing.second || Existing.first == Known->second.first) 525 continue; 526 527 // The macro bodies differ; complain. 528 if (Diags) { 529 Diags->Report(diag::err_pch_macro_def_conflict) 530 << MacroName << Known->second.first << Existing.first; 531 } 532 return true; 533 } 534 535 // Check whether we're using predefines. 536 if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines) { 537 if (Diags) { 538 Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines; 539 } 540 return true; 541 } 542 543 // Detailed record is important since it is used for the module cache hash. 544 if (LangOpts.Modules && 545 PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord) { 546 if (Diags) { 547 Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord; 548 } 549 return true; 550 } 551 552 // Compute the #include and #include_macros lines we need. 553 for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) { 554 StringRef File = ExistingPPOpts.Includes[I]; 555 if (File == ExistingPPOpts.ImplicitPCHInclude) 556 continue; 557 558 if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File) 559 != PPOpts.Includes.end()) 560 continue; 561 562 SuggestedPredefines += "#include \""; 563 SuggestedPredefines += File; 564 SuggestedPredefines += "\"\n"; 565 } 566 567 for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) { 568 StringRef File = ExistingPPOpts.MacroIncludes[I]; 569 if (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(), 570 File) 571 != PPOpts.MacroIncludes.end()) 572 continue; 573 574 SuggestedPredefines += "#__include_macros \""; 575 SuggestedPredefines += File; 576 SuggestedPredefines += "\"\n##\n"; 577 } 578 579 return false; 580 } 581 582 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, 583 bool Complain, 584 std::string &SuggestedPredefines) { 585 const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts(); 586 587 return checkPreprocessorOptions(PPOpts, ExistingPPOpts, 588 Complain? &Reader.Diags : nullptr, 589 PP.getFileManager(), 590 SuggestedPredefines, 591 PP.getLangOpts()); 592 } 593 594 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) { 595 PP.setCounterValue(Value); 596 } 597 598 //===----------------------------------------------------------------------===// 599 // AST reader implementation 600 //===----------------------------------------------------------------------===// 601 602 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener, 603 bool TakeOwnership) { 604 DeserializationListener = Listener; 605 OwnsDeserializationListener = TakeOwnership; 606 } 607 608 609 610 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) { 611 return serialization::ComputeHash(Sel); 612 } 613 614 615 std::pair<unsigned, unsigned> 616 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) { 617 using namespace llvm::support; 618 unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d); 619 unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d); 620 return std::make_pair(KeyLen, DataLen); 621 } 622 623 ASTSelectorLookupTrait::internal_key_type 624 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) { 625 using namespace llvm::support; 626 SelectorTable &SelTable = Reader.getContext().Selectors; 627 unsigned N = endian::readNext<uint16_t, little, unaligned>(d); 628 IdentifierInfo *FirstII = Reader.getLocalIdentifier( 629 F, endian::readNext<uint32_t, little, unaligned>(d)); 630 if (N == 0) 631 return SelTable.getNullarySelector(FirstII); 632 else if (N == 1) 633 return SelTable.getUnarySelector(FirstII); 634 635 SmallVector<IdentifierInfo *, 16> Args; 636 Args.push_back(FirstII); 637 for (unsigned I = 1; I != N; ++I) 638 Args.push_back(Reader.getLocalIdentifier( 639 F, endian::readNext<uint32_t, little, unaligned>(d))); 640 641 return SelTable.getSelector(N, Args.data()); 642 } 643 644 ASTSelectorLookupTrait::data_type 645 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d, 646 unsigned DataLen) { 647 using namespace llvm::support; 648 649 data_type Result; 650 651 Result.ID = Reader.getGlobalSelectorID( 652 F, endian::readNext<uint32_t, little, unaligned>(d)); 653 unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d); 654 unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d); 655 Result.InstanceBits = FullInstanceBits & 0x3; 656 Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1; 657 Result.FactoryBits = FullFactoryBits & 0x3; 658 Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1; 659 unsigned NumInstanceMethods = FullInstanceBits >> 3; 660 unsigned NumFactoryMethods = FullFactoryBits >> 3; 661 662 // Load instance methods 663 for (unsigned I = 0; I != NumInstanceMethods; ++I) { 664 if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>( 665 F, endian::readNext<uint32_t, little, unaligned>(d))) 666 Result.Instance.push_back(Method); 667 } 668 669 // Load factory methods 670 for (unsigned I = 0; I != NumFactoryMethods; ++I) { 671 if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>( 672 F, endian::readNext<uint32_t, little, unaligned>(d))) 673 Result.Factory.push_back(Method); 674 } 675 676 return Result; 677 } 678 679 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) { 680 return llvm::HashString(a); 681 } 682 683 std::pair<unsigned, unsigned> 684 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) { 685 using namespace llvm::support; 686 unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d); 687 unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d); 688 return std::make_pair(KeyLen, DataLen); 689 } 690 691 ASTIdentifierLookupTraitBase::internal_key_type 692 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) { 693 assert(n >= 2 && d[n-1] == '\0'); 694 return StringRef((const char*) d, n-1); 695 } 696 697 /// \brief Whether the given identifier is "interesting". 698 static bool isInterestingIdentifier(IdentifierInfo &II) { 699 return II.isPoisoned() || 700 II.isExtensionToken() || 701 II.getObjCOrBuiltinID() || 702 II.hasRevertedTokenIDToIdentifier() || 703 II.hadMacroDefinition() || 704 II.getFETokenInfo<void>(); 705 } 706 707 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k, 708 const unsigned char* d, 709 unsigned DataLen) { 710 using namespace llvm::support; 711 unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d); 712 bool IsInteresting = RawID & 0x01; 713 714 // Wipe out the "is interesting" bit. 715 RawID = RawID >> 1; 716 717 IdentID ID = Reader.getGlobalIdentifierID(F, RawID); 718 if (!IsInteresting) { 719 // For uninteresting identifiers, just build the IdentifierInfo 720 // and associate it with the persistent ID. 721 IdentifierInfo *II = KnownII; 722 if (!II) { 723 II = &Reader.getIdentifierTable().getOwn(k); 724 KnownII = II; 725 } 726 Reader.SetIdentifierInfo(ID, II); 727 if (!II->isFromAST()) { 728 bool WasInteresting = isInterestingIdentifier(*II); 729 II->setIsFromAST(); 730 if (WasInteresting) 731 II->setChangedSinceDeserialization(); 732 } 733 Reader.markIdentifierUpToDate(II); 734 return II; 735 } 736 737 unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d); 738 unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d); 739 bool CPlusPlusOperatorKeyword = Bits & 0x01; 740 Bits >>= 1; 741 bool HasRevertedTokenIDToIdentifier = Bits & 0x01; 742 Bits >>= 1; 743 bool Poisoned = Bits & 0x01; 744 Bits >>= 1; 745 bool ExtensionToken = Bits & 0x01; 746 Bits >>= 1; 747 bool hasSubmoduleMacros = Bits & 0x01; 748 Bits >>= 1; 749 bool hadMacroDefinition = Bits & 0x01; 750 Bits >>= 1; 751 752 assert(Bits == 0 && "Extra bits in the identifier?"); 753 DataLen -= 8; 754 755 // Build the IdentifierInfo itself and link the identifier ID with 756 // the new IdentifierInfo. 757 IdentifierInfo *II = KnownII; 758 if (!II) { 759 II = &Reader.getIdentifierTable().getOwn(StringRef(k)); 760 KnownII = II; 761 } 762 Reader.markIdentifierUpToDate(II); 763 if (!II->isFromAST()) { 764 bool WasInteresting = isInterestingIdentifier(*II); 765 II->setIsFromAST(); 766 if (WasInteresting) 767 II->setChangedSinceDeserialization(); 768 } 769 770 // Set or check the various bits in the IdentifierInfo structure. 771 // Token IDs are read-only. 772 if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier) 773 II->RevertTokenIDToIdentifier(); 774 II->setObjCOrBuiltinID(ObjCOrBuiltinID); 775 assert(II->isExtensionToken() == ExtensionToken && 776 "Incorrect extension token flag"); 777 (void)ExtensionToken; 778 if (Poisoned) 779 II->setIsPoisoned(true); 780 assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword && 781 "Incorrect C++ operator keyword flag"); 782 (void)CPlusPlusOperatorKeyword; 783 784 // If this identifier is a macro, deserialize the macro 785 // definition. 786 if (hadMacroDefinition) { 787 uint32_t MacroDirectivesOffset = 788 endian::readNext<uint32_t, little, unaligned>(d); 789 DataLen -= 4; 790 SmallVector<uint32_t, 8> LocalMacroIDs; 791 if (hasSubmoduleMacros) { 792 while (true) { 793 uint32_t LocalMacroID = 794 endian::readNext<uint32_t, little, unaligned>(d); 795 DataLen -= 4; 796 if (LocalMacroID == 0xdeadbeef) break; 797 LocalMacroIDs.push_back(LocalMacroID); 798 } 799 } 800 801 if (F.Kind == MK_ImplicitModule || F.Kind == MK_ExplicitModule) { 802 // Macro definitions are stored from newest to oldest, so reverse them 803 // before registering them. 804 llvm::SmallVector<unsigned, 8> MacroSizes; 805 for (SmallVectorImpl<uint32_t>::iterator 806 I = LocalMacroIDs.begin(), E = LocalMacroIDs.end(); I != E; /**/) { 807 unsigned Size = 1; 808 809 static const uint32_t HasOverridesFlag = 0x80000000U; 810 if (I + 1 != E && (I[1] & HasOverridesFlag)) 811 Size += 1 + (I[1] & ~HasOverridesFlag); 812 813 MacroSizes.push_back(Size); 814 I += Size; 815 } 816 817 SmallVectorImpl<uint32_t>::iterator I = LocalMacroIDs.end(); 818 for (SmallVectorImpl<unsigned>::reverse_iterator SI = MacroSizes.rbegin(), 819 SE = MacroSizes.rend(); 820 SI != SE; ++SI) { 821 I -= *SI; 822 823 uint32_t LocalMacroID = *I; 824 ArrayRef<uint32_t> Overrides; 825 if (*SI != 1) 826 Overrides = llvm::makeArrayRef(&I[2], *SI - 2); 827 Reader.addPendingMacroFromModule(II, &F, LocalMacroID, Overrides); 828 } 829 assert(I == LocalMacroIDs.begin()); 830 } else { 831 Reader.addPendingMacroFromPCH(II, &F, MacroDirectivesOffset); 832 } 833 } 834 835 Reader.SetIdentifierInfo(ID, II); 836 837 // Read all of the declarations visible at global scope with this 838 // name. 839 if (DataLen > 0) { 840 SmallVector<uint32_t, 4> DeclIDs; 841 for (; DataLen > 0; DataLen -= 4) 842 DeclIDs.push_back(Reader.getGlobalDeclID( 843 F, endian::readNext<uint32_t, little, unaligned>(d))); 844 Reader.SetGloballyVisibleDecls(II, DeclIDs); 845 } 846 847 return II; 848 } 849 850 unsigned 851 ASTDeclContextNameLookupTrait::ComputeHash(const DeclNameKey &Key) const { 852 llvm::FoldingSetNodeID ID; 853 ID.AddInteger(Key.Kind); 854 855 switch (Key.Kind) { 856 case DeclarationName::Identifier: 857 case DeclarationName::CXXLiteralOperatorName: 858 ID.AddString(((IdentifierInfo*)Key.Data)->getName()); 859 break; 860 case DeclarationName::ObjCZeroArgSelector: 861 case DeclarationName::ObjCOneArgSelector: 862 case DeclarationName::ObjCMultiArgSelector: 863 ID.AddInteger(serialization::ComputeHash(Selector(Key.Data))); 864 break; 865 case DeclarationName::CXXOperatorName: 866 ID.AddInteger((OverloadedOperatorKind)Key.Data); 867 break; 868 case DeclarationName::CXXConstructorName: 869 case DeclarationName::CXXDestructorName: 870 case DeclarationName::CXXConversionFunctionName: 871 case DeclarationName::CXXUsingDirective: 872 break; 873 } 874 875 return ID.ComputeHash(); 876 } 877 878 ASTDeclContextNameLookupTrait::internal_key_type 879 ASTDeclContextNameLookupTrait::GetInternalKey( 880 const external_key_type& Name) const { 881 DeclNameKey Key; 882 Key.Kind = Name.getNameKind(); 883 switch (Name.getNameKind()) { 884 case DeclarationName::Identifier: 885 Key.Data = (uint64_t)Name.getAsIdentifierInfo(); 886 break; 887 case DeclarationName::ObjCZeroArgSelector: 888 case DeclarationName::ObjCOneArgSelector: 889 case DeclarationName::ObjCMultiArgSelector: 890 Key.Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr(); 891 break; 892 case DeclarationName::CXXOperatorName: 893 Key.Data = Name.getCXXOverloadedOperator(); 894 break; 895 case DeclarationName::CXXLiteralOperatorName: 896 Key.Data = (uint64_t)Name.getCXXLiteralIdentifier(); 897 break; 898 case DeclarationName::CXXConstructorName: 899 case DeclarationName::CXXDestructorName: 900 case DeclarationName::CXXConversionFunctionName: 901 case DeclarationName::CXXUsingDirective: 902 Key.Data = 0; 903 break; 904 } 905 906 return Key; 907 } 908 909 std::pair<unsigned, unsigned> 910 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char*& d) { 911 using namespace llvm::support; 912 unsigned KeyLen = endian::readNext<uint16_t, little, unaligned>(d); 913 unsigned DataLen = endian::readNext<uint16_t, little, unaligned>(d); 914 return std::make_pair(KeyLen, DataLen); 915 } 916 917 ASTDeclContextNameLookupTrait::internal_key_type 918 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char* d, unsigned) { 919 using namespace llvm::support; 920 921 DeclNameKey Key; 922 Key.Kind = (DeclarationName::NameKind)*d++; 923 switch (Key.Kind) { 924 case DeclarationName::Identifier: 925 Key.Data = (uint64_t)Reader.getLocalIdentifier( 926 F, endian::readNext<uint32_t, little, unaligned>(d)); 927 break; 928 case DeclarationName::ObjCZeroArgSelector: 929 case DeclarationName::ObjCOneArgSelector: 930 case DeclarationName::ObjCMultiArgSelector: 931 Key.Data = 932 (uint64_t)Reader.getLocalSelector( 933 F, endian::readNext<uint32_t, little, unaligned>( 934 d)).getAsOpaquePtr(); 935 break; 936 case DeclarationName::CXXOperatorName: 937 Key.Data = *d++; // OverloadedOperatorKind 938 break; 939 case DeclarationName::CXXLiteralOperatorName: 940 Key.Data = (uint64_t)Reader.getLocalIdentifier( 941 F, endian::readNext<uint32_t, little, unaligned>(d)); 942 break; 943 case DeclarationName::CXXConstructorName: 944 case DeclarationName::CXXDestructorName: 945 case DeclarationName::CXXConversionFunctionName: 946 case DeclarationName::CXXUsingDirective: 947 Key.Data = 0; 948 break; 949 } 950 951 return Key; 952 } 953 954 ASTDeclContextNameLookupTrait::data_type 955 ASTDeclContextNameLookupTrait::ReadData(internal_key_type, 956 const unsigned char* d, 957 unsigned DataLen) { 958 using namespace llvm::support; 959 unsigned NumDecls = endian::readNext<uint16_t, little, unaligned>(d); 960 LE32DeclID *Start = reinterpret_cast<LE32DeclID *>( 961 const_cast<unsigned char *>(d)); 962 return std::make_pair(Start, Start + NumDecls); 963 } 964 965 bool ASTReader::ReadDeclContextStorage(ModuleFile &M, 966 BitstreamCursor &Cursor, 967 const std::pair<uint64_t, uint64_t> &Offsets, 968 DeclContextInfo &Info) { 969 SavedStreamPosition SavedPosition(Cursor); 970 // First the lexical decls. 971 if (Offsets.first != 0) { 972 Cursor.JumpToBit(Offsets.first); 973 974 RecordData Record; 975 StringRef Blob; 976 unsigned Code = Cursor.ReadCode(); 977 unsigned RecCode = Cursor.readRecord(Code, Record, &Blob); 978 if (RecCode != DECL_CONTEXT_LEXICAL) { 979 Error("Expected lexical block"); 980 return true; 981 } 982 983 Info.LexicalDecls = reinterpret_cast<const KindDeclIDPair*>(Blob.data()); 984 Info.NumLexicalDecls = Blob.size() / sizeof(KindDeclIDPair); 985 } 986 987 // Now the lookup table. 988 if (Offsets.second != 0) { 989 Cursor.JumpToBit(Offsets.second); 990 991 RecordData Record; 992 StringRef Blob; 993 unsigned Code = Cursor.ReadCode(); 994 unsigned RecCode = Cursor.readRecord(Code, Record, &Blob); 995 if (RecCode != DECL_CONTEXT_VISIBLE) { 996 Error("Expected visible lookup table block"); 997 return true; 998 } 999 Info.NameLookupTableData = ASTDeclContextNameLookupTable::Create( 1000 (const unsigned char *)Blob.data() + Record[0], 1001 (const unsigned char *)Blob.data() + sizeof(uint32_t), 1002 (const unsigned char *)Blob.data(), 1003 ASTDeclContextNameLookupTrait(*this, M)); 1004 } 1005 1006 return false; 1007 } 1008 1009 void ASTReader::Error(StringRef Msg) { 1010 Error(diag::err_fe_pch_malformed, Msg); 1011 if (Context.getLangOpts().Modules && !Diags.isDiagnosticInFlight()) { 1012 Diag(diag::note_module_cache_path) 1013 << PP.getHeaderSearchInfo().getModuleCachePath(); 1014 } 1015 } 1016 1017 void ASTReader::Error(unsigned DiagID, 1018 StringRef Arg1, StringRef Arg2) { 1019 if (Diags.isDiagnosticInFlight()) 1020 Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2); 1021 else 1022 Diag(DiagID) << Arg1 << Arg2; 1023 } 1024 1025 //===----------------------------------------------------------------------===// 1026 // Source Manager Deserialization 1027 //===----------------------------------------------------------------------===// 1028 1029 /// \brief Read the line table in the source manager block. 1030 /// \returns true if there was an error. 1031 bool ASTReader::ParseLineTable(ModuleFile &F, 1032 const RecordData &Record) { 1033 unsigned Idx = 0; 1034 LineTableInfo &LineTable = SourceMgr.getLineTable(); 1035 1036 // Parse the file names 1037 std::map<int, int> FileIDs; 1038 for (int I = 0, N = Record[Idx++]; I != N; ++I) { 1039 // Extract the file name 1040 auto Filename = ReadPath(F, Record, Idx); 1041 FileIDs[I] = LineTable.getLineTableFilenameID(Filename); 1042 } 1043 1044 // Parse the line entries 1045 std::vector<LineEntry> Entries; 1046 while (Idx < Record.size()) { 1047 int FID = Record[Idx++]; 1048 assert(FID >= 0 && "Serialized line entries for non-local file."); 1049 // Remap FileID from 1-based old view. 1050 FID += F.SLocEntryBaseID - 1; 1051 1052 // Extract the line entries 1053 unsigned NumEntries = Record[Idx++]; 1054 assert(NumEntries && "Numentries is 00000"); 1055 Entries.clear(); 1056 Entries.reserve(NumEntries); 1057 for (unsigned I = 0; I != NumEntries; ++I) { 1058 unsigned FileOffset = Record[Idx++]; 1059 unsigned LineNo = Record[Idx++]; 1060 int FilenameID = FileIDs[Record[Idx++]]; 1061 SrcMgr::CharacteristicKind FileKind 1062 = (SrcMgr::CharacteristicKind)Record[Idx++]; 1063 unsigned IncludeOffset = Record[Idx++]; 1064 Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID, 1065 FileKind, IncludeOffset)); 1066 } 1067 LineTable.AddEntry(FileID::get(FID), Entries); 1068 } 1069 1070 return false; 1071 } 1072 1073 /// \brief Read a source manager block 1074 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) { 1075 using namespace SrcMgr; 1076 1077 BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor; 1078 1079 // Set the source-location entry cursor to the current position in 1080 // the stream. This cursor will be used to read the contents of the 1081 // source manager block initially, and then lazily read 1082 // source-location entries as needed. 1083 SLocEntryCursor = F.Stream; 1084 1085 // The stream itself is going to skip over the source manager block. 1086 if (F.Stream.SkipBlock()) { 1087 Error("malformed block record in AST file"); 1088 return true; 1089 } 1090 1091 // Enter the source manager block. 1092 if (SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) { 1093 Error("malformed source manager block record in AST file"); 1094 return true; 1095 } 1096 1097 RecordData Record; 1098 while (true) { 1099 llvm::BitstreamEntry E = SLocEntryCursor.advanceSkippingSubblocks(); 1100 1101 switch (E.Kind) { 1102 case llvm::BitstreamEntry::SubBlock: // Handled for us already. 1103 case llvm::BitstreamEntry::Error: 1104 Error("malformed block record in AST file"); 1105 return true; 1106 case llvm::BitstreamEntry::EndBlock: 1107 return false; 1108 case llvm::BitstreamEntry::Record: 1109 // The interesting case. 1110 break; 1111 } 1112 1113 // Read a record. 1114 Record.clear(); 1115 StringRef Blob; 1116 switch (SLocEntryCursor.readRecord(E.ID, Record, &Blob)) { 1117 default: // Default behavior: ignore. 1118 break; 1119 1120 case SM_SLOC_FILE_ENTRY: 1121 case SM_SLOC_BUFFER_ENTRY: 1122 case SM_SLOC_EXPANSION_ENTRY: 1123 // Once we hit one of the source location entries, we're done. 1124 return false; 1125 } 1126 } 1127 } 1128 1129 /// \brief If a header file is not found at the path that we expect it to be 1130 /// and the PCH file was moved from its original location, try to resolve the 1131 /// file by assuming that header+PCH were moved together and the header is in 1132 /// the same place relative to the PCH. 1133 static std::string 1134 resolveFileRelativeToOriginalDir(const std::string &Filename, 1135 const std::string &OriginalDir, 1136 const std::string &CurrDir) { 1137 assert(OriginalDir != CurrDir && 1138 "No point trying to resolve the file if the PCH dir didn't change"); 1139 using namespace llvm::sys; 1140 SmallString<128> filePath(Filename); 1141 fs::make_absolute(filePath); 1142 assert(path::is_absolute(OriginalDir)); 1143 SmallString<128> currPCHPath(CurrDir); 1144 1145 path::const_iterator fileDirI = path::begin(path::parent_path(filePath)), 1146 fileDirE = path::end(path::parent_path(filePath)); 1147 path::const_iterator origDirI = path::begin(OriginalDir), 1148 origDirE = path::end(OriginalDir); 1149 // Skip the common path components from filePath and OriginalDir. 1150 while (fileDirI != fileDirE && origDirI != origDirE && 1151 *fileDirI == *origDirI) { 1152 ++fileDirI; 1153 ++origDirI; 1154 } 1155 for (; origDirI != origDirE; ++origDirI) 1156 path::append(currPCHPath, ".."); 1157 path::append(currPCHPath, fileDirI, fileDirE); 1158 path::append(currPCHPath, path::filename(Filename)); 1159 return currPCHPath.str(); 1160 } 1161 1162 bool ASTReader::ReadSLocEntry(int ID) { 1163 if (ID == 0) 1164 return false; 1165 1166 if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) { 1167 Error("source location entry ID out-of-range for AST file"); 1168 return true; 1169 } 1170 1171 ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second; 1172 F->SLocEntryCursor.JumpToBit(F->SLocEntryOffsets[ID - F->SLocEntryBaseID]); 1173 BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor; 1174 unsigned BaseOffset = F->SLocEntryBaseOffset; 1175 1176 ++NumSLocEntriesRead; 1177 llvm::BitstreamEntry Entry = SLocEntryCursor.advance(); 1178 if (Entry.Kind != llvm::BitstreamEntry::Record) { 1179 Error("incorrectly-formatted source location entry in AST file"); 1180 return true; 1181 } 1182 1183 RecordData Record; 1184 StringRef Blob; 1185 switch (SLocEntryCursor.readRecord(Entry.ID, Record, &Blob)) { 1186 default: 1187 Error("incorrectly-formatted source location entry in AST file"); 1188 return true; 1189 1190 case SM_SLOC_FILE_ENTRY: { 1191 // We will detect whether a file changed and return 'Failure' for it, but 1192 // we will also try to fail gracefully by setting up the SLocEntry. 1193 unsigned InputID = Record[4]; 1194 InputFile IF = getInputFile(*F, InputID); 1195 const FileEntry *File = IF.getFile(); 1196 bool OverriddenBuffer = IF.isOverridden(); 1197 1198 // Note that we only check if a File was returned. If it was out-of-date 1199 // we have complained but we will continue creating a FileID to recover 1200 // gracefully. 1201 if (!File) 1202 return true; 1203 1204 SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]); 1205 if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) { 1206 // This is the module's main file. 1207 IncludeLoc = getImportLocation(F); 1208 } 1209 SrcMgr::CharacteristicKind 1210 FileCharacter = (SrcMgr::CharacteristicKind)Record[2]; 1211 FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter, 1212 ID, BaseOffset + Record[0]); 1213 SrcMgr::FileInfo &FileInfo = 1214 const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile()); 1215 FileInfo.NumCreatedFIDs = Record[5]; 1216 if (Record[3]) 1217 FileInfo.setHasLineDirectives(); 1218 1219 const DeclID *FirstDecl = F->FileSortedDecls + Record[6]; 1220 unsigned NumFileDecls = Record[7]; 1221 if (NumFileDecls) { 1222 assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?"); 1223 FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl, 1224 NumFileDecls)); 1225 } 1226 1227 const SrcMgr::ContentCache *ContentCache 1228 = SourceMgr.getOrCreateContentCache(File, 1229 /*isSystemFile=*/FileCharacter != SrcMgr::C_User); 1230 if (OverriddenBuffer && !ContentCache->BufferOverridden && 1231 ContentCache->ContentsEntry == ContentCache->OrigEntry) { 1232 unsigned Code = SLocEntryCursor.ReadCode(); 1233 Record.clear(); 1234 unsigned RecCode = SLocEntryCursor.readRecord(Code, Record, &Blob); 1235 1236 if (RecCode != SM_SLOC_BUFFER_BLOB) { 1237 Error("AST record has invalid code"); 1238 return true; 1239 } 1240 1241 std::unique_ptr<llvm::MemoryBuffer> Buffer 1242 = llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), File->getName()); 1243 SourceMgr.overrideFileContents(File, std::move(Buffer)); 1244 } 1245 1246 break; 1247 } 1248 1249 case SM_SLOC_BUFFER_ENTRY: { 1250 const char *Name = Blob.data(); 1251 unsigned Offset = Record[0]; 1252 SrcMgr::CharacteristicKind 1253 FileCharacter = (SrcMgr::CharacteristicKind)Record[2]; 1254 SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]); 1255 if (IncludeLoc.isInvalid() && 1256 (F->Kind == MK_ImplicitModule || F->Kind == MK_ExplicitModule)) { 1257 IncludeLoc = getImportLocation(F); 1258 } 1259 unsigned Code = SLocEntryCursor.ReadCode(); 1260 Record.clear(); 1261 unsigned RecCode 1262 = SLocEntryCursor.readRecord(Code, Record, &Blob); 1263 1264 if (RecCode != SM_SLOC_BUFFER_BLOB) { 1265 Error("AST record has invalid code"); 1266 return true; 1267 } 1268 1269 std::unique_ptr<llvm::MemoryBuffer> Buffer = 1270 llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name); 1271 SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID, 1272 BaseOffset + Offset, IncludeLoc); 1273 break; 1274 } 1275 1276 case SM_SLOC_EXPANSION_ENTRY: { 1277 SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]); 1278 SourceMgr.createExpansionLoc(SpellingLoc, 1279 ReadSourceLocation(*F, Record[2]), 1280 ReadSourceLocation(*F, Record[3]), 1281 Record[4], 1282 ID, 1283 BaseOffset + Record[0]); 1284 break; 1285 } 1286 } 1287 1288 return false; 1289 } 1290 1291 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) { 1292 if (ID == 0) 1293 return std::make_pair(SourceLocation(), ""); 1294 1295 if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) { 1296 Error("source location entry ID out-of-range for AST file"); 1297 return std::make_pair(SourceLocation(), ""); 1298 } 1299 1300 // Find which module file this entry lands in. 1301 ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second; 1302 if (M->Kind != MK_ImplicitModule && M->Kind != MK_ExplicitModule) 1303 return std::make_pair(SourceLocation(), ""); 1304 1305 // FIXME: Can we map this down to a particular submodule? That would be 1306 // ideal. 1307 return std::make_pair(M->ImportLoc, StringRef(M->ModuleName)); 1308 } 1309 1310 /// \brief Find the location where the module F is imported. 1311 SourceLocation ASTReader::getImportLocation(ModuleFile *F) { 1312 if (F->ImportLoc.isValid()) 1313 return F->ImportLoc; 1314 1315 // Otherwise we have a PCH. It's considered to be "imported" at the first 1316 // location of its includer. 1317 if (F->ImportedBy.empty() || !F->ImportedBy[0]) { 1318 // Main file is the importer. 1319 assert(!SourceMgr.getMainFileID().isInvalid() && "missing main file"); 1320 return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID()); 1321 } 1322 return F->ImportedBy[0]->FirstLoc; 1323 } 1324 1325 /// ReadBlockAbbrevs - Enter a subblock of the specified BlockID with the 1326 /// specified cursor. Read the abbreviations that are at the top of the block 1327 /// and then leave the cursor pointing into the block. 1328 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID) { 1329 if (Cursor.EnterSubBlock(BlockID)) { 1330 Error("malformed block record in AST file"); 1331 return Failure; 1332 } 1333 1334 while (true) { 1335 uint64_t Offset = Cursor.GetCurrentBitNo(); 1336 unsigned Code = Cursor.ReadCode(); 1337 1338 // We expect all abbrevs to be at the start of the block. 1339 if (Code != llvm::bitc::DEFINE_ABBREV) { 1340 Cursor.JumpToBit(Offset); 1341 return false; 1342 } 1343 Cursor.ReadAbbrevRecord(); 1344 } 1345 } 1346 1347 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record, 1348 unsigned &Idx) { 1349 Token Tok; 1350 Tok.startToken(); 1351 Tok.setLocation(ReadSourceLocation(F, Record, Idx)); 1352 Tok.setLength(Record[Idx++]); 1353 if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++])) 1354 Tok.setIdentifierInfo(II); 1355 Tok.setKind((tok::TokenKind)Record[Idx++]); 1356 Tok.setFlag((Token::TokenFlags)Record[Idx++]); 1357 return Tok; 1358 } 1359 1360 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) { 1361 BitstreamCursor &Stream = F.MacroCursor; 1362 1363 // Keep track of where we are in the stream, then jump back there 1364 // after reading this macro. 1365 SavedStreamPosition SavedPosition(Stream); 1366 1367 Stream.JumpToBit(Offset); 1368 RecordData Record; 1369 SmallVector<IdentifierInfo*, 16> MacroArgs; 1370 MacroInfo *Macro = nullptr; 1371 1372 while (true) { 1373 // Advance to the next record, but if we get to the end of the block, don't 1374 // pop it (removing all the abbreviations from the cursor) since we want to 1375 // be able to reseek within the block and read entries. 1376 unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd; 1377 llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks(Flags); 1378 1379 switch (Entry.Kind) { 1380 case llvm::BitstreamEntry::SubBlock: // Handled for us already. 1381 case llvm::BitstreamEntry::Error: 1382 Error("malformed block record in AST file"); 1383 return Macro; 1384 case llvm::BitstreamEntry::EndBlock: 1385 return Macro; 1386 case llvm::BitstreamEntry::Record: 1387 // The interesting case. 1388 break; 1389 } 1390 1391 // Read a record. 1392 Record.clear(); 1393 PreprocessorRecordTypes RecType = 1394 (PreprocessorRecordTypes)Stream.readRecord(Entry.ID, Record); 1395 switch (RecType) { 1396 case PP_MACRO_DIRECTIVE_HISTORY: 1397 return Macro; 1398 1399 case PP_MACRO_OBJECT_LIKE: 1400 case PP_MACRO_FUNCTION_LIKE: { 1401 // If we already have a macro, that means that we've hit the end 1402 // of the definition of the macro we were looking for. We're 1403 // done. 1404 if (Macro) 1405 return Macro; 1406 1407 unsigned NextIndex = 1; // Skip identifier ID. 1408 SubmoduleID SubModID = getGlobalSubmoduleID(F, Record[NextIndex++]); 1409 SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex); 1410 MacroInfo *MI = PP.AllocateDeserializedMacroInfo(Loc, SubModID); 1411 MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex)); 1412 MI->setIsUsed(Record[NextIndex++]); 1413 MI->setUsedForHeaderGuard(Record[NextIndex++]); 1414 1415 if (RecType == PP_MACRO_FUNCTION_LIKE) { 1416 // Decode function-like macro info. 1417 bool isC99VarArgs = Record[NextIndex++]; 1418 bool isGNUVarArgs = Record[NextIndex++]; 1419 bool hasCommaPasting = Record[NextIndex++]; 1420 MacroArgs.clear(); 1421 unsigned NumArgs = Record[NextIndex++]; 1422 for (unsigned i = 0; i != NumArgs; ++i) 1423 MacroArgs.push_back(getLocalIdentifier(F, Record[NextIndex++])); 1424 1425 // Install function-like macro info. 1426 MI->setIsFunctionLike(); 1427 if (isC99VarArgs) MI->setIsC99Varargs(); 1428 if (isGNUVarArgs) MI->setIsGNUVarargs(); 1429 if (hasCommaPasting) MI->setHasCommaPasting(); 1430 MI->setArgumentList(MacroArgs.data(), MacroArgs.size(), 1431 PP.getPreprocessorAllocator()); 1432 } 1433 1434 // Remember that we saw this macro last so that we add the tokens that 1435 // form its body to it. 1436 Macro = MI; 1437 1438 if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() && 1439 Record[NextIndex]) { 1440 // We have a macro definition. Register the association 1441 PreprocessedEntityID 1442 GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]); 1443 PreprocessingRecord &PPRec = *PP.getPreprocessingRecord(); 1444 PreprocessingRecord::PPEntityID 1445 PPID = PPRec.getPPEntityID(GlobalID-1, /*isLoaded=*/true); 1446 MacroDefinition *PPDef = 1447 cast_or_null<MacroDefinition>(PPRec.getPreprocessedEntity(PPID)); 1448 if (PPDef) 1449 PPRec.RegisterMacroDefinition(Macro, PPDef); 1450 } 1451 1452 ++NumMacrosRead; 1453 break; 1454 } 1455 1456 case PP_TOKEN: { 1457 // If we see a TOKEN before a PP_MACRO_*, then the file is 1458 // erroneous, just pretend we didn't see this. 1459 if (!Macro) break; 1460 1461 unsigned Idx = 0; 1462 Token Tok = ReadToken(F, Record, Idx); 1463 Macro->AddTokenToBody(Tok); 1464 break; 1465 } 1466 } 1467 } 1468 } 1469 1470 PreprocessedEntityID 1471 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M, unsigned LocalID) const { 1472 ContinuousRangeMap<uint32_t, int, 2>::const_iterator 1473 I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS); 1474 assert(I != M.PreprocessedEntityRemap.end() 1475 && "Invalid index into preprocessed entity index remap"); 1476 1477 return LocalID + I->second; 1478 } 1479 1480 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) { 1481 return llvm::hash_combine(ikey.Size, ikey.ModTime); 1482 } 1483 1484 HeaderFileInfoTrait::internal_key_type 1485 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) { 1486 internal_key_type ikey = { FE->getSize(), FE->getModificationTime(), 1487 FE->getName(), /*Imported*/false }; 1488 return ikey; 1489 } 1490 1491 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) { 1492 if (a.Size != b.Size || a.ModTime != b.ModTime) 1493 return false; 1494 1495 if (llvm::sys::path::is_absolute(a.Filename) && 1496 strcmp(a.Filename, b.Filename) == 0) 1497 return true; 1498 1499 // Determine whether the actual files are equivalent. 1500 FileManager &FileMgr = Reader.getFileManager(); 1501 auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* { 1502 if (!Key.Imported) 1503 return FileMgr.getFile(Key.Filename); 1504 1505 std::string Resolved = Key.Filename; 1506 Reader.ResolveImportedPath(M, Resolved); 1507 return FileMgr.getFile(Resolved); 1508 }; 1509 1510 const FileEntry *FEA = GetFile(a); 1511 const FileEntry *FEB = GetFile(b); 1512 return FEA && FEA == FEB; 1513 } 1514 1515 std::pair<unsigned, unsigned> 1516 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) { 1517 using namespace llvm::support; 1518 unsigned KeyLen = (unsigned) endian::readNext<uint16_t, little, unaligned>(d); 1519 unsigned DataLen = (unsigned) *d++; 1520 return std::make_pair(KeyLen, DataLen); 1521 } 1522 1523 HeaderFileInfoTrait::internal_key_type 1524 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) { 1525 using namespace llvm::support; 1526 internal_key_type ikey; 1527 ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d)); 1528 ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d)); 1529 ikey.Filename = (const char *)d; 1530 ikey.Imported = true; 1531 return ikey; 1532 } 1533 1534 HeaderFileInfoTrait::data_type 1535 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d, 1536 unsigned DataLen) { 1537 const unsigned char *End = d + DataLen; 1538 using namespace llvm::support; 1539 HeaderFileInfo HFI; 1540 unsigned Flags = *d++; 1541 HFI.HeaderRole = static_cast<ModuleMap::ModuleHeaderRole> 1542 ((Flags >> 6) & 0x03); 1543 HFI.isImport = (Flags >> 5) & 0x01; 1544 HFI.isPragmaOnce = (Flags >> 4) & 0x01; 1545 HFI.DirInfo = (Flags >> 2) & 0x03; 1546 HFI.Resolved = (Flags >> 1) & 0x01; 1547 HFI.IndexHeaderMapHeader = Flags & 0x01; 1548 HFI.NumIncludes = endian::readNext<uint16_t, little, unaligned>(d); 1549 HFI.ControllingMacroID = Reader.getGlobalIdentifierID( 1550 M, endian::readNext<uint32_t, little, unaligned>(d)); 1551 if (unsigned FrameworkOffset = 1552 endian::readNext<uint32_t, little, unaligned>(d)) { 1553 // The framework offset is 1 greater than the actual offset, 1554 // since 0 is used as an indicator for "no framework name". 1555 StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1); 1556 HFI.Framework = HS->getUniqueFrameworkName(FrameworkName); 1557 } 1558 1559 if (d != End) { 1560 uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d); 1561 if (LocalSMID) { 1562 // This header is part of a module. Associate it with the module to enable 1563 // implicit module import. 1564 SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID); 1565 Module *Mod = Reader.getSubmodule(GlobalSMID); 1566 HFI.isModuleHeader = true; 1567 FileManager &FileMgr = Reader.getFileManager(); 1568 ModuleMap &ModMap = 1569 Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap(); 1570 // FIXME: This information should be propagated through the 1571 // SUBMODULE_HEADER etc records rather than from here. 1572 // FIXME: We don't ever mark excluded headers. 1573 std::string Filename = key.Filename; 1574 if (key.Imported) 1575 Reader.ResolveImportedPath(M, Filename); 1576 Module::Header H = { key.Filename, FileMgr.getFile(Filename) }; 1577 ModMap.addHeader(Mod, H, HFI.getHeaderRole()); 1578 } 1579 } 1580 1581 assert(End == d && "Wrong data length in HeaderFileInfo deserialization"); 1582 (void)End; 1583 1584 // This HeaderFileInfo was externally loaded. 1585 HFI.External = true; 1586 return HFI; 1587 } 1588 1589 void 1590 ASTReader::addPendingMacroFromModule(IdentifierInfo *II, ModuleFile *M, 1591 GlobalMacroID GMacID, 1592 ArrayRef<SubmoduleID> Overrides) { 1593 assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard"); 1594 SubmoduleID *OverrideData = nullptr; 1595 if (!Overrides.empty()) { 1596 OverrideData = new (Context) SubmoduleID[Overrides.size() + 1]; 1597 OverrideData[0] = Overrides.size(); 1598 for (unsigned I = 0; I != Overrides.size(); ++I) 1599 OverrideData[I + 1] = getGlobalSubmoduleID(*M, Overrides[I]); 1600 } 1601 PendingMacroIDs[II].push_back(PendingMacroInfo(M, GMacID, OverrideData)); 1602 } 1603 1604 void ASTReader::addPendingMacroFromPCH(IdentifierInfo *II, 1605 ModuleFile *M, 1606 uint64_t MacroDirectivesOffset) { 1607 assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard"); 1608 PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset)); 1609 } 1610 1611 void ASTReader::ReadDefinedMacros() { 1612 // Note that we are loading defined macros. 1613 Deserializing Macros(this); 1614 1615 for (ModuleReverseIterator I = ModuleMgr.rbegin(), 1616 E = ModuleMgr.rend(); I != E; ++I) { 1617 BitstreamCursor &MacroCursor = (*I)->MacroCursor; 1618 1619 // If there was no preprocessor block, skip this file. 1620 if (!MacroCursor.getBitStreamReader()) 1621 continue; 1622 1623 BitstreamCursor Cursor = MacroCursor; 1624 Cursor.JumpToBit((*I)->MacroStartOffset); 1625 1626 RecordData Record; 1627 while (true) { 1628 llvm::BitstreamEntry E = Cursor.advanceSkippingSubblocks(); 1629 1630 switch (E.Kind) { 1631 case llvm::BitstreamEntry::SubBlock: // Handled for us already. 1632 case llvm::BitstreamEntry::Error: 1633 Error("malformed block record in AST file"); 1634 return; 1635 case llvm::BitstreamEntry::EndBlock: 1636 goto NextCursor; 1637 1638 case llvm::BitstreamEntry::Record: 1639 Record.clear(); 1640 switch (Cursor.readRecord(E.ID, Record)) { 1641 default: // Default behavior: ignore. 1642 break; 1643 1644 case PP_MACRO_OBJECT_LIKE: 1645 case PP_MACRO_FUNCTION_LIKE: 1646 getLocalIdentifier(**I, Record[0]); 1647 break; 1648 1649 case PP_TOKEN: 1650 // Ignore tokens. 1651 break; 1652 } 1653 break; 1654 } 1655 } 1656 NextCursor: ; 1657 } 1658 } 1659 1660 namespace { 1661 /// \brief Visitor class used to look up identifirs in an AST file. 1662 class IdentifierLookupVisitor { 1663 StringRef Name; 1664 unsigned PriorGeneration; 1665 unsigned &NumIdentifierLookups; 1666 unsigned &NumIdentifierLookupHits; 1667 IdentifierInfo *Found; 1668 1669 public: 1670 IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration, 1671 unsigned &NumIdentifierLookups, 1672 unsigned &NumIdentifierLookupHits) 1673 : Name(Name), PriorGeneration(PriorGeneration), 1674 NumIdentifierLookups(NumIdentifierLookups), 1675 NumIdentifierLookupHits(NumIdentifierLookupHits), 1676 Found() 1677 { 1678 } 1679 1680 static bool visit(ModuleFile &M, void *UserData) { 1681 IdentifierLookupVisitor *This 1682 = static_cast<IdentifierLookupVisitor *>(UserData); 1683 1684 // If we've already searched this module file, skip it now. 1685 if (M.Generation <= This->PriorGeneration) 1686 return true; 1687 1688 ASTIdentifierLookupTable *IdTable 1689 = (ASTIdentifierLookupTable *)M.IdentifierLookupTable; 1690 if (!IdTable) 1691 return false; 1692 1693 ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), 1694 M, This->Found); 1695 ++This->NumIdentifierLookups; 1696 ASTIdentifierLookupTable::iterator Pos = IdTable->find(This->Name,&Trait); 1697 if (Pos == IdTable->end()) 1698 return false; 1699 1700 // Dereferencing the iterator has the effect of building the 1701 // IdentifierInfo node and populating it with the various 1702 // declarations it needs. 1703 ++This->NumIdentifierLookupHits; 1704 This->Found = *Pos; 1705 return true; 1706 } 1707 1708 // \brief Retrieve the identifier info found within the module 1709 // files. 1710 IdentifierInfo *getIdentifierInfo() const { return Found; } 1711 }; 1712 } 1713 1714 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) { 1715 // Note that we are loading an identifier. 1716 Deserializing AnIdentifier(this); 1717 1718 unsigned PriorGeneration = 0; 1719 if (getContext().getLangOpts().Modules) 1720 PriorGeneration = IdentifierGeneration[&II]; 1721 1722 // If there is a global index, look there first to determine which modules 1723 // provably do not have any results for this identifier. 1724 GlobalModuleIndex::HitSet Hits; 1725 GlobalModuleIndex::HitSet *HitsPtr = nullptr; 1726 if (!loadGlobalIndex()) { 1727 if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) { 1728 HitsPtr = &Hits; 1729 } 1730 } 1731 1732 IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration, 1733 NumIdentifierLookups, 1734 NumIdentifierLookupHits); 1735 ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor, HitsPtr); 1736 markIdentifierUpToDate(&II); 1737 } 1738 1739 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) { 1740 if (!II) 1741 return; 1742 1743 II->setOutOfDate(false); 1744 1745 // Update the generation for this identifier. 1746 if (getContext().getLangOpts().Modules) 1747 IdentifierGeneration[II] = getGeneration(); 1748 } 1749 1750 struct ASTReader::ModuleMacroInfo { 1751 SubmoduleID SubModID; 1752 MacroInfo *MI; 1753 SubmoduleID *Overrides; 1754 // FIXME: Remove this. 1755 ModuleFile *F; 1756 1757 bool isDefine() const { return MI; } 1758 1759 SubmoduleID getSubmoduleID() const { return SubModID; } 1760 1761 ArrayRef<SubmoduleID> getOverriddenSubmodules() const { 1762 if (!Overrides) 1763 return None; 1764 return llvm::makeArrayRef(Overrides + 1, *Overrides); 1765 } 1766 1767 MacroDirective *import(Preprocessor &PP, SourceLocation ImportLoc) const { 1768 if (!MI) 1769 return PP.AllocateUndefMacroDirective(ImportLoc, SubModID, 1770 getOverriddenSubmodules()); 1771 return PP.AllocateDefMacroDirective(MI, ImportLoc, SubModID, 1772 getOverriddenSubmodules()); 1773 } 1774 }; 1775 1776 ASTReader::ModuleMacroInfo * 1777 ASTReader::getModuleMacro(const PendingMacroInfo &PMInfo) { 1778 ModuleMacroInfo Info; 1779 1780 uint32_t ID = PMInfo.ModuleMacroData.MacID; 1781 if (ID & 1) { 1782 // Macro undefinition. 1783 Info.SubModID = getGlobalSubmoduleID(*PMInfo.M, ID >> 1); 1784 Info.MI = nullptr; 1785 } else { 1786 // Macro definition. 1787 GlobalMacroID GMacID = getGlobalMacroID(*PMInfo.M, ID >> 1); 1788 assert(GMacID); 1789 1790 // If this macro has already been loaded, don't do so again. 1791 // FIXME: This is highly dubious. Multiple macro definitions can have the 1792 // same MacroInfo (and hence the same GMacID) due to #pragma push_macro etc. 1793 if (MacrosLoaded[GMacID - NUM_PREDEF_MACRO_IDS]) 1794 return nullptr; 1795 1796 Info.MI = getMacro(GMacID); 1797 Info.SubModID = Info.MI->getOwningModuleID(); 1798 } 1799 Info.Overrides = PMInfo.ModuleMacroData.Overrides; 1800 Info.F = PMInfo.M; 1801 1802 return new (Context) ModuleMacroInfo(Info); 1803 } 1804 1805 void ASTReader::resolvePendingMacro(IdentifierInfo *II, 1806 const PendingMacroInfo &PMInfo) { 1807 assert(II); 1808 1809 if (PMInfo.M->Kind != MK_ImplicitModule && 1810 PMInfo.M->Kind != MK_ExplicitModule) { 1811 installPCHMacroDirectives(II, *PMInfo.M, 1812 PMInfo.PCHMacroData.MacroDirectivesOffset); 1813 return; 1814 } 1815 1816 // Module Macro. 1817 1818 ModuleMacroInfo *MMI = getModuleMacro(PMInfo); 1819 if (!MMI) 1820 return; 1821 1822 Module *Owner = getSubmodule(MMI->getSubmoduleID()); 1823 if (Owner && Owner->NameVisibility == Module::Hidden) { 1824 // Macros in the owning module are hidden. Just remember this macro to 1825 // install if we make this module visible. 1826 HiddenNamesMap[Owner].HiddenMacros.insert(std::make_pair(II, MMI)); 1827 } else { 1828 installImportedMacro(II, MMI, Owner); 1829 } 1830 } 1831 1832 void ASTReader::installPCHMacroDirectives(IdentifierInfo *II, 1833 ModuleFile &M, uint64_t Offset) { 1834 assert(M.Kind != MK_ImplicitModule && M.Kind != MK_ExplicitModule); 1835 1836 BitstreamCursor &Cursor = M.MacroCursor; 1837 SavedStreamPosition SavedPosition(Cursor); 1838 Cursor.JumpToBit(Offset); 1839 1840 llvm::BitstreamEntry Entry = 1841 Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd); 1842 if (Entry.Kind != llvm::BitstreamEntry::Record) { 1843 Error("malformed block record in AST file"); 1844 return; 1845 } 1846 1847 RecordData Record; 1848 PreprocessorRecordTypes RecType = 1849 (PreprocessorRecordTypes)Cursor.readRecord(Entry.ID, Record); 1850 if (RecType != PP_MACRO_DIRECTIVE_HISTORY) { 1851 Error("malformed block record in AST file"); 1852 return; 1853 } 1854 1855 // Deserialize the macro directives history in reverse source-order. 1856 MacroDirective *Latest = nullptr, *Earliest = nullptr; 1857 unsigned Idx = 0, N = Record.size(); 1858 while (Idx < N) { 1859 MacroDirective *MD = nullptr; 1860 SourceLocation Loc = ReadSourceLocation(M, Record, Idx); 1861 MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++]; 1862 switch (K) { 1863 case MacroDirective::MD_Define: { 1864 GlobalMacroID GMacID = getGlobalMacroID(M, Record[Idx++]); 1865 MacroInfo *MI = getMacro(GMacID); 1866 SubmoduleID ImportedFrom = Record[Idx++]; 1867 bool IsAmbiguous = Record[Idx++]; 1868 llvm::SmallVector<unsigned, 4> Overrides; 1869 if (ImportedFrom) { 1870 Overrides.insert(Overrides.end(), 1871 &Record[Idx] + 1, &Record[Idx] + 1 + Record[Idx]); 1872 Idx += Overrides.size() + 1; 1873 } 1874 DefMacroDirective *DefMD = 1875 PP.AllocateDefMacroDirective(MI, Loc, ImportedFrom, Overrides); 1876 DefMD->setAmbiguous(IsAmbiguous); 1877 MD = DefMD; 1878 break; 1879 } 1880 case MacroDirective::MD_Undefine: { 1881 SubmoduleID ImportedFrom = Record[Idx++]; 1882 llvm::SmallVector<unsigned, 4> Overrides; 1883 if (ImportedFrom) { 1884 Overrides.insert(Overrides.end(), 1885 &Record[Idx] + 1, &Record[Idx] + 1 + Record[Idx]); 1886 Idx += Overrides.size() + 1; 1887 } 1888 MD = PP.AllocateUndefMacroDirective(Loc, ImportedFrom, Overrides); 1889 break; 1890 } 1891 case MacroDirective::MD_Visibility: 1892 bool isPublic = Record[Idx++]; 1893 MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic); 1894 break; 1895 } 1896 1897 if (!Latest) 1898 Latest = MD; 1899 if (Earliest) 1900 Earliest->setPrevious(MD); 1901 Earliest = MD; 1902 } 1903 1904 PP.setLoadedMacroDirective(II, Latest); 1905 } 1906 1907 /// \brief For the given macro definitions, check if they are both in system 1908 /// modules. 1909 static bool areDefinedInSystemModules(MacroInfo *PrevMI, MacroInfo *NewMI, 1910 Module *NewOwner, ASTReader &Reader) { 1911 assert(PrevMI && NewMI); 1912 Module *PrevOwner = nullptr; 1913 if (SubmoduleID PrevModID = PrevMI->getOwningModuleID()) 1914 PrevOwner = Reader.getSubmodule(PrevModID); 1915 SourceManager &SrcMgr = Reader.getSourceManager(); 1916 bool PrevInSystem 1917 = PrevOwner? PrevOwner->IsSystem 1918 : SrcMgr.isInSystemHeader(PrevMI->getDefinitionLoc()); 1919 bool NewInSystem 1920 = NewOwner? NewOwner->IsSystem 1921 : SrcMgr.isInSystemHeader(NewMI->getDefinitionLoc()); 1922 if (PrevOwner && PrevOwner == NewOwner) 1923 return false; 1924 return PrevInSystem && NewInSystem; 1925 } 1926 1927 void ASTReader::removeOverriddenMacros(IdentifierInfo *II, 1928 SourceLocation ImportLoc, 1929 AmbiguousMacros &Ambig, 1930 ArrayRef<SubmoduleID> Overrides) { 1931 for (unsigned OI = 0, ON = Overrides.size(); OI != ON; ++OI) { 1932 SubmoduleID OwnerID = Overrides[OI]; 1933 1934 // If this macro is not yet visible, remove it from the hidden names list. 1935 // It won't be there if we're in the middle of making the owner visible. 1936 Module *Owner = getSubmodule(OwnerID); 1937 auto HiddenIt = HiddenNamesMap.find(Owner); 1938 if (HiddenIt != HiddenNamesMap.end()) { 1939 HiddenNames &Hidden = HiddenIt->second; 1940 HiddenMacrosMap::iterator HI = Hidden.HiddenMacros.find(II); 1941 if (HI != Hidden.HiddenMacros.end()) { 1942 // Register the macro now so we don't lose it when we re-export. 1943 PP.appendMacroDirective(II, HI->second->import(PP, ImportLoc)); 1944 1945 auto SubOverrides = HI->second->getOverriddenSubmodules(); 1946 Hidden.HiddenMacros.erase(HI); 1947 removeOverriddenMacros(II, ImportLoc, Ambig, SubOverrides); 1948 } 1949 } 1950 1951 // If this macro is already in our list of conflicts, remove it from there. 1952 Ambig.erase( 1953 std::remove_if(Ambig.begin(), Ambig.end(), [&](DefMacroDirective *MD) { 1954 return MD->getInfo()->getOwningModuleID() == OwnerID; 1955 }), 1956 Ambig.end()); 1957 } 1958 } 1959 1960 ASTReader::AmbiguousMacros * 1961 ASTReader::removeOverriddenMacros(IdentifierInfo *II, 1962 SourceLocation ImportLoc, 1963 ArrayRef<SubmoduleID> Overrides) { 1964 MacroDirective *Prev = PP.getMacroDirective(II); 1965 if (!Prev && Overrides.empty()) 1966 return nullptr; 1967 1968 DefMacroDirective *PrevDef = Prev ? Prev->getDefinition().getDirective() 1969 : nullptr; 1970 if (PrevDef && PrevDef->isAmbiguous()) { 1971 // We had a prior ambiguity. Check whether we resolve it (or make it worse). 1972 AmbiguousMacros &Ambig = AmbiguousMacroDefs[II]; 1973 Ambig.push_back(PrevDef); 1974 1975 removeOverriddenMacros(II, ImportLoc, Ambig, Overrides); 1976 1977 if (!Ambig.empty()) 1978 return &Ambig; 1979 1980 AmbiguousMacroDefs.erase(II); 1981 } else { 1982 // There's no ambiguity yet. Maybe we're introducing one. 1983 AmbiguousMacros Ambig; 1984 if (PrevDef) 1985 Ambig.push_back(PrevDef); 1986 1987 removeOverriddenMacros(II, ImportLoc, Ambig, Overrides); 1988 1989 if (!Ambig.empty()) { 1990 AmbiguousMacros &Result = AmbiguousMacroDefs[II]; 1991 std::swap(Result, Ambig); 1992 return &Result; 1993 } 1994 } 1995 1996 // We ended up with no ambiguity. 1997 return nullptr; 1998 } 1999 2000 void ASTReader::installImportedMacro(IdentifierInfo *II, ModuleMacroInfo *MMI, 2001 Module *Owner) { 2002 assert(II && Owner); 2003 2004 SourceLocation ImportLoc = Owner->MacroVisibilityLoc; 2005 if (ImportLoc.isInvalid()) { 2006 // FIXME: If we made macros from this module visible but didn't provide a 2007 // source location for the import, we don't have a location for the macro. 2008 // Use the location at which the containing module file was first imported 2009 // for now. 2010 ImportLoc = MMI->F->DirectImportLoc; 2011 assert(ImportLoc.isValid() && "no import location for a visible macro?"); 2012 } 2013 2014 AmbiguousMacros *Prev = 2015 removeOverriddenMacros(II, ImportLoc, MMI->getOverriddenSubmodules()); 2016 2017 // Create a synthetic macro definition corresponding to the import (or null 2018 // if this was an undefinition of the macro). 2019 MacroDirective *Imported = MMI->import(PP, ImportLoc); 2020 DefMacroDirective *MD = dyn_cast<DefMacroDirective>(Imported); 2021 2022 // If there's no ambiguity, just install the macro. 2023 if (!Prev) { 2024 PP.appendMacroDirective(II, Imported); 2025 return; 2026 } 2027 assert(!Prev->empty()); 2028 2029 if (!MD) { 2030 // We imported a #undef that didn't remove all prior definitions. The most 2031 // recent prior definition remains, and we install it in the place of the 2032 // imported directive, as if by a local #pragma pop_macro. 2033 MacroInfo *NewMI = Prev->back()->getInfo(); 2034 Prev->pop_back(); 2035 MD = PP.AllocateDefMacroDirective(NewMI, ImportLoc); 2036 2037 // Install our #undef first so that we don't lose track of it. We'll replace 2038 // this with whichever macro definition ends up winning. 2039 PP.appendMacroDirective(II, Imported); 2040 } 2041 2042 // We're introducing a macro definition that creates or adds to an ambiguity. 2043 // We can resolve that ambiguity if this macro is token-for-token identical to 2044 // all of the existing definitions. 2045 MacroInfo *NewMI = MD->getInfo(); 2046 assert(NewMI && "macro definition with no MacroInfo?"); 2047 while (!Prev->empty()) { 2048 MacroInfo *PrevMI = Prev->back()->getInfo(); 2049 assert(PrevMI && "macro definition with no MacroInfo?"); 2050 2051 // Before marking the macros as ambiguous, check if this is a case where 2052 // both macros are in system headers. If so, we trust that the system 2053 // did not get it wrong. This also handles cases where Clang's own 2054 // headers have a different spelling of certain system macros: 2055 // #define LONG_MAX __LONG_MAX__ (clang's limits.h) 2056 // #define LONG_MAX 0x7fffffffffffffffL (system's limits.h) 2057 // 2058 // FIXME: Remove the defined-in-system-headers check. clang's limits.h 2059 // overrides the system limits.h's macros, so there's no conflict here. 2060 if (NewMI != PrevMI && 2061 !PrevMI->isIdenticalTo(*NewMI, PP, /*Syntactically=*/true) && 2062 !areDefinedInSystemModules(PrevMI, NewMI, Owner, *this)) 2063 break; 2064 2065 // The previous definition is the same as this one (or both are defined in 2066 // system modules so we can assume they're equivalent); we don't need to 2067 // track it any more. 2068 Prev->pop_back(); 2069 } 2070 2071 if (!Prev->empty()) 2072 MD->setAmbiguous(true); 2073 2074 PP.appendMacroDirective(II, MD); 2075 } 2076 2077 ASTReader::InputFileInfo 2078 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) { 2079 // Go find this input file. 2080 BitstreamCursor &Cursor = F.InputFilesCursor; 2081 SavedStreamPosition SavedPosition(Cursor); 2082 Cursor.JumpToBit(F.InputFileOffsets[ID-1]); 2083 2084 unsigned Code = Cursor.ReadCode(); 2085 RecordData Record; 2086 StringRef Blob; 2087 2088 unsigned Result = Cursor.readRecord(Code, Record, &Blob); 2089 assert(static_cast<InputFileRecordTypes>(Result) == INPUT_FILE && 2090 "invalid record type for input file"); 2091 (void)Result; 2092 2093 std::string Filename; 2094 off_t StoredSize; 2095 time_t StoredTime; 2096 bool Overridden; 2097 2098 assert(Record[0] == ID && "Bogus stored ID or offset"); 2099 StoredSize = static_cast<off_t>(Record[1]); 2100 StoredTime = static_cast<time_t>(Record[2]); 2101 Overridden = static_cast<bool>(Record[3]); 2102 Filename = Blob; 2103 ResolveImportedPath(F, Filename); 2104 2105 InputFileInfo R = { std::move(Filename), StoredSize, StoredTime, Overridden }; 2106 return R; 2107 } 2108 2109 std::string ASTReader::getInputFileName(ModuleFile &F, unsigned int ID) { 2110 return readInputFileInfo(F, ID).Filename; 2111 } 2112 2113 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) { 2114 // If this ID is bogus, just return an empty input file. 2115 if (ID == 0 || ID > F.InputFilesLoaded.size()) 2116 return InputFile(); 2117 2118 // If we've already loaded this input file, return it. 2119 if (F.InputFilesLoaded[ID-1].getFile()) 2120 return F.InputFilesLoaded[ID-1]; 2121 2122 if (F.InputFilesLoaded[ID-1].isNotFound()) 2123 return InputFile(); 2124 2125 // Go find this input file. 2126 BitstreamCursor &Cursor = F.InputFilesCursor; 2127 SavedStreamPosition SavedPosition(Cursor); 2128 Cursor.JumpToBit(F.InputFileOffsets[ID-1]); 2129 2130 InputFileInfo FI = readInputFileInfo(F, ID); 2131 off_t StoredSize = FI.StoredSize; 2132 time_t StoredTime = FI.StoredTime; 2133 bool Overridden = FI.Overridden; 2134 StringRef Filename = FI.Filename; 2135 2136 const FileEntry *File 2137 = Overridden? FileMgr.getVirtualFile(Filename, StoredSize, StoredTime) 2138 : FileMgr.getFile(Filename, /*OpenFile=*/false); 2139 2140 // If we didn't find the file, resolve it relative to the 2141 // original directory from which this AST file was created. 2142 if (File == nullptr && !F.OriginalDir.empty() && !CurrentDir.empty() && 2143 F.OriginalDir != CurrentDir) { 2144 std::string Resolved = resolveFileRelativeToOriginalDir(Filename, 2145 F.OriginalDir, 2146 CurrentDir); 2147 if (!Resolved.empty()) 2148 File = FileMgr.getFile(Resolved); 2149 } 2150 2151 // For an overridden file, create a virtual file with the stored 2152 // size/timestamp. 2153 if (Overridden && File == nullptr) { 2154 File = FileMgr.getVirtualFile(Filename, StoredSize, StoredTime); 2155 } 2156 2157 if (File == nullptr) { 2158 if (Complain) { 2159 std::string ErrorStr = "could not find file '"; 2160 ErrorStr += Filename; 2161 ErrorStr += "' referenced by AST file"; 2162 Error(ErrorStr.c_str()); 2163 } 2164 // Record that we didn't find the file. 2165 F.InputFilesLoaded[ID-1] = InputFile::getNotFound(); 2166 return InputFile(); 2167 } 2168 2169 // Check if there was a request to override the contents of the file 2170 // that was part of the precompiled header. Overridding such a file 2171 // can lead to problems when lexing using the source locations from the 2172 // PCH. 2173 SourceManager &SM = getSourceManager(); 2174 if (!Overridden && SM.isFileOverridden(File)) { 2175 if (Complain) 2176 Error(diag::err_fe_pch_file_overridden, Filename); 2177 // After emitting the diagnostic, recover by disabling the override so 2178 // that the original file will be used. 2179 SM.disableFileContentsOverride(File); 2180 // The FileEntry is a virtual file entry with the size of the contents 2181 // that would override the original contents. Set it to the original's 2182 // size/time. 2183 FileMgr.modifyFileEntry(const_cast<FileEntry*>(File), 2184 StoredSize, StoredTime); 2185 } 2186 2187 bool IsOutOfDate = false; 2188 2189 // For an overridden file, there is nothing to validate. 2190 if (!Overridden && // 2191 (StoredSize != File->getSize() || 2192 #if defined(LLVM_ON_WIN32) 2193 false 2194 #else 2195 // In our regression testing, the Windows file system seems to 2196 // have inconsistent modification times that sometimes 2197 // erroneously trigger this error-handling path. 2198 // 2199 // This also happens in networked file systems, so disable this 2200 // check if validation is disabled or if we have an explicitly 2201 // built PCM file. 2202 // 2203 // FIXME: Should we also do this for PCH files? They could also 2204 // reasonably get shared across a network during a distributed build. 2205 (StoredTime != File->getModificationTime() && !DisableValidation && 2206 F.Kind != MK_ExplicitModule) 2207 #endif 2208 )) { 2209 if (Complain) { 2210 // Build a list of the PCH imports that got us here (in reverse). 2211 SmallVector<ModuleFile *, 4> ImportStack(1, &F); 2212 while (ImportStack.back()->ImportedBy.size() > 0) 2213 ImportStack.push_back(ImportStack.back()->ImportedBy[0]); 2214 2215 // The top-level PCH is stale. 2216 StringRef TopLevelPCHName(ImportStack.back()->FileName); 2217 Error(diag::err_fe_pch_file_modified, Filename, TopLevelPCHName); 2218 2219 // Print the import stack. 2220 if (ImportStack.size() > 1 && !Diags.isDiagnosticInFlight()) { 2221 Diag(diag::note_pch_required_by) 2222 << Filename << ImportStack[0]->FileName; 2223 for (unsigned I = 1; I < ImportStack.size(); ++I) 2224 Diag(diag::note_pch_required_by) 2225 << ImportStack[I-1]->FileName << ImportStack[I]->FileName; 2226 } 2227 2228 if (!Diags.isDiagnosticInFlight()) 2229 Diag(diag::note_pch_rebuild_required) << TopLevelPCHName; 2230 } 2231 2232 IsOutOfDate = true; 2233 } 2234 2235 InputFile IF = InputFile(File, Overridden, IsOutOfDate); 2236 2237 // Note that we've loaded this input file. 2238 F.InputFilesLoaded[ID-1] = IF; 2239 return IF; 2240 } 2241 2242 /// \brief If we are loading a relocatable PCH or module file, and the filename 2243 /// is not an absolute path, add the system or module root to the beginning of 2244 /// the file name. 2245 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) { 2246 // Resolve relative to the base directory, if we have one. 2247 if (!M.BaseDirectory.empty()) 2248 return ResolveImportedPath(Filename, M.BaseDirectory); 2249 } 2250 2251 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) { 2252 if (Filename.empty() || llvm::sys::path::is_absolute(Filename)) 2253 return; 2254 2255 SmallString<128> Buffer; 2256 llvm::sys::path::append(Buffer, Prefix, Filename); 2257 Filename.assign(Buffer.begin(), Buffer.end()); 2258 } 2259 2260 ASTReader::ASTReadResult 2261 ASTReader::ReadControlBlock(ModuleFile &F, 2262 SmallVectorImpl<ImportedModule> &Loaded, 2263 const ModuleFile *ImportedBy, 2264 unsigned ClientLoadCapabilities) { 2265 BitstreamCursor &Stream = F.Stream; 2266 2267 if (Stream.EnterSubBlock(CONTROL_BLOCK_ID)) { 2268 Error("malformed block record in AST file"); 2269 return Failure; 2270 } 2271 2272 // Should we allow the configuration of the module file to differ from the 2273 // configuration of the current translation unit in a compatible way? 2274 // 2275 // FIXME: Allow this for files explicitly specified with -include-pch too. 2276 bool AllowCompatibleConfigurationMismatch = F.Kind == MK_ExplicitModule; 2277 2278 // Read all of the records and blocks in the control block. 2279 RecordData Record; 2280 unsigned NumInputs = 0; 2281 unsigned NumUserInputs = 0; 2282 while (1) { 2283 llvm::BitstreamEntry Entry = Stream.advance(); 2284 2285 switch (Entry.Kind) { 2286 case llvm::BitstreamEntry::Error: 2287 Error("malformed block record in AST file"); 2288 return Failure; 2289 case llvm::BitstreamEntry::EndBlock: { 2290 // Validate input files. 2291 const HeaderSearchOptions &HSOpts = 2292 PP.getHeaderSearchInfo().getHeaderSearchOpts(); 2293 2294 // All user input files reside at the index range [0, NumUserInputs), and 2295 // system input files reside at [NumUserInputs, NumInputs). 2296 if (!DisableValidation) { 2297 bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0; 2298 2299 // If we are reading a module, we will create a verification timestamp, 2300 // so we verify all input files. Otherwise, verify only user input 2301 // files. 2302 2303 unsigned N = NumUserInputs; 2304 if (ValidateSystemInputs || 2305 (HSOpts.ModulesValidateOncePerBuildSession && 2306 F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp && 2307 F.Kind == MK_ImplicitModule)) 2308 N = NumInputs; 2309 2310 for (unsigned I = 0; I < N; ++I) { 2311 InputFile IF = getInputFile(F, I+1, Complain); 2312 if (!IF.getFile() || IF.isOutOfDate()) 2313 return OutOfDate; 2314 } 2315 } 2316 2317 if (Listener) 2318 Listener->visitModuleFile(F.FileName); 2319 2320 if (Listener && Listener->needsInputFileVisitation()) { 2321 unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs 2322 : NumUserInputs; 2323 for (unsigned I = 0; I < N; ++I) { 2324 bool IsSystem = I >= NumUserInputs; 2325 InputFileInfo FI = readInputFileInfo(F, I+1); 2326 Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden); 2327 } 2328 } 2329 2330 return Success; 2331 } 2332 2333 case llvm::BitstreamEntry::SubBlock: 2334 switch (Entry.ID) { 2335 case INPUT_FILES_BLOCK_ID: 2336 F.InputFilesCursor = Stream; 2337 if (Stream.SkipBlock() || // Skip with the main cursor 2338 // Read the abbreviations 2339 ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) { 2340 Error("malformed block record in AST file"); 2341 return Failure; 2342 } 2343 continue; 2344 2345 default: 2346 if (Stream.SkipBlock()) { 2347 Error("malformed block record in AST file"); 2348 return Failure; 2349 } 2350 continue; 2351 } 2352 2353 case llvm::BitstreamEntry::Record: 2354 // The interesting case. 2355 break; 2356 } 2357 2358 // Read and process a record. 2359 Record.clear(); 2360 StringRef Blob; 2361 switch ((ControlRecordTypes)Stream.readRecord(Entry.ID, Record, &Blob)) { 2362 case METADATA: { 2363 if (Record[0] != VERSION_MAJOR && !DisableValidation) { 2364 if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0) 2365 Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old 2366 : diag::err_pch_version_too_new); 2367 return VersionMismatch; 2368 } 2369 2370 bool hasErrors = Record[5]; 2371 if (hasErrors && !DisableValidation && !AllowASTWithCompilerErrors) { 2372 Diag(diag::err_pch_with_compiler_errors); 2373 return HadErrors; 2374 } 2375 2376 F.RelocatablePCH = Record[4]; 2377 // Relative paths in a relocatable PCH are relative to our sysroot. 2378 if (F.RelocatablePCH) 2379 F.BaseDirectory = isysroot.empty() ? "/" : isysroot; 2380 2381 const std::string &CurBranch = getClangFullRepositoryVersion(); 2382 StringRef ASTBranch = Blob; 2383 if (StringRef(CurBranch) != ASTBranch && !DisableValidation) { 2384 if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0) 2385 Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch; 2386 return VersionMismatch; 2387 } 2388 break; 2389 } 2390 2391 case SIGNATURE: 2392 assert((!F.Signature || F.Signature == Record[0]) && "signature changed"); 2393 F.Signature = Record[0]; 2394 break; 2395 2396 case IMPORTS: { 2397 // Load each of the imported PCH files. 2398 unsigned Idx = 0, N = Record.size(); 2399 while (Idx < N) { 2400 // Read information about the AST file. 2401 ModuleKind ImportedKind = (ModuleKind)Record[Idx++]; 2402 // The import location will be the local one for now; we will adjust 2403 // all import locations of module imports after the global source 2404 // location info are setup. 2405 SourceLocation ImportLoc = 2406 SourceLocation::getFromRawEncoding(Record[Idx++]); 2407 off_t StoredSize = (off_t)Record[Idx++]; 2408 time_t StoredModTime = (time_t)Record[Idx++]; 2409 ASTFileSignature StoredSignature = Record[Idx++]; 2410 auto ImportedFile = ReadPath(F, Record, Idx); 2411 2412 // Load the AST file. 2413 switch(ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F, Loaded, 2414 StoredSize, StoredModTime, StoredSignature, 2415 ClientLoadCapabilities)) { 2416 case Failure: return Failure; 2417 // If we have to ignore the dependency, we'll have to ignore this too. 2418 case Missing: 2419 case OutOfDate: return OutOfDate; 2420 case VersionMismatch: return VersionMismatch; 2421 case ConfigurationMismatch: return ConfigurationMismatch; 2422 case HadErrors: return HadErrors; 2423 case Success: break; 2424 } 2425 } 2426 break; 2427 } 2428 2429 case LANGUAGE_OPTIONS: { 2430 bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0; 2431 // FIXME: The &F == *ModuleMgr.begin() check is wrong for modules. 2432 if (Listener && &F == *ModuleMgr.begin() && 2433 ParseLanguageOptions(Record, Complain, *Listener, 2434 AllowCompatibleConfigurationMismatch) && 2435 !DisableValidation && !AllowConfigurationMismatch) 2436 return ConfigurationMismatch; 2437 break; 2438 } 2439 2440 case TARGET_OPTIONS: { 2441 bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch)==0; 2442 if (Listener && &F == *ModuleMgr.begin() && 2443 ParseTargetOptions(Record, Complain, *Listener) && 2444 !DisableValidation && !AllowConfigurationMismatch) 2445 return ConfigurationMismatch; 2446 break; 2447 } 2448 2449 case DIAGNOSTIC_OPTIONS: { 2450 bool Complain = (ClientLoadCapabilities & ARR_OutOfDate)==0; 2451 if (Listener && &F == *ModuleMgr.begin() && 2452 !AllowCompatibleConfigurationMismatch && 2453 ParseDiagnosticOptions(Record, Complain, *Listener) && 2454 !DisableValidation) 2455 return OutOfDate; 2456 break; 2457 } 2458 2459 case FILE_SYSTEM_OPTIONS: { 2460 bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch)==0; 2461 if (Listener && &F == *ModuleMgr.begin() && 2462 !AllowCompatibleConfigurationMismatch && 2463 ParseFileSystemOptions(Record, Complain, *Listener) && 2464 !DisableValidation && !AllowConfigurationMismatch) 2465 return ConfigurationMismatch; 2466 break; 2467 } 2468 2469 case HEADER_SEARCH_OPTIONS: { 2470 bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch)==0; 2471 if (Listener && &F == *ModuleMgr.begin() && 2472 !AllowCompatibleConfigurationMismatch && 2473 ParseHeaderSearchOptions(Record, Complain, *Listener) && 2474 !DisableValidation && !AllowConfigurationMismatch) 2475 return ConfigurationMismatch; 2476 break; 2477 } 2478 2479 case PREPROCESSOR_OPTIONS: { 2480 bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch)==0; 2481 if (Listener && &F == *ModuleMgr.begin() && 2482 !AllowCompatibleConfigurationMismatch && 2483 ParsePreprocessorOptions(Record, Complain, *Listener, 2484 SuggestedPredefines) && 2485 !DisableValidation && !AllowConfigurationMismatch) 2486 return ConfigurationMismatch; 2487 break; 2488 } 2489 2490 case ORIGINAL_FILE: 2491 F.OriginalSourceFileID = FileID::get(Record[0]); 2492 F.ActualOriginalSourceFileName = Blob; 2493 F.OriginalSourceFileName = F.ActualOriginalSourceFileName; 2494 ResolveImportedPath(F, F.OriginalSourceFileName); 2495 break; 2496 2497 case ORIGINAL_FILE_ID: 2498 F.OriginalSourceFileID = FileID::get(Record[0]); 2499 break; 2500 2501 case ORIGINAL_PCH_DIR: 2502 F.OriginalDir = Blob; 2503 break; 2504 2505 case MODULE_NAME: 2506 F.ModuleName = Blob; 2507 if (Listener) 2508 Listener->ReadModuleName(F.ModuleName); 2509 break; 2510 2511 case MODULE_DIRECTORY: { 2512 assert(!F.ModuleName.empty() && 2513 "MODULE_DIRECTORY found before MODULE_NAME"); 2514 // If we've already loaded a module map file covering this module, we may 2515 // have a better path for it (relative to the current build). 2516 Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName); 2517 if (M && M->Directory) { 2518 // If we're implicitly loading a module, the base directory can't 2519 // change between the build and use. 2520 if (F.Kind != MK_ExplicitModule) { 2521 const DirectoryEntry *BuildDir = 2522 PP.getFileManager().getDirectory(Blob); 2523 if (!BuildDir || BuildDir != M->Directory) { 2524 if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) 2525 Diag(diag::err_imported_module_relocated) 2526 << F.ModuleName << Blob << M->Directory->getName(); 2527 return OutOfDate; 2528 } 2529 } 2530 F.BaseDirectory = M->Directory->getName(); 2531 } else { 2532 F.BaseDirectory = Blob; 2533 } 2534 break; 2535 } 2536 2537 case MODULE_MAP_FILE: 2538 if (ASTReadResult Result = 2539 ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities)) 2540 return Result; 2541 break; 2542 2543 case INPUT_FILE_OFFSETS: 2544 NumInputs = Record[0]; 2545 NumUserInputs = Record[1]; 2546 F.InputFileOffsets = (const uint32_t *)Blob.data(); 2547 F.InputFilesLoaded.resize(NumInputs); 2548 break; 2549 } 2550 } 2551 } 2552 2553 ASTReader::ASTReadResult 2554 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) { 2555 BitstreamCursor &Stream = F.Stream; 2556 2557 if (Stream.EnterSubBlock(AST_BLOCK_ID)) { 2558 Error("malformed block record in AST file"); 2559 return Failure; 2560 } 2561 2562 // Read all of the records and blocks for the AST file. 2563 RecordData Record; 2564 while (1) { 2565 llvm::BitstreamEntry Entry = Stream.advance(); 2566 2567 switch (Entry.Kind) { 2568 case llvm::BitstreamEntry::Error: 2569 Error("error at end of module block in AST file"); 2570 return Failure; 2571 case llvm::BitstreamEntry::EndBlock: { 2572 // Outside of C++, we do not store a lookup map for the translation unit. 2573 // Instead, mark it as needing a lookup map to be built if this module 2574 // contains any declarations lexically within it (which it always does!). 2575 // This usually has no cost, since we very rarely need the lookup map for 2576 // the translation unit outside C++. 2577 DeclContext *DC = Context.getTranslationUnitDecl(); 2578 if (DC->hasExternalLexicalStorage() && 2579 !getContext().getLangOpts().CPlusPlus) 2580 DC->setMustBuildLookupTable(); 2581 2582 return Success; 2583 } 2584 case llvm::BitstreamEntry::SubBlock: 2585 switch (Entry.ID) { 2586 case DECLTYPES_BLOCK_ID: 2587 // We lazily load the decls block, but we want to set up the 2588 // DeclsCursor cursor to point into it. Clone our current bitcode 2589 // cursor to it, enter the block and read the abbrevs in that block. 2590 // With the main cursor, we just skip over it. 2591 F.DeclsCursor = Stream; 2592 if (Stream.SkipBlock() || // Skip with the main cursor. 2593 // Read the abbrevs. 2594 ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID)) { 2595 Error("malformed block record in AST file"); 2596 return Failure; 2597 } 2598 break; 2599 2600 case PREPROCESSOR_BLOCK_ID: 2601 F.MacroCursor = Stream; 2602 if (!PP.getExternalSource()) 2603 PP.setExternalSource(this); 2604 2605 if (Stream.SkipBlock() || 2606 ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) { 2607 Error("malformed block record in AST file"); 2608 return Failure; 2609 } 2610 F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo(); 2611 break; 2612 2613 case PREPROCESSOR_DETAIL_BLOCK_ID: 2614 F.PreprocessorDetailCursor = Stream; 2615 if (Stream.SkipBlock() || 2616 ReadBlockAbbrevs(F.PreprocessorDetailCursor, 2617 PREPROCESSOR_DETAIL_BLOCK_ID)) { 2618 Error("malformed preprocessor detail record in AST file"); 2619 return Failure; 2620 } 2621 F.PreprocessorDetailStartOffset 2622 = F.PreprocessorDetailCursor.GetCurrentBitNo(); 2623 2624 if (!PP.getPreprocessingRecord()) 2625 PP.createPreprocessingRecord(); 2626 if (!PP.getPreprocessingRecord()->getExternalSource()) 2627 PP.getPreprocessingRecord()->SetExternalSource(*this); 2628 break; 2629 2630 case SOURCE_MANAGER_BLOCK_ID: 2631 if (ReadSourceManagerBlock(F)) 2632 return Failure; 2633 break; 2634 2635 case SUBMODULE_BLOCK_ID: 2636 if (ASTReadResult Result = ReadSubmoduleBlock(F, ClientLoadCapabilities)) 2637 return Result; 2638 break; 2639 2640 case COMMENTS_BLOCK_ID: { 2641 BitstreamCursor C = Stream; 2642 if (Stream.SkipBlock() || 2643 ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) { 2644 Error("malformed comments block in AST file"); 2645 return Failure; 2646 } 2647 CommentsCursors.push_back(std::make_pair(C, &F)); 2648 break; 2649 } 2650 2651 default: 2652 if (Stream.SkipBlock()) { 2653 Error("malformed block record in AST file"); 2654 return Failure; 2655 } 2656 break; 2657 } 2658 continue; 2659 2660 case llvm::BitstreamEntry::Record: 2661 // The interesting case. 2662 break; 2663 } 2664 2665 // Read and process a record. 2666 Record.clear(); 2667 StringRef Blob; 2668 switch ((ASTRecordTypes)Stream.readRecord(Entry.ID, Record, &Blob)) { 2669 default: // Default behavior: ignore. 2670 break; 2671 2672 case TYPE_OFFSET: { 2673 if (F.LocalNumTypes != 0) { 2674 Error("duplicate TYPE_OFFSET record in AST file"); 2675 return Failure; 2676 } 2677 F.TypeOffsets = (const uint32_t *)Blob.data(); 2678 F.LocalNumTypes = Record[0]; 2679 unsigned LocalBaseTypeIndex = Record[1]; 2680 F.BaseTypeIndex = getTotalNumTypes(); 2681 2682 if (F.LocalNumTypes > 0) { 2683 // Introduce the global -> local mapping for types within this module. 2684 GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F)); 2685 2686 // Introduce the local -> global mapping for types within this module. 2687 F.TypeRemap.insertOrReplace( 2688 std::make_pair(LocalBaseTypeIndex, 2689 F.BaseTypeIndex - LocalBaseTypeIndex)); 2690 2691 TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes); 2692 } 2693 break; 2694 } 2695 2696 case DECL_OFFSET: { 2697 if (F.LocalNumDecls != 0) { 2698 Error("duplicate DECL_OFFSET record in AST file"); 2699 return Failure; 2700 } 2701 F.DeclOffsets = (const DeclOffset *)Blob.data(); 2702 F.LocalNumDecls = Record[0]; 2703 unsigned LocalBaseDeclID = Record[1]; 2704 F.BaseDeclID = getTotalNumDecls(); 2705 2706 if (F.LocalNumDecls > 0) { 2707 // Introduce the global -> local mapping for declarations within this 2708 // module. 2709 GlobalDeclMap.insert( 2710 std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F)); 2711 2712 // Introduce the local -> global mapping for declarations within this 2713 // module. 2714 F.DeclRemap.insertOrReplace( 2715 std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID)); 2716 2717 // Introduce the global -> local mapping for declarations within this 2718 // module. 2719 F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID; 2720 2721 DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls); 2722 } 2723 break; 2724 } 2725 2726 case TU_UPDATE_LEXICAL: { 2727 DeclContext *TU = Context.getTranslationUnitDecl(); 2728 DeclContextInfo &Info = F.DeclContextInfos[TU]; 2729 Info.LexicalDecls = reinterpret_cast<const KindDeclIDPair *>(Blob.data()); 2730 Info.NumLexicalDecls 2731 = static_cast<unsigned int>(Blob.size() / sizeof(KindDeclIDPair)); 2732 TU->setHasExternalLexicalStorage(true); 2733 break; 2734 } 2735 2736 case UPDATE_VISIBLE: { 2737 unsigned Idx = 0; 2738 serialization::DeclID ID = ReadDeclID(F, Record, Idx); 2739 ASTDeclContextNameLookupTable *Table = 2740 ASTDeclContextNameLookupTable::Create( 2741 (const unsigned char *)Blob.data() + Record[Idx++], 2742 (const unsigned char *)Blob.data() + sizeof(uint32_t), 2743 (const unsigned char *)Blob.data(), 2744 ASTDeclContextNameLookupTrait(*this, F)); 2745 if (Decl *D = GetExistingDecl(ID)) { 2746 auto *DC = cast<DeclContext>(D); 2747 DC->getPrimaryContext()->setHasExternalVisibleStorage(true); 2748 auto *&LookupTable = F.DeclContextInfos[DC].NameLookupTableData; 2749 delete LookupTable; 2750 LookupTable = Table; 2751 } else 2752 PendingVisibleUpdates[ID].push_back(std::make_pair(Table, &F)); 2753 break; 2754 } 2755 2756 case IDENTIFIER_TABLE: 2757 F.IdentifierTableData = Blob.data(); 2758 if (Record[0]) { 2759 F.IdentifierLookupTable = ASTIdentifierLookupTable::Create( 2760 (const unsigned char *)F.IdentifierTableData + Record[0], 2761 (const unsigned char *)F.IdentifierTableData + sizeof(uint32_t), 2762 (const unsigned char *)F.IdentifierTableData, 2763 ASTIdentifierLookupTrait(*this, F)); 2764 2765 PP.getIdentifierTable().setExternalIdentifierLookup(this); 2766 } 2767 break; 2768 2769 case IDENTIFIER_OFFSET: { 2770 if (F.LocalNumIdentifiers != 0) { 2771 Error("duplicate IDENTIFIER_OFFSET record in AST file"); 2772 return Failure; 2773 } 2774 F.IdentifierOffsets = (const uint32_t *)Blob.data(); 2775 F.LocalNumIdentifiers = Record[0]; 2776 unsigned LocalBaseIdentifierID = Record[1]; 2777 F.BaseIdentifierID = getTotalNumIdentifiers(); 2778 2779 if (F.LocalNumIdentifiers > 0) { 2780 // Introduce the global -> local mapping for identifiers within this 2781 // module. 2782 GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1, 2783 &F)); 2784 2785 // Introduce the local -> global mapping for identifiers within this 2786 // module. 2787 F.IdentifierRemap.insertOrReplace( 2788 std::make_pair(LocalBaseIdentifierID, 2789 F.BaseIdentifierID - LocalBaseIdentifierID)); 2790 2791 IdentifiersLoaded.resize(IdentifiersLoaded.size() 2792 + F.LocalNumIdentifiers); 2793 } 2794 break; 2795 } 2796 2797 case EAGERLY_DESERIALIZED_DECLS: 2798 for (unsigned I = 0, N = Record.size(); I != N; ++I) 2799 EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I])); 2800 break; 2801 2802 case SPECIAL_TYPES: 2803 if (SpecialTypes.empty()) { 2804 for (unsigned I = 0, N = Record.size(); I != N; ++I) 2805 SpecialTypes.push_back(getGlobalTypeID(F, Record[I])); 2806 break; 2807 } 2808 2809 if (SpecialTypes.size() != Record.size()) { 2810 Error("invalid special-types record"); 2811 return Failure; 2812 } 2813 2814 for (unsigned I = 0, N = Record.size(); I != N; ++I) { 2815 serialization::TypeID ID = getGlobalTypeID(F, Record[I]); 2816 if (!SpecialTypes[I]) 2817 SpecialTypes[I] = ID; 2818 // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate 2819 // merge step? 2820 } 2821 break; 2822 2823 case STATISTICS: 2824 TotalNumStatements += Record[0]; 2825 TotalNumMacros += Record[1]; 2826 TotalLexicalDeclContexts += Record[2]; 2827 TotalVisibleDeclContexts += Record[3]; 2828 break; 2829 2830 case UNUSED_FILESCOPED_DECLS: 2831 for (unsigned I = 0, N = Record.size(); I != N; ++I) 2832 UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I])); 2833 break; 2834 2835 case DELEGATING_CTORS: 2836 for (unsigned I = 0, N = Record.size(); I != N; ++I) 2837 DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I])); 2838 break; 2839 2840 case WEAK_UNDECLARED_IDENTIFIERS: 2841 if (Record.size() % 4 != 0) { 2842 Error("invalid weak identifiers record"); 2843 return Failure; 2844 } 2845 2846 // FIXME: Ignore weak undeclared identifiers from non-original PCH 2847 // files. This isn't the way to do it :) 2848 WeakUndeclaredIdentifiers.clear(); 2849 2850 // Translate the weak, undeclared identifiers into global IDs. 2851 for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) { 2852 WeakUndeclaredIdentifiers.push_back( 2853 getGlobalIdentifierID(F, Record[I++])); 2854 WeakUndeclaredIdentifiers.push_back( 2855 getGlobalIdentifierID(F, Record[I++])); 2856 WeakUndeclaredIdentifiers.push_back( 2857 ReadSourceLocation(F, Record, I).getRawEncoding()); 2858 WeakUndeclaredIdentifiers.push_back(Record[I++]); 2859 } 2860 break; 2861 2862 case LOCALLY_SCOPED_EXTERN_C_DECLS: 2863 for (unsigned I = 0, N = Record.size(); I != N; ++I) 2864 LocallyScopedExternCDecls.push_back(getGlobalDeclID(F, Record[I])); 2865 break; 2866 2867 case SELECTOR_OFFSETS: { 2868 F.SelectorOffsets = (const uint32_t *)Blob.data(); 2869 F.LocalNumSelectors = Record[0]; 2870 unsigned LocalBaseSelectorID = Record[1]; 2871 F.BaseSelectorID = getTotalNumSelectors(); 2872 2873 if (F.LocalNumSelectors > 0) { 2874 // Introduce the global -> local mapping for selectors within this 2875 // module. 2876 GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F)); 2877 2878 // Introduce the local -> global mapping for selectors within this 2879 // module. 2880 F.SelectorRemap.insertOrReplace( 2881 std::make_pair(LocalBaseSelectorID, 2882 F.BaseSelectorID - LocalBaseSelectorID)); 2883 2884 SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors); 2885 } 2886 break; 2887 } 2888 2889 case METHOD_POOL: 2890 F.SelectorLookupTableData = (const unsigned char *)Blob.data(); 2891 if (Record[0]) 2892 F.SelectorLookupTable 2893 = ASTSelectorLookupTable::Create( 2894 F.SelectorLookupTableData + Record[0], 2895 F.SelectorLookupTableData, 2896 ASTSelectorLookupTrait(*this, F)); 2897 TotalNumMethodPoolEntries += Record[1]; 2898 break; 2899 2900 case REFERENCED_SELECTOR_POOL: 2901 if (!Record.empty()) { 2902 for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) { 2903 ReferencedSelectorsData.push_back(getGlobalSelectorID(F, 2904 Record[Idx++])); 2905 ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx). 2906 getRawEncoding()); 2907 } 2908 } 2909 break; 2910 2911 case PP_COUNTER_VALUE: 2912 if (!Record.empty() && Listener) 2913 Listener->ReadCounter(F, Record[0]); 2914 break; 2915 2916 case FILE_SORTED_DECLS: 2917 F.FileSortedDecls = (const DeclID *)Blob.data(); 2918 F.NumFileSortedDecls = Record[0]; 2919 break; 2920 2921 case SOURCE_LOCATION_OFFSETS: { 2922 F.SLocEntryOffsets = (const uint32_t *)Blob.data(); 2923 F.LocalNumSLocEntries = Record[0]; 2924 unsigned SLocSpaceSize = Record[1]; 2925 std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) = 2926 SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries, 2927 SLocSpaceSize); 2928 // Make our entry in the range map. BaseID is negative and growing, so 2929 // we invert it. Because we invert it, though, we need the other end of 2930 // the range. 2931 unsigned RangeStart = 2932 unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1; 2933 GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F)); 2934 F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset); 2935 2936 // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing. 2937 assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0); 2938 GlobalSLocOffsetMap.insert( 2939 std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset 2940 - SLocSpaceSize,&F)); 2941 2942 // Initialize the remapping table. 2943 // Invalid stays invalid. 2944 F.SLocRemap.insertOrReplace(std::make_pair(0U, 0)); 2945 // This module. Base was 2 when being compiled. 2946 F.SLocRemap.insertOrReplace(std::make_pair(2U, 2947 static_cast<int>(F.SLocEntryBaseOffset - 2))); 2948 2949 TotalNumSLocEntries += F.LocalNumSLocEntries; 2950 break; 2951 } 2952 2953 case MODULE_OFFSET_MAP: { 2954 // Additional remapping information. 2955 const unsigned char *Data = (const unsigned char*)Blob.data(); 2956 const unsigned char *DataEnd = Data + Blob.size(); 2957 2958 // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders. 2959 if (F.SLocRemap.find(0) == F.SLocRemap.end()) { 2960 F.SLocRemap.insert(std::make_pair(0U, 0)); 2961 F.SLocRemap.insert(std::make_pair(2U, 1)); 2962 } 2963 2964 // Continuous range maps we may be updating in our module. 2965 typedef ContinuousRangeMap<uint32_t, int, 2>::Builder 2966 RemapBuilder; 2967 RemapBuilder SLocRemap(F.SLocRemap); 2968 RemapBuilder IdentifierRemap(F.IdentifierRemap); 2969 RemapBuilder MacroRemap(F.MacroRemap); 2970 RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap); 2971 RemapBuilder SubmoduleRemap(F.SubmoduleRemap); 2972 RemapBuilder SelectorRemap(F.SelectorRemap); 2973 RemapBuilder DeclRemap(F.DeclRemap); 2974 RemapBuilder TypeRemap(F.TypeRemap); 2975 2976 while(Data < DataEnd) { 2977 using namespace llvm::support; 2978 uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data); 2979 StringRef Name = StringRef((const char*)Data, Len); 2980 Data += Len; 2981 ModuleFile *OM = ModuleMgr.lookup(Name); 2982 if (!OM) { 2983 Error("SourceLocation remap refers to unknown module"); 2984 return Failure; 2985 } 2986 2987 uint32_t SLocOffset = 2988 endian::readNext<uint32_t, little, unaligned>(Data); 2989 uint32_t IdentifierIDOffset = 2990 endian::readNext<uint32_t, little, unaligned>(Data); 2991 uint32_t MacroIDOffset = 2992 endian::readNext<uint32_t, little, unaligned>(Data); 2993 uint32_t PreprocessedEntityIDOffset = 2994 endian::readNext<uint32_t, little, unaligned>(Data); 2995 uint32_t SubmoduleIDOffset = 2996 endian::readNext<uint32_t, little, unaligned>(Data); 2997 uint32_t SelectorIDOffset = 2998 endian::readNext<uint32_t, little, unaligned>(Data); 2999 uint32_t DeclIDOffset = 3000 endian::readNext<uint32_t, little, unaligned>(Data); 3001 uint32_t TypeIndexOffset = 3002 endian::readNext<uint32_t, little, unaligned>(Data); 3003 3004 uint32_t None = std::numeric_limits<uint32_t>::max(); 3005 3006 auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset, 3007 RemapBuilder &Remap) { 3008 if (Offset != None) 3009 Remap.insert(std::make_pair(Offset, 3010 static_cast<int>(BaseOffset - Offset))); 3011 }; 3012 mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap); 3013 mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap); 3014 mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap); 3015 mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID, 3016 PreprocessedEntityRemap); 3017 mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap); 3018 mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap); 3019 mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap); 3020 mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap); 3021 3022 // Global -> local mappings. 3023 F.GlobalToLocalDeclIDs[OM] = DeclIDOffset; 3024 } 3025 break; 3026 } 3027 3028 case SOURCE_MANAGER_LINE_TABLE: 3029 if (ParseLineTable(F, Record)) 3030 return Failure; 3031 break; 3032 3033 case SOURCE_LOCATION_PRELOADS: { 3034 // Need to transform from the local view (1-based IDs) to the global view, 3035 // which is based off F.SLocEntryBaseID. 3036 if (!F.PreloadSLocEntries.empty()) { 3037 Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file"); 3038 return Failure; 3039 } 3040 3041 F.PreloadSLocEntries.swap(Record); 3042 break; 3043 } 3044 3045 case EXT_VECTOR_DECLS: 3046 for (unsigned I = 0, N = Record.size(); I != N; ++I) 3047 ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I])); 3048 break; 3049 3050 case VTABLE_USES: 3051 if (Record.size() % 3 != 0) { 3052 Error("Invalid VTABLE_USES record"); 3053 return Failure; 3054 } 3055 3056 // Later tables overwrite earlier ones. 3057 // FIXME: Modules will have some trouble with this. This is clearly not 3058 // the right way to do this. 3059 VTableUses.clear(); 3060 3061 for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) { 3062 VTableUses.push_back(getGlobalDeclID(F, Record[Idx++])); 3063 VTableUses.push_back( 3064 ReadSourceLocation(F, Record, Idx).getRawEncoding()); 3065 VTableUses.push_back(Record[Idx++]); 3066 } 3067 break; 3068 3069 case DYNAMIC_CLASSES: 3070 for (unsigned I = 0, N = Record.size(); I != N; ++I) 3071 DynamicClasses.push_back(getGlobalDeclID(F, Record[I])); 3072 break; 3073 3074 case PENDING_IMPLICIT_INSTANTIATIONS: 3075 if (PendingInstantiations.size() % 2 != 0) { 3076 Error("Invalid existing PendingInstantiations"); 3077 return Failure; 3078 } 3079 3080 if (Record.size() % 2 != 0) { 3081 Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block"); 3082 return Failure; 3083 } 3084 3085 for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) { 3086 PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++])); 3087 PendingInstantiations.push_back( 3088 ReadSourceLocation(F, Record, I).getRawEncoding()); 3089 } 3090 break; 3091 3092 case SEMA_DECL_REFS: 3093 if (Record.size() != 2) { 3094 Error("Invalid SEMA_DECL_REFS block"); 3095 return Failure; 3096 } 3097 for (unsigned I = 0, N = Record.size(); I != N; ++I) 3098 SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I])); 3099 break; 3100 3101 case PPD_ENTITIES_OFFSETS: { 3102 F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data(); 3103 assert(Blob.size() % sizeof(PPEntityOffset) == 0); 3104 F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset); 3105 3106 unsigned LocalBasePreprocessedEntityID = Record[0]; 3107 3108 unsigned StartingID; 3109 if (!PP.getPreprocessingRecord()) 3110 PP.createPreprocessingRecord(); 3111 if (!PP.getPreprocessingRecord()->getExternalSource()) 3112 PP.getPreprocessingRecord()->SetExternalSource(*this); 3113 StartingID 3114 = PP.getPreprocessingRecord() 3115 ->allocateLoadedEntities(F.NumPreprocessedEntities); 3116 F.BasePreprocessedEntityID = StartingID; 3117 3118 if (F.NumPreprocessedEntities > 0) { 3119 // Introduce the global -> local mapping for preprocessed entities in 3120 // this module. 3121 GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F)); 3122 3123 // Introduce the local -> global mapping for preprocessed entities in 3124 // this module. 3125 F.PreprocessedEntityRemap.insertOrReplace( 3126 std::make_pair(LocalBasePreprocessedEntityID, 3127 F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID)); 3128 } 3129 3130 break; 3131 } 3132 3133 case DECL_UPDATE_OFFSETS: { 3134 if (Record.size() % 2 != 0) { 3135 Error("invalid DECL_UPDATE_OFFSETS block in AST file"); 3136 return Failure; 3137 } 3138 for (unsigned I = 0, N = Record.size(); I != N; I += 2) { 3139 GlobalDeclID ID = getGlobalDeclID(F, Record[I]); 3140 DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1])); 3141 3142 // If we've already loaded the decl, perform the updates when we finish 3143 // loading this block. 3144 if (Decl *D = GetExistingDecl(ID)) 3145 PendingUpdateRecords.push_back(std::make_pair(ID, D)); 3146 } 3147 break; 3148 } 3149 3150 case DECL_REPLACEMENTS: { 3151 if (Record.size() % 3 != 0) { 3152 Error("invalid DECL_REPLACEMENTS block in AST file"); 3153 return Failure; 3154 } 3155 for (unsigned I = 0, N = Record.size(); I != N; I += 3) 3156 ReplacedDecls[getGlobalDeclID(F, Record[I])] 3157 = ReplacedDeclInfo(&F, Record[I+1], Record[I+2]); 3158 break; 3159 } 3160 3161 case OBJC_CATEGORIES_MAP: { 3162 if (F.LocalNumObjCCategoriesInMap != 0) { 3163 Error("duplicate OBJC_CATEGORIES_MAP record in AST file"); 3164 return Failure; 3165 } 3166 3167 F.LocalNumObjCCategoriesInMap = Record[0]; 3168 F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data(); 3169 break; 3170 } 3171 3172 case OBJC_CATEGORIES: 3173 F.ObjCCategories.swap(Record); 3174 break; 3175 3176 case CXX_BASE_SPECIFIER_OFFSETS: { 3177 if (F.LocalNumCXXBaseSpecifiers != 0) { 3178 Error("duplicate CXX_BASE_SPECIFIER_OFFSETS record in AST file"); 3179 return Failure; 3180 } 3181 3182 F.LocalNumCXXBaseSpecifiers = Record[0]; 3183 F.CXXBaseSpecifiersOffsets = (const uint32_t *)Blob.data(); 3184 NumCXXBaseSpecifiersLoaded += F.LocalNumCXXBaseSpecifiers; 3185 break; 3186 } 3187 3188 case DIAG_PRAGMA_MAPPINGS: 3189 if (F.PragmaDiagMappings.empty()) 3190 F.PragmaDiagMappings.swap(Record); 3191 else 3192 F.PragmaDiagMappings.insert(F.PragmaDiagMappings.end(), 3193 Record.begin(), Record.end()); 3194 break; 3195 3196 case CUDA_SPECIAL_DECL_REFS: 3197 // Later tables overwrite earlier ones. 3198 // FIXME: Modules will have trouble with this. 3199 CUDASpecialDeclRefs.clear(); 3200 for (unsigned I = 0, N = Record.size(); I != N; ++I) 3201 CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I])); 3202 break; 3203 3204 case HEADER_SEARCH_TABLE: { 3205 F.HeaderFileInfoTableData = Blob.data(); 3206 F.LocalNumHeaderFileInfos = Record[1]; 3207 if (Record[0]) { 3208 F.HeaderFileInfoTable 3209 = HeaderFileInfoLookupTable::Create( 3210 (const unsigned char *)F.HeaderFileInfoTableData + Record[0], 3211 (const unsigned char *)F.HeaderFileInfoTableData, 3212 HeaderFileInfoTrait(*this, F, 3213 &PP.getHeaderSearchInfo(), 3214 Blob.data() + Record[2])); 3215 3216 PP.getHeaderSearchInfo().SetExternalSource(this); 3217 if (!PP.getHeaderSearchInfo().getExternalLookup()) 3218 PP.getHeaderSearchInfo().SetExternalLookup(this); 3219 } 3220 break; 3221 } 3222 3223 case FP_PRAGMA_OPTIONS: 3224 // Later tables overwrite earlier ones. 3225 FPPragmaOptions.swap(Record); 3226 break; 3227 3228 case OPENCL_EXTENSIONS: 3229 // Later tables overwrite earlier ones. 3230 OpenCLExtensions.swap(Record); 3231 break; 3232 3233 case TENTATIVE_DEFINITIONS: 3234 for (unsigned I = 0, N = Record.size(); I != N; ++I) 3235 TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I])); 3236 break; 3237 3238 case KNOWN_NAMESPACES: 3239 for (unsigned I = 0, N = Record.size(); I != N; ++I) 3240 KnownNamespaces.push_back(getGlobalDeclID(F, Record[I])); 3241 break; 3242 3243 case UNDEFINED_BUT_USED: 3244 if (UndefinedButUsed.size() % 2 != 0) { 3245 Error("Invalid existing UndefinedButUsed"); 3246 return Failure; 3247 } 3248 3249 if (Record.size() % 2 != 0) { 3250 Error("invalid undefined-but-used record"); 3251 return Failure; 3252 } 3253 for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) { 3254 UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++])); 3255 UndefinedButUsed.push_back( 3256 ReadSourceLocation(F, Record, I).getRawEncoding()); 3257 } 3258 break; 3259 3260 case IMPORTED_MODULES: { 3261 if (F.Kind != MK_ImplicitModule && F.Kind != MK_ExplicitModule) { 3262 // If we aren't loading a module (which has its own exports), make 3263 // all of the imported modules visible. 3264 // FIXME: Deal with macros-only imports. 3265 for (unsigned I = 0, N = Record.size(); I != N; /**/) { 3266 unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]); 3267 SourceLocation Loc = ReadSourceLocation(F, Record, I); 3268 if (GlobalID) 3269 ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc)); 3270 } 3271 } 3272 break; 3273 } 3274 3275 case LOCAL_REDECLARATIONS: { 3276 F.RedeclarationChains.swap(Record); 3277 break; 3278 } 3279 3280 case LOCAL_REDECLARATIONS_MAP: { 3281 if (F.LocalNumRedeclarationsInMap != 0) { 3282 Error("duplicate LOCAL_REDECLARATIONS_MAP record in AST file"); 3283 return Failure; 3284 } 3285 3286 F.LocalNumRedeclarationsInMap = Record[0]; 3287 F.RedeclarationsMap = (const LocalRedeclarationsInfo *)Blob.data(); 3288 break; 3289 } 3290 3291 case MERGED_DECLARATIONS: { 3292 for (unsigned Idx = 0; Idx < Record.size(); /* increment in loop */) { 3293 GlobalDeclID CanonID = getGlobalDeclID(F, Record[Idx++]); 3294 SmallVectorImpl<GlobalDeclID> &Decls = StoredMergedDecls[CanonID]; 3295 for (unsigned N = Record[Idx++]; N > 0; --N) 3296 Decls.push_back(getGlobalDeclID(F, Record[Idx++])); 3297 } 3298 break; 3299 } 3300 3301 case MACRO_OFFSET: { 3302 if (F.LocalNumMacros != 0) { 3303 Error("duplicate MACRO_OFFSET record in AST file"); 3304 return Failure; 3305 } 3306 F.MacroOffsets = (const uint32_t *)Blob.data(); 3307 F.LocalNumMacros = Record[0]; 3308 unsigned LocalBaseMacroID = Record[1]; 3309 F.BaseMacroID = getTotalNumMacros(); 3310 3311 if (F.LocalNumMacros > 0) { 3312 // Introduce the global -> local mapping for macros within this module. 3313 GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F)); 3314 3315 // Introduce the local -> global mapping for macros within this module. 3316 F.MacroRemap.insertOrReplace( 3317 std::make_pair(LocalBaseMacroID, 3318 F.BaseMacroID - LocalBaseMacroID)); 3319 3320 MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros); 3321 } 3322 break; 3323 } 3324 3325 case MACRO_TABLE: { 3326 // FIXME: Not used yet. 3327 break; 3328 } 3329 3330 case LATE_PARSED_TEMPLATE: { 3331 LateParsedTemplates.append(Record.begin(), Record.end()); 3332 break; 3333 } 3334 3335 case OPTIMIZE_PRAGMA_OPTIONS: 3336 if (Record.size() != 1) { 3337 Error("invalid pragma optimize record"); 3338 return Failure; 3339 } 3340 OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]); 3341 break; 3342 3343 case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES: 3344 for (unsigned I = 0, N = Record.size(); I != N; ++I) 3345 UnusedLocalTypedefNameCandidates.push_back( 3346 getGlobalDeclID(F, Record[I])); 3347 break; 3348 } 3349 } 3350 } 3351 3352 ASTReader::ASTReadResult 3353 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, 3354 const ModuleFile *ImportedBy, 3355 unsigned ClientLoadCapabilities) { 3356 unsigned Idx = 0; 3357 F.ModuleMapPath = ReadPath(F, Record, Idx); 3358 3359 if (F.Kind == MK_ExplicitModule) { 3360 // For an explicitly-loaded module, we don't care whether the original 3361 // module map file exists or matches. 3362 return Success; 3363 } 3364 3365 // Try to resolve ModuleName in the current header search context and 3366 // verify that it is found in the same module map file as we saved. If the 3367 // top-level AST file is a main file, skip this check because there is no 3368 // usable header search context. 3369 assert(!F.ModuleName.empty() && 3370 "MODULE_NAME should come before MODULE_MAP_FILE"); 3371 if (F.Kind == MK_ImplicitModule && 3372 (*ModuleMgr.begin())->Kind != MK_MainFile) { 3373 // An implicitly-loaded module file should have its module listed in some 3374 // module map file that we've already loaded. 3375 Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName); 3376 auto &Map = PP.getHeaderSearchInfo().getModuleMap(); 3377 const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr; 3378 if (!ModMap) { 3379 assert(ImportedBy && "top-level import should be verified"); 3380 if ((ClientLoadCapabilities & ARR_Missing) == 0) 3381 Diag(diag::err_imported_module_not_found) << F.ModuleName << F.FileName 3382 << ImportedBy->FileName 3383 << F.ModuleMapPath; 3384 return Missing; 3385 } 3386 3387 assert(M->Name == F.ModuleName && "found module with different name"); 3388 3389 // Check the primary module map file. 3390 const FileEntry *StoredModMap = FileMgr.getFile(F.ModuleMapPath); 3391 if (StoredModMap == nullptr || StoredModMap != ModMap) { 3392 assert(ModMap && "found module is missing module map file"); 3393 assert(ImportedBy && "top-level import should be verified"); 3394 if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) 3395 Diag(diag::err_imported_module_modmap_changed) 3396 << F.ModuleName << ImportedBy->FileName 3397 << ModMap->getName() << F.ModuleMapPath; 3398 return OutOfDate; 3399 } 3400 3401 llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps; 3402 for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) { 3403 // FIXME: we should use input files rather than storing names. 3404 std::string Filename = ReadPath(F, Record, Idx); 3405 const FileEntry *F = 3406 FileMgr.getFile(Filename, false, false); 3407 if (F == nullptr) { 3408 if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) 3409 Error("could not find file '" + Filename +"' referenced by AST file"); 3410 return OutOfDate; 3411 } 3412 AdditionalStoredMaps.insert(F); 3413 } 3414 3415 // Check any additional module map files (e.g. module.private.modulemap) 3416 // that are not in the pcm. 3417 if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) { 3418 for (const FileEntry *ModMap : *AdditionalModuleMaps) { 3419 // Remove files that match 3420 // Note: SmallPtrSet::erase is really remove 3421 if (!AdditionalStoredMaps.erase(ModMap)) { 3422 if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) 3423 Diag(diag::err_module_different_modmap) 3424 << F.ModuleName << /*new*/0 << ModMap->getName(); 3425 return OutOfDate; 3426 } 3427 } 3428 } 3429 3430 // Check any additional module map files that are in the pcm, but not 3431 // found in header search. Cases that match are already removed. 3432 for (const FileEntry *ModMap : AdditionalStoredMaps) { 3433 if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) 3434 Diag(diag::err_module_different_modmap) 3435 << F.ModuleName << /*not new*/1 << ModMap->getName(); 3436 return OutOfDate; 3437 } 3438 } 3439 3440 if (Listener) 3441 Listener->ReadModuleMapFile(F.ModuleMapPath); 3442 return Success; 3443 } 3444 3445 3446 /// \brief Move the given method to the back of the global list of methods. 3447 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) { 3448 // Find the entry for this selector in the method pool. 3449 Sema::GlobalMethodPool::iterator Known 3450 = S.MethodPool.find(Method->getSelector()); 3451 if (Known == S.MethodPool.end()) 3452 return; 3453 3454 // Retrieve the appropriate method list. 3455 ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first 3456 : Known->second.second; 3457 bool Found = false; 3458 for (ObjCMethodList *List = &Start; List; List = List->getNext()) { 3459 if (!Found) { 3460 if (List->getMethod() == Method) { 3461 Found = true; 3462 } else { 3463 // Keep searching. 3464 continue; 3465 } 3466 } 3467 3468 if (List->getNext()) 3469 List->setMethod(List->getNext()->getMethod()); 3470 else 3471 List->setMethod(Method); 3472 } 3473 } 3474 3475 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner, 3476 bool FromFinalization) { 3477 // FIXME: Only do this if Owner->NameVisibility == AllVisible. 3478 for (Decl *D : Names.HiddenDecls) { 3479 bool wasHidden = D->Hidden; 3480 D->Hidden = false; 3481 3482 if (wasHidden && SemaObj) { 3483 if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) { 3484 moveMethodToBackOfGlobalList(*SemaObj, Method); 3485 } 3486 } 3487 } 3488 3489 assert((FromFinalization || Owner->NameVisibility >= Module::MacrosVisible) && 3490 "nothing to make visible?"); 3491 for (const auto &Macro : Names.HiddenMacros) { 3492 if (FromFinalization) 3493 PP.appendMacroDirective(Macro.first, 3494 Macro.second->import(PP, SourceLocation())); 3495 else 3496 installImportedMacro(Macro.first, Macro.second, Owner); 3497 } 3498 } 3499 3500 void ASTReader::makeModuleVisible(Module *Mod, 3501 Module::NameVisibilityKind NameVisibility, 3502 SourceLocation ImportLoc, 3503 bool Complain) { 3504 llvm::SmallPtrSet<Module *, 4> Visited; 3505 SmallVector<Module *, 4> Stack; 3506 Stack.push_back(Mod); 3507 while (!Stack.empty()) { 3508 Mod = Stack.pop_back_val(); 3509 3510 if (NameVisibility <= Mod->NameVisibility) { 3511 // This module already has this level of visibility (or greater), so 3512 // there is nothing more to do. 3513 continue; 3514 } 3515 3516 if (!Mod->isAvailable()) { 3517 // Modules that aren't available cannot be made visible. 3518 continue; 3519 } 3520 3521 // Update the module's name visibility. 3522 if (NameVisibility >= Module::MacrosVisible && 3523 Mod->NameVisibility < Module::MacrosVisible) 3524 Mod->MacroVisibilityLoc = ImportLoc; 3525 Mod->NameVisibility = NameVisibility; 3526 3527 // If we've already deserialized any names from this module, 3528 // mark them as visible. 3529 HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod); 3530 if (Hidden != HiddenNamesMap.end()) { 3531 auto HiddenNames = std::move(*Hidden); 3532 HiddenNamesMap.erase(Hidden); 3533 makeNamesVisible(HiddenNames.second, HiddenNames.first, 3534 /*FromFinalization*/false); 3535 assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() && 3536 "making names visible added hidden names"); 3537 } 3538 3539 // Push any exported modules onto the stack to be marked as visible. 3540 SmallVector<Module *, 16> Exports; 3541 Mod->getExportedModules(Exports); 3542 for (SmallVectorImpl<Module *>::iterator 3543 I = Exports.begin(), E = Exports.end(); I != E; ++I) { 3544 Module *Exported = *I; 3545 if (Visited.insert(Exported).second) 3546 Stack.push_back(Exported); 3547 } 3548 3549 // Detect any conflicts. 3550 if (Complain) { 3551 assert(ImportLoc.isValid() && "Missing import location"); 3552 for (unsigned I = 0, N = Mod->Conflicts.size(); I != N; ++I) { 3553 if (Mod->Conflicts[I].Other->NameVisibility >= NameVisibility) { 3554 Diag(ImportLoc, diag::warn_module_conflict) 3555 << Mod->getFullModuleName() 3556 << Mod->Conflicts[I].Other->getFullModuleName() 3557 << Mod->Conflicts[I].Message; 3558 // FIXME: Need note where the other module was imported. 3559 } 3560 } 3561 } 3562 } 3563 } 3564 3565 bool ASTReader::loadGlobalIndex() { 3566 if (GlobalIndex) 3567 return false; 3568 3569 if (TriedLoadingGlobalIndex || !UseGlobalIndex || 3570 !Context.getLangOpts().Modules) 3571 return true; 3572 3573 // Try to load the global index. 3574 TriedLoadingGlobalIndex = true; 3575 StringRef ModuleCachePath 3576 = getPreprocessor().getHeaderSearchInfo().getModuleCachePath(); 3577 std::pair<GlobalModuleIndex *, GlobalModuleIndex::ErrorCode> Result 3578 = GlobalModuleIndex::readIndex(ModuleCachePath); 3579 if (!Result.first) 3580 return true; 3581 3582 GlobalIndex.reset(Result.first); 3583 ModuleMgr.setGlobalIndex(GlobalIndex.get()); 3584 return false; 3585 } 3586 3587 bool ASTReader::isGlobalIndexUnavailable() const { 3588 return Context.getLangOpts().Modules && UseGlobalIndex && 3589 !hasGlobalIndex() && TriedLoadingGlobalIndex; 3590 } 3591 3592 static void updateModuleTimestamp(ModuleFile &MF) { 3593 // Overwrite the timestamp file contents so that file's mtime changes. 3594 std::string TimestampFilename = MF.getTimestampFilename(); 3595 std::error_code EC; 3596 llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::F_Text); 3597 if (EC) 3598 return; 3599 OS << "Timestamp file\n"; 3600 } 3601 3602 ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName, 3603 ModuleKind Type, 3604 SourceLocation ImportLoc, 3605 unsigned ClientLoadCapabilities) { 3606 llvm::SaveAndRestore<SourceLocation> 3607 SetCurImportLocRAII(CurrentImportLoc, ImportLoc); 3608 3609 // Defer any pending actions until we get to the end of reading the AST file. 3610 Deserializing AnASTFile(this); 3611 3612 // Bump the generation number. 3613 unsigned PreviousGeneration = incrementGeneration(Context); 3614 3615 unsigned NumModules = ModuleMgr.size(); 3616 SmallVector<ImportedModule, 4> Loaded; 3617 switch(ASTReadResult ReadResult = ReadASTCore(FileName, Type, ImportLoc, 3618 /*ImportedBy=*/nullptr, Loaded, 3619 0, 0, 0, 3620 ClientLoadCapabilities)) { 3621 case Failure: 3622 case Missing: 3623 case OutOfDate: 3624 case VersionMismatch: 3625 case ConfigurationMismatch: 3626 case HadErrors: { 3627 llvm::SmallPtrSet<ModuleFile *, 4> LoadedSet; 3628 for (const ImportedModule &IM : Loaded) 3629 LoadedSet.insert(IM.Mod); 3630 3631 ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, ModuleMgr.end(), 3632 LoadedSet, 3633 Context.getLangOpts().Modules 3634 ? &PP.getHeaderSearchInfo().getModuleMap() 3635 : nullptr); 3636 3637 // If we find that any modules are unusable, the global index is going 3638 // to be out-of-date. Just remove it. 3639 GlobalIndex.reset(); 3640 ModuleMgr.setGlobalIndex(nullptr); 3641 return ReadResult; 3642 } 3643 case Success: 3644 break; 3645 } 3646 3647 // Here comes stuff that we only do once the entire chain is loaded. 3648 3649 // Load the AST blocks of all of the modules that we loaded. 3650 for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(), 3651 MEnd = Loaded.end(); 3652 M != MEnd; ++M) { 3653 ModuleFile &F = *M->Mod; 3654 3655 // Read the AST block. 3656 if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities)) 3657 return Result; 3658 3659 // Once read, set the ModuleFile bit base offset and update the size in 3660 // bits of all files we've seen. 3661 F.GlobalBitOffset = TotalModulesSizeInBits; 3662 TotalModulesSizeInBits += F.SizeInBits; 3663 GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F)); 3664 3665 // Preload SLocEntries. 3666 for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) { 3667 int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID; 3668 // Load it through the SourceManager and don't call ReadSLocEntry() 3669 // directly because the entry may have already been loaded in which case 3670 // calling ReadSLocEntry() directly would trigger an assertion in 3671 // SourceManager. 3672 SourceMgr.getLoadedSLocEntryByID(Index); 3673 } 3674 } 3675 3676 // Setup the import locations and notify the module manager that we've 3677 // committed to these module files. 3678 for (SmallVectorImpl<ImportedModule>::iterator M = Loaded.begin(), 3679 MEnd = Loaded.end(); 3680 M != MEnd; ++M) { 3681 ModuleFile &F = *M->Mod; 3682 3683 ModuleMgr.moduleFileAccepted(&F); 3684 3685 // Set the import location. 3686 F.DirectImportLoc = ImportLoc; 3687 if (!M->ImportedBy) 3688 F.ImportLoc = M->ImportLoc; 3689 else 3690 F.ImportLoc = ReadSourceLocation(*M->ImportedBy, 3691 M->ImportLoc.getRawEncoding()); 3692 } 3693 3694 // Mark all of the identifiers in the identifier table as being out of date, 3695 // so that various accessors know to check the loaded modules when the 3696 // identifier is used. 3697 for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(), 3698 IdEnd = PP.getIdentifierTable().end(); 3699 Id != IdEnd; ++Id) 3700 Id->second->setOutOfDate(true); 3701 3702 // Resolve any unresolved module exports. 3703 for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) { 3704 UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I]; 3705 SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID); 3706 Module *ResolvedMod = getSubmodule(GlobalID); 3707 3708 switch (Unresolved.Kind) { 3709 case UnresolvedModuleRef::Conflict: 3710 if (ResolvedMod) { 3711 Module::Conflict Conflict; 3712 Conflict.Other = ResolvedMod; 3713 Conflict.Message = Unresolved.String.str(); 3714 Unresolved.Mod->Conflicts.push_back(Conflict); 3715 } 3716 continue; 3717 3718 case UnresolvedModuleRef::Import: 3719 if (ResolvedMod) 3720 Unresolved.Mod->Imports.push_back(ResolvedMod); 3721 continue; 3722 3723 case UnresolvedModuleRef::Export: 3724 if (ResolvedMod || Unresolved.IsWildcard) 3725 Unresolved.Mod->Exports.push_back( 3726 Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard)); 3727 continue; 3728 } 3729 } 3730 UnresolvedModuleRefs.clear(); 3731 3732 // FIXME: How do we load the 'use'd modules? They may not be submodules. 3733 // Might be unnecessary as use declarations are only used to build the 3734 // module itself. 3735 3736 InitializeContext(); 3737 3738 if (SemaObj) 3739 UpdateSema(); 3740 3741 if (DeserializationListener) 3742 DeserializationListener->ReaderInitialized(this); 3743 3744 ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule(); 3745 if (!PrimaryModule.OriginalSourceFileID.isInvalid()) { 3746 PrimaryModule.OriginalSourceFileID 3747 = FileID::get(PrimaryModule.SLocEntryBaseID 3748 + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1); 3749 3750 // If this AST file is a precompiled preamble, then set the 3751 // preamble file ID of the source manager to the file source file 3752 // from which the preamble was built. 3753 if (Type == MK_Preamble) { 3754 SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID); 3755 } else if (Type == MK_MainFile) { 3756 SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID); 3757 } 3758 } 3759 3760 // For any Objective-C class definitions we have already loaded, make sure 3761 // that we load any additional categories. 3762 for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) { 3763 loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(), 3764 ObjCClassesLoaded[I], 3765 PreviousGeneration); 3766 } 3767 3768 if (PP.getHeaderSearchInfo() 3769 .getHeaderSearchOpts() 3770 .ModulesValidateOncePerBuildSession) { 3771 // Now we are certain that the module and all modules it depends on are 3772 // up to date. Create or update timestamp files for modules that are 3773 // located in the module cache (not for PCH files that could be anywhere 3774 // in the filesystem). 3775 for (unsigned I = 0, N = Loaded.size(); I != N; ++I) { 3776 ImportedModule &M = Loaded[I]; 3777 if (M.Mod->Kind == MK_ImplicitModule) { 3778 updateModuleTimestamp(*M.Mod); 3779 } 3780 } 3781 } 3782 3783 return Success; 3784 } 3785 3786 static ASTFileSignature readASTFileSignature(llvm::BitstreamReader &StreamFile); 3787 3788 ASTReader::ASTReadResult 3789 ASTReader::ReadASTCore(StringRef FileName, 3790 ModuleKind Type, 3791 SourceLocation ImportLoc, 3792 ModuleFile *ImportedBy, 3793 SmallVectorImpl<ImportedModule> &Loaded, 3794 off_t ExpectedSize, time_t ExpectedModTime, 3795 ASTFileSignature ExpectedSignature, 3796 unsigned ClientLoadCapabilities) { 3797 ModuleFile *M; 3798 std::string ErrorStr; 3799 ModuleManager::AddModuleResult AddResult 3800 = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy, 3801 getGeneration(), ExpectedSize, ExpectedModTime, 3802 ExpectedSignature, readASTFileSignature, 3803 M, ErrorStr); 3804 3805 switch (AddResult) { 3806 case ModuleManager::AlreadyLoaded: 3807 return Success; 3808 3809 case ModuleManager::NewlyLoaded: 3810 // Load module file below. 3811 break; 3812 3813 case ModuleManager::Missing: 3814 // The module file was missing; if the client can handle that, return 3815 // it. 3816 if (ClientLoadCapabilities & ARR_Missing) 3817 return Missing; 3818 3819 // Otherwise, return an error. 3820 { 3821 std::string Msg = "Unable to load module \"" + FileName.str() + "\": " 3822 + ErrorStr; 3823 Error(Msg); 3824 } 3825 return Failure; 3826 3827 case ModuleManager::OutOfDate: 3828 // We couldn't load the module file because it is out-of-date. If the 3829 // client can handle out-of-date, return it. 3830 if (ClientLoadCapabilities & ARR_OutOfDate) 3831 return OutOfDate; 3832 3833 // Otherwise, return an error. 3834 { 3835 std::string Msg = "Unable to load module \"" + FileName.str() + "\": " 3836 + ErrorStr; 3837 Error(Msg); 3838 } 3839 return Failure; 3840 } 3841 3842 assert(M && "Missing module file"); 3843 3844 // FIXME: This seems rather a hack. Should CurrentDir be part of the 3845 // module? 3846 if (FileName != "-") { 3847 CurrentDir = llvm::sys::path::parent_path(FileName); 3848 if (CurrentDir.empty()) CurrentDir = "."; 3849 } 3850 3851 ModuleFile &F = *M; 3852 BitstreamCursor &Stream = F.Stream; 3853 Stream.init(&F.StreamFile); 3854 F.SizeInBits = F.Buffer->getBufferSize() * 8; 3855 3856 // Sniff for the signature. 3857 if (Stream.Read(8) != 'C' || 3858 Stream.Read(8) != 'P' || 3859 Stream.Read(8) != 'C' || 3860 Stream.Read(8) != 'H') { 3861 Diag(diag::err_not_a_pch_file) << FileName; 3862 return Failure; 3863 } 3864 3865 // This is used for compatibility with older PCH formats. 3866 bool HaveReadControlBlock = false; 3867 3868 while (1) { 3869 llvm::BitstreamEntry Entry = Stream.advance(); 3870 3871 switch (Entry.Kind) { 3872 case llvm::BitstreamEntry::Error: 3873 case llvm::BitstreamEntry::EndBlock: 3874 case llvm::BitstreamEntry::Record: 3875 Error("invalid record at top-level of AST file"); 3876 return Failure; 3877 3878 case llvm::BitstreamEntry::SubBlock: 3879 break; 3880 } 3881 3882 // We only know the control subblock ID. 3883 switch (Entry.ID) { 3884 case llvm::bitc::BLOCKINFO_BLOCK_ID: 3885 if (Stream.ReadBlockInfoBlock()) { 3886 Error("malformed BlockInfoBlock in AST file"); 3887 return Failure; 3888 } 3889 break; 3890 case CONTROL_BLOCK_ID: 3891 HaveReadControlBlock = true; 3892 switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) { 3893 case Success: 3894 break; 3895 3896 case Failure: return Failure; 3897 case Missing: return Missing; 3898 case OutOfDate: return OutOfDate; 3899 case VersionMismatch: return VersionMismatch; 3900 case ConfigurationMismatch: return ConfigurationMismatch; 3901 case HadErrors: return HadErrors; 3902 } 3903 break; 3904 case AST_BLOCK_ID: 3905 if (!HaveReadControlBlock) { 3906 if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0) 3907 Diag(diag::err_pch_version_too_old); 3908 return VersionMismatch; 3909 } 3910 3911 // Record that we've loaded this module. 3912 Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc)); 3913 return Success; 3914 3915 default: 3916 if (Stream.SkipBlock()) { 3917 Error("malformed block record in AST file"); 3918 return Failure; 3919 } 3920 break; 3921 } 3922 } 3923 3924 return Success; 3925 } 3926 3927 void ASTReader::InitializeContext() { 3928 // If there's a listener, notify them that we "read" the translation unit. 3929 if (DeserializationListener) 3930 DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID, 3931 Context.getTranslationUnitDecl()); 3932 3933 // FIXME: Find a better way to deal with collisions between these 3934 // built-in types. Right now, we just ignore the problem. 3935 3936 // Load the special types. 3937 if (SpecialTypes.size() >= NumSpecialTypeIDs) { 3938 if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) { 3939 if (!Context.CFConstantStringTypeDecl) 3940 Context.setCFConstantStringType(GetType(String)); 3941 } 3942 3943 if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) { 3944 QualType FileType = GetType(File); 3945 if (FileType.isNull()) { 3946 Error("FILE type is NULL"); 3947 return; 3948 } 3949 3950 if (!Context.FILEDecl) { 3951 if (const TypedefType *Typedef = FileType->getAs<TypedefType>()) 3952 Context.setFILEDecl(Typedef->getDecl()); 3953 else { 3954 const TagType *Tag = FileType->getAs<TagType>(); 3955 if (!Tag) { 3956 Error("Invalid FILE type in AST file"); 3957 return; 3958 } 3959 Context.setFILEDecl(Tag->getDecl()); 3960 } 3961 } 3962 } 3963 3964 if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) { 3965 QualType Jmp_bufType = GetType(Jmp_buf); 3966 if (Jmp_bufType.isNull()) { 3967 Error("jmp_buf type is NULL"); 3968 return; 3969 } 3970 3971 if (!Context.jmp_bufDecl) { 3972 if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>()) 3973 Context.setjmp_bufDecl(Typedef->getDecl()); 3974 else { 3975 const TagType *Tag = Jmp_bufType->getAs<TagType>(); 3976 if (!Tag) { 3977 Error("Invalid jmp_buf type in AST file"); 3978 return; 3979 } 3980 Context.setjmp_bufDecl(Tag->getDecl()); 3981 } 3982 } 3983 } 3984 3985 if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) { 3986 QualType Sigjmp_bufType = GetType(Sigjmp_buf); 3987 if (Sigjmp_bufType.isNull()) { 3988 Error("sigjmp_buf type is NULL"); 3989 return; 3990 } 3991 3992 if (!Context.sigjmp_bufDecl) { 3993 if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>()) 3994 Context.setsigjmp_bufDecl(Typedef->getDecl()); 3995 else { 3996 const TagType *Tag = Sigjmp_bufType->getAs<TagType>(); 3997 assert(Tag && "Invalid sigjmp_buf type in AST file"); 3998 Context.setsigjmp_bufDecl(Tag->getDecl()); 3999 } 4000 } 4001 } 4002 4003 if (unsigned ObjCIdRedef 4004 = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) { 4005 if (Context.ObjCIdRedefinitionType.isNull()) 4006 Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef); 4007 } 4008 4009 if (unsigned ObjCClassRedef 4010 = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) { 4011 if (Context.ObjCClassRedefinitionType.isNull()) 4012 Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef); 4013 } 4014 4015 if (unsigned ObjCSelRedef 4016 = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) { 4017 if (Context.ObjCSelRedefinitionType.isNull()) 4018 Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef); 4019 } 4020 4021 if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) { 4022 QualType Ucontext_tType = GetType(Ucontext_t); 4023 if (Ucontext_tType.isNull()) { 4024 Error("ucontext_t type is NULL"); 4025 return; 4026 } 4027 4028 if (!Context.ucontext_tDecl) { 4029 if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>()) 4030 Context.setucontext_tDecl(Typedef->getDecl()); 4031 else { 4032 const TagType *Tag = Ucontext_tType->getAs<TagType>(); 4033 assert(Tag && "Invalid ucontext_t type in AST file"); 4034 Context.setucontext_tDecl(Tag->getDecl()); 4035 } 4036 } 4037 } 4038 } 4039 4040 ReadPragmaDiagnosticMappings(Context.getDiagnostics()); 4041 4042 // If there were any CUDA special declarations, deserialize them. 4043 if (!CUDASpecialDeclRefs.empty()) { 4044 assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!"); 4045 Context.setcudaConfigureCallDecl( 4046 cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0]))); 4047 } 4048 4049 // Re-export any modules that were imported by a non-module AST file. 4050 // FIXME: This does not make macro-only imports visible again. It also doesn't 4051 // make #includes mapped to module imports visible. 4052 for (auto &Import : ImportedModules) { 4053 if (Module *Imported = getSubmodule(Import.ID)) 4054 makeModuleVisible(Imported, Module::AllVisible, 4055 /*ImportLoc=*/Import.ImportLoc, 4056 /*Complain=*/false); 4057 } 4058 ImportedModules.clear(); 4059 } 4060 4061 void ASTReader::finalizeForWriting() { 4062 while (!HiddenNamesMap.empty()) { 4063 auto HiddenNames = std::move(*HiddenNamesMap.begin()); 4064 HiddenNamesMap.erase(HiddenNamesMap.begin()); 4065 makeNamesVisible(HiddenNames.second, HiddenNames.first, 4066 /*FromFinalization*/true); 4067 } 4068 } 4069 4070 /// \brief Given a cursor at the start of an AST file, scan ahead and drop the 4071 /// cursor into the start of the given block ID, returning false on success and 4072 /// true on failure. 4073 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) { 4074 while (1) { 4075 llvm::BitstreamEntry Entry = Cursor.advance(); 4076 switch (Entry.Kind) { 4077 case llvm::BitstreamEntry::Error: 4078 case llvm::BitstreamEntry::EndBlock: 4079 return true; 4080 4081 case llvm::BitstreamEntry::Record: 4082 // Ignore top-level records. 4083 Cursor.skipRecord(Entry.ID); 4084 break; 4085 4086 case llvm::BitstreamEntry::SubBlock: 4087 if (Entry.ID == BlockID) { 4088 if (Cursor.EnterSubBlock(BlockID)) 4089 return true; 4090 // Found it! 4091 return false; 4092 } 4093 4094 if (Cursor.SkipBlock()) 4095 return true; 4096 } 4097 } 4098 } 4099 4100 static ASTFileSignature readASTFileSignature(llvm::BitstreamReader &StreamFile){ 4101 BitstreamCursor Stream(StreamFile); 4102 if (Stream.Read(8) != 'C' || 4103 Stream.Read(8) != 'P' || 4104 Stream.Read(8) != 'C' || 4105 Stream.Read(8) != 'H') { 4106 return 0; 4107 } 4108 4109 // Scan for the CONTROL_BLOCK_ID block. 4110 if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) 4111 return 0; 4112 4113 // Scan for SIGNATURE inside the control block. 4114 ASTReader::RecordData Record; 4115 while (1) { 4116 llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks(); 4117 if (Entry.Kind == llvm::BitstreamEntry::EndBlock || 4118 Entry.Kind != llvm::BitstreamEntry::Record) 4119 return 0; 4120 4121 Record.clear(); 4122 StringRef Blob; 4123 if (SIGNATURE == Stream.readRecord(Entry.ID, Record, &Blob)) 4124 return Record[0]; 4125 } 4126 } 4127 4128 /// \brief Retrieve the name of the original source file name 4129 /// directly from the AST file, without actually loading the AST 4130 /// file. 4131 std::string ASTReader::getOriginalSourceFile(const std::string &ASTFileName, 4132 FileManager &FileMgr, 4133 DiagnosticsEngine &Diags) { 4134 // Open the AST file. 4135 auto Buffer = FileMgr.getBufferForFile(ASTFileName); 4136 if (!Buffer) { 4137 Diags.Report(diag::err_fe_unable_to_read_pch_file) 4138 << ASTFileName << Buffer.getError().message(); 4139 return std::string(); 4140 } 4141 4142 // Initialize the stream 4143 llvm::BitstreamReader StreamFile; 4144 StreamFile.init((const unsigned char *)(*Buffer)->getBufferStart(), 4145 (const unsigned char *)(*Buffer)->getBufferEnd()); 4146 BitstreamCursor Stream(StreamFile); 4147 4148 // Sniff for the signature. 4149 if (Stream.Read(8) != 'C' || 4150 Stream.Read(8) != 'P' || 4151 Stream.Read(8) != 'C' || 4152 Stream.Read(8) != 'H') { 4153 Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName; 4154 return std::string(); 4155 } 4156 4157 // Scan for the CONTROL_BLOCK_ID block. 4158 if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) { 4159 Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName; 4160 return std::string(); 4161 } 4162 4163 // Scan for ORIGINAL_FILE inside the control block. 4164 RecordData Record; 4165 while (1) { 4166 llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks(); 4167 if (Entry.Kind == llvm::BitstreamEntry::EndBlock) 4168 return std::string(); 4169 4170 if (Entry.Kind != llvm::BitstreamEntry::Record) { 4171 Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName; 4172 return std::string(); 4173 } 4174 4175 Record.clear(); 4176 StringRef Blob; 4177 if (Stream.readRecord(Entry.ID, Record, &Blob) == ORIGINAL_FILE) 4178 return Blob.str(); 4179 } 4180 } 4181 4182 namespace { 4183 class SimplePCHValidator : public ASTReaderListener { 4184 const LangOptions &ExistingLangOpts; 4185 const TargetOptions &ExistingTargetOpts; 4186 const PreprocessorOptions &ExistingPPOpts; 4187 FileManager &FileMgr; 4188 4189 public: 4190 SimplePCHValidator(const LangOptions &ExistingLangOpts, 4191 const TargetOptions &ExistingTargetOpts, 4192 const PreprocessorOptions &ExistingPPOpts, 4193 FileManager &FileMgr) 4194 : ExistingLangOpts(ExistingLangOpts), 4195 ExistingTargetOpts(ExistingTargetOpts), 4196 ExistingPPOpts(ExistingPPOpts), 4197 FileMgr(FileMgr) 4198 { 4199 } 4200 4201 bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain, 4202 bool AllowCompatibleDifferences) override { 4203 return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr, 4204 AllowCompatibleDifferences); 4205 } 4206 bool ReadTargetOptions(const TargetOptions &TargetOpts, 4207 bool Complain) override { 4208 return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr); 4209 } 4210 bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, 4211 bool Complain, 4212 std::string &SuggestedPredefines) override { 4213 return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr, 4214 SuggestedPredefines, ExistingLangOpts); 4215 } 4216 }; 4217 } 4218 4219 bool ASTReader::readASTFileControlBlock(StringRef Filename, 4220 FileManager &FileMgr, 4221 ASTReaderListener &Listener) { 4222 // Open the AST file. 4223 auto Buffer = FileMgr.getBufferForFile(Filename); 4224 if (!Buffer) { 4225 return true; 4226 } 4227 4228 // Initialize the stream 4229 llvm::BitstreamReader StreamFile; 4230 StreamFile.init((const unsigned char *)(*Buffer)->getBufferStart(), 4231 (const unsigned char *)(*Buffer)->getBufferEnd()); 4232 BitstreamCursor Stream(StreamFile); 4233 4234 // Sniff for the signature. 4235 if (Stream.Read(8) != 'C' || 4236 Stream.Read(8) != 'P' || 4237 Stream.Read(8) != 'C' || 4238 Stream.Read(8) != 'H') { 4239 return true; 4240 } 4241 4242 // Scan for the CONTROL_BLOCK_ID block. 4243 if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) 4244 return true; 4245 4246 bool NeedsInputFiles = Listener.needsInputFileVisitation(); 4247 bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation(); 4248 bool NeedsImports = Listener.needsImportVisitation(); 4249 BitstreamCursor InputFilesCursor; 4250 if (NeedsInputFiles) { 4251 InputFilesCursor = Stream; 4252 if (SkipCursorToBlock(InputFilesCursor, INPUT_FILES_BLOCK_ID)) 4253 return true; 4254 4255 // Read the abbreviations 4256 while (true) { 4257 uint64_t Offset = InputFilesCursor.GetCurrentBitNo(); 4258 unsigned Code = InputFilesCursor.ReadCode(); 4259 4260 // We expect all abbrevs to be at the start of the block. 4261 if (Code != llvm::bitc::DEFINE_ABBREV) { 4262 InputFilesCursor.JumpToBit(Offset); 4263 break; 4264 } 4265 InputFilesCursor.ReadAbbrevRecord(); 4266 } 4267 } 4268 4269 // Scan for ORIGINAL_FILE inside the control block. 4270 RecordData Record; 4271 std::string ModuleDir; 4272 while (1) { 4273 llvm::BitstreamEntry Entry = Stream.advanceSkippingSubblocks(); 4274 if (Entry.Kind == llvm::BitstreamEntry::EndBlock) 4275 return false; 4276 4277 if (Entry.Kind != llvm::BitstreamEntry::Record) 4278 return true; 4279 4280 Record.clear(); 4281 StringRef Blob; 4282 unsigned RecCode = Stream.readRecord(Entry.ID, Record, &Blob); 4283 switch ((ControlRecordTypes)RecCode) { 4284 case METADATA: { 4285 if (Record[0] != VERSION_MAJOR) 4286 return true; 4287 4288 if (Listener.ReadFullVersionInformation(Blob)) 4289 return true; 4290 4291 break; 4292 } 4293 case MODULE_NAME: 4294 Listener.ReadModuleName(Blob); 4295 break; 4296 case MODULE_DIRECTORY: 4297 ModuleDir = Blob; 4298 break; 4299 case MODULE_MAP_FILE: { 4300 unsigned Idx = 0; 4301 auto Path = ReadString(Record, Idx); 4302 ResolveImportedPath(Path, ModuleDir); 4303 Listener.ReadModuleMapFile(Path); 4304 break; 4305 } 4306 case LANGUAGE_OPTIONS: 4307 if (ParseLanguageOptions(Record, false, Listener, 4308 /*AllowCompatibleConfigurationMismatch*/false)) 4309 return true; 4310 break; 4311 4312 case TARGET_OPTIONS: 4313 if (ParseTargetOptions(Record, false, Listener)) 4314 return true; 4315 break; 4316 4317 case DIAGNOSTIC_OPTIONS: 4318 if (ParseDiagnosticOptions(Record, false, Listener)) 4319 return true; 4320 break; 4321 4322 case FILE_SYSTEM_OPTIONS: 4323 if (ParseFileSystemOptions(Record, false, Listener)) 4324 return true; 4325 break; 4326 4327 case HEADER_SEARCH_OPTIONS: 4328 if (ParseHeaderSearchOptions(Record, false, Listener)) 4329 return true; 4330 break; 4331 4332 case PREPROCESSOR_OPTIONS: { 4333 std::string IgnoredSuggestedPredefines; 4334 if (ParsePreprocessorOptions(Record, false, Listener, 4335 IgnoredSuggestedPredefines)) 4336 return true; 4337 break; 4338 } 4339 4340 case INPUT_FILE_OFFSETS: { 4341 if (!NeedsInputFiles) 4342 break; 4343 4344 unsigned NumInputFiles = Record[0]; 4345 unsigned NumUserFiles = Record[1]; 4346 const uint32_t *InputFileOffs = (const uint32_t *)Blob.data(); 4347 for (unsigned I = 0; I != NumInputFiles; ++I) { 4348 // Go find this input file. 4349 bool isSystemFile = I >= NumUserFiles; 4350 4351 if (isSystemFile && !NeedsSystemInputFiles) 4352 break; // the rest are system input files 4353 4354 BitstreamCursor &Cursor = InputFilesCursor; 4355 SavedStreamPosition SavedPosition(Cursor); 4356 Cursor.JumpToBit(InputFileOffs[I]); 4357 4358 unsigned Code = Cursor.ReadCode(); 4359 RecordData Record; 4360 StringRef Blob; 4361 bool shouldContinue = false; 4362 switch ((InputFileRecordTypes)Cursor.readRecord(Code, Record, &Blob)) { 4363 case INPUT_FILE: 4364 bool Overridden = static_cast<bool>(Record[3]); 4365 std::string Filename = Blob; 4366 ResolveImportedPath(Filename, ModuleDir); 4367 shouldContinue = 4368 Listener.visitInputFile(Filename, isSystemFile, Overridden); 4369 break; 4370 } 4371 if (!shouldContinue) 4372 break; 4373 } 4374 break; 4375 } 4376 4377 case IMPORTS: { 4378 if (!NeedsImports) 4379 break; 4380 4381 unsigned Idx = 0, N = Record.size(); 4382 while (Idx < N) { 4383 // Read information about the AST file. 4384 Idx += 5; // ImportLoc, Size, ModTime, Signature 4385 std::string Filename = ReadString(Record, Idx); 4386 ResolveImportedPath(Filename, ModuleDir); 4387 Listener.visitImport(Filename); 4388 } 4389 break; 4390 } 4391 4392 default: 4393 // No other validation to perform. 4394 break; 4395 } 4396 } 4397 } 4398 4399 4400 bool ASTReader::isAcceptableASTFile(StringRef Filename, 4401 FileManager &FileMgr, 4402 const LangOptions &LangOpts, 4403 const TargetOptions &TargetOpts, 4404 const PreprocessorOptions &PPOpts) { 4405 SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts, FileMgr); 4406 return !readASTFileControlBlock(Filename, FileMgr, validator); 4407 } 4408 4409 ASTReader::ASTReadResult 4410 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) { 4411 // Enter the submodule block. 4412 if (F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) { 4413 Error("malformed submodule block record in AST file"); 4414 return Failure; 4415 } 4416 4417 ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap(); 4418 bool First = true; 4419 Module *CurrentModule = nullptr; 4420 RecordData Record; 4421 while (true) { 4422 llvm::BitstreamEntry Entry = F.Stream.advanceSkippingSubblocks(); 4423 4424 switch (Entry.Kind) { 4425 case llvm::BitstreamEntry::SubBlock: // Handled for us already. 4426 case llvm::BitstreamEntry::Error: 4427 Error("malformed block record in AST file"); 4428 return Failure; 4429 case llvm::BitstreamEntry::EndBlock: 4430 return Success; 4431 case llvm::BitstreamEntry::Record: 4432 // The interesting case. 4433 break; 4434 } 4435 4436 // Read a record. 4437 StringRef Blob; 4438 Record.clear(); 4439 auto Kind = F.Stream.readRecord(Entry.ID, Record, &Blob); 4440 4441 if ((Kind == SUBMODULE_METADATA) != First) { 4442 Error("submodule metadata record should be at beginning of block"); 4443 return Failure; 4444 } 4445 First = false; 4446 4447 // Submodule information is only valid if we have a current module. 4448 // FIXME: Should we error on these cases? 4449 if (!CurrentModule && Kind != SUBMODULE_METADATA && 4450 Kind != SUBMODULE_DEFINITION) 4451 continue; 4452 4453 switch (Kind) { 4454 default: // Default behavior: ignore. 4455 break; 4456 4457 case SUBMODULE_DEFINITION: { 4458 if (Record.size() < 8) { 4459 Error("malformed module definition"); 4460 return Failure; 4461 } 4462 4463 StringRef Name = Blob; 4464 unsigned Idx = 0; 4465 SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]); 4466 SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]); 4467 bool IsFramework = Record[Idx++]; 4468 bool IsExplicit = Record[Idx++]; 4469 bool IsSystem = Record[Idx++]; 4470 bool IsExternC = Record[Idx++]; 4471 bool InferSubmodules = Record[Idx++]; 4472 bool InferExplicitSubmodules = Record[Idx++]; 4473 bool InferExportWildcard = Record[Idx++]; 4474 bool ConfigMacrosExhaustive = Record[Idx++]; 4475 4476 Module *ParentModule = nullptr; 4477 if (Parent) 4478 ParentModule = getSubmodule(Parent); 4479 4480 // Retrieve this (sub)module from the module map, creating it if 4481 // necessary. 4482 CurrentModule = ModMap.findOrCreateModule(Name, ParentModule, IsFramework, 4483 IsExplicit).first; 4484 4485 // FIXME: set the definition loc for CurrentModule, or call 4486 // ModMap.setInferredModuleAllowedBy() 4487 4488 SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS; 4489 if (GlobalIndex >= SubmodulesLoaded.size() || 4490 SubmodulesLoaded[GlobalIndex]) { 4491 Error("too many submodules"); 4492 return Failure; 4493 } 4494 4495 if (!ParentModule) { 4496 if (const FileEntry *CurFile = CurrentModule->getASTFile()) { 4497 if (CurFile != F.File) { 4498 if (!Diags.isDiagnosticInFlight()) { 4499 Diag(diag::err_module_file_conflict) 4500 << CurrentModule->getTopLevelModuleName() 4501 << CurFile->getName() 4502 << F.File->getName(); 4503 } 4504 return Failure; 4505 } 4506 } 4507 4508 CurrentModule->setASTFile(F.File); 4509 } 4510 4511 CurrentModule->IsFromModuleFile = true; 4512 CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem; 4513 CurrentModule->IsExternC = IsExternC; 4514 CurrentModule->InferSubmodules = InferSubmodules; 4515 CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules; 4516 CurrentModule->InferExportWildcard = InferExportWildcard; 4517 CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive; 4518 if (DeserializationListener) 4519 DeserializationListener->ModuleRead(GlobalID, CurrentModule); 4520 4521 SubmodulesLoaded[GlobalIndex] = CurrentModule; 4522 4523 // Clear out data that will be replaced by what is the module file. 4524 CurrentModule->LinkLibraries.clear(); 4525 CurrentModule->ConfigMacros.clear(); 4526 CurrentModule->UnresolvedConflicts.clear(); 4527 CurrentModule->Conflicts.clear(); 4528 break; 4529 } 4530 4531 case SUBMODULE_UMBRELLA_HEADER: { 4532 if (const FileEntry *Umbrella = PP.getFileManager().getFile(Blob)) { 4533 if (!CurrentModule->getUmbrellaHeader()) 4534 ModMap.setUmbrellaHeader(CurrentModule, Umbrella); 4535 else if (CurrentModule->getUmbrellaHeader() != Umbrella) { 4536 if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) 4537 Error("mismatched umbrella headers in submodule"); 4538 return OutOfDate; 4539 } 4540 } 4541 break; 4542 } 4543 4544 case SUBMODULE_HEADER: 4545 case SUBMODULE_EXCLUDED_HEADER: 4546 case SUBMODULE_PRIVATE_HEADER: 4547 // We lazily associate headers with their modules via the HeaderInfo table. 4548 // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead 4549 // of complete filenames or remove it entirely. 4550 break; 4551 4552 case SUBMODULE_TEXTUAL_HEADER: 4553 case SUBMODULE_PRIVATE_TEXTUAL_HEADER: 4554 // FIXME: Textual headers are not marked in the HeaderInfo table. Load 4555 // them here. 4556 break; 4557 4558 case SUBMODULE_TOPHEADER: { 4559 CurrentModule->addTopHeaderFilename(Blob); 4560 break; 4561 } 4562 4563 case SUBMODULE_UMBRELLA_DIR: { 4564 if (const DirectoryEntry *Umbrella 4565 = PP.getFileManager().getDirectory(Blob)) { 4566 if (!CurrentModule->getUmbrellaDir()) 4567 ModMap.setUmbrellaDir(CurrentModule, Umbrella); 4568 else if (CurrentModule->getUmbrellaDir() != Umbrella) { 4569 if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) 4570 Error("mismatched umbrella directories in submodule"); 4571 return OutOfDate; 4572 } 4573 } 4574 break; 4575 } 4576 4577 case SUBMODULE_METADATA: { 4578 F.BaseSubmoduleID = getTotalNumSubmodules(); 4579 F.LocalNumSubmodules = Record[0]; 4580 unsigned LocalBaseSubmoduleID = Record[1]; 4581 if (F.LocalNumSubmodules > 0) { 4582 // Introduce the global -> local mapping for submodules within this 4583 // module. 4584 GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F)); 4585 4586 // Introduce the local -> global mapping for submodules within this 4587 // module. 4588 F.SubmoduleRemap.insertOrReplace( 4589 std::make_pair(LocalBaseSubmoduleID, 4590 F.BaseSubmoduleID - LocalBaseSubmoduleID)); 4591 4592 SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules); 4593 } 4594 break; 4595 } 4596 4597 case SUBMODULE_IMPORTS: { 4598 for (unsigned Idx = 0; Idx != Record.size(); ++Idx) { 4599 UnresolvedModuleRef Unresolved; 4600 Unresolved.File = &F; 4601 Unresolved.Mod = CurrentModule; 4602 Unresolved.ID = Record[Idx]; 4603 Unresolved.Kind = UnresolvedModuleRef::Import; 4604 Unresolved.IsWildcard = false; 4605 UnresolvedModuleRefs.push_back(Unresolved); 4606 } 4607 break; 4608 } 4609 4610 case SUBMODULE_EXPORTS: { 4611 for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) { 4612 UnresolvedModuleRef Unresolved; 4613 Unresolved.File = &F; 4614 Unresolved.Mod = CurrentModule; 4615 Unresolved.ID = Record[Idx]; 4616 Unresolved.Kind = UnresolvedModuleRef::Export; 4617 Unresolved.IsWildcard = Record[Idx + 1]; 4618 UnresolvedModuleRefs.push_back(Unresolved); 4619 } 4620 4621 // Once we've loaded the set of exports, there's no reason to keep 4622 // the parsed, unresolved exports around. 4623 CurrentModule->UnresolvedExports.clear(); 4624 break; 4625 } 4626 case SUBMODULE_REQUIRES: { 4627 CurrentModule->addRequirement(Blob, Record[0], Context.getLangOpts(), 4628 Context.getTargetInfo()); 4629 break; 4630 } 4631 4632 case SUBMODULE_LINK_LIBRARY: 4633 CurrentModule->LinkLibraries.push_back( 4634 Module::LinkLibrary(Blob, Record[0])); 4635 break; 4636 4637 case SUBMODULE_CONFIG_MACRO: 4638 CurrentModule->ConfigMacros.push_back(Blob.str()); 4639 break; 4640 4641 case SUBMODULE_CONFLICT: { 4642 UnresolvedModuleRef Unresolved; 4643 Unresolved.File = &F; 4644 Unresolved.Mod = CurrentModule; 4645 Unresolved.ID = Record[0]; 4646 Unresolved.Kind = UnresolvedModuleRef::Conflict; 4647 Unresolved.IsWildcard = false; 4648 Unresolved.String = Blob; 4649 UnresolvedModuleRefs.push_back(Unresolved); 4650 break; 4651 } 4652 } 4653 } 4654 } 4655 4656 /// \brief Parse the record that corresponds to a LangOptions data 4657 /// structure. 4658 /// 4659 /// This routine parses the language options from the AST file and then gives 4660 /// them to the AST listener if one is set. 4661 /// 4662 /// \returns true if the listener deems the file unacceptable, false otherwise. 4663 bool ASTReader::ParseLanguageOptions(const RecordData &Record, 4664 bool Complain, 4665 ASTReaderListener &Listener, 4666 bool AllowCompatibleDifferences) { 4667 LangOptions LangOpts; 4668 unsigned Idx = 0; 4669 #define LANGOPT(Name, Bits, Default, Description) \ 4670 LangOpts.Name = Record[Idx++]; 4671 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ 4672 LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++])); 4673 #include "clang/Basic/LangOptions.def" 4674 #define SANITIZER(NAME, ID) \ 4675 LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]); 4676 #include "clang/Basic/Sanitizers.def" 4677 4678 ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++]; 4679 VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx); 4680 LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion); 4681 4682 unsigned Length = Record[Idx++]; 4683 LangOpts.CurrentModule.assign(Record.begin() + Idx, 4684 Record.begin() + Idx + Length); 4685 4686 Idx += Length; 4687 4688 // Comment options. 4689 for (unsigned N = Record[Idx++]; N; --N) { 4690 LangOpts.CommentOpts.BlockCommandNames.push_back( 4691 ReadString(Record, Idx)); 4692 } 4693 LangOpts.CommentOpts.ParseAllComments = Record[Idx++]; 4694 4695 return Listener.ReadLanguageOptions(LangOpts, Complain, 4696 AllowCompatibleDifferences); 4697 } 4698 4699 bool ASTReader::ParseTargetOptions(const RecordData &Record, 4700 bool Complain, 4701 ASTReaderListener &Listener) { 4702 unsigned Idx = 0; 4703 TargetOptions TargetOpts; 4704 TargetOpts.Triple = ReadString(Record, Idx); 4705 TargetOpts.CPU = ReadString(Record, Idx); 4706 TargetOpts.ABI = ReadString(Record, Idx); 4707 for (unsigned N = Record[Idx++]; N; --N) { 4708 TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx)); 4709 } 4710 for (unsigned N = Record[Idx++]; N; --N) { 4711 TargetOpts.Features.push_back(ReadString(Record, Idx)); 4712 } 4713 4714 return Listener.ReadTargetOptions(TargetOpts, Complain); 4715 } 4716 4717 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain, 4718 ASTReaderListener &Listener) { 4719 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions); 4720 unsigned Idx = 0; 4721 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++]; 4722 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \ 4723 DiagOpts->set##Name(static_cast<Type>(Record[Idx++])); 4724 #include "clang/Basic/DiagnosticOptions.def" 4725 4726 for (unsigned N = Record[Idx++]; N; --N) 4727 DiagOpts->Warnings.push_back(ReadString(Record, Idx)); 4728 for (unsigned N = Record[Idx++]; N; --N) 4729 DiagOpts->Remarks.push_back(ReadString(Record, Idx)); 4730 4731 return Listener.ReadDiagnosticOptions(DiagOpts, Complain); 4732 } 4733 4734 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain, 4735 ASTReaderListener &Listener) { 4736 FileSystemOptions FSOpts; 4737 unsigned Idx = 0; 4738 FSOpts.WorkingDir = ReadString(Record, Idx); 4739 return Listener.ReadFileSystemOptions(FSOpts, Complain); 4740 } 4741 4742 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record, 4743 bool Complain, 4744 ASTReaderListener &Listener) { 4745 HeaderSearchOptions HSOpts; 4746 unsigned Idx = 0; 4747 HSOpts.Sysroot = ReadString(Record, Idx); 4748 4749 // Include entries. 4750 for (unsigned N = Record[Idx++]; N; --N) { 4751 std::string Path = ReadString(Record, Idx); 4752 frontend::IncludeDirGroup Group 4753 = static_cast<frontend::IncludeDirGroup>(Record[Idx++]); 4754 bool IsFramework = Record[Idx++]; 4755 bool IgnoreSysRoot = Record[Idx++]; 4756 HSOpts.UserEntries.push_back( 4757 HeaderSearchOptions::Entry(Path, Group, IsFramework, IgnoreSysRoot)); 4758 } 4759 4760 // System header prefixes. 4761 for (unsigned N = Record[Idx++]; N; --N) { 4762 std::string Prefix = ReadString(Record, Idx); 4763 bool IsSystemHeader = Record[Idx++]; 4764 HSOpts.SystemHeaderPrefixes.push_back( 4765 HeaderSearchOptions::SystemHeaderPrefix(Prefix, IsSystemHeader)); 4766 } 4767 4768 HSOpts.ResourceDir = ReadString(Record, Idx); 4769 HSOpts.ModuleCachePath = ReadString(Record, Idx); 4770 HSOpts.ModuleUserBuildPath = ReadString(Record, Idx); 4771 HSOpts.DisableModuleHash = Record[Idx++]; 4772 HSOpts.UseBuiltinIncludes = Record[Idx++]; 4773 HSOpts.UseStandardSystemIncludes = Record[Idx++]; 4774 HSOpts.UseStandardCXXIncludes = Record[Idx++]; 4775 HSOpts.UseLibcxx = Record[Idx++]; 4776 4777 return Listener.ReadHeaderSearchOptions(HSOpts, Complain); 4778 } 4779 4780 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record, 4781 bool Complain, 4782 ASTReaderListener &Listener, 4783 std::string &SuggestedPredefines) { 4784 PreprocessorOptions PPOpts; 4785 unsigned Idx = 0; 4786 4787 // Macro definitions/undefs 4788 for (unsigned N = Record[Idx++]; N; --N) { 4789 std::string Macro = ReadString(Record, Idx); 4790 bool IsUndef = Record[Idx++]; 4791 PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef)); 4792 } 4793 4794 // Includes 4795 for (unsigned N = Record[Idx++]; N; --N) { 4796 PPOpts.Includes.push_back(ReadString(Record, Idx)); 4797 } 4798 4799 // Macro Includes 4800 for (unsigned N = Record[Idx++]; N; --N) { 4801 PPOpts.MacroIncludes.push_back(ReadString(Record, Idx)); 4802 } 4803 4804 PPOpts.UsePredefines = Record[Idx++]; 4805 PPOpts.DetailedRecord = Record[Idx++]; 4806 PPOpts.ImplicitPCHInclude = ReadString(Record, Idx); 4807 PPOpts.ImplicitPTHInclude = ReadString(Record, Idx); 4808 PPOpts.ObjCXXARCStandardLibrary = 4809 static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]); 4810 SuggestedPredefines.clear(); 4811 return Listener.ReadPreprocessorOptions(PPOpts, Complain, 4812 SuggestedPredefines); 4813 } 4814 4815 std::pair<ModuleFile *, unsigned> 4816 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) { 4817 GlobalPreprocessedEntityMapType::iterator 4818 I = GlobalPreprocessedEntityMap.find(GlobalIndex); 4819 assert(I != GlobalPreprocessedEntityMap.end() && 4820 "Corrupted global preprocessed entity map"); 4821 ModuleFile *M = I->second; 4822 unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID; 4823 return std::make_pair(M, LocalIndex); 4824 } 4825 4826 std::pair<PreprocessingRecord::iterator, PreprocessingRecord::iterator> 4827 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const { 4828 if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord()) 4829 return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID, 4830 Mod.NumPreprocessedEntities); 4831 4832 return std::make_pair(PreprocessingRecord::iterator(), 4833 PreprocessingRecord::iterator()); 4834 } 4835 4836 std::pair<ASTReader::ModuleDeclIterator, ASTReader::ModuleDeclIterator> 4837 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) { 4838 return std::make_pair(ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls), 4839 ModuleDeclIterator(this, &Mod, 4840 Mod.FileSortedDecls + Mod.NumFileSortedDecls)); 4841 } 4842 4843 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) { 4844 PreprocessedEntityID PPID = Index+1; 4845 std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index); 4846 ModuleFile &M = *PPInfo.first; 4847 unsigned LocalIndex = PPInfo.second; 4848 const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex]; 4849 4850 if (!PP.getPreprocessingRecord()) { 4851 Error("no preprocessing record"); 4852 return nullptr; 4853 } 4854 4855 SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor); 4856 M.PreprocessorDetailCursor.JumpToBit(PPOffs.BitOffset); 4857 4858 llvm::BitstreamEntry Entry = 4859 M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd); 4860 if (Entry.Kind != llvm::BitstreamEntry::Record) 4861 return nullptr; 4862 4863 // Read the record. 4864 SourceRange Range(ReadSourceLocation(M, PPOffs.Begin), 4865 ReadSourceLocation(M, PPOffs.End)); 4866 PreprocessingRecord &PPRec = *PP.getPreprocessingRecord(); 4867 StringRef Blob; 4868 RecordData Record; 4869 PreprocessorDetailRecordTypes RecType = 4870 (PreprocessorDetailRecordTypes)M.PreprocessorDetailCursor.readRecord( 4871 Entry.ID, Record, &Blob); 4872 switch (RecType) { 4873 case PPD_MACRO_EXPANSION: { 4874 bool isBuiltin = Record[0]; 4875 IdentifierInfo *Name = nullptr; 4876 MacroDefinition *Def = nullptr; 4877 if (isBuiltin) 4878 Name = getLocalIdentifier(M, Record[1]); 4879 else { 4880 PreprocessedEntityID 4881 GlobalID = getGlobalPreprocessedEntityID(M, Record[1]); 4882 Def =cast<MacroDefinition>(PPRec.getLoadedPreprocessedEntity(GlobalID-1)); 4883 } 4884 4885 MacroExpansion *ME; 4886 if (isBuiltin) 4887 ME = new (PPRec) MacroExpansion(Name, Range); 4888 else 4889 ME = new (PPRec) MacroExpansion(Def, Range); 4890 4891 return ME; 4892 } 4893 4894 case PPD_MACRO_DEFINITION: { 4895 // Decode the identifier info and then check again; if the macro is 4896 // still defined and associated with the identifier, 4897 IdentifierInfo *II = getLocalIdentifier(M, Record[0]); 4898 MacroDefinition *MD 4899 = new (PPRec) MacroDefinition(II, Range); 4900 4901 if (DeserializationListener) 4902 DeserializationListener->MacroDefinitionRead(PPID, MD); 4903 4904 return MD; 4905 } 4906 4907 case PPD_INCLUSION_DIRECTIVE: { 4908 const char *FullFileNameStart = Blob.data() + Record[0]; 4909 StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]); 4910 const FileEntry *File = nullptr; 4911 if (!FullFileName.empty()) 4912 File = PP.getFileManager().getFile(FullFileName); 4913 4914 // FIXME: Stable encoding 4915 InclusionDirective::InclusionKind Kind 4916 = static_cast<InclusionDirective::InclusionKind>(Record[2]); 4917 InclusionDirective *ID 4918 = new (PPRec) InclusionDirective(PPRec, Kind, 4919 StringRef(Blob.data(), Record[0]), 4920 Record[1], Record[3], 4921 File, 4922 Range); 4923 return ID; 4924 } 4925 } 4926 4927 llvm_unreachable("Invalid PreprocessorDetailRecordTypes"); 4928 } 4929 4930 /// \brief \arg SLocMapI points at a chunk of a module that contains no 4931 /// preprocessed entities or the entities it contains are not the ones we are 4932 /// looking for. Find the next module that contains entities and return the ID 4933 /// of the first entry. 4934 PreprocessedEntityID ASTReader::findNextPreprocessedEntity( 4935 GlobalSLocOffsetMapType::const_iterator SLocMapI) const { 4936 ++SLocMapI; 4937 for (GlobalSLocOffsetMapType::const_iterator 4938 EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) { 4939 ModuleFile &M = *SLocMapI->second; 4940 if (M.NumPreprocessedEntities) 4941 return M.BasePreprocessedEntityID; 4942 } 4943 4944 return getTotalNumPreprocessedEntities(); 4945 } 4946 4947 namespace { 4948 4949 template <unsigned PPEntityOffset::*PPLoc> 4950 struct PPEntityComp { 4951 const ASTReader &Reader; 4952 ModuleFile &M; 4953 4954 PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) { } 4955 4956 bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const { 4957 SourceLocation LHS = getLoc(L); 4958 SourceLocation RHS = getLoc(R); 4959 return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS); 4960 } 4961 4962 bool operator()(const PPEntityOffset &L, SourceLocation RHS) const { 4963 SourceLocation LHS = getLoc(L); 4964 return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS); 4965 } 4966 4967 bool operator()(SourceLocation LHS, const PPEntityOffset &R) const { 4968 SourceLocation RHS = getLoc(R); 4969 return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS); 4970 } 4971 4972 SourceLocation getLoc(const PPEntityOffset &PPE) const { 4973 return Reader.ReadSourceLocation(M, PPE.*PPLoc); 4974 } 4975 }; 4976 4977 } 4978 4979 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc, 4980 bool EndsAfter) const { 4981 if (SourceMgr.isLocalSourceLocation(Loc)) 4982 return getTotalNumPreprocessedEntities(); 4983 4984 GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find( 4985 SourceManager::MaxLoadedOffset - Loc.getOffset() - 1); 4986 assert(SLocMapI != GlobalSLocOffsetMap.end() && 4987 "Corrupted global sloc offset map"); 4988 4989 if (SLocMapI->second->NumPreprocessedEntities == 0) 4990 return findNextPreprocessedEntity(SLocMapI); 4991 4992 ModuleFile &M = *SLocMapI->second; 4993 typedef const PPEntityOffset *pp_iterator; 4994 pp_iterator pp_begin = M.PreprocessedEntityOffsets; 4995 pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities; 4996 4997 size_t Count = M.NumPreprocessedEntities; 4998 size_t Half; 4999 pp_iterator First = pp_begin; 5000 pp_iterator PPI; 5001 5002 if (EndsAfter) { 5003 PPI = std::upper_bound(pp_begin, pp_end, Loc, 5004 PPEntityComp<&PPEntityOffset::Begin>(*this, M)); 5005 } else { 5006 // Do a binary search manually instead of using std::lower_bound because 5007 // The end locations of entities may be unordered (when a macro expansion 5008 // is inside another macro argument), but for this case it is not important 5009 // whether we get the first macro expansion or its containing macro. 5010 while (Count > 0) { 5011 Half = Count / 2; 5012 PPI = First; 5013 std::advance(PPI, Half); 5014 if (SourceMgr.isBeforeInTranslationUnit(ReadSourceLocation(M, PPI->End), 5015 Loc)) { 5016 First = PPI; 5017 ++First; 5018 Count = Count - Half - 1; 5019 } else 5020 Count = Half; 5021 } 5022 } 5023 5024 if (PPI == pp_end) 5025 return findNextPreprocessedEntity(SLocMapI); 5026 5027 return M.BasePreprocessedEntityID + (PPI - pp_begin); 5028 } 5029 5030 /// \brief Returns a pair of [Begin, End) indices of preallocated 5031 /// preprocessed entities that \arg Range encompasses. 5032 std::pair<unsigned, unsigned> 5033 ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) { 5034 if (Range.isInvalid()) 5035 return std::make_pair(0,0); 5036 assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin())); 5037 5038 PreprocessedEntityID BeginID = 5039 findPreprocessedEntity(Range.getBegin(), false); 5040 PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true); 5041 return std::make_pair(BeginID, EndID); 5042 } 5043 5044 /// \brief Optionally returns true or false if the preallocated preprocessed 5045 /// entity with index \arg Index came from file \arg FID. 5046 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index, 5047 FileID FID) { 5048 if (FID.isInvalid()) 5049 return false; 5050 5051 std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index); 5052 ModuleFile &M = *PPInfo.first; 5053 unsigned LocalIndex = PPInfo.second; 5054 const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex]; 5055 5056 SourceLocation Loc = ReadSourceLocation(M, PPOffs.Begin); 5057 if (Loc.isInvalid()) 5058 return false; 5059 5060 if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID)) 5061 return true; 5062 else 5063 return false; 5064 } 5065 5066 namespace { 5067 /// \brief Visitor used to search for information about a header file. 5068 class HeaderFileInfoVisitor { 5069 const FileEntry *FE; 5070 5071 Optional<HeaderFileInfo> HFI; 5072 5073 public: 5074 explicit HeaderFileInfoVisitor(const FileEntry *FE) 5075 : FE(FE) { } 5076 5077 static bool visit(ModuleFile &M, void *UserData) { 5078 HeaderFileInfoVisitor *This 5079 = static_cast<HeaderFileInfoVisitor *>(UserData); 5080 5081 HeaderFileInfoLookupTable *Table 5082 = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable); 5083 if (!Table) 5084 return false; 5085 5086 // Look in the on-disk hash table for an entry for this file name. 5087 HeaderFileInfoLookupTable::iterator Pos = Table->find(This->FE); 5088 if (Pos == Table->end()) 5089 return false; 5090 5091 This->HFI = *Pos; 5092 return true; 5093 } 5094 5095 Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; } 5096 }; 5097 } 5098 5099 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) { 5100 HeaderFileInfoVisitor Visitor(FE); 5101 ModuleMgr.visit(&HeaderFileInfoVisitor::visit, &Visitor); 5102 if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo()) 5103 return *HFI; 5104 5105 return HeaderFileInfo(); 5106 } 5107 5108 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) { 5109 // FIXME: Make it work properly with modules. 5110 SmallVector<DiagnosticsEngine::DiagState *, 32> DiagStates; 5111 for (ModuleIterator I = ModuleMgr.begin(), E = ModuleMgr.end(); I != E; ++I) { 5112 ModuleFile &F = *(*I); 5113 unsigned Idx = 0; 5114 DiagStates.clear(); 5115 assert(!Diag.DiagStates.empty()); 5116 DiagStates.push_back(&Diag.DiagStates.front()); // the command-line one. 5117 while (Idx < F.PragmaDiagMappings.size()) { 5118 SourceLocation Loc = ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]); 5119 unsigned DiagStateID = F.PragmaDiagMappings[Idx++]; 5120 if (DiagStateID != 0) { 5121 Diag.DiagStatePoints.push_back( 5122 DiagnosticsEngine::DiagStatePoint(DiagStates[DiagStateID-1], 5123 FullSourceLoc(Loc, SourceMgr))); 5124 continue; 5125 } 5126 5127 assert(DiagStateID == 0); 5128 // A new DiagState was created here. 5129 Diag.DiagStates.push_back(*Diag.GetCurDiagState()); 5130 DiagnosticsEngine::DiagState *NewState = &Diag.DiagStates.back(); 5131 DiagStates.push_back(NewState); 5132 Diag.DiagStatePoints.push_back( 5133 DiagnosticsEngine::DiagStatePoint(NewState, 5134 FullSourceLoc(Loc, SourceMgr))); 5135 while (1) { 5136 assert(Idx < F.PragmaDiagMappings.size() && 5137 "Invalid data, didn't find '-1' marking end of diag/map pairs"); 5138 if (Idx >= F.PragmaDiagMappings.size()) { 5139 break; // Something is messed up but at least avoid infinite loop in 5140 // release build. 5141 } 5142 unsigned DiagID = F.PragmaDiagMappings[Idx++]; 5143 if (DiagID == (unsigned)-1) { 5144 break; // no more diag/map pairs for this location. 5145 } 5146 diag::Severity Map = (diag::Severity)F.PragmaDiagMappings[Idx++]; 5147 DiagnosticMapping Mapping = Diag.makeUserMapping(Map, Loc); 5148 Diag.GetCurDiagState()->setMapping(DiagID, Mapping); 5149 } 5150 } 5151 } 5152 } 5153 5154 /// \brief Get the correct cursor and offset for loading a type. 5155 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) { 5156 GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index); 5157 assert(I != GlobalTypeMap.end() && "Corrupted global type map"); 5158 ModuleFile *M = I->second; 5159 return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]); 5160 } 5161 5162 /// \brief Read and return the type with the given index.. 5163 /// 5164 /// The index is the type ID, shifted and minus the number of predefs. This 5165 /// routine actually reads the record corresponding to the type at the given 5166 /// location. It is a helper routine for GetType, which deals with reading type 5167 /// IDs. 5168 QualType ASTReader::readTypeRecord(unsigned Index) { 5169 RecordLocation Loc = TypeCursorForIndex(Index); 5170 BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor; 5171 5172 // Keep track of where we are in the stream, then jump back there 5173 // after reading this type. 5174 SavedStreamPosition SavedPosition(DeclsCursor); 5175 5176 ReadingKindTracker ReadingKind(Read_Type, *this); 5177 5178 // Note that we are loading a type record. 5179 Deserializing AType(this); 5180 5181 unsigned Idx = 0; 5182 DeclsCursor.JumpToBit(Loc.Offset); 5183 RecordData Record; 5184 unsigned Code = DeclsCursor.ReadCode(); 5185 switch ((TypeCode)DeclsCursor.readRecord(Code, Record)) { 5186 case TYPE_EXT_QUAL: { 5187 if (Record.size() != 2) { 5188 Error("Incorrect encoding of extended qualifier type"); 5189 return QualType(); 5190 } 5191 QualType Base = readType(*Loc.F, Record, Idx); 5192 Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]); 5193 return Context.getQualifiedType(Base, Quals); 5194 } 5195 5196 case TYPE_COMPLEX: { 5197 if (Record.size() != 1) { 5198 Error("Incorrect encoding of complex type"); 5199 return QualType(); 5200 } 5201 QualType ElemType = readType(*Loc.F, Record, Idx); 5202 return Context.getComplexType(ElemType); 5203 } 5204 5205 case TYPE_POINTER: { 5206 if (Record.size() != 1) { 5207 Error("Incorrect encoding of pointer type"); 5208 return QualType(); 5209 } 5210 QualType PointeeType = readType(*Loc.F, Record, Idx); 5211 return Context.getPointerType(PointeeType); 5212 } 5213 5214 case TYPE_DECAYED: { 5215 if (Record.size() != 1) { 5216 Error("Incorrect encoding of decayed type"); 5217 return QualType(); 5218 } 5219 QualType OriginalType = readType(*Loc.F, Record, Idx); 5220 QualType DT = Context.getAdjustedParameterType(OriginalType); 5221 if (!isa<DecayedType>(DT)) 5222 Error("Decayed type does not decay"); 5223 return DT; 5224 } 5225 5226 case TYPE_ADJUSTED: { 5227 if (Record.size() != 2) { 5228 Error("Incorrect encoding of adjusted type"); 5229 return QualType(); 5230 } 5231 QualType OriginalTy = readType(*Loc.F, Record, Idx); 5232 QualType AdjustedTy = readType(*Loc.F, Record, Idx); 5233 return Context.getAdjustedType(OriginalTy, AdjustedTy); 5234 } 5235 5236 case TYPE_BLOCK_POINTER: { 5237 if (Record.size() != 1) { 5238 Error("Incorrect encoding of block pointer type"); 5239 return QualType(); 5240 } 5241 QualType PointeeType = readType(*Loc.F, Record, Idx); 5242 return Context.getBlockPointerType(PointeeType); 5243 } 5244 5245 case TYPE_LVALUE_REFERENCE: { 5246 if (Record.size() != 2) { 5247 Error("Incorrect encoding of lvalue reference type"); 5248 return QualType(); 5249 } 5250 QualType PointeeType = readType(*Loc.F, Record, Idx); 5251 return Context.getLValueReferenceType(PointeeType, Record[1]); 5252 } 5253 5254 case TYPE_RVALUE_REFERENCE: { 5255 if (Record.size() != 1) { 5256 Error("Incorrect encoding of rvalue reference type"); 5257 return QualType(); 5258 } 5259 QualType PointeeType = readType(*Loc.F, Record, Idx); 5260 return Context.getRValueReferenceType(PointeeType); 5261 } 5262 5263 case TYPE_MEMBER_POINTER: { 5264 if (Record.size() != 2) { 5265 Error("Incorrect encoding of member pointer type"); 5266 return QualType(); 5267 } 5268 QualType PointeeType = readType(*Loc.F, Record, Idx); 5269 QualType ClassType = readType(*Loc.F, Record, Idx); 5270 if (PointeeType.isNull() || ClassType.isNull()) 5271 return QualType(); 5272 5273 return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr()); 5274 } 5275 5276 case TYPE_CONSTANT_ARRAY: { 5277 QualType ElementType = readType(*Loc.F, Record, Idx); 5278 ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1]; 5279 unsigned IndexTypeQuals = Record[2]; 5280 unsigned Idx = 3; 5281 llvm::APInt Size = ReadAPInt(Record, Idx); 5282 return Context.getConstantArrayType(ElementType, Size, 5283 ASM, IndexTypeQuals); 5284 } 5285 5286 case TYPE_INCOMPLETE_ARRAY: { 5287 QualType ElementType = readType(*Loc.F, Record, Idx); 5288 ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1]; 5289 unsigned IndexTypeQuals = Record[2]; 5290 return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals); 5291 } 5292 5293 case TYPE_VARIABLE_ARRAY: { 5294 QualType ElementType = readType(*Loc.F, Record, Idx); 5295 ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1]; 5296 unsigned IndexTypeQuals = Record[2]; 5297 SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]); 5298 SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]); 5299 return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F), 5300 ASM, IndexTypeQuals, 5301 SourceRange(LBLoc, RBLoc)); 5302 } 5303 5304 case TYPE_VECTOR: { 5305 if (Record.size() != 3) { 5306 Error("incorrect encoding of vector type in AST file"); 5307 return QualType(); 5308 } 5309 5310 QualType ElementType = readType(*Loc.F, Record, Idx); 5311 unsigned NumElements = Record[1]; 5312 unsigned VecKind = Record[2]; 5313 return Context.getVectorType(ElementType, NumElements, 5314 (VectorType::VectorKind)VecKind); 5315 } 5316 5317 case TYPE_EXT_VECTOR: { 5318 if (Record.size() != 3) { 5319 Error("incorrect encoding of extended vector type in AST file"); 5320 return QualType(); 5321 } 5322 5323 QualType ElementType = readType(*Loc.F, Record, Idx); 5324 unsigned NumElements = Record[1]; 5325 return Context.getExtVectorType(ElementType, NumElements); 5326 } 5327 5328 case TYPE_FUNCTION_NO_PROTO: { 5329 if (Record.size() != 6) { 5330 Error("incorrect encoding of no-proto function type"); 5331 return QualType(); 5332 } 5333 QualType ResultType = readType(*Loc.F, Record, Idx); 5334 FunctionType::ExtInfo Info(Record[1], Record[2], Record[3], 5335 (CallingConv)Record[4], Record[5]); 5336 return Context.getFunctionNoProtoType(ResultType, Info); 5337 } 5338 5339 case TYPE_FUNCTION_PROTO: { 5340 QualType ResultType = readType(*Loc.F, Record, Idx); 5341 5342 FunctionProtoType::ExtProtoInfo EPI; 5343 EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1], 5344 /*hasregparm*/ Record[2], 5345 /*regparm*/ Record[3], 5346 static_cast<CallingConv>(Record[4]), 5347 /*produces*/ Record[5]); 5348 5349 unsigned Idx = 6; 5350 5351 EPI.Variadic = Record[Idx++]; 5352 EPI.HasTrailingReturn = Record[Idx++]; 5353 EPI.TypeQuals = Record[Idx++]; 5354 EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]); 5355 SmallVector<QualType, 8> ExceptionStorage; 5356 readExceptionSpec(*Loc.F, ExceptionStorage, EPI.ExceptionSpec, Record, Idx); 5357 5358 unsigned NumParams = Record[Idx++]; 5359 SmallVector<QualType, 16> ParamTypes; 5360 for (unsigned I = 0; I != NumParams; ++I) 5361 ParamTypes.push_back(readType(*Loc.F, Record, Idx)); 5362 5363 return Context.getFunctionType(ResultType, ParamTypes, EPI); 5364 } 5365 5366 case TYPE_UNRESOLVED_USING: { 5367 unsigned Idx = 0; 5368 return Context.getTypeDeclType( 5369 ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx)); 5370 } 5371 5372 case TYPE_TYPEDEF: { 5373 if (Record.size() != 2) { 5374 Error("incorrect encoding of typedef type"); 5375 return QualType(); 5376 } 5377 unsigned Idx = 0; 5378 TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx); 5379 QualType Canonical = readType(*Loc.F, Record, Idx); 5380 if (!Canonical.isNull()) 5381 Canonical = Context.getCanonicalType(Canonical); 5382 return Context.getTypedefType(Decl, Canonical); 5383 } 5384 5385 case TYPE_TYPEOF_EXPR: 5386 return Context.getTypeOfExprType(ReadExpr(*Loc.F)); 5387 5388 case TYPE_TYPEOF: { 5389 if (Record.size() != 1) { 5390 Error("incorrect encoding of typeof(type) in AST file"); 5391 return QualType(); 5392 } 5393 QualType UnderlyingType = readType(*Loc.F, Record, Idx); 5394 return Context.getTypeOfType(UnderlyingType); 5395 } 5396 5397 case TYPE_DECLTYPE: { 5398 QualType UnderlyingType = readType(*Loc.F, Record, Idx); 5399 return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType); 5400 } 5401 5402 case TYPE_UNARY_TRANSFORM: { 5403 QualType BaseType = readType(*Loc.F, Record, Idx); 5404 QualType UnderlyingType = readType(*Loc.F, Record, Idx); 5405 UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2]; 5406 return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind); 5407 } 5408 5409 case TYPE_AUTO: { 5410 QualType Deduced = readType(*Loc.F, Record, Idx); 5411 bool IsDecltypeAuto = Record[Idx++]; 5412 bool IsDependent = Deduced.isNull() ? Record[Idx++] : false; 5413 return Context.getAutoType(Deduced, IsDecltypeAuto, IsDependent); 5414 } 5415 5416 case TYPE_RECORD: { 5417 if (Record.size() != 2) { 5418 Error("incorrect encoding of record type"); 5419 return QualType(); 5420 } 5421 unsigned Idx = 0; 5422 bool IsDependent = Record[Idx++]; 5423 RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx); 5424 RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl()); 5425 QualType T = Context.getRecordType(RD); 5426 const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent); 5427 return T; 5428 } 5429 5430 case TYPE_ENUM: { 5431 if (Record.size() != 2) { 5432 Error("incorrect encoding of enum type"); 5433 return QualType(); 5434 } 5435 unsigned Idx = 0; 5436 bool IsDependent = Record[Idx++]; 5437 QualType T 5438 = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx)); 5439 const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent); 5440 return T; 5441 } 5442 5443 case TYPE_ATTRIBUTED: { 5444 if (Record.size() != 3) { 5445 Error("incorrect encoding of attributed type"); 5446 return QualType(); 5447 } 5448 QualType modifiedType = readType(*Loc.F, Record, Idx); 5449 QualType equivalentType = readType(*Loc.F, Record, Idx); 5450 AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]); 5451 return Context.getAttributedType(kind, modifiedType, equivalentType); 5452 } 5453 5454 case TYPE_PAREN: { 5455 if (Record.size() != 1) { 5456 Error("incorrect encoding of paren type"); 5457 return QualType(); 5458 } 5459 QualType InnerType = readType(*Loc.F, Record, Idx); 5460 return Context.getParenType(InnerType); 5461 } 5462 5463 case TYPE_PACK_EXPANSION: { 5464 if (Record.size() != 2) { 5465 Error("incorrect encoding of pack expansion type"); 5466 return QualType(); 5467 } 5468 QualType Pattern = readType(*Loc.F, Record, Idx); 5469 if (Pattern.isNull()) 5470 return QualType(); 5471 Optional<unsigned> NumExpansions; 5472 if (Record[1]) 5473 NumExpansions = Record[1] - 1; 5474 return Context.getPackExpansionType(Pattern, NumExpansions); 5475 } 5476 5477 case TYPE_ELABORATED: { 5478 unsigned Idx = 0; 5479 ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++]; 5480 NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx); 5481 QualType NamedType = readType(*Loc.F, Record, Idx); 5482 return Context.getElaboratedType(Keyword, NNS, NamedType); 5483 } 5484 5485 case TYPE_OBJC_INTERFACE: { 5486 unsigned Idx = 0; 5487 ObjCInterfaceDecl *ItfD 5488 = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx); 5489 return Context.getObjCInterfaceType(ItfD->getCanonicalDecl()); 5490 } 5491 5492 case TYPE_OBJC_OBJECT: { 5493 unsigned Idx = 0; 5494 QualType Base = readType(*Loc.F, Record, Idx); 5495 unsigned NumProtos = Record[Idx++]; 5496 SmallVector<ObjCProtocolDecl*, 4> Protos; 5497 for (unsigned I = 0; I != NumProtos; ++I) 5498 Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx)); 5499 return Context.getObjCObjectType(Base, Protos.data(), NumProtos); 5500 } 5501 5502 case TYPE_OBJC_OBJECT_POINTER: { 5503 unsigned Idx = 0; 5504 QualType Pointee = readType(*Loc.F, Record, Idx); 5505 return Context.getObjCObjectPointerType(Pointee); 5506 } 5507 5508 case TYPE_SUBST_TEMPLATE_TYPE_PARM: { 5509 unsigned Idx = 0; 5510 QualType Parm = readType(*Loc.F, Record, Idx); 5511 QualType Replacement = readType(*Loc.F, Record, Idx); 5512 return Context.getSubstTemplateTypeParmType( 5513 cast<TemplateTypeParmType>(Parm), 5514 Context.getCanonicalType(Replacement)); 5515 } 5516 5517 case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: { 5518 unsigned Idx = 0; 5519 QualType Parm = readType(*Loc.F, Record, Idx); 5520 TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx); 5521 return Context.getSubstTemplateTypeParmPackType( 5522 cast<TemplateTypeParmType>(Parm), 5523 ArgPack); 5524 } 5525 5526 case TYPE_INJECTED_CLASS_NAME: { 5527 CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx); 5528 QualType TST = readType(*Loc.F, Record, Idx); // probably derivable 5529 // FIXME: ASTContext::getInjectedClassNameType is not currently suitable 5530 // for AST reading, too much interdependencies. 5531 const Type *T = nullptr; 5532 for (auto *DI = D; DI; DI = DI->getPreviousDecl()) { 5533 if (const Type *Existing = DI->getTypeForDecl()) { 5534 T = Existing; 5535 break; 5536 } 5537 } 5538 if (!T) { 5539 T = new (Context, TypeAlignment) InjectedClassNameType(D, TST); 5540 for (auto *DI = D; DI; DI = DI->getPreviousDecl()) 5541 DI->setTypeForDecl(T); 5542 } 5543 return QualType(T, 0); 5544 } 5545 5546 case TYPE_TEMPLATE_TYPE_PARM: { 5547 unsigned Idx = 0; 5548 unsigned Depth = Record[Idx++]; 5549 unsigned Index = Record[Idx++]; 5550 bool Pack = Record[Idx++]; 5551 TemplateTypeParmDecl *D 5552 = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx); 5553 return Context.getTemplateTypeParmType(Depth, Index, Pack, D); 5554 } 5555 5556 case TYPE_DEPENDENT_NAME: { 5557 unsigned Idx = 0; 5558 ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++]; 5559 NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx); 5560 const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx); 5561 QualType Canon = readType(*Loc.F, Record, Idx); 5562 if (!Canon.isNull()) 5563 Canon = Context.getCanonicalType(Canon); 5564 return Context.getDependentNameType(Keyword, NNS, Name, Canon); 5565 } 5566 5567 case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: { 5568 unsigned Idx = 0; 5569 ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++]; 5570 NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx); 5571 const IdentifierInfo *Name = this->GetIdentifierInfo(*Loc.F, Record, Idx); 5572 unsigned NumArgs = Record[Idx++]; 5573 SmallVector<TemplateArgument, 8> Args; 5574 Args.reserve(NumArgs); 5575 while (NumArgs--) 5576 Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx)); 5577 return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name, 5578 Args.size(), Args.data()); 5579 } 5580 5581 case TYPE_DEPENDENT_SIZED_ARRAY: { 5582 unsigned Idx = 0; 5583 5584 // ArrayType 5585 QualType ElementType = readType(*Loc.F, Record, Idx); 5586 ArrayType::ArraySizeModifier ASM 5587 = (ArrayType::ArraySizeModifier)Record[Idx++]; 5588 unsigned IndexTypeQuals = Record[Idx++]; 5589 5590 // DependentSizedArrayType 5591 Expr *NumElts = ReadExpr(*Loc.F); 5592 SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx); 5593 5594 return Context.getDependentSizedArrayType(ElementType, NumElts, ASM, 5595 IndexTypeQuals, Brackets); 5596 } 5597 5598 case TYPE_TEMPLATE_SPECIALIZATION: { 5599 unsigned Idx = 0; 5600 bool IsDependent = Record[Idx++]; 5601 TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx); 5602 SmallVector<TemplateArgument, 8> Args; 5603 ReadTemplateArgumentList(Args, *Loc.F, Record, Idx); 5604 QualType Underlying = readType(*Loc.F, Record, Idx); 5605 QualType T; 5606 if (Underlying.isNull()) 5607 T = Context.getCanonicalTemplateSpecializationType(Name, Args.data(), 5608 Args.size()); 5609 else 5610 T = Context.getTemplateSpecializationType(Name, Args.data(), 5611 Args.size(), Underlying); 5612 const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent); 5613 return T; 5614 } 5615 5616 case TYPE_ATOMIC: { 5617 if (Record.size() != 1) { 5618 Error("Incorrect encoding of atomic type"); 5619 return QualType(); 5620 } 5621 QualType ValueType = readType(*Loc.F, Record, Idx); 5622 return Context.getAtomicType(ValueType); 5623 } 5624 } 5625 llvm_unreachable("Invalid TypeCode!"); 5626 } 5627 5628 void ASTReader::readExceptionSpec(ModuleFile &ModuleFile, 5629 SmallVectorImpl<QualType> &Exceptions, 5630 FunctionProtoType::ExceptionSpecInfo &ESI, 5631 const RecordData &Record, unsigned &Idx) { 5632 ExceptionSpecificationType EST = 5633 static_cast<ExceptionSpecificationType>(Record[Idx++]); 5634 ESI.Type = EST; 5635 if (EST == EST_Dynamic) { 5636 for (unsigned I = 0, N = Record[Idx++]; I != N; ++I) 5637 Exceptions.push_back(readType(ModuleFile, Record, Idx)); 5638 ESI.Exceptions = Exceptions; 5639 } else if (EST == EST_ComputedNoexcept) { 5640 ESI.NoexceptExpr = ReadExpr(ModuleFile); 5641 } else if (EST == EST_Uninstantiated) { 5642 ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx); 5643 ESI.SourceTemplate = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx); 5644 } else if (EST == EST_Unevaluated) { 5645 ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx); 5646 } 5647 } 5648 5649 class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> { 5650 ASTReader &Reader; 5651 ModuleFile &F; 5652 const ASTReader::RecordData &Record; 5653 unsigned &Idx; 5654 5655 SourceLocation ReadSourceLocation(const ASTReader::RecordData &R, 5656 unsigned &I) { 5657 return Reader.ReadSourceLocation(F, R, I); 5658 } 5659 5660 template<typename T> 5661 T *ReadDeclAs(const ASTReader::RecordData &Record, unsigned &Idx) { 5662 return Reader.ReadDeclAs<T>(F, Record, Idx); 5663 } 5664 5665 public: 5666 TypeLocReader(ASTReader &Reader, ModuleFile &F, 5667 const ASTReader::RecordData &Record, unsigned &Idx) 5668 : Reader(Reader), F(F), Record(Record), Idx(Idx) 5669 { } 5670 5671 // We want compile-time assurance that we've enumerated all of 5672 // these, so unfortunately we have to declare them first, then 5673 // define them out-of-line. 5674 #define ABSTRACT_TYPELOC(CLASS, PARENT) 5675 #define TYPELOC(CLASS, PARENT) \ 5676 void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc); 5677 #include "clang/AST/TypeLocNodes.def" 5678 5679 void VisitFunctionTypeLoc(FunctionTypeLoc); 5680 void VisitArrayTypeLoc(ArrayTypeLoc); 5681 }; 5682 5683 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) { 5684 // nothing to do 5685 } 5686 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) { 5687 TL.setBuiltinLoc(ReadSourceLocation(Record, Idx)); 5688 if (TL.needsExtraLocalData()) { 5689 TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++])); 5690 TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++])); 5691 TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++])); 5692 TL.setModeAttr(Record[Idx++]); 5693 } 5694 } 5695 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) { 5696 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5697 } 5698 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) { 5699 TL.setStarLoc(ReadSourceLocation(Record, Idx)); 5700 } 5701 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) { 5702 // nothing to do 5703 } 5704 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) { 5705 // nothing to do 5706 } 5707 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) { 5708 TL.setCaretLoc(ReadSourceLocation(Record, Idx)); 5709 } 5710 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) { 5711 TL.setAmpLoc(ReadSourceLocation(Record, Idx)); 5712 } 5713 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) { 5714 TL.setAmpAmpLoc(ReadSourceLocation(Record, Idx)); 5715 } 5716 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) { 5717 TL.setStarLoc(ReadSourceLocation(Record, Idx)); 5718 TL.setClassTInfo(Reader.GetTypeSourceInfo(F, Record, Idx)); 5719 } 5720 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) { 5721 TL.setLBracketLoc(ReadSourceLocation(Record, Idx)); 5722 TL.setRBracketLoc(ReadSourceLocation(Record, Idx)); 5723 if (Record[Idx++]) 5724 TL.setSizeExpr(Reader.ReadExpr(F)); 5725 else 5726 TL.setSizeExpr(nullptr); 5727 } 5728 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) { 5729 VisitArrayTypeLoc(TL); 5730 } 5731 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) { 5732 VisitArrayTypeLoc(TL); 5733 } 5734 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) { 5735 VisitArrayTypeLoc(TL); 5736 } 5737 void TypeLocReader::VisitDependentSizedArrayTypeLoc( 5738 DependentSizedArrayTypeLoc TL) { 5739 VisitArrayTypeLoc(TL); 5740 } 5741 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc( 5742 DependentSizedExtVectorTypeLoc TL) { 5743 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5744 } 5745 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) { 5746 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5747 } 5748 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) { 5749 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5750 } 5751 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) { 5752 TL.setLocalRangeBegin(ReadSourceLocation(Record, Idx)); 5753 TL.setLParenLoc(ReadSourceLocation(Record, Idx)); 5754 TL.setRParenLoc(ReadSourceLocation(Record, Idx)); 5755 TL.setLocalRangeEnd(ReadSourceLocation(Record, Idx)); 5756 for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) { 5757 TL.setParam(i, ReadDeclAs<ParmVarDecl>(Record, Idx)); 5758 } 5759 } 5760 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) { 5761 VisitFunctionTypeLoc(TL); 5762 } 5763 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) { 5764 VisitFunctionTypeLoc(TL); 5765 } 5766 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) { 5767 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5768 } 5769 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) { 5770 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5771 } 5772 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) { 5773 TL.setTypeofLoc(ReadSourceLocation(Record, Idx)); 5774 TL.setLParenLoc(ReadSourceLocation(Record, Idx)); 5775 TL.setRParenLoc(ReadSourceLocation(Record, Idx)); 5776 } 5777 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) { 5778 TL.setTypeofLoc(ReadSourceLocation(Record, Idx)); 5779 TL.setLParenLoc(ReadSourceLocation(Record, Idx)); 5780 TL.setRParenLoc(ReadSourceLocation(Record, Idx)); 5781 TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx)); 5782 } 5783 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) { 5784 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5785 } 5786 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) { 5787 TL.setKWLoc(ReadSourceLocation(Record, Idx)); 5788 TL.setLParenLoc(ReadSourceLocation(Record, Idx)); 5789 TL.setRParenLoc(ReadSourceLocation(Record, Idx)); 5790 TL.setUnderlyingTInfo(Reader.GetTypeSourceInfo(F, Record, Idx)); 5791 } 5792 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) { 5793 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5794 } 5795 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) { 5796 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5797 } 5798 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) { 5799 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5800 } 5801 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) { 5802 TL.setAttrNameLoc(ReadSourceLocation(Record, Idx)); 5803 if (TL.hasAttrOperand()) { 5804 SourceRange range; 5805 range.setBegin(ReadSourceLocation(Record, Idx)); 5806 range.setEnd(ReadSourceLocation(Record, Idx)); 5807 TL.setAttrOperandParensRange(range); 5808 } 5809 if (TL.hasAttrExprOperand()) { 5810 if (Record[Idx++]) 5811 TL.setAttrExprOperand(Reader.ReadExpr(F)); 5812 else 5813 TL.setAttrExprOperand(nullptr); 5814 } else if (TL.hasAttrEnumOperand()) 5815 TL.setAttrEnumOperandLoc(ReadSourceLocation(Record, Idx)); 5816 } 5817 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) { 5818 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5819 } 5820 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc( 5821 SubstTemplateTypeParmTypeLoc TL) { 5822 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5823 } 5824 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc( 5825 SubstTemplateTypeParmPackTypeLoc TL) { 5826 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5827 } 5828 void TypeLocReader::VisitTemplateSpecializationTypeLoc( 5829 TemplateSpecializationTypeLoc TL) { 5830 TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx)); 5831 TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx)); 5832 TL.setLAngleLoc(ReadSourceLocation(Record, Idx)); 5833 TL.setRAngleLoc(ReadSourceLocation(Record, Idx)); 5834 for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i) 5835 TL.setArgLocInfo(i, 5836 Reader.GetTemplateArgumentLocInfo(F, 5837 TL.getTypePtr()->getArg(i).getKind(), 5838 Record, Idx)); 5839 } 5840 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) { 5841 TL.setLParenLoc(ReadSourceLocation(Record, Idx)); 5842 TL.setRParenLoc(ReadSourceLocation(Record, Idx)); 5843 } 5844 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) { 5845 TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx)); 5846 TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx)); 5847 } 5848 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) { 5849 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5850 } 5851 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) { 5852 TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx)); 5853 TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx)); 5854 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5855 } 5856 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc( 5857 DependentTemplateSpecializationTypeLoc TL) { 5858 TL.setElaboratedKeywordLoc(ReadSourceLocation(Record, Idx)); 5859 TL.setQualifierLoc(Reader.ReadNestedNameSpecifierLoc(F, Record, Idx)); 5860 TL.setTemplateKeywordLoc(ReadSourceLocation(Record, Idx)); 5861 TL.setTemplateNameLoc(ReadSourceLocation(Record, Idx)); 5862 TL.setLAngleLoc(ReadSourceLocation(Record, Idx)); 5863 TL.setRAngleLoc(ReadSourceLocation(Record, Idx)); 5864 for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I) 5865 TL.setArgLocInfo(I, 5866 Reader.GetTemplateArgumentLocInfo(F, 5867 TL.getTypePtr()->getArg(I).getKind(), 5868 Record, Idx)); 5869 } 5870 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) { 5871 TL.setEllipsisLoc(ReadSourceLocation(Record, Idx)); 5872 } 5873 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) { 5874 TL.setNameLoc(ReadSourceLocation(Record, Idx)); 5875 } 5876 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) { 5877 TL.setHasBaseTypeAsWritten(Record[Idx++]); 5878 TL.setLAngleLoc(ReadSourceLocation(Record, Idx)); 5879 TL.setRAngleLoc(ReadSourceLocation(Record, Idx)); 5880 for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i) 5881 TL.setProtocolLoc(i, ReadSourceLocation(Record, Idx)); 5882 } 5883 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) { 5884 TL.setStarLoc(ReadSourceLocation(Record, Idx)); 5885 } 5886 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) { 5887 TL.setKWLoc(ReadSourceLocation(Record, Idx)); 5888 TL.setLParenLoc(ReadSourceLocation(Record, Idx)); 5889 TL.setRParenLoc(ReadSourceLocation(Record, Idx)); 5890 } 5891 5892 TypeSourceInfo *ASTReader::GetTypeSourceInfo(ModuleFile &F, 5893 const RecordData &Record, 5894 unsigned &Idx) { 5895 QualType InfoTy = readType(F, Record, Idx); 5896 if (InfoTy.isNull()) 5897 return nullptr; 5898 5899 TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy); 5900 TypeLocReader TLR(*this, F, Record, Idx); 5901 for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc()) 5902 TLR.Visit(TL); 5903 return TInfo; 5904 } 5905 5906 QualType ASTReader::GetType(TypeID ID) { 5907 unsigned FastQuals = ID & Qualifiers::FastMask; 5908 unsigned Index = ID >> Qualifiers::FastWidth; 5909 5910 if (Index < NUM_PREDEF_TYPE_IDS) { 5911 QualType T; 5912 switch ((PredefinedTypeIDs)Index) { 5913 case PREDEF_TYPE_NULL_ID: return QualType(); 5914 case PREDEF_TYPE_VOID_ID: T = Context.VoidTy; break; 5915 case PREDEF_TYPE_BOOL_ID: T = Context.BoolTy; break; 5916 5917 case PREDEF_TYPE_CHAR_U_ID: 5918 case PREDEF_TYPE_CHAR_S_ID: 5919 // FIXME: Check that the signedness of CharTy is correct! 5920 T = Context.CharTy; 5921 break; 5922 5923 case PREDEF_TYPE_UCHAR_ID: T = Context.UnsignedCharTy; break; 5924 case PREDEF_TYPE_USHORT_ID: T = Context.UnsignedShortTy; break; 5925 case PREDEF_TYPE_UINT_ID: T = Context.UnsignedIntTy; break; 5926 case PREDEF_TYPE_ULONG_ID: T = Context.UnsignedLongTy; break; 5927 case PREDEF_TYPE_ULONGLONG_ID: T = Context.UnsignedLongLongTy; break; 5928 case PREDEF_TYPE_UINT128_ID: T = Context.UnsignedInt128Ty; break; 5929 case PREDEF_TYPE_SCHAR_ID: T = Context.SignedCharTy; break; 5930 case PREDEF_TYPE_WCHAR_ID: T = Context.WCharTy; break; 5931 case PREDEF_TYPE_SHORT_ID: T = Context.ShortTy; break; 5932 case PREDEF_TYPE_INT_ID: T = Context.IntTy; break; 5933 case PREDEF_TYPE_LONG_ID: T = Context.LongTy; break; 5934 case PREDEF_TYPE_LONGLONG_ID: T = Context.LongLongTy; break; 5935 case PREDEF_TYPE_INT128_ID: T = Context.Int128Ty; break; 5936 case PREDEF_TYPE_HALF_ID: T = Context.HalfTy; break; 5937 case PREDEF_TYPE_FLOAT_ID: T = Context.FloatTy; break; 5938 case PREDEF_TYPE_DOUBLE_ID: T = Context.DoubleTy; break; 5939 case PREDEF_TYPE_LONGDOUBLE_ID: T = Context.LongDoubleTy; break; 5940 case PREDEF_TYPE_OVERLOAD_ID: T = Context.OverloadTy; break; 5941 case PREDEF_TYPE_BOUND_MEMBER: T = Context.BoundMemberTy; break; 5942 case PREDEF_TYPE_PSEUDO_OBJECT: T = Context.PseudoObjectTy; break; 5943 case PREDEF_TYPE_DEPENDENT_ID: T = Context.DependentTy; break; 5944 case PREDEF_TYPE_UNKNOWN_ANY: T = Context.UnknownAnyTy; break; 5945 case PREDEF_TYPE_NULLPTR_ID: T = Context.NullPtrTy; break; 5946 case PREDEF_TYPE_CHAR16_ID: T = Context.Char16Ty; break; 5947 case PREDEF_TYPE_CHAR32_ID: T = Context.Char32Ty; break; 5948 case PREDEF_TYPE_OBJC_ID: T = Context.ObjCBuiltinIdTy; break; 5949 case PREDEF_TYPE_OBJC_CLASS: T = Context.ObjCBuiltinClassTy; break; 5950 case PREDEF_TYPE_OBJC_SEL: T = Context.ObjCBuiltinSelTy; break; 5951 case PREDEF_TYPE_IMAGE1D_ID: T = Context.OCLImage1dTy; break; 5952 case PREDEF_TYPE_IMAGE1D_ARR_ID: T = Context.OCLImage1dArrayTy; break; 5953 case PREDEF_TYPE_IMAGE1D_BUFF_ID: T = Context.OCLImage1dBufferTy; break; 5954 case PREDEF_TYPE_IMAGE2D_ID: T = Context.OCLImage2dTy; break; 5955 case PREDEF_TYPE_IMAGE2D_ARR_ID: T = Context.OCLImage2dArrayTy; break; 5956 case PREDEF_TYPE_IMAGE3D_ID: T = Context.OCLImage3dTy; break; 5957 case PREDEF_TYPE_SAMPLER_ID: T = Context.OCLSamplerTy; break; 5958 case PREDEF_TYPE_EVENT_ID: T = Context.OCLEventTy; break; 5959 case PREDEF_TYPE_AUTO_DEDUCT: T = Context.getAutoDeductType(); break; 5960 5961 case PREDEF_TYPE_AUTO_RREF_DEDUCT: 5962 T = Context.getAutoRRefDeductType(); 5963 break; 5964 5965 case PREDEF_TYPE_ARC_UNBRIDGED_CAST: 5966 T = Context.ARCUnbridgedCastTy; 5967 break; 5968 5969 case PREDEF_TYPE_VA_LIST_TAG: 5970 T = Context.getVaListTagType(); 5971 break; 5972 5973 case PREDEF_TYPE_BUILTIN_FN: 5974 T = Context.BuiltinFnTy; 5975 break; 5976 } 5977 5978 assert(!T.isNull() && "Unknown predefined type"); 5979 return T.withFastQualifiers(FastQuals); 5980 } 5981 5982 Index -= NUM_PREDEF_TYPE_IDS; 5983 assert(Index < TypesLoaded.size() && "Type index out-of-range"); 5984 if (TypesLoaded[Index].isNull()) { 5985 TypesLoaded[Index] = readTypeRecord(Index); 5986 if (TypesLoaded[Index].isNull()) 5987 return QualType(); 5988 5989 TypesLoaded[Index]->setFromAST(); 5990 if (DeserializationListener) 5991 DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID), 5992 TypesLoaded[Index]); 5993 } 5994 5995 return TypesLoaded[Index].withFastQualifiers(FastQuals); 5996 } 5997 5998 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) { 5999 return GetType(getGlobalTypeID(F, LocalID)); 6000 } 6001 6002 serialization::TypeID 6003 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const { 6004 unsigned FastQuals = LocalID & Qualifiers::FastMask; 6005 unsigned LocalIndex = LocalID >> Qualifiers::FastWidth; 6006 6007 if (LocalIndex < NUM_PREDEF_TYPE_IDS) 6008 return LocalID; 6009 6010 ContinuousRangeMap<uint32_t, int, 2>::iterator I 6011 = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS); 6012 assert(I != F.TypeRemap.end() && "Invalid index into type index remap"); 6013 6014 unsigned GlobalIndex = LocalIndex + I->second; 6015 return (GlobalIndex << Qualifiers::FastWidth) | FastQuals; 6016 } 6017 6018 TemplateArgumentLocInfo 6019 ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F, 6020 TemplateArgument::ArgKind Kind, 6021 const RecordData &Record, 6022 unsigned &Index) { 6023 switch (Kind) { 6024 case TemplateArgument::Expression: 6025 return ReadExpr(F); 6026 case TemplateArgument::Type: 6027 return GetTypeSourceInfo(F, Record, Index); 6028 case TemplateArgument::Template: { 6029 NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, 6030 Index); 6031 SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index); 6032 return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc, 6033 SourceLocation()); 6034 } 6035 case TemplateArgument::TemplateExpansion: { 6036 NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, 6037 Index); 6038 SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index); 6039 SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index); 6040 return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc, 6041 EllipsisLoc); 6042 } 6043 case TemplateArgument::Null: 6044 case TemplateArgument::Integral: 6045 case TemplateArgument::Declaration: 6046 case TemplateArgument::NullPtr: 6047 case TemplateArgument::Pack: 6048 // FIXME: Is this right? 6049 return TemplateArgumentLocInfo(); 6050 } 6051 llvm_unreachable("unexpected template argument loc"); 6052 } 6053 6054 TemplateArgumentLoc 6055 ASTReader::ReadTemplateArgumentLoc(ModuleFile &F, 6056 const RecordData &Record, unsigned &Index) { 6057 TemplateArgument Arg = ReadTemplateArgument(F, Record, Index); 6058 6059 if (Arg.getKind() == TemplateArgument::Expression) { 6060 if (Record[Index++]) // bool InfoHasSameExpr. 6061 return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr())); 6062 } 6063 return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(), 6064 Record, Index)); 6065 } 6066 6067 const ASTTemplateArgumentListInfo* 6068 ASTReader::ReadASTTemplateArgumentListInfo(ModuleFile &F, 6069 const RecordData &Record, 6070 unsigned &Index) { 6071 SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Index); 6072 SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Index); 6073 unsigned NumArgsAsWritten = Record[Index++]; 6074 TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc); 6075 for (unsigned i = 0; i != NumArgsAsWritten; ++i) 6076 TemplArgsInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Index)); 6077 return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo); 6078 } 6079 6080 Decl *ASTReader::GetExternalDecl(uint32_t ID) { 6081 return GetDecl(ID); 6082 } 6083 6084 template<typename TemplateSpecializationDecl> 6085 static void completeRedeclChainForTemplateSpecialization(Decl *D) { 6086 if (auto *TSD = dyn_cast<TemplateSpecializationDecl>(D)) 6087 TSD->getSpecializedTemplate()->LoadLazySpecializations(); 6088 } 6089 6090 void ASTReader::CompleteRedeclChain(const Decl *D) { 6091 if (NumCurrentElementsDeserializing) { 6092 // We arrange to not care about the complete redeclaration chain while we're 6093 // deserializing. Just remember that the AST has marked this one as complete 6094 // but that it's not actually complete yet, so we know we still need to 6095 // complete it later. 6096 PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D)); 6097 return; 6098 } 6099 6100 const DeclContext *DC = D->getDeclContext()->getRedeclContext(); 6101 6102 // If this is a named declaration, complete it by looking it up 6103 // within its context. 6104 // 6105 // FIXME: Merging a function definition should merge 6106 // all mergeable entities within it. 6107 if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) || 6108 isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) { 6109 if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) { 6110 auto *II = Name.getAsIdentifierInfo(); 6111 if (isa<TranslationUnitDecl>(DC) && II) { 6112 // Outside of C++, we don't have a lookup table for the TU, so update 6113 // the identifier instead. In C++, either way should work fine. 6114 if (II->isOutOfDate()) 6115 updateOutOfDateIdentifier(*II); 6116 } else 6117 DC->lookup(Name); 6118 } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) { 6119 // FIXME: It'd be nice to do something a bit more targeted here. 6120 D->getDeclContext()->decls_begin(); 6121 } 6122 } 6123 6124 if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D)) 6125 CTSD->getSpecializedTemplate()->LoadLazySpecializations(); 6126 if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D)) 6127 VTSD->getSpecializedTemplate()->LoadLazySpecializations(); 6128 if (auto *FD = dyn_cast<FunctionDecl>(D)) { 6129 if (auto *Template = FD->getPrimaryTemplate()) 6130 Template->LoadLazySpecializations(); 6131 } 6132 } 6133 6134 uint64_t ASTReader::readCXXBaseSpecifiers(ModuleFile &M, 6135 const RecordData &Record, 6136 unsigned &Idx) { 6137 if (Idx >= Record.size() || Record[Idx] > M.LocalNumCXXBaseSpecifiers) { 6138 Error("malformed AST file: missing C++ base specifier"); 6139 return 0; 6140 } 6141 6142 unsigned LocalID = Record[Idx++]; 6143 return getGlobalBitOffset(M, M.CXXBaseSpecifiersOffsets[LocalID - 1]); 6144 } 6145 6146 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) { 6147 RecordLocation Loc = getLocalBitOffset(Offset); 6148 BitstreamCursor &Cursor = Loc.F->DeclsCursor; 6149 SavedStreamPosition SavedPosition(Cursor); 6150 Cursor.JumpToBit(Loc.Offset); 6151 ReadingKindTracker ReadingKind(Read_Decl, *this); 6152 RecordData Record; 6153 unsigned Code = Cursor.ReadCode(); 6154 unsigned RecCode = Cursor.readRecord(Code, Record); 6155 if (RecCode != DECL_CXX_BASE_SPECIFIERS) { 6156 Error("malformed AST file: missing C++ base specifiers"); 6157 return nullptr; 6158 } 6159 6160 unsigned Idx = 0; 6161 unsigned NumBases = Record[Idx++]; 6162 void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases); 6163 CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases]; 6164 for (unsigned I = 0; I != NumBases; ++I) 6165 Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx); 6166 return Bases; 6167 } 6168 6169 serialization::DeclID 6170 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const { 6171 if (LocalID < NUM_PREDEF_DECL_IDS) 6172 return LocalID; 6173 6174 ContinuousRangeMap<uint32_t, int, 2>::iterator I 6175 = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS); 6176 assert(I != F.DeclRemap.end() && "Invalid index into decl index remap"); 6177 6178 return LocalID + I->second; 6179 } 6180 6181 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID, 6182 ModuleFile &M) const { 6183 GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(ID); 6184 assert(I != GlobalDeclMap.end() && "Corrupted global declaration map"); 6185 return &M == I->second; 6186 } 6187 6188 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) { 6189 if (!D->isFromASTFile()) 6190 return nullptr; 6191 GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID()); 6192 assert(I != GlobalDeclMap.end() && "Corrupted global declaration map"); 6193 return I->second; 6194 } 6195 6196 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) { 6197 if (ID < NUM_PREDEF_DECL_IDS) 6198 return SourceLocation(); 6199 6200 unsigned Index = ID - NUM_PREDEF_DECL_IDS; 6201 6202 if (Index > DeclsLoaded.size()) { 6203 Error("declaration ID out-of-range for AST file"); 6204 return SourceLocation(); 6205 } 6206 6207 if (Decl *D = DeclsLoaded[Index]) 6208 return D->getLocation(); 6209 6210 unsigned RawLocation = 0; 6211 RecordLocation Rec = DeclCursorForID(ID, RawLocation); 6212 return ReadSourceLocation(*Rec.F, RawLocation); 6213 } 6214 6215 Decl *ASTReader::GetExistingDecl(DeclID ID) { 6216 if (ID < NUM_PREDEF_DECL_IDS) { 6217 switch ((PredefinedDeclIDs)ID) { 6218 case PREDEF_DECL_NULL_ID: 6219 return nullptr; 6220 6221 case PREDEF_DECL_TRANSLATION_UNIT_ID: 6222 return Context.getTranslationUnitDecl(); 6223 6224 case PREDEF_DECL_OBJC_ID_ID: 6225 return Context.getObjCIdDecl(); 6226 6227 case PREDEF_DECL_OBJC_SEL_ID: 6228 return Context.getObjCSelDecl(); 6229 6230 case PREDEF_DECL_OBJC_CLASS_ID: 6231 return Context.getObjCClassDecl(); 6232 6233 case PREDEF_DECL_OBJC_PROTOCOL_ID: 6234 return Context.getObjCProtocolDecl(); 6235 6236 case PREDEF_DECL_INT_128_ID: 6237 return Context.getInt128Decl(); 6238 6239 case PREDEF_DECL_UNSIGNED_INT_128_ID: 6240 return Context.getUInt128Decl(); 6241 6242 case PREDEF_DECL_OBJC_INSTANCETYPE_ID: 6243 return Context.getObjCInstanceTypeDecl(); 6244 6245 case PREDEF_DECL_BUILTIN_VA_LIST_ID: 6246 return Context.getBuiltinVaListDecl(); 6247 } 6248 } 6249 6250 unsigned Index = ID - NUM_PREDEF_DECL_IDS; 6251 6252 if (Index >= DeclsLoaded.size()) { 6253 assert(0 && "declaration ID out-of-range for AST file"); 6254 Error("declaration ID out-of-range for AST file"); 6255 return nullptr; 6256 } 6257 6258 return DeclsLoaded[Index]; 6259 } 6260 6261 Decl *ASTReader::GetDecl(DeclID ID) { 6262 if (ID < NUM_PREDEF_DECL_IDS) 6263 return GetExistingDecl(ID); 6264 6265 unsigned Index = ID - NUM_PREDEF_DECL_IDS; 6266 6267 if (Index >= DeclsLoaded.size()) { 6268 assert(0 && "declaration ID out-of-range for AST file"); 6269 Error("declaration ID out-of-range for AST file"); 6270 return nullptr; 6271 } 6272 6273 if (!DeclsLoaded[Index]) { 6274 ReadDeclRecord(ID); 6275 if (DeserializationListener) 6276 DeserializationListener->DeclRead(ID, DeclsLoaded[Index]); 6277 } 6278 6279 return DeclsLoaded[Index]; 6280 } 6281 6282 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M, 6283 DeclID GlobalID) { 6284 if (GlobalID < NUM_PREDEF_DECL_IDS) 6285 return GlobalID; 6286 6287 GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID); 6288 assert(I != GlobalDeclMap.end() && "Corrupted global declaration map"); 6289 ModuleFile *Owner = I->second; 6290 6291 llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos 6292 = M.GlobalToLocalDeclIDs.find(Owner); 6293 if (Pos == M.GlobalToLocalDeclIDs.end()) 6294 return 0; 6295 6296 return GlobalID - Owner->BaseDeclID + Pos->second; 6297 } 6298 6299 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F, 6300 const RecordData &Record, 6301 unsigned &Idx) { 6302 if (Idx >= Record.size()) { 6303 Error("Corrupted AST file"); 6304 return 0; 6305 } 6306 6307 return getGlobalDeclID(F, Record[Idx++]); 6308 } 6309 6310 /// \brief Resolve the offset of a statement into a statement. 6311 /// 6312 /// This operation will read a new statement from the external 6313 /// source each time it is called, and is meant to be used via a 6314 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc). 6315 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) { 6316 // Switch case IDs are per Decl. 6317 ClearSwitchCaseIDs(); 6318 6319 // Offset here is a global offset across the entire chain. 6320 RecordLocation Loc = getLocalBitOffset(Offset); 6321 Loc.F->DeclsCursor.JumpToBit(Loc.Offset); 6322 return ReadStmtFromStream(*Loc.F); 6323 } 6324 6325 namespace { 6326 class FindExternalLexicalDeclsVisitor { 6327 ASTReader &Reader; 6328 const DeclContext *DC; 6329 bool (*isKindWeWant)(Decl::Kind); 6330 6331 SmallVectorImpl<Decl*> &Decls; 6332 bool PredefsVisited[NUM_PREDEF_DECL_IDS]; 6333 6334 public: 6335 FindExternalLexicalDeclsVisitor(ASTReader &Reader, const DeclContext *DC, 6336 bool (*isKindWeWant)(Decl::Kind), 6337 SmallVectorImpl<Decl*> &Decls) 6338 : Reader(Reader), DC(DC), isKindWeWant(isKindWeWant), Decls(Decls) 6339 { 6340 for (unsigned I = 0; I != NUM_PREDEF_DECL_IDS; ++I) 6341 PredefsVisited[I] = false; 6342 } 6343 6344 static bool visit(ModuleFile &M, bool Preorder, void *UserData) { 6345 if (Preorder) 6346 return false; 6347 6348 FindExternalLexicalDeclsVisitor *This 6349 = static_cast<FindExternalLexicalDeclsVisitor *>(UserData); 6350 6351 ModuleFile::DeclContextInfosMap::iterator Info 6352 = M.DeclContextInfos.find(This->DC); 6353 if (Info == M.DeclContextInfos.end() || !Info->second.LexicalDecls) 6354 return false; 6355 6356 // Load all of the declaration IDs 6357 for (const KindDeclIDPair *ID = Info->second.LexicalDecls, 6358 *IDE = ID + Info->second.NumLexicalDecls; 6359 ID != IDE; ++ID) { 6360 if (This->isKindWeWant && !This->isKindWeWant((Decl::Kind)ID->first)) 6361 continue; 6362 6363 // Don't add predefined declarations to the lexical context more 6364 // than once. 6365 if (ID->second < NUM_PREDEF_DECL_IDS) { 6366 if (This->PredefsVisited[ID->second]) 6367 continue; 6368 6369 This->PredefsVisited[ID->second] = true; 6370 } 6371 6372 if (Decl *D = This->Reader.GetLocalDecl(M, ID->second)) { 6373 if (!This->DC->isDeclInLexicalTraversal(D)) 6374 This->Decls.push_back(D); 6375 } 6376 } 6377 6378 return false; 6379 } 6380 }; 6381 } 6382 6383 ExternalLoadResult ASTReader::FindExternalLexicalDecls(const DeclContext *DC, 6384 bool (*isKindWeWant)(Decl::Kind), 6385 SmallVectorImpl<Decl*> &Decls) { 6386 // There might be lexical decls in multiple modules, for the TU at 6387 // least. Walk all of the modules in the order they were loaded. 6388 FindExternalLexicalDeclsVisitor Visitor(*this, DC, isKindWeWant, Decls); 6389 ModuleMgr.visitDepthFirst(&FindExternalLexicalDeclsVisitor::visit, &Visitor); 6390 ++NumLexicalDeclContextsRead; 6391 return ELR_Success; 6392 } 6393 6394 namespace { 6395 6396 class DeclIDComp { 6397 ASTReader &Reader; 6398 ModuleFile &Mod; 6399 6400 public: 6401 DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {} 6402 6403 bool operator()(LocalDeclID L, LocalDeclID R) const { 6404 SourceLocation LHS = getLocation(L); 6405 SourceLocation RHS = getLocation(R); 6406 return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS); 6407 } 6408 6409 bool operator()(SourceLocation LHS, LocalDeclID R) const { 6410 SourceLocation RHS = getLocation(R); 6411 return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS); 6412 } 6413 6414 bool operator()(LocalDeclID L, SourceLocation RHS) const { 6415 SourceLocation LHS = getLocation(L); 6416 return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS); 6417 } 6418 6419 SourceLocation getLocation(LocalDeclID ID) const { 6420 return Reader.getSourceManager().getFileLoc( 6421 Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID))); 6422 } 6423 }; 6424 6425 } 6426 6427 void ASTReader::FindFileRegionDecls(FileID File, 6428 unsigned Offset, unsigned Length, 6429 SmallVectorImpl<Decl *> &Decls) { 6430 SourceManager &SM = getSourceManager(); 6431 6432 llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File); 6433 if (I == FileDeclIDs.end()) 6434 return; 6435 6436 FileDeclsInfo &DInfo = I->second; 6437 if (DInfo.Decls.empty()) 6438 return; 6439 6440 SourceLocation 6441 BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset); 6442 SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length); 6443 6444 DeclIDComp DIDComp(*this, *DInfo.Mod); 6445 ArrayRef<serialization::LocalDeclID>::iterator 6446 BeginIt = std::lower_bound(DInfo.Decls.begin(), DInfo.Decls.end(), 6447 BeginLoc, DIDComp); 6448 if (BeginIt != DInfo.Decls.begin()) 6449 --BeginIt; 6450 6451 // If we are pointing at a top-level decl inside an objc container, we need 6452 // to backtrack until we find it otherwise we will fail to report that the 6453 // region overlaps with an objc container. 6454 while (BeginIt != DInfo.Decls.begin() && 6455 GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt)) 6456 ->isTopLevelDeclInObjCContainer()) 6457 --BeginIt; 6458 6459 ArrayRef<serialization::LocalDeclID>::iterator 6460 EndIt = std::upper_bound(DInfo.Decls.begin(), DInfo.Decls.end(), 6461 EndLoc, DIDComp); 6462 if (EndIt != DInfo.Decls.end()) 6463 ++EndIt; 6464 6465 for (ArrayRef<serialization::LocalDeclID>::iterator 6466 DIt = BeginIt; DIt != EndIt; ++DIt) 6467 Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt))); 6468 } 6469 6470 namespace { 6471 /// \brief ModuleFile visitor used to perform name lookup into a 6472 /// declaration context. 6473 class DeclContextNameLookupVisitor { 6474 ASTReader &Reader; 6475 ArrayRef<const DeclContext *> Contexts; 6476 DeclarationName Name; 6477 SmallVectorImpl<NamedDecl *> &Decls; 6478 6479 public: 6480 DeclContextNameLookupVisitor(ASTReader &Reader, 6481 ArrayRef<const DeclContext *> Contexts, 6482 DeclarationName Name, 6483 SmallVectorImpl<NamedDecl *> &Decls) 6484 : Reader(Reader), Contexts(Contexts), Name(Name), Decls(Decls) { } 6485 6486 static bool visit(ModuleFile &M, void *UserData) { 6487 DeclContextNameLookupVisitor *This 6488 = static_cast<DeclContextNameLookupVisitor *>(UserData); 6489 6490 // Check whether we have any visible declaration information for 6491 // this context in this module. 6492 ModuleFile::DeclContextInfosMap::iterator Info; 6493 bool FoundInfo = false; 6494 for (auto *DC : This->Contexts) { 6495 Info = M.DeclContextInfos.find(DC); 6496 if (Info != M.DeclContextInfos.end() && 6497 Info->second.NameLookupTableData) { 6498 FoundInfo = true; 6499 break; 6500 } 6501 } 6502 6503 if (!FoundInfo) 6504 return false; 6505 6506 // Look for this name within this module. 6507 ASTDeclContextNameLookupTable *LookupTable = 6508 Info->second.NameLookupTableData; 6509 ASTDeclContextNameLookupTable::iterator Pos 6510 = LookupTable->find(This->Name); 6511 if (Pos == LookupTable->end()) 6512 return false; 6513 6514 bool FoundAnything = false; 6515 ASTDeclContextNameLookupTrait::data_type Data = *Pos; 6516 for (; Data.first != Data.second; ++Data.first) { 6517 NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M, *Data.first); 6518 if (!ND) 6519 continue; 6520 6521 if (ND->getDeclName() != This->Name) { 6522 // A name might be null because the decl's redeclarable part is 6523 // currently read before reading its name. The lookup is triggered by 6524 // building that decl (likely indirectly), and so it is later in the 6525 // sense of "already existing" and can be ignored here. 6526 // FIXME: This should not happen; deserializing declarations should 6527 // not perform lookups since that can lead to deserialization cycles. 6528 continue; 6529 } 6530 6531 // Record this declaration. 6532 FoundAnything = true; 6533 This->Decls.push_back(ND); 6534 } 6535 6536 return FoundAnything; 6537 } 6538 }; 6539 } 6540 6541 /// \brief Retrieve the "definitive" module file for the definition of the 6542 /// given declaration context, if there is one. 6543 /// 6544 /// The "definitive" module file is the only place where we need to look to 6545 /// find information about the declarations within the given declaration 6546 /// context. For example, C++ and Objective-C classes, C structs/unions, and 6547 /// Objective-C protocols, categories, and extensions are all defined in a 6548 /// single place in the source code, so they have definitive module files 6549 /// associated with them. C++ namespaces, on the other hand, can have 6550 /// definitions in multiple different module files. 6551 /// 6552 /// Note: this needs to be kept in sync with ASTWriter::AddedVisibleDecl's 6553 /// NDEBUG checking. 6554 static ModuleFile *getDefinitiveModuleFileFor(const DeclContext *DC, 6555 ASTReader &Reader) { 6556 if (const DeclContext *DefDC = getDefinitiveDeclContext(DC)) 6557 return Reader.getOwningModuleFile(cast<Decl>(DefDC)); 6558 6559 return nullptr; 6560 } 6561 6562 bool 6563 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC, 6564 DeclarationName Name) { 6565 assert(DC->hasExternalVisibleStorage() && 6566 "DeclContext has no visible decls in storage"); 6567 if (!Name) 6568 return false; 6569 6570 Deserializing LookupResults(this); 6571 6572 SmallVector<NamedDecl *, 64> Decls; 6573 6574 // Compute the declaration contexts we need to look into. Multiple such 6575 // declaration contexts occur when two declaration contexts from disjoint 6576 // modules get merged, e.g., when two namespaces with the same name are 6577 // independently defined in separate modules. 6578 SmallVector<const DeclContext *, 2> Contexts; 6579 Contexts.push_back(DC); 6580 6581 if (DC->isNamespace()) { 6582 auto Merged = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC))); 6583 if (Merged != MergedDecls.end()) { 6584 for (unsigned I = 0, N = Merged->second.size(); I != N; ++I) 6585 Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I]))); 6586 } 6587 } 6588 6589 auto LookUpInContexts = [&](ArrayRef<const DeclContext*> Contexts) { 6590 DeclContextNameLookupVisitor Visitor(*this, Contexts, Name, Decls); 6591 6592 // If we can definitively determine which module file to look into, 6593 // only look there. Otherwise, look in all module files. 6594 ModuleFile *Definitive; 6595 if (Contexts.size() == 1 && 6596 (Definitive = getDefinitiveModuleFileFor(Contexts[0], *this))) { 6597 DeclContextNameLookupVisitor::visit(*Definitive, &Visitor); 6598 } else { 6599 ModuleMgr.visit(&DeclContextNameLookupVisitor::visit, &Visitor); 6600 } 6601 }; 6602 6603 LookUpInContexts(Contexts); 6604 6605 // If this might be an implicit special member function, then also search 6606 // all merged definitions of the surrounding class. We need to search them 6607 // individually, because finding an entity in one of them doesn't imply that 6608 // we can't find a different entity in another one. 6609 if (isa<CXXRecordDecl>(DC)) { 6610 auto Kind = Name.getNameKind(); 6611 if (Kind == DeclarationName::CXXConstructorName || 6612 Kind == DeclarationName::CXXDestructorName || 6613 (Kind == DeclarationName::CXXOperatorName && 6614 Name.getCXXOverloadedOperator() == OO_Equal)) { 6615 auto Merged = MergedLookups.find(DC); 6616 if (Merged != MergedLookups.end()) { 6617 for (unsigned I = 0; I != Merged->second.size(); ++I) { 6618 LookUpInContexts(Merged->second[I]); 6619 // We might have just added some more merged lookups. If so, our 6620 // iterator is now invalid, so grab a fresh one before continuing. 6621 Merged = MergedLookups.find(DC); 6622 } 6623 } 6624 } 6625 } 6626 6627 ++NumVisibleDeclContextsRead; 6628 SetExternalVisibleDeclsForName(DC, Name, Decls); 6629 return !Decls.empty(); 6630 } 6631 6632 namespace { 6633 /// \brief ModuleFile visitor used to retrieve all visible names in a 6634 /// declaration context. 6635 class DeclContextAllNamesVisitor { 6636 ASTReader &Reader; 6637 SmallVectorImpl<const DeclContext *> &Contexts; 6638 DeclsMap &Decls; 6639 bool VisitAll; 6640 6641 public: 6642 DeclContextAllNamesVisitor(ASTReader &Reader, 6643 SmallVectorImpl<const DeclContext *> &Contexts, 6644 DeclsMap &Decls, bool VisitAll) 6645 : Reader(Reader), Contexts(Contexts), Decls(Decls), VisitAll(VisitAll) { } 6646 6647 static bool visit(ModuleFile &M, void *UserData) { 6648 DeclContextAllNamesVisitor *This 6649 = static_cast<DeclContextAllNamesVisitor *>(UserData); 6650 6651 // Check whether we have any visible declaration information for 6652 // this context in this module. 6653 ModuleFile::DeclContextInfosMap::iterator Info; 6654 bool FoundInfo = false; 6655 for (unsigned I = 0, N = This->Contexts.size(); I != N; ++I) { 6656 Info = M.DeclContextInfos.find(This->Contexts[I]); 6657 if (Info != M.DeclContextInfos.end() && 6658 Info->second.NameLookupTableData) { 6659 FoundInfo = true; 6660 break; 6661 } 6662 } 6663 6664 if (!FoundInfo) 6665 return false; 6666 6667 ASTDeclContextNameLookupTable *LookupTable = 6668 Info->second.NameLookupTableData; 6669 bool FoundAnything = false; 6670 for (ASTDeclContextNameLookupTable::data_iterator 6671 I = LookupTable->data_begin(), E = LookupTable->data_end(); 6672 I != E; 6673 ++I) { 6674 ASTDeclContextNameLookupTrait::data_type Data = *I; 6675 for (; Data.first != Data.second; ++Data.first) { 6676 NamedDecl *ND = This->Reader.GetLocalDeclAs<NamedDecl>(M, 6677 *Data.first); 6678 if (!ND) 6679 continue; 6680 6681 // Record this declaration. 6682 FoundAnything = true; 6683 This->Decls[ND->getDeclName()].push_back(ND); 6684 } 6685 } 6686 6687 return FoundAnything && !This->VisitAll; 6688 } 6689 }; 6690 } 6691 6692 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) { 6693 if (!DC->hasExternalVisibleStorage()) 6694 return; 6695 DeclsMap Decls; 6696 6697 // Compute the declaration contexts we need to look into. Multiple such 6698 // declaration contexts occur when two declaration contexts from disjoint 6699 // modules get merged, e.g., when two namespaces with the same name are 6700 // independently defined in separate modules. 6701 SmallVector<const DeclContext *, 2> Contexts; 6702 Contexts.push_back(DC); 6703 6704 if (DC->isNamespace()) { 6705 MergedDeclsMap::iterator Merged 6706 = MergedDecls.find(const_cast<Decl *>(cast<Decl>(DC))); 6707 if (Merged != MergedDecls.end()) { 6708 for (unsigned I = 0, N = Merged->second.size(); I != N; ++I) 6709 Contexts.push_back(cast<DeclContext>(GetDecl(Merged->second[I]))); 6710 } 6711 } 6712 6713 DeclContextAllNamesVisitor Visitor(*this, Contexts, Decls, 6714 /*VisitAll=*/DC->isFileContext()); 6715 ModuleMgr.visit(&DeclContextAllNamesVisitor::visit, &Visitor); 6716 ++NumVisibleDeclContextsRead; 6717 6718 for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) { 6719 SetExternalVisibleDeclsForName(DC, I->first, I->second); 6720 } 6721 const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false); 6722 } 6723 6724 /// \brief Under non-PCH compilation the consumer receives the objc methods 6725 /// before receiving the implementation, and codegen depends on this. 6726 /// We simulate this by deserializing and passing to consumer the methods of the 6727 /// implementation before passing the deserialized implementation decl. 6728 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD, 6729 ASTConsumer *Consumer) { 6730 assert(ImplD && Consumer); 6731 6732 for (auto *I : ImplD->methods()) 6733 Consumer->HandleInterestingDecl(DeclGroupRef(I)); 6734 6735 Consumer->HandleInterestingDecl(DeclGroupRef(ImplD)); 6736 } 6737 6738 void ASTReader::PassInterestingDeclsToConsumer() { 6739 assert(Consumer); 6740 6741 if (PassingDeclsToConsumer) 6742 return; 6743 6744 // Guard variable to avoid recursively redoing the process of passing 6745 // decls to consumer. 6746 SaveAndRestore<bool> GuardPassingDeclsToConsumer(PassingDeclsToConsumer, 6747 true); 6748 6749 while (!InterestingDecls.empty()) { 6750 Decl *D = InterestingDecls.front(); 6751 InterestingDecls.pop_front(); 6752 6753 PassInterestingDeclToConsumer(D); 6754 } 6755 } 6756 6757 void ASTReader::PassInterestingDeclToConsumer(Decl *D) { 6758 if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D)) 6759 PassObjCImplDeclToConsumer(ImplD, Consumer); 6760 else 6761 Consumer->HandleInterestingDecl(DeclGroupRef(D)); 6762 } 6763 6764 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) { 6765 this->Consumer = Consumer; 6766 6767 if (!Consumer) 6768 return; 6769 6770 for (unsigned I = 0, N = EagerlyDeserializedDecls.size(); I != N; ++I) { 6771 // Force deserialization of this decl, which will cause it to be queued for 6772 // passing to the consumer. 6773 GetDecl(EagerlyDeserializedDecls[I]); 6774 } 6775 EagerlyDeserializedDecls.clear(); 6776 6777 PassInterestingDeclsToConsumer(); 6778 } 6779 6780 void ASTReader::PrintStats() { 6781 std::fprintf(stderr, "*** AST File Statistics:\n"); 6782 6783 unsigned NumTypesLoaded 6784 = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(), 6785 QualType()); 6786 unsigned NumDeclsLoaded 6787 = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(), 6788 (Decl *)nullptr); 6789 unsigned NumIdentifiersLoaded 6790 = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(), 6791 IdentifiersLoaded.end(), 6792 (IdentifierInfo *)nullptr); 6793 unsigned NumMacrosLoaded 6794 = MacrosLoaded.size() - std::count(MacrosLoaded.begin(), 6795 MacrosLoaded.end(), 6796 (MacroInfo *)nullptr); 6797 unsigned NumSelectorsLoaded 6798 = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(), 6799 SelectorsLoaded.end(), 6800 Selector()); 6801 6802 if (unsigned TotalNumSLocEntries = getTotalNumSLocs()) 6803 std::fprintf(stderr, " %u/%u source location entries read (%f%%)\n", 6804 NumSLocEntriesRead, TotalNumSLocEntries, 6805 ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100)); 6806 if (!TypesLoaded.empty()) 6807 std::fprintf(stderr, " %u/%u types read (%f%%)\n", 6808 NumTypesLoaded, (unsigned)TypesLoaded.size(), 6809 ((float)NumTypesLoaded/TypesLoaded.size() * 100)); 6810 if (!DeclsLoaded.empty()) 6811 std::fprintf(stderr, " %u/%u declarations read (%f%%)\n", 6812 NumDeclsLoaded, (unsigned)DeclsLoaded.size(), 6813 ((float)NumDeclsLoaded/DeclsLoaded.size() * 100)); 6814 if (!IdentifiersLoaded.empty()) 6815 std::fprintf(stderr, " %u/%u identifiers read (%f%%)\n", 6816 NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(), 6817 ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100)); 6818 if (!MacrosLoaded.empty()) 6819 std::fprintf(stderr, " %u/%u macros read (%f%%)\n", 6820 NumMacrosLoaded, (unsigned)MacrosLoaded.size(), 6821 ((float)NumMacrosLoaded/MacrosLoaded.size() * 100)); 6822 if (!SelectorsLoaded.empty()) 6823 std::fprintf(stderr, " %u/%u selectors read (%f%%)\n", 6824 NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(), 6825 ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100)); 6826 if (TotalNumStatements) 6827 std::fprintf(stderr, " %u/%u statements read (%f%%)\n", 6828 NumStatementsRead, TotalNumStatements, 6829 ((float)NumStatementsRead/TotalNumStatements * 100)); 6830 if (TotalNumMacros) 6831 std::fprintf(stderr, " %u/%u macros read (%f%%)\n", 6832 NumMacrosRead, TotalNumMacros, 6833 ((float)NumMacrosRead/TotalNumMacros * 100)); 6834 if (TotalLexicalDeclContexts) 6835 std::fprintf(stderr, " %u/%u lexical declcontexts read (%f%%)\n", 6836 NumLexicalDeclContextsRead, TotalLexicalDeclContexts, 6837 ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts 6838 * 100)); 6839 if (TotalVisibleDeclContexts) 6840 std::fprintf(stderr, " %u/%u visible declcontexts read (%f%%)\n", 6841 NumVisibleDeclContextsRead, TotalVisibleDeclContexts, 6842 ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts 6843 * 100)); 6844 if (TotalNumMethodPoolEntries) { 6845 std::fprintf(stderr, " %u/%u method pool entries read (%f%%)\n", 6846 NumMethodPoolEntriesRead, TotalNumMethodPoolEntries, 6847 ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries 6848 * 100)); 6849 } 6850 if (NumMethodPoolLookups) { 6851 std::fprintf(stderr, " %u/%u method pool lookups succeeded (%f%%)\n", 6852 NumMethodPoolHits, NumMethodPoolLookups, 6853 ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0)); 6854 } 6855 if (NumMethodPoolTableLookups) { 6856 std::fprintf(stderr, " %u/%u method pool table lookups succeeded (%f%%)\n", 6857 NumMethodPoolTableHits, NumMethodPoolTableLookups, 6858 ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups 6859 * 100.0)); 6860 } 6861 6862 if (NumIdentifierLookupHits) { 6863 std::fprintf(stderr, 6864 " %u / %u identifier table lookups succeeded (%f%%)\n", 6865 NumIdentifierLookupHits, NumIdentifierLookups, 6866 (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups); 6867 } 6868 6869 if (GlobalIndex) { 6870 std::fprintf(stderr, "\n"); 6871 GlobalIndex->printStats(); 6872 } 6873 6874 std::fprintf(stderr, "\n"); 6875 dump(); 6876 std::fprintf(stderr, "\n"); 6877 } 6878 6879 template<typename Key, typename ModuleFile, unsigned InitialCapacity> 6880 static void 6881 dumpModuleIDMap(StringRef Name, 6882 const ContinuousRangeMap<Key, ModuleFile *, 6883 InitialCapacity> &Map) { 6884 if (Map.begin() == Map.end()) 6885 return; 6886 6887 typedef ContinuousRangeMap<Key, ModuleFile *, InitialCapacity> MapType; 6888 llvm::errs() << Name << ":\n"; 6889 for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end(); 6890 I != IEnd; ++I) { 6891 llvm::errs() << " " << I->first << " -> " << I->second->FileName 6892 << "\n"; 6893 } 6894 } 6895 6896 void ASTReader::dump() { 6897 llvm::errs() << "*** PCH/ModuleFile Remappings:\n"; 6898 dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap); 6899 dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap); 6900 dumpModuleIDMap("Global type map", GlobalTypeMap); 6901 dumpModuleIDMap("Global declaration map", GlobalDeclMap); 6902 dumpModuleIDMap("Global identifier map", GlobalIdentifierMap); 6903 dumpModuleIDMap("Global macro map", GlobalMacroMap); 6904 dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap); 6905 dumpModuleIDMap("Global selector map", GlobalSelectorMap); 6906 dumpModuleIDMap("Global preprocessed entity map", 6907 GlobalPreprocessedEntityMap); 6908 6909 llvm::errs() << "\n*** PCH/Modules Loaded:"; 6910 for (ModuleManager::ModuleConstIterator M = ModuleMgr.begin(), 6911 MEnd = ModuleMgr.end(); 6912 M != MEnd; ++M) 6913 (*M)->dump(); 6914 } 6915 6916 /// Return the amount of memory used by memory buffers, breaking down 6917 /// by heap-backed versus mmap'ed memory. 6918 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const { 6919 for (ModuleConstIterator I = ModuleMgr.begin(), 6920 E = ModuleMgr.end(); I != E; ++I) { 6921 if (llvm::MemoryBuffer *buf = (*I)->Buffer.get()) { 6922 size_t bytes = buf->getBufferSize(); 6923 switch (buf->getBufferKind()) { 6924 case llvm::MemoryBuffer::MemoryBuffer_Malloc: 6925 sizes.malloc_bytes += bytes; 6926 break; 6927 case llvm::MemoryBuffer::MemoryBuffer_MMap: 6928 sizes.mmap_bytes += bytes; 6929 break; 6930 } 6931 } 6932 } 6933 } 6934 6935 void ASTReader::InitializeSema(Sema &S) { 6936 SemaObj = &S; 6937 S.addExternalSource(this); 6938 6939 // Makes sure any declarations that were deserialized "too early" 6940 // still get added to the identifier's declaration chains. 6941 for (uint64_t ID : PreloadedDeclIDs) { 6942 NamedDecl *D = cast<NamedDecl>(GetDecl(ID)); 6943 pushExternalDeclIntoScope(D, D->getDeclName()); 6944 } 6945 PreloadedDeclIDs.clear(); 6946 6947 // FIXME: What happens if these are changed by a module import? 6948 if (!FPPragmaOptions.empty()) { 6949 assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS"); 6950 SemaObj->FPFeatures.fp_contract = FPPragmaOptions[0]; 6951 } 6952 6953 // FIXME: What happens if these are changed by a module import? 6954 if (!OpenCLExtensions.empty()) { 6955 unsigned I = 0; 6956 #define OPENCLEXT(nm) SemaObj->OpenCLFeatures.nm = OpenCLExtensions[I++]; 6957 #include "clang/Basic/OpenCLExtensions.def" 6958 6959 assert(OpenCLExtensions.size() == I && "Wrong number of OPENCL_EXTENSIONS"); 6960 } 6961 6962 UpdateSema(); 6963 } 6964 6965 void ASTReader::UpdateSema() { 6966 assert(SemaObj && "no Sema to update"); 6967 6968 // Load the offsets of the declarations that Sema references. 6969 // They will be lazily deserialized when needed. 6970 if (!SemaDeclRefs.empty()) { 6971 assert(SemaDeclRefs.size() % 2 == 0); 6972 for (unsigned I = 0; I != SemaDeclRefs.size(); I += 2) { 6973 if (!SemaObj->StdNamespace) 6974 SemaObj->StdNamespace = SemaDeclRefs[I]; 6975 if (!SemaObj->StdBadAlloc) 6976 SemaObj->StdBadAlloc = SemaDeclRefs[I+1]; 6977 } 6978 SemaDeclRefs.clear(); 6979 } 6980 6981 // Update the state of 'pragma clang optimize'. Use the same API as if we had 6982 // encountered the pragma in the source. 6983 if(OptimizeOffPragmaLocation.isValid()) 6984 SemaObj->ActOnPragmaOptimize(/* IsOn = */ false, OptimizeOffPragmaLocation); 6985 } 6986 6987 IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) { 6988 // Note that we are loading an identifier. 6989 Deserializing AnIdentifier(this); 6990 StringRef Name(NameStart, NameEnd - NameStart); 6991 6992 // If there is a global index, look there first to determine which modules 6993 // provably do not have any results for this identifier. 6994 GlobalModuleIndex::HitSet Hits; 6995 GlobalModuleIndex::HitSet *HitsPtr = nullptr; 6996 if (!loadGlobalIndex()) { 6997 if (GlobalIndex->lookupIdentifier(Name, Hits)) { 6998 HitsPtr = &Hits; 6999 } 7000 } 7001 IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0, 7002 NumIdentifierLookups, 7003 NumIdentifierLookupHits); 7004 ModuleMgr.visit(IdentifierLookupVisitor::visit, &Visitor, HitsPtr); 7005 IdentifierInfo *II = Visitor.getIdentifierInfo(); 7006 markIdentifierUpToDate(II); 7007 return II; 7008 } 7009 7010 namespace clang { 7011 /// \brief An identifier-lookup iterator that enumerates all of the 7012 /// identifiers stored within a set of AST files. 7013 class ASTIdentifierIterator : public IdentifierIterator { 7014 /// \brief The AST reader whose identifiers are being enumerated. 7015 const ASTReader &Reader; 7016 7017 /// \brief The current index into the chain of AST files stored in 7018 /// the AST reader. 7019 unsigned Index; 7020 7021 /// \brief The current position within the identifier lookup table 7022 /// of the current AST file. 7023 ASTIdentifierLookupTable::key_iterator Current; 7024 7025 /// \brief The end position within the identifier lookup table of 7026 /// the current AST file. 7027 ASTIdentifierLookupTable::key_iterator End; 7028 7029 public: 7030 explicit ASTIdentifierIterator(const ASTReader &Reader); 7031 7032 StringRef Next() override; 7033 }; 7034 } 7035 7036 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader) 7037 : Reader(Reader), Index(Reader.ModuleMgr.size() - 1) { 7038 ASTIdentifierLookupTable *IdTable 7039 = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index].IdentifierLookupTable; 7040 Current = IdTable->key_begin(); 7041 End = IdTable->key_end(); 7042 } 7043 7044 StringRef ASTIdentifierIterator::Next() { 7045 while (Current == End) { 7046 // If we have exhausted all of our AST files, we're done. 7047 if (Index == 0) 7048 return StringRef(); 7049 7050 --Index; 7051 ASTIdentifierLookupTable *IdTable 7052 = (ASTIdentifierLookupTable *)Reader.ModuleMgr[Index]. 7053 IdentifierLookupTable; 7054 Current = IdTable->key_begin(); 7055 End = IdTable->key_end(); 7056 } 7057 7058 // We have any identifiers remaining in the current AST file; return 7059 // the next one. 7060 StringRef Result = *Current; 7061 ++Current; 7062 return Result; 7063 } 7064 7065 IdentifierIterator *ASTReader::getIdentifiers() { 7066 if (!loadGlobalIndex()) 7067 return GlobalIndex->createIdentifierIterator(); 7068 7069 return new ASTIdentifierIterator(*this); 7070 } 7071 7072 namespace clang { namespace serialization { 7073 class ReadMethodPoolVisitor { 7074 ASTReader &Reader; 7075 Selector Sel; 7076 unsigned PriorGeneration; 7077 unsigned InstanceBits; 7078 unsigned FactoryBits; 7079 bool InstanceHasMoreThanOneDecl; 7080 bool FactoryHasMoreThanOneDecl; 7081 SmallVector<ObjCMethodDecl *, 4> InstanceMethods; 7082 SmallVector<ObjCMethodDecl *, 4> FactoryMethods; 7083 7084 public: 7085 ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel, 7086 unsigned PriorGeneration) 7087 : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration), 7088 InstanceBits(0), FactoryBits(0), InstanceHasMoreThanOneDecl(false), 7089 FactoryHasMoreThanOneDecl(false) {} 7090 7091 static bool visit(ModuleFile &M, void *UserData) { 7092 ReadMethodPoolVisitor *This 7093 = static_cast<ReadMethodPoolVisitor *>(UserData); 7094 7095 if (!M.SelectorLookupTable) 7096 return false; 7097 7098 // If we've already searched this module file, skip it now. 7099 if (M.Generation <= This->PriorGeneration) 7100 return true; 7101 7102 ++This->Reader.NumMethodPoolTableLookups; 7103 ASTSelectorLookupTable *PoolTable 7104 = (ASTSelectorLookupTable*)M.SelectorLookupTable; 7105 ASTSelectorLookupTable::iterator Pos = PoolTable->find(This->Sel); 7106 if (Pos == PoolTable->end()) 7107 return false; 7108 7109 ++This->Reader.NumMethodPoolTableHits; 7110 ++This->Reader.NumSelectorsRead; 7111 // FIXME: Not quite happy with the statistics here. We probably should 7112 // disable this tracking when called via LoadSelector. 7113 // Also, should entries without methods count as misses? 7114 ++This->Reader.NumMethodPoolEntriesRead; 7115 ASTSelectorLookupTrait::data_type Data = *Pos; 7116 if (This->Reader.DeserializationListener) 7117 This->Reader.DeserializationListener->SelectorRead(Data.ID, 7118 This->Sel); 7119 7120 This->InstanceMethods.append(Data.Instance.begin(), Data.Instance.end()); 7121 This->FactoryMethods.append(Data.Factory.begin(), Data.Factory.end()); 7122 This->InstanceBits = Data.InstanceBits; 7123 This->FactoryBits = Data.FactoryBits; 7124 This->InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl; 7125 This->FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl; 7126 return true; 7127 } 7128 7129 /// \brief Retrieve the instance methods found by this visitor. 7130 ArrayRef<ObjCMethodDecl *> getInstanceMethods() const { 7131 return InstanceMethods; 7132 } 7133 7134 /// \brief Retrieve the instance methods found by this visitor. 7135 ArrayRef<ObjCMethodDecl *> getFactoryMethods() const { 7136 return FactoryMethods; 7137 } 7138 7139 unsigned getInstanceBits() const { return InstanceBits; } 7140 unsigned getFactoryBits() const { return FactoryBits; } 7141 bool instanceHasMoreThanOneDecl() const { 7142 return InstanceHasMoreThanOneDecl; 7143 } 7144 bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; } 7145 }; 7146 } } // end namespace clang::serialization 7147 7148 /// \brief Add the given set of methods to the method list. 7149 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods, 7150 ObjCMethodList &List) { 7151 for (unsigned I = 0, N = Methods.size(); I != N; ++I) { 7152 S.addMethodToGlobalList(&List, Methods[I]); 7153 } 7154 } 7155 7156 void ASTReader::ReadMethodPool(Selector Sel) { 7157 // Get the selector generation and update it to the current generation. 7158 unsigned &Generation = SelectorGeneration[Sel]; 7159 unsigned PriorGeneration = Generation; 7160 Generation = getGeneration(); 7161 7162 // Search for methods defined with this selector. 7163 ++NumMethodPoolLookups; 7164 ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration); 7165 ModuleMgr.visit(&ReadMethodPoolVisitor::visit, &Visitor); 7166 7167 if (Visitor.getInstanceMethods().empty() && 7168 Visitor.getFactoryMethods().empty()) 7169 return; 7170 7171 ++NumMethodPoolHits; 7172 7173 if (!getSema()) 7174 return; 7175 7176 Sema &S = *getSema(); 7177 Sema::GlobalMethodPool::iterator Pos 7178 = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first; 7179 7180 Pos->second.first.setBits(Visitor.getInstanceBits()); 7181 Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl()); 7182 Pos->second.second.setBits(Visitor.getFactoryBits()); 7183 Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl()); 7184 7185 // Add methods to the global pool *after* setting hasMoreThanOneDecl, since 7186 // when building a module we keep every method individually and may need to 7187 // update hasMoreThanOneDecl as we add the methods. 7188 addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first); 7189 addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second); 7190 } 7191 7192 void ASTReader::ReadKnownNamespaces( 7193 SmallVectorImpl<NamespaceDecl *> &Namespaces) { 7194 Namespaces.clear(); 7195 7196 for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) { 7197 if (NamespaceDecl *Namespace 7198 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I]))) 7199 Namespaces.push_back(Namespace); 7200 } 7201 } 7202 7203 void ASTReader::ReadUndefinedButUsed( 7204 llvm::DenseMap<NamedDecl*, SourceLocation> &Undefined) { 7205 for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) { 7206 NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++])); 7207 SourceLocation Loc = 7208 SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]); 7209 Undefined.insert(std::make_pair(D, Loc)); 7210 } 7211 } 7212 7213 void ASTReader::ReadTentativeDefinitions( 7214 SmallVectorImpl<VarDecl *> &TentativeDefs) { 7215 for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) { 7216 VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I])); 7217 if (Var) 7218 TentativeDefs.push_back(Var); 7219 } 7220 TentativeDefinitions.clear(); 7221 } 7222 7223 void ASTReader::ReadUnusedFileScopedDecls( 7224 SmallVectorImpl<const DeclaratorDecl *> &Decls) { 7225 for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) { 7226 DeclaratorDecl *D 7227 = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I])); 7228 if (D) 7229 Decls.push_back(D); 7230 } 7231 UnusedFileScopedDecls.clear(); 7232 } 7233 7234 void ASTReader::ReadDelegatingConstructors( 7235 SmallVectorImpl<CXXConstructorDecl *> &Decls) { 7236 for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) { 7237 CXXConstructorDecl *D 7238 = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I])); 7239 if (D) 7240 Decls.push_back(D); 7241 } 7242 DelegatingCtorDecls.clear(); 7243 } 7244 7245 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) { 7246 for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) { 7247 TypedefNameDecl *D 7248 = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I])); 7249 if (D) 7250 Decls.push_back(D); 7251 } 7252 ExtVectorDecls.clear(); 7253 } 7254 7255 void ASTReader::ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls) { 7256 for (unsigned I = 0, N = DynamicClasses.size(); I != N; ++I) { 7257 CXXRecordDecl *D 7258 = dyn_cast_or_null<CXXRecordDecl>(GetDecl(DynamicClasses[I])); 7259 if (D) 7260 Decls.push_back(D); 7261 } 7262 DynamicClasses.clear(); 7263 } 7264 7265 void ASTReader::ReadUnusedLocalTypedefNameCandidates( 7266 llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) { 7267 for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N; 7268 ++I) { 7269 TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>( 7270 GetDecl(UnusedLocalTypedefNameCandidates[I])); 7271 if (D) 7272 Decls.insert(D); 7273 } 7274 UnusedLocalTypedefNameCandidates.clear(); 7275 } 7276 7277 void 7278 ASTReader::ReadLocallyScopedExternCDecls(SmallVectorImpl<NamedDecl *> &Decls) { 7279 for (unsigned I = 0, N = LocallyScopedExternCDecls.size(); I != N; ++I) { 7280 NamedDecl *D 7281 = dyn_cast_or_null<NamedDecl>(GetDecl(LocallyScopedExternCDecls[I])); 7282 if (D) 7283 Decls.push_back(D); 7284 } 7285 LocallyScopedExternCDecls.clear(); 7286 } 7287 7288 void ASTReader::ReadReferencedSelectors( 7289 SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) { 7290 if (ReferencedSelectorsData.empty()) 7291 return; 7292 7293 // If there are @selector references added them to its pool. This is for 7294 // implementation of -Wselector. 7295 unsigned int DataSize = ReferencedSelectorsData.size()-1; 7296 unsigned I = 0; 7297 while (I < DataSize) { 7298 Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]); 7299 SourceLocation SelLoc 7300 = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]); 7301 Sels.push_back(std::make_pair(Sel, SelLoc)); 7302 } 7303 ReferencedSelectorsData.clear(); 7304 } 7305 7306 void ASTReader::ReadWeakUndeclaredIdentifiers( 7307 SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) { 7308 if (WeakUndeclaredIdentifiers.empty()) 7309 return; 7310 7311 for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) { 7312 IdentifierInfo *WeakId 7313 = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]); 7314 IdentifierInfo *AliasId 7315 = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]); 7316 SourceLocation Loc 7317 = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]); 7318 bool Used = WeakUndeclaredIdentifiers[I++]; 7319 WeakInfo WI(AliasId, Loc); 7320 WI.setUsed(Used); 7321 WeakIDs.push_back(std::make_pair(WeakId, WI)); 7322 } 7323 WeakUndeclaredIdentifiers.clear(); 7324 } 7325 7326 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) { 7327 for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) { 7328 ExternalVTableUse VT; 7329 VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++])); 7330 VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]); 7331 VT.DefinitionRequired = VTableUses[Idx++]; 7332 VTables.push_back(VT); 7333 } 7334 7335 VTableUses.clear(); 7336 } 7337 7338 void ASTReader::ReadPendingInstantiations( 7339 SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) { 7340 for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) { 7341 ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++])); 7342 SourceLocation Loc 7343 = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]); 7344 7345 Pending.push_back(std::make_pair(D, Loc)); 7346 } 7347 PendingInstantiations.clear(); 7348 } 7349 7350 void ASTReader::ReadLateParsedTemplates( 7351 llvm::DenseMap<const FunctionDecl *, LateParsedTemplate *> &LPTMap) { 7352 for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N; 7353 /* In loop */) { 7354 FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++])); 7355 7356 LateParsedTemplate *LT = new LateParsedTemplate; 7357 LT->D = GetDecl(LateParsedTemplates[Idx++]); 7358 7359 ModuleFile *F = getOwningModuleFile(LT->D); 7360 assert(F && "No module"); 7361 7362 unsigned TokN = LateParsedTemplates[Idx++]; 7363 LT->Toks.reserve(TokN); 7364 for (unsigned T = 0; T < TokN; ++T) 7365 LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx)); 7366 7367 LPTMap[FD] = LT; 7368 } 7369 7370 LateParsedTemplates.clear(); 7371 } 7372 7373 void ASTReader::LoadSelector(Selector Sel) { 7374 // It would be complicated to avoid reading the methods anyway. So don't. 7375 ReadMethodPool(Sel); 7376 } 7377 7378 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) { 7379 assert(ID && "Non-zero identifier ID required"); 7380 assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range"); 7381 IdentifiersLoaded[ID - 1] = II; 7382 if (DeserializationListener) 7383 DeserializationListener->IdentifierRead(ID, II); 7384 } 7385 7386 /// \brief Set the globally-visible declarations associated with the given 7387 /// identifier. 7388 /// 7389 /// If the AST reader is currently in a state where the given declaration IDs 7390 /// cannot safely be resolved, they are queued until it is safe to resolve 7391 /// them. 7392 /// 7393 /// \param II an IdentifierInfo that refers to one or more globally-visible 7394 /// declarations. 7395 /// 7396 /// \param DeclIDs the set of declaration IDs with the name @p II that are 7397 /// visible at global scope. 7398 /// 7399 /// \param Decls if non-null, this vector will be populated with the set of 7400 /// deserialized declarations. These declarations will not be pushed into 7401 /// scope. 7402 void 7403 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II, 7404 const SmallVectorImpl<uint32_t> &DeclIDs, 7405 SmallVectorImpl<Decl *> *Decls) { 7406 if (NumCurrentElementsDeserializing && !Decls) { 7407 PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end()); 7408 return; 7409 } 7410 7411 for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) { 7412 if (!SemaObj) { 7413 // Queue this declaration so that it will be added to the 7414 // translation unit scope and identifier's declaration chain 7415 // once a Sema object is known. 7416 PreloadedDeclIDs.push_back(DeclIDs[I]); 7417 continue; 7418 } 7419 7420 NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I])); 7421 7422 // If we're simply supposed to record the declarations, do so now. 7423 if (Decls) { 7424 Decls->push_back(D); 7425 continue; 7426 } 7427 7428 // Introduce this declaration into the translation-unit scope 7429 // and add it to the declaration chain for this identifier, so 7430 // that (unqualified) name lookup will find it. 7431 pushExternalDeclIntoScope(D, II); 7432 } 7433 } 7434 7435 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) { 7436 if (ID == 0) 7437 return nullptr; 7438 7439 if (IdentifiersLoaded.empty()) { 7440 Error("no identifier table in AST file"); 7441 return nullptr; 7442 } 7443 7444 ID -= 1; 7445 if (!IdentifiersLoaded[ID]) { 7446 GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1); 7447 assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map"); 7448 ModuleFile *M = I->second; 7449 unsigned Index = ID - M->BaseIdentifierID; 7450 const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index]; 7451 7452 // All of the strings in the AST file are preceded by a 16-bit length. 7453 // Extract that 16-bit length to avoid having to execute strlen(). 7454 // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as 7455 // unsigned integers. This is important to avoid integer overflow when 7456 // we cast them to 'unsigned'. 7457 const unsigned char *StrLenPtr = (const unsigned char*) Str - 2; 7458 unsigned StrLen = (((unsigned) StrLenPtr[0]) 7459 | (((unsigned) StrLenPtr[1]) << 8)) - 1; 7460 IdentifiersLoaded[ID] 7461 = &PP.getIdentifierTable().get(StringRef(Str, StrLen)); 7462 if (DeserializationListener) 7463 DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]); 7464 } 7465 7466 return IdentifiersLoaded[ID]; 7467 } 7468 7469 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) { 7470 return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID)); 7471 } 7472 7473 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) { 7474 if (LocalID < NUM_PREDEF_IDENT_IDS) 7475 return LocalID; 7476 7477 ContinuousRangeMap<uint32_t, int, 2>::iterator I 7478 = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS); 7479 assert(I != M.IdentifierRemap.end() 7480 && "Invalid index into identifier index remap"); 7481 7482 return LocalID + I->second; 7483 } 7484 7485 MacroInfo *ASTReader::getMacro(MacroID ID) { 7486 if (ID == 0) 7487 return nullptr; 7488 7489 if (MacrosLoaded.empty()) { 7490 Error("no macro table in AST file"); 7491 return nullptr; 7492 } 7493 7494 ID -= NUM_PREDEF_MACRO_IDS; 7495 if (!MacrosLoaded[ID]) { 7496 GlobalMacroMapType::iterator I 7497 = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS); 7498 assert(I != GlobalMacroMap.end() && "Corrupted global macro map"); 7499 ModuleFile *M = I->second; 7500 unsigned Index = ID - M->BaseMacroID; 7501 MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]); 7502 7503 if (DeserializationListener) 7504 DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS, 7505 MacrosLoaded[ID]); 7506 } 7507 7508 return MacrosLoaded[ID]; 7509 } 7510 7511 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) { 7512 if (LocalID < NUM_PREDEF_MACRO_IDS) 7513 return LocalID; 7514 7515 ContinuousRangeMap<uint32_t, int, 2>::iterator I 7516 = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS); 7517 assert(I != M.MacroRemap.end() && "Invalid index into macro index remap"); 7518 7519 return LocalID + I->second; 7520 } 7521 7522 serialization::SubmoduleID 7523 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) { 7524 if (LocalID < NUM_PREDEF_SUBMODULE_IDS) 7525 return LocalID; 7526 7527 ContinuousRangeMap<uint32_t, int, 2>::iterator I 7528 = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS); 7529 assert(I != M.SubmoduleRemap.end() 7530 && "Invalid index into submodule index remap"); 7531 7532 return LocalID + I->second; 7533 } 7534 7535 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) { 7536 if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) { 7537 assert(GlobalID == 0 && "Unhandled global submodule ID"); 7538 return nullptr; 7539 } 7540 7541 if (GlobalID > SubmodulesLoaded.size()) { 7542 Error("submodule ID out of range in AST file"); 7543 return nullptr; 7544 } 7545 7546 return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS]; 7547 } 7548 7549 Module *ASTReader::getModule(unsigned ID) { 7550 return getSubmodule(ID); 7551 } 7552 7553 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) { 7554 return DecodeSelector(getGlobalSelectorID(M, LocalID)); 7555 } 7556 7557 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) { 7558 if (ID == 0) 7559 return Selector(); 7560 7561 if (ID > SelectorsLoaded.size()) { 7562 Error("selector ID out of range in AST file"); 7563 return Selector(); 7564 } 7565 7566 if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) { 7567 // Load this selector from the selector table. 7568 GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID); 7569 assert(I != GlobalSelectorMap.end() && "Corrupted global selector map"); 7570 ModuleFile &M = *I->second; 7571 ASTSelectorLookupTrait Trait(*this, M); 7572 unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS; 7573 SelectorsLoaded[ID - 1] = 7574 Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0); 7575 if (DeserializationListener) 7576 DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]); 7577 } 7578 7579 return SelectorsLoaded[ID - 1]; 7580 } 7581 7582 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) { 7583 return DecodeSelector(ID); 7584 } 7585 7586 uint32_t ASTReader::GetNumExternalSelectors() { 7587 // ID 0 (the null selector) is considered an external selector. 7588 return getTotalNumSelectors() + 1; 7589 } 7590 7591 serialization::SelectorID 7592 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const { 7593 if (LocalID < NUM_PREDEF_SELECTOR_IDS) 7594 return LocalID; 7595 7596 ContinuousRangeMap<uint32_t, int, 2>::iterator I 7597 = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS); 7598 assert(I != M.SelectorRemap.end() 7599 && "Invalid index into selector index remap"); 7600 7601 return LocalID + I->second; 7602 } 7603 7604 DeclarationName 7605 ASTReader::ReadDeclarationName(ModuleFile &F, 7606 const RecordData &Record, unsigned &Idx) { 7607 DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++]; 7608 switch (Kind) { 7609 case DeclarationName::Identifier: 7610 return DeclarationName(GetIdentifierInfo(F, Record, Idx)); 7611 7612 case DeclarationName::ObjCZeroArgSelector: 7613 case DeclarationName::ObjCOneArgSelector: 7614 case DeclarationName::ObjCMultiArgSelector: 7615 return DeclarationName(ReadSelector(F, Record, Idx)); 7616 7617 case DeclarationName::CXXConstructorName: 7618 return Context.DeclarationNames.getCXXConstructorName( 7619 Context.getCanonicalType(readType(F, Record, Idx))); 7620 7621 case DeclarationName::CXXDestructorName: 7622 return Context.DeclarationNames.getCXXDestructorName( 7623 Context.getCanonicalType(readType(F, Record, Idx))); 7624 7625 case DeclarationName::CXXConversionFunctionName: 7626 return Context.DeclarationNames.getCXXConversionFunctionName( 7627 Context.getCanonicalType(readType(F, Record, Idx))); 7628 7629 case DeclarationName::CXXOperatorName: 7630 return Context.DeclarationNames.getCXXOperatorName( 7631 (OverloadedOperatorKind)Record[Idx++]); 7632 7633 case DeclarationName::CXXLiteralOperatorName: 7634 return Context.DeclarationNames.getCXXLiteralOperatorName( 7635 GetIdentifierInfo(F, Record, Idx)); 7636 7637 case DeclarationName::CXXUsingDirective: 7638 return DeclarationName::getUsingDirectiveName(); 7639 } 7640 7641 llvm_unreachable("Invalid NameKind!"); 7642 } 7643 7644 void ASTReader::ReadDeclarationNameLoc(ModuleFile &F, 7645 DeclarationNameLoc &DNLoc, 7646 DeclarationName Name, 7647 const RecordData &Record, unsigned &Idx) { 7648 switch (Name.getNameKind()) { 7649 case DeclarationName::CXXConstructorName: 7650 case DeclarationName::CXXDestructorName: 7651 case DeclarationName::CXXConversionFunctionName: 7652 DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx); 7653 break; 7654 7655 case DeclarationName::CXXOperatorName: 7656 DNLoc.CXXOperatorName.BeginOpNameLoc 7657 = ReadSourceLocation(F, Record, Idx).getRawEncoding(); 7658 DNLoc.CXXOperatorName.EndOpNameLoc 7659 = ReadSourceLocation(F, Record, Idx).getRawEncoding(); 7660 break; 7661 7662 case DeclarationName::CXXLiteralOperatorName: 7663 DNLoc.CXXLiteralOperatorName.OpNameLoc 7664 = ReadSourceLocation(F, Record, Idx).getRawEncoding(); 7665 break; 7666 7667 case DeclarationName::Identifier: 7668 case DeclarationName::ObjCZeroArgSelector: 7669 case DeclarationName::ObjCOneArgSelector: 7670 case DeclarationName::ObjCMultiArgSelector: 7671 case DeclarationName::CXXUsingDirective: 7672 break; 7673 } 7674 } 7675 7676 void ASTReader::ReadDeclarationNameInfo(ModuleFile &F, 7677 DeclarationNameInfo &NameInfo, 7678 const RecordData &Record, unsigned &Idx) { 7679 NameInfo.setName(ReadDeclarationName(F, Record, Idx)); 7680 NameInfo.setLoc(ReadSourceLocation(F, Record, Idx)); 7681 DeclarationNameLoc DNLoc; 7682 ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx); 7683 NameInfo.setInfo(DNLoc); 7684 } 7685 7686 void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info, 7687 const RecordData &Record, unsigned &Idx) { 7688 Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx); 7689 unsigned NumTPLists = Record[Idx++]; 7690 Info.NumTemplParamLists = NumTPLists; 7691 if (NumTPLists) { 7692 Info.TemplParamLists = new (Context) TemplateParameterList*[NumTPLists]; 7693 for (unsigned i=0; i != NumTPLists; ++i) 7694 Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx); 7695 } 7696 } 7697 7698 TemplateName 7699 ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record, 7700 unsigned &Idx) { 7701 TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++]; 7702 switch (Kind) { 7703 case TemplateName::Template: 7704 return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx)); 7705 7706 case TemplateName::OverloadedTemplate: { 7707 unsigned size = Record[Idx++]; 7708 UnresolvedSet<8> Decls; 7709 while (size--) 7710 Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx)); 7711 7712 return Context.getOverloadedTemplateName(Decls.begin(), Decls.end()); 7713 } 7714 7715 case TemplateName::QualifiedTemplate: { 7716 NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx); 7717 bool hasTemplKeyword = Record[Idx++]; 7718 TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx); 7719 return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template); 7720 } 7721 7722 case TemplateName::DependentTemplate: { 7723 NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx); 7724 if (Record[Idx++]) // isIdentifier 7725 return Context.getDependentTemplateName(NNS, 7726 GetIdentifierInfo(F, Record, 7727 Idx)); 7728 return Context.getDependentTemplateName(NNS, 7729 (OverloadedOperatorKind)Record[Idx++]); 7730 } 7731 7732 case TemplateName::SubstTemplateTemplateParm: { 7733 TemplateTemplateParmDecl *param 7734 = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx); 7735 if (!param) return TemplateName(); 7736 TemplateName replacement = ReadTemplateName(F, Record, Idx); 7737 return Context.getSubstTemplateTemplateParm(param, replacement); 7738 } 7739 7740 case TemplateName::SubstTemplateTemplateParmPack: { 7741 TemplateTemplateParmDecl *Param 7742 = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx); 7743 if (!Param) 7744 return TemplateName(); 7745 7746 TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx); 7747 if (ArgPack.getKind() != TemplateArgument::Pack) 7748 return TemplateName(); 7749 7750 return Context.getSubstTemplateTemplateParmPack(Param, ArgPack); 7751 } 7752 } 7753 7754 llvm_unreachable("Unhandled template name kind!"); 7755 } 7756 7757 TemplateArgument 7758 ASTReader::ReadTemplateArgument(ModuleFile &F, 7759 const RecordData &Record, unsigned &Idx) { 7760 TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++]; 7761 switch (Kind) { 7762 case TemplateArgument::Null: 7763 return TemplateArgument(); 7764 case TemplateArgument::Type: 7765 return TemplateArgument(readType(F, Record, Idx)); 7766 case TemplateArgument::Declaration: { 7767 ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx); 7768 return TemplateArgument(D, readType(F, Record, Idx)); 7769 } 7770 case TemplateArgument::NullPtr: 7771 return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true); 7772 case TemplateArgument::Integral: { 7773 llvm::APSInt Value = ReadAPSInt(Record, Idx); 7774 QualType T = readType(F, Record, Idx); 7775 return TemplateArgument(Context, Value, T); 7776 } 7777 case TemplateArgument::Template: 7778 return TemplateArgument(ReadTemplateName(F, Record, Idx)); 7779 case TemplateArgument::TemplateExpansion: { 7780 TemplateName Name = ReadTemplateName(F, Record, Idx); 7781 Optional<unsigned> NumTemplateExpansions; 7782 if (unsigned NumExpansions = Record[Idx++]) 7783 NumTemplateExpansions = NumExpansions - 1; 7784 return TemplateArgument(Name, NumTemplateExpansions); 7785 } 7786 case TemplateArgument::Expression: 7787 return TemplateArgument(ReadExpr(F)); 7788 case TemplateArgument::Pack: { 7789 unsigned NumArgs = Record[Idx++]; 7790 TemplateArgument *Args = new (Context) TemplateArgument[NumArgs]; 7791 for (unsigned I = 0; I != NumArgs; ++I) 7792 Args[I] = ReadTemplateArgument(F, Record, Idx); 7793 return TemplateArgument(Args, NumArgs); 7794 } 7795 } 7796 7797 llvm_unreachable("Unhandled template argument kind!"); 7798 } 7799 7800 TemplateParameterList * 7801 ASTReader::ReadTemplateParameterList(ModuleFile &F, 7802 const RecordData &Record, unsigned &Idx) { 7803 SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx); 7804 SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx); 7805 SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx); 7806 7807 unsigned NumParams = Record[Idx++]; 7808 SmallVector<NamedDecl *, 16> Params; 7809 Params.reserve(NumParams); 7810 while (NumParams--) 7811 Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx)); 7812 7813 TemplateParameterList* TemplateParams = 7814 TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc, 7815 Params.data(), Params.size(), RAngleLoc); 7816 return TemplateParams; 7817 } 7818 7819 void 7820 ASTReader:: 7821 ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs, 7822 ModuleFile &F, const RecordData &Record, 7823 unsigned &Idx) { 7824 unsigned NumTemplateArgs = Record[Idx++]; 7825 TemplArgs.reserve(NumTemplateArgs); 7826 while (NumTemplateArgs--) 7827 TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx)); 7828 } 7829 7830 /// \brief Read a UnresolvedSet structure. 7831 void ASTReader::ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set, 7832 const RecordData &Record, unsigned &Idx) { 7833 unsigned NumDecls = Record[Idx++]; 7834 Set.reserve(Context, NumDecls); 7835 while (NumDecls--) { 7836 DeclID ID = ReadDeclID(F, Record, Idx); 7837 AccessSpecifier AS = (AccessSpecifier)Record[Idx++]; 7838 Set.addLazyDecl(Context, ID, AS); 7839 } 7840 } 7841 7842 CXXBaseSpecifier 7843 ASTReader::ReadCXXBaseSpecifier(ModuleFile &F, 7844 const RecordData &Record, unsigned &Idx) { 7845 bool isVirtual = static_cast<bool>(Record[Idx++]); 7846 bool isBaseOfClass = static_cast<bool>(Record[Idx++]); 7847 AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]); 7848 bool inheritConstructors = static_cast<bool>(Record[Idx++]); 7849 TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx); 7850 SourceRange Range = ReadSourceRange(F, Record, Idx); 7851 SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx); 7852 CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo, 7853 EllipsisLoc); 7854 Result.setInheritConstructors(inheritConstructors); 7855 return Result; 7856 } 7857 7858 std::pair<CXXCtorInitializer **, unsigned> 7859 ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record, 7860 unsigned &Idx) { 7861 CXXCtorInitializer **CtorInitializers = nullptr; 7862 unsigned NumInitializers = Record[Idx++]; 7863 if (NumInitializers) { 7864 CtorInitializers 7865 = new (Context) CXXCtorInitializer*[NumInitializers]; 7866 for (unsigned i=0; i != NumInitializers; ++i) { 7867 TypeSourceInfo *TInfo = nullptr; 7868 bool IsBaseVirtual = false; 7869 FieldDecl *Member = nullptr; 7870 IndirectFieldDecl *IndirectMember = nullptr; 7871 7872 CtorInitializerType Type = (CtorInitializerType)Record[Idx++]; 7873 switch (Type) { 7874 case CTOR_INITIALIZER_BASE: 7875 TInfo = GetTypeSourceInfo(F, Record, Idx); 7876 IsBaseVirtual = Record[Idx++]; 7877 break; 7878 7879 case CTOR_INITIALIZER_DELEGATING: 7880 TInfo = GetTypeSourceInfo(F, Record, Idx); 7881 break; 7882 7883 case CTOR_INITIALIZER_MEMBER: 7884 Member = ReadDeclAs<FieldDecl>(F, Record, Idx); 7885 break; 7886 7887 case CTOR_INITIALIZER_INDIRECT_MEMBER: 7888 IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx); 7889 break; 7890 } 7891 7892 SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx); 7893 Expr *Init = ReadExpr(F); 7894 SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx); 7895 SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx); 7896 bool IsWritten = Record[Idx++]; 7897 unsigned SourceOrderOrNumArrayIndices; 7898 SmallVector<VarDecl *, 8> Indices; 7899 if (IsWritten) { 7900 SourceOrderOrNumArrayIndices = Record[Idx++]; 7901 } else { 7902 SourceOrderOrNumArrayIndices = Record[Idx++]; 7903 Indices.reserve(SourceOrderOrNumArrayIndices); 7904 for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i) 7905 Indices.push_back(ReadDeclAs<VarDecl>(F, Record, Idx)); 7906 } 7907 7908 CXXCtorInitializer *BOMInit; 7909 if (Type == CTOR_INITIALIZER_BASE) { 7910 BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, IsBaseVirtual, 7911 LParenLoc, Init, RParenLoc, 7912 MemberOrEllipsisLoc); 7913 } else if (Type == CTOR_INITIALIZER_DELEGATING) { 7914 BOMInit = new (Context) CXXCtorInitializer(Context, TInfo, LParenLoc, 7915 Init, RParenLoc); 7916 } else if (IsWritten) { 7917 if (Member) 7918 BOMInit = new (Context) CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, 7919 LParenLoc, Init, RParenLoc); 7920 else 7921 BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember, 7922 MemberOrEllipsisLoc, LParenLoc, 7923 Init, RParenLoc); 7924 } else { 7925 if (IndirectMember) { 7926 assert(Indices.empty() && "Indirect field improperly initialized"); 7927 BOMInit = new (Context) CXXCtorInitializer(Context, IndirectMember, 7928 MemberOrEllipsisLoc, LParenLoc, 7929 Init, RParenLoc); 7930 } else { 7931 BOMInit = CXXCtorInitializer::Create(Context, Member, MemberOrEllipsisLoc, 7932 LParenLoc, Init, RParenLoc, 7933 Indices.data(), Indices.size()); 7934 } 7935 } 7936 7937 if (IsWritten) 7938 BOMInit->setSourceOrder(SourceOrderOrNumArrayIndices); 7939 CtorInitializers[i] = BOMInit; 7940 } 7941 } 7942 7943 return std::make_pair(CtorInitializers, NumInitializers); 7944 } 7945 7946 NestedNameSpecifier * 7947 ASTReader::ReadNestedNameSpecifier(ModuleFile &F, 7948 const RecordData &Record, unsigned &Idx) { 7949 unsigned N = Record[Idx++]; 7950 NestedNameSpecifier *NNS = nullptr, *Prev = nullptr; 7951 for (unsigned I = 0; I != N; ++I) { 7952 NestedNameSpecifier::SpecifierKind Kind 7953 = (NestedNameSpecifier::SpecifierKind)Record[Idx++]; 7954 switch (Kind) { 7955 case NestedNameSpecifier::Identifier: { 7956 IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx); 7957 NNS = NestedNameSpecifier::Create(Context, Prev, II); 7958 break; 7959 } 7960 7961 case NestedNameSpecifier::Namespace: { 7962 NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx); 7963 NNS = NestedNameSpecifier::Create(Context, Prev, NS); 7964 break; 7965 } 7966 7967 case NestedNameSpecifier::NamespaceAlias: { 7968 NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx); 7969 NNS = NestedNameSpecifier::Create(Context, Prev, Alias); 7970 break; 7971 } 7972 7973 case NestedNameSpecifier::TypeSpec: 7974 case NestedNameSpecifier::TypeSpecWithTemplate: { 7975 const Type *T = readType(F, Record, Idx).getTypePtrOrNull(); 7976 if (!T) 7977 return nullptr; 7978 7979 bool Template = Record[Idx++]; 7980 NNS = NestedNameSpecifier::Create(Context, Prev, Template, T); 7981 break; 7982 } 7983 7984 case NestedNameSpecifier::Global: { 7985 NNS = NestedNameSpecifier::GlobalSpecifier(Context); 7986 // No associated value, and there can't be a prefix. 7987 break; 7988 } 7989 7990 case NestedNameSpecifier::Super: { 7991 CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx); 7992 NNS = NestedNameSpecifier::SuperSpecifier(Context, RD); 7993 break; 7994 } 7995 } 7996 Prev = NNS; 7997 } 7998 return NNS; 7999 } 8000 8001 NestedNameSpecifierLoc 8002 ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record, 8003 unsigned &Idx) { 8004 unsigned N = Record[Idx++]; 8005 NestedNameSpecifierLocBuilder Builder; 8006 for (unsigned I = 0; I != N; ++I) { 8007 NestedNameSpecifier::SpecifierKind Kind 8008 = (NestedNameSpecifier::SpecifierKind)Record[Idx++]; 8009 switch (Kind) { 8010 case NestedNameSpecifier::Identifier: { 8011 IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx); 8012 SourceRange Range = ReadSourceRange(F, Record, Idx); 8013 Builder.Extend(Context, II, Range.getBegin(), Range.getEnd()); 8014 break; 8015 } 8016 8017 case NestedNameSpecifier::Namespace: { 8018 NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx); 8019 SourceRange Range = ReadSourceRange(F, Record, Idx); 8020 Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd()); 8021 break; 8022 } 8023 8024 case NestedNameSpecifier::NamespaceAlias: { 8025 NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx); 8026 SourceRange Range = ReadSourceRange(F, Record, Idx); 8027 Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd()); 8028 break; 8029 } 8030 8031 case NestedNameSpecifier::TypeSpec: 8032 case NestedNameSpecifier::TypeSpecWithTemplate: { 8033 bool Template = Record[Idx++]; 8034 TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx); 8035 if (!T) 8036 return NestedNameSpecifierLoc(); 8037 SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx); 8038 8039 // FIXME: 'template' keyword location not saved anywhere, so we fake it. 8040 Builder.Extend(Context, 8041 Template? T->getTypeLoc().getBeginLoc() : SourceLocation(), 8042 T->getTypeLoc(), ColonColonLoc); 8043 break; 8044 } 8045 8046 case NestedNameSpecifier::Global: { 8047 SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx); 8048 Builder.MakeGlobal(Context, ColonColonLoc); 8049 break; 8050 } 8051 8052 case NestedNameSpecifier::Super: { 8053 CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx); 8054 SourceRange Range = ReadSourceRange(F, Record, Idx); 8055 Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd()); 8056 break; 8057 } 8058 } 8059 } 8060 8061 return Builder.getWithLocInContext(Context); 8062 } 8063 8064 SourceRange 8065 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record, 8066 unsigned &Idx) { 8067 SourceLocation beg = ReadSourceLocation(F, Record, Idx); 8068 SourceLocation end = ReadSourceLocation(F, Record, Idx); 8069 return SourceRange(beg, end); 8070 } 8071 8072 /// \brief Read an integral value 8073 llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) { 8074 unsigned BitWidth = Record[Idx++]; 8075 unsigned NumWords = llvm::APInt::getNumWords(BitWidth); 8076 llvm::APInt Result(BitWidth, NumWords, &Record[Idx]); 8077 Idx += NumWords; 8078 return Result; 8079 } 8080 8081 /// \brief Read a signed integral value 8082 llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) { 8083 bool isUnsigned = Record[Idx++]; 8084 return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned); 8085 } 8086 8087 /// \brief Read a floating-point value 8088 llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record, 8089 const llvm::fltSemantics &Sem, 8090 unsigned &Idx) { 8091 return llvm::APFloat(Sem, ReadAPInt(Record, Idx)); 8092 } 8093 8094 // \brief Read a string 8095 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) { 8096 unsigned Len = Record[Idx++]; 8097 std::string Result(Record.data() + Idx, Record.data() + Idx + Len); 8098 Idx += Len; 8099 return Result; 8100 } 8101 8102 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record, 8103 unsigned &Idx) { 8104 std::string Filename = ReadString(Record, Idx); 8105 ResolveImportedPath(F, Filename); 8106 return Filename; 8107 } 8108 8109 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record, 8110 unsigned &Idx) { 8111 unsigned Major = Record[Idx++]; 8112 unsigned Minor = Record[Idx++]; 8113 unsigned Subminor = Record[Idx++]; 8114 if (Minor == 0) 8115 return VersionTuple(Major); 8116 if (Subminor == 0) 8117 return VersionTuple(Major, Minor - 1); 8118 return VersionTuple(Major, Minor - 1, Subminor - 1); 8119 } 8120 8121 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F, 8122 const RecordData &Record, 8123 unsigned &Idx) { 8124 CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx); 8125 return CXXTemporary::Create(Context, Decl); 8126 } 8127 8128 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) { 8129 return Diag(CurrentImportLoc, DiagID); 8130 } 8131 8132 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) { 8133 return Diags.Report(Loc, DiagID); 8134 } 8135 8136 /// \brief Retrieve the identifier table associated with the 8137 /// preprocessor. 8138 IdentifierTable &ASTReader::getIdentifierTable() { 8139 return PP.getIdentifierTable(); 8140 } 8141 8142 /// \brief Record that the given ID maps to the given switch-case 8143 /// statement. 8144 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) { 8145 assert((*CurrSwitchCaseStmts)[ID] == nullptr && 8146 "Already have a SwitchCase with this ID"); 8147 (*CurrSwitchCaseStmts)[ID] = SC; 8148 } 8149 8150 /// \brief Retrieve the switch-case statement with the given ID. 8151 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) { 8152 assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID"); 8153 return (*CurrSwitchCaseStmts)[ID]; 8154 } 8155 8156 void ASTReader::ClearSwitchCaseIDs() { 8157 CurrSwitchCaseStmts->clear(); 8158 } 8159 8160 void ASTReader::ReadComments() { 8161 std::vector<RawComment *> Comments; 8162 for (SmallVectorImpl<std::pair<BitstreamCursor, 8163 serialization::ModuleFile *> >::iterator 8164 I = CommentsCursors.begin(), 8165 E = CommentsCursors.end(); 8166 I != E; ++I) { 8167 Comments.clear(); 8168 BitstreamCursor &Cursor = I->first; 8169 serialization::ModuleFile &F = *I->second; 8170 SavedStreamPosition SavedPosition(Cursor); 8171 8172 RecordData Record; 8173 while (true) { 8174 llvm::BitstreamEntry Entry = 8175 Cursor.advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd); 8176 8177 switch (Entry.Kind) { 8178 case llvm::BitstreamEntry::SubBlock: // Handled for us already. 8179 case llvm::BitstreamEntry::Error: 8180 Error("malformed block record in AST file"); 8181 return; 8182 case llvm::BitstreamEntry::EndBlock: 8183 goto NextCursor; 8184 case llvm::BitstreamEntry::Record: 8185 // The interesting case. 8186 break; 8187 } 8188 8189 // Read a record. 8190 Record.clear(); 8191 switch ((CommentRecordTypes)Cursor.readRecord(Entry.ID, Record)) { 8192 case COMMENTS_RAW_COMMENT: { 8193 unsigned Idx = 0; 8194 SourceRange SR = ReadSourceRange(F, Record, Idx); 8195 RawComment::CommentKind Kind = 8196 (RawComment::CommentKind) Record[Idx++]; 8197 bool IsTrailingComment = Record[Idx++]; 8198 bool IsAlmostTrailingComment = Record[Idx++]; 8199 Comments.push_back(new (Context) RawComment( 8200 SR, Kind, IsTrailingComment, IsAlmostTrailingComment, 8201 Context.getLangOpts().CommentOpts.ParseAllComments)); 8202 break; 8203 } 8204 } 8205 } 8206 NextCursor: 8207 Context.Comments.addDeserializedComments(Comments); 8208 } 8209 } 8210 8211 void ASTReader::getInputFiles(ModuleFile &F, 8212 SmallVectorImpl<serialization::InputFile> &Files) { 8213 for (unsigned I = 0, E = F.InputFilesLoaded.size(); I != E; ++I) { 8214 unsigned ID = I+1; 8215 Files.push_back(getInputFile(F, ID)); 8216 } 8217 } 8218 8219 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) { 8220 // If we know the owning module, use it. 8221 if (Module *M = D->getOwningModule()) 8222 return M->getFullModuleName(); 8223 8224 // Otherwise, use the name of the top-level module the decl is within. 8225 if (ModuleFile *M = getOwningModuleFile(D)) 8226 return M->ModuleName; 8227 8228 // Not from a module. 8229 return ""; 8230 } 8231 8232 void ASTReader::finishPendingActions() { 8233 while (!PendingIdentifierInfos.empty() || 8234 !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() || 8235 !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() || 8236 !PendingUpdateRecords.empty()) { 8237 // If any identifiers with corresponding top-level declarations have 8238 // been loaded, load those declarations now. 8239 typedef llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2> > 8240 TopLevelDeclsMap; 8241 TopLevelDeclsMap TopLevelDecls; 8242 8243 while (!PendingIdentifierInfos.empty()) { 8244 IdentifierInfo *II = PendingIdentifierInfos.back().first; 8245 SmallVector<uint32_t, 4> DeclIDs = 8246 std::move(PendingIdentifierInfos.back().second); 8247 PendingIdentifierInfos.pop_back(); 8248 8249 SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]); 8250 } 8251 8252 // For each decl chain that we wanted to complete while deserializing, mark 8253 // it as "still needs to be completed". 8254 for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) { 8255 markIncompleteDeclChain(PendingIncompleteDeclChains[I]); 8256 } 8257 PendingIncompleteDeclChains.clear(); 8258 8259 // Load pending declaration chains. 8260 for (unsigned I = 0; I != PendingDeclChains.size(); ++I) { 8261 loadPendingDeclChain(PendingDeclChains[I]); 8262 PendingDeclChainsKnown.erase(PendingDeclChains[I]); 8263 } 8264 PendingDeclChains.clear(); 8265 8266 // Make the most recent of the top-level declarations visible. 8267 for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(), 8268 TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) { 8269 IdentifierInfo *II = TLD->first; 8270 for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) { 8271 pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II); 8272 } 8273 } 8274 8275 // Load any pending macro definitions. 8276 for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) { 8277 IdentifierInfo *II = PendingMacroIDs.begin()[I].first; 8278 SmallVector<PendingMacroInfo, 2> GlobalIDs; 8279 GlobalIDs.swap(PendingMacroIDs.begin()[I].second); 8280 // Initialize the macro history from chained-PCHs ahead of module imports. 8281 for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs; 8282 ++IDIdx) { 8283 const PendingMacroInfo &Info = GlobalIDs[IDIdx]; 8284 if (Info.M->Kind != MK_ImplicitModule && 8285 Info.M->Kind != MK_ExplicitModule) 8286 resolvePendingMacro(II, Info); 8287 } 8288 // Handle module imports. 8289 for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs; 8290 ++IDIdx) { 8291 const PendingMacroInfo &Info = GlobalIDs[IDIdx]; 8292 if (Info.M->Kind == MK_ImplicitModule || 8293 Info.M->Kind == MK_ExplicitModule) 8294 resolvePendingMacro(II, Info); 8295 } 8296 } 8297 PendingMacroIDs.clear(); 8298 8299 // Wire up the DeclContexts for Decls that we delayed setting until 8300 // recursive loading is completed. 8301 while (!PendingDeclContextInfos.empty()) { 8302 PendingDeclContextInfo Info = PendingDeclContextInfos.front(); 8303 PendingDeclContextInfos.pop_front(); 8304 DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC)); 8305 DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC)); 8306 Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext()); 8307 } 8308 8309 // Perform any pending declaration updates. 8310 while (!PendingUpdateRecords.empty()) { 8311 auto Update = PendingUpdateRecords.pop_back_val(); 8312 ReadingKindTracker ReadingKind(Read_Decl, *this); 8313 loadDeclUpdateRecords(Update.first, Update.second); 8314 } 8315 } 8316 8317 // At this point, all update records for loaded decls are in place, so any 8318 // fake class definitions should have become real. 8319 assert(PendingFakeDefinitionData.empty() && 8320 "faked up a class definition but never saw the real one"); 8321 8322 // If we deserialized any C++ or Objective-C class definitions, any 8323 // Objective-C protocol definitions, or any redeclarable templates, make sure 8324 // that all redeclarations point to the definitions. Note that this can only 8325 // happen now, after the redeclaration chains have been fully wired. 8326 for (Decl *D : PendingDefinitions) { 8327 if (TagDecl *TD = dyn_cast<TagDecl>(D)) { 8328 if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) { 8329 // Make sure that the TagType points at the definition. 8330 const_cast<TagType*>(TagT)->decl = TD; 8331 } 8332 8333 if (auto RD = dyn_cast<CXXRecordDecl>(D)) { 8334 for (auto R : RD->redecls()) { 8335 assert((R == D) == R->isThisDeclarationADefinition() && 8336 "declaration thinks it's the definition but it isn't"); 8337 cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData; 8338 } 8339 } 8340 8341 continue; 8342 } 8343 8344 if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) { 8345 // Make sure that the ObjCInterfaceType points at the definition. 8346 const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl)) 8347 ->Decl = ID; 8348 8349 for (auto R : ID->redecls()) 8350 R->Data = ID->Data; 8351 8352 continue; 8353 } 8354 8355 if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) { 8356 for (auto R : PD->redecls()) 8357 R->Data = PD->Data; 8358 8359 continue; 8360 } 8361 8362 auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl(); 8363 for (auto R : RTD->redecls()) 8364 R->Common = RTD->Common; 8365 } 8366 PendingDefinitions.clear(); 8367 8368 // Load the bodies of any functions or methods we've encountered. We do 8369 // this now (delayed) so that we can be sure that the declaration chains 8370 // have been fully wired up. 8371 for (PendingBodiesMap::iterator PB = PendingBodies.begin(), 8372 PBEnd = PendingBodies.end(); 8373 PB != PBEnd; ++PB) { 8374 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) { 8375 // FIXME: Check for =delete/=default? 8376 // FIXME: Complain about ODR violations here? 8377 if (!getContext().getLangOpts().Modules || !FD->hasBody()) 8378 FD->setLazyBody(PB->second); 8379 continue; 8380 } 8381 8382 ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first); 8383 if (!getContext().getLangOpts().Modules || !MD->hasBody()) 8384 MD->setLazyBody(PB->second); 8385 } 8386 PendingBodies.clear(); 8387 } 8388 8389 void ASTReader::diagnoseOdrViolations() { 8390 if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty()) 8391 return; 8392 8393 // Trigger the import of the full definition of each class that had any 8394 // odr-merging problems, so we can produce better diagnostics for them. 8395 // These updates may in turn find and diagnose some ODR failures, so take 8396 // ownership of the set first. 8397 auto OdrMergeFailures = std::move(PendingOdrMergeFailures); 8398 PendingOdrMergeFailures.clear(); 8399 for (auto &Merge : OdrMergeFailures) { 8400 Merge.first->buildLookup(); 8401 Merge.first->decls_begin(); 8402 Merge.first->bases_begin(); 8403 Merge.first->vbases_begin(); 8404 for (auto *RD : Merge.second) { 8405 RD->decls_begin(); 8406 RD->bases_begin(); 8407 RD->vbases_begin(); 8408 } 8409 } 8410 8411 // For each declaration from a merged context, check that the canonical 8412 // definition of that context also contains a declaration of the same 8413 // entity. 8414 // 8415 // Caution: this loop does things that might invalidate iterators into 8416 // PendingOdrMergeChecks. Don't turn this into a range-based for loop! 8417 while (!PendingOdrMergeChecks.empty()) { 8418 NamedDecl *D = PendingOdrMergeChecks.pop_back_val(); 8419 8420 // FIXME: Skip over implicit declarations for now. This matters for things 8421 // like implicitly-declared special member functions. This isn't entirely 8422 // correct; we can end up with multiple unmerged declarations of the same 8423 // implicit entity. 8424 if (D->isImplicit()) 8425 continue; 8426 8427 DeclContext *CanonDef = D->getDeclContext(); 8428 8429 bool Found = false; 8430 const Decl *DCanon = D->getCanonicalDecl(); 8431 8432 for (auto RI : D->redecls()) { 8433 if (RI->getLexicalDeclContext() == CanonDef) { 8434 Found = true; 8435 break; 8436 } 8437 } 8438 if (Found) 8439 continue; 8440 8441 llvm::SmallVector<const NamedDecl*, 4> Candidates; 8442 DeclContext::lookup_result R = CanonDef->lookup(D->getDeclName()); 8443 for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); 8444 !Found && I != E; ++I) { 8445 for (auto RI : (*I)->redecls()) { 8446 if (RI->getLexicalDeclContext() == CanonDef) { 8447 // This declaration is present in the canonical definition. If it's 8448 // in the same redecl chain, it's the one we're looking for. 8449 if (RI->getCanonicalDecl() == DCanon) 8450 Found = true; 8451 else 8452 Candidates.push_back(cast<NamedDecl>(RI)); 8453 break; 8454 } 8455 } 8456 } 8457 8458 if (!Found) { 8459 // The AST doesn't like TagDecls becoming invalid after they've been 8460 // completed. We only really need to mark FieldDecls as invalid here. 8461 if (!isa<TagDecl>(D)) 8462 D->setInvalidDecl(); 8463 8464 std::string CanonDefModule = 8465 getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef)); 8466 Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl) 8467 << D << getOwningModuleNameForDiagnostic(D) 8468 << CanonDef << CanonDefModule.empty() << CanonDefModule; 8469 8470 if (Candidates.empty()) 8471 Diag(cast<Decl>(CanonDef)->getLocation(), 8472 diag::note_module_odr_violation_no_possible_decls) << D; 8473 else { 8474 for (unsigned I = 0, N = Candidates.size(); I != N; ++I) 8475 Diag(Candidates[I]->getLocation(), 8476 diag::note_module_odr_violation_possible_decl) 8477 << Candidates[I]; 8478 } 8479 8480 DiagnosedOdrMergeFailures.insert(CanonDef); 8481 } 8482 } 8483 8484 // Issue any pending ODR-failure diagnostics. 8485 for (auto &Merge : OdrMergeFailures) { 8486 // If we've already pointed out a specific problem with this class, don't 8487 // bother issuing a general "something's different" diagnostic. 8488 if (!DiagnosedOdrMergeFailures.insert(Merge.first).second) 8489 continue; 8490 8491 bool Diagnosed = false; 8492 for (auto *RD : Merge.second) { 8493 // Multiple different declarations got merged together; tell the user 8494 // where they came from. 8495 if (Merge.first != RD) { 8496 // FIXME: Walk the definition, figure out what's different, 8497 // and diagnose that. 8498 if (!Diagnosed) { 8499 std::string Module = getOwningModuleNameForDiagnostic(Merge.first); 8500 Diag(Merge.first->getLocation(), 8501 diag::err_module_odr_violation_different_definitions) 8502 << Merge.first << Module.empty() << Module; 8503 Diagnosed = true; 8504 } 8505 8506 Diag(RD->getLocation(), 8507 diag::note_module_odr_violation_different_definitions) 8508 << getOwningModuleNameForDiagnostic(RD); 8509 } 8510 } 8511 8512 if (!Diagnosed) { 8513 // All definitions are updates to the same declaration. This happens if a 8514 // module instantiates the declaration of a class template specialization 8515 // and two or more other modules instantiate its definition. 8516 // 8517 // FIXME: Indicate which modules had instantiations of this definition. 8518 // FIXME: How can this even happen? 8519 Diag(Merge.first->getLocation(), 8520 diag::err_module_odr_violation_different_instantiations) 8521 << Merge.first; 8522 } 8523 } 8524 } 8525 8526 void ASTReader::FinishedDeserializing() { 8527 assert(NumCurrentElementsDeserializing && 8528 "FinishedDeserializing not paired with StartedDeserializing"); 8529 if (NumCurrentElementsDeserializing == 1) { 8530 // We decrease NumCurrentElementsDeserializing only after pending actions 8531 // are finished, to avoid recursively re-calling finishPendingActions(). 8532 finishPendingActions(); 8533 } 8534 --NumCurrentElementsDeserializing; 8535 8536 if (NumCurrentElementsDeserializing == 0) { 8537 diagnoseOdrViolations(); 8538 8539 // We are not in recursive loading, so it's safe to pass the "interesting" 8540 // decls to the consumer. 8541 if (Consumer) 8542 PassInterestingDeclsToConsumer(); 8543 } 8544 } 8545 8546 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) { 8547 D = D->getMostRecentDecl(); 8548 8549 if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) { 8550 SemaObj->TUScope->AddDecl(D); 8551 } else if (SemaObj->TUScope) { 8552 // Adding the decl to IdResolver may have failed because it was already in 8553 // (even though it was not added in scope). If it is already in, make sure 8554 // it gets in the scope as well. 8555 if (std::find(SemaObj->IdResolver.begin(Name), 8556 SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end()) 8557 SemaObj->TUScope->AddDecl(D); 8558 } 8559 } 8560 8561 ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context, StringRef isysroot, 8562 bool DisableValidation, bool AllowASTWithCompilerErrors, 8563 bool AllowConfigurationMismatch, bool ValidateSystemInputs, 8564 bool UseGlobalIndex) 8565 : Listener(new PCHValidator(PP, *this)), DeserializationListener(nullptr), 8566 OwnsDeserializationListener(false), SourceMgr(PP.getSourceManager()), 8567 FileMgr(PP.getFileManager()), Diags(PP.getDiagnostics()), 8568 SemaObj(nullptr), PP(PP), Context(Context), Consumer(nullptr), 8569 ModuleMgr(PP.getFileManager()), isysroot(isysroot), 8570 DisableValidation(DisableValidation), 8571 AllowASTWithCompilerErrors(AllowASTWithCompilerErrors), 8572 AllowConfigurationMismatch(AllowConfigurationMismatch), 8573 ValidateSystemInputs(ValidateSystemInputs), 8574 UseGlobalIndex(UseGlobalIndex), TriedLoadingGlobalIndex(false), 8575 CurrSwitchCaseStmts(&SwitchCaseStmts), 8576 NumSLocEntriesRead(0), TotalNumSLocEntries(0), NumStatementsRead(0), 8577 TotalNumStatements(0), NumMacrosRead(0), TotalNumMacros(0), 8578 NumIdentifierLookups(0), NumIdentifierLookupHits(0), NumSelectorsRead(0), 8579 NumMethodPoolEntriesRead(0), NumMethodPoolLookups(0), 8580 NumMethodPoolHits(0), NumMethodPoolTableLookups(0), 8581 NumMethodPoolTableHits(0), TotalNumMethodPoolEntries(0), 8582 NumLexicalDeclContextsRead(0), TotalLexicalDeclContexts(0), 8583 NumVisibleDeclContextsRead(0), TotalVisibleDeclContexts(0), 8584 TotalModulesSizeInBits(0), NumCurrentElementsDeserializing(0), 8585 PassingDeclsToConsumer(false), NumCXXBaseSpecifiersLoaded(0), 8586 ReadingKind(Read_None) { 8587 SourceMgr.setExternalSLocEntrySource(this); 8588 } 8589 8590 ASTReader::~ASTReader() { 8591 if (OwnsDeserializationListener) 8592 delete DeserializationListener; 8593 8594 for (DeclContextVisibleUpdatesPending::iterator 8595 I = PendingVisibleUpdates.begin(), 8596 E = PendingVisibleUpdates.end(); 8597 I != E; ++I) { 8598 for (DeclContextVisibleUpdates::iterator J = I->second.begin(), 8599 F = I->second.end(); 8600 J != F; ++J) 8601 delete J->first; 8602 } 8603 } 8604