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