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