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