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