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