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