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