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