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