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 Find the next module that contains entities and return the ID
5429 /// of the first entry.
5430 ///
5431 /// \param SLocMapI points at a chunk of a module that contains no
5432 /// preprocessed entities or the entities it contains are not the ones we are
5433 /// looking for.
5434 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
5435                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
5436   ++SLocMapI;
5437   for (GlobalSLocOffsetMapType::const_iterator
5438          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
5439     ModuleFile &M = *SLocMapI->second;
5440     if (M.NumPreprocessedEntities)
5441       return M.BasePreprocessedEntityID;
5442   }
5443 
5444   return getTotalNumPreprocessedEntities();
5445 }
5446 
5447 namespace {
5448 
5449 struct PPEntityComp {
5450   const ASTReader &Reader;
5451   ModuleFile &M;
5452 
5453   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) { }
5454 
5455   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
5456     SourceLocation LHS = getLoc(L);
5457     SourceLocation RHS = getLoc(R);
5458     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5459   }
5460 
5461   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
5462     SourceLocation LHS = getLoc(L);
5463     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5464   }
5465 
5466   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
5467     SourceLocation RHS = getLoc(R);
5468     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
5469   }
5470 
5471   SourceLocation getLoc(const PPEntityOffset &PPE) const {
5472     return Reader.TranslateSourceLocation(M, PPE.getBegin());
5473   }
5474 };
5475 
5476 } // end anonymous namespace
5477 
5478 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
5479                                                        bool EndsAfter) const {
5480   if (SourceMgr.isLocalSourceLocation(Loc))
5481     return getTotalNumPreprocessedEntities();
5482 
5483   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
5484       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
5485   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
5486          "Corrupted global sloc offset map");
5487 
5488   if (SLocMapI->second->NumPreprocessedEntities == 0)
5489     return findNextPreprocessedEntity(SLocMapI);
5490 
5491   ModuleFile &M = *SLocMapI->second;
5492   typedef const PPEntityOffset *pp_iterator;
5493   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
5494   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
5495 
5496   size_t Count = M.NumPreprocessedEntities;
5497   size_t Half;
5498   pp_iterator First = pp_begin;
5499   pp_iterator PPI;
5500 
5501   if (EndsAfter) {
5502     PPI = std::upper_bound(pp_begin, pp_end, Loc,
5503                            PPEntityComp(*this, M));
5504   } else {
5505     // Do a binary search manually instead of using std::lower_bound because
5506     // The end locations of entities may be unordered (when a macro expansion
5507     // is inside another macro argument), but for this case it is not important
5508     // whether we get the first macro expansion or its containing macro.
5509     while (Count > 0) {
5510       Half = Count / 2;
5511       PPI = First;
5512       std::advance(PPI, Half);
5513       if (SourceMgr.isBeforeInTranslationUnit(
5514               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
5515         First = PPI;
5516         ++First;
5517         Count = Count - Half - 1;
5518       } else
5519         Count = Half;
5520     }
5521   }
5522 
5523   if (PPI == pp_end)
5524     return findNextPreprocessedEntity(SLocMapI);
5525 
5526   return M.BasePreprocessedEntityID + (PPI - pp_begin);
5527 }
5528 
5529 /// \brief Returns a pair of [Begin, End) indices of preallocated
5530 /// preprocessed entities that \arg Range encompasses.
5531 std::pair<unsigned, unsigned>
5532     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
5533   if (Range.isInvalid())
5534     return std::make_pair(0,0);
5535   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
5536 
5537   PreprocessedEntityID BeginID =
5538       findPreprocessedEntity(Range.getBegin(), false);
5539   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
5540   return std::make_pair(BeginID, EndID);
5541 }
5542 
5543 /// \brief Optionally returns true or false if the preallocated preprocessed
5544 /// entity with index \arg Index came from file \arg FID.
5545 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
5546                                                              FileID FID) {
5547   if (FID.isInvalid())
5548     return false;
5549 
5550   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5551   ModuleFile &M = *PPInfo.first;
5552   unsigned LocalIndex = PPInfo.second;
5553   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5554 
5555   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
5556   if (Loc.isInvalid())
5557     return false;
5558 
5559   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
5560     return true;
5561   else
5562     return false;
5563 }
5564 
5565 namespace {
5566 
5567   /// \brief Visitor used to search for information about a header file.
5568   class HeaderFileInfoVisitor {
5569     const FileEntry *FE;
5570 
5571     Optional<HeaderFileInfo> HFI;
5572 
5573   public:
5574     explicit HeaderFileInfoVisitor(const FileEntry *FE)
5575       : FE(FE) { }
5576 
5577     bool operator()(ModuleFile &M) {
5578       HeaderFileInfoLookupTable *Table
5579         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
5580       if (!Table)
5581         return false;
5582 
5583       // Look in the on-disk hash table for an entry for this file name.
5584       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
5585       if (Pos == Table->end())
5586         return false;
5587 
5588       HFI = *Pos;
5589       return true;
5590     }
5591 
5592     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
5593   };
5594 
5595 } // end anonymous namespace
5596 
5597 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
5598   HeaderFileInfoVisitor Visitor(FE);
5599   ModuleMgr.visit(Visitor);
5600   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
5601     return *HFI;
5602 
5603   return HeaderFileInfo();
5604 }
5605 
5606 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
5607   using DiagState = DiagnosticsEngine::DiagState;
5608   SmallVector<DiagState *, 32> DiagStates;
5609 
5610   for (ModuleFile &F : ModuleMgr) {
5611     unsigned Idx = 0;
5612     auto &Record = F.PragmaDiagMappings;
5613     if (Record.empty())
5614       continue;
5615 
5616     DiagStates.clear();
5617 
5618     auto ReadDiagState =
5619         [&](const DiagState &BasedOn, SourceLocation Loc,
5620             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
5621       unsigned BackrefID = Record[Idx++];
5622       if (BackrefID != 0)
5623         return DiagStates[BackrefID - 1];
5624 
5625       // A new DiagState was created here.
5626       Diag.DiagStates.push_back(BasedOn);
5627       DiagState *NewState = &Diag.DiagStates.back();
5628       DiagStates.push_back(NewState);
5629       unsigned Size = Record[Idx++];
5630       assert(Idx + Size * 2 <= Record.size() &&
5631              "Invalid data, not enough diag/map pairs");
5632       while (Size--) {
5633         unsigned DiagID = Record[Idx++];
5634         DiagnosticMapping NewMapping =
5635             DiagnosticMapping::deserialize(Record[Idx++]);
5636         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
5637           continue;
5638 
5639         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
5640 
5641         // If this mapping was specified as a warning but the severity was
5642         // upgraded due to diagnostic settings, simulate the current diagnostic
5643         // settings (and use a warning).
5644         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
5645           NewMapping.setSeverity(diag::Severity::Warning);
5646           NewMapping.setUpgradedFromWarning(false);
5647         }
5648 
5649         Mapping = NewMapping;
5650       }
5651       return NewState;
5652     };
5653 
5654     // Read the first state.
5655     DiagState *FirstState;
5656     if (F.Kind == MK_ImplicitModule) {
5657       // Implicitly-built modules are reused with different diagnostic
5658       // settings.  Use the initial diagnostic state from Diag to simulate this
5659       // compilation's diagnostic settings.
5660       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
5661       DiagStates.push_back(FirstState);
5662 
5663       // Skip the initial diagnostic state from the serialized module.
5664       assert(Record[1] == 0 &&
5665              "Invalid data, unexpected backref in initial state");
5666       Idx = 3 + Record[2] * 2;
5667       assert(Idx < Record.size() &&
5668              "Invalid data, not enough state change pairs in initial state");
5669     } else if (F.isModule()) {
5670       // For an explicit module, preserve the flags from the module build
5671       // command line (-w, -Weverything, -Werror, ...) along with any explicit
5672       // -Wblah flags.
5673       unsigned Flags = Record[Idx++];
5674       DiagState Initial;
5675       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
5676       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
5677       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
5678       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
5679       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
5680       Initial.ExtBehavior = (diag::Severity)Flags;
5681       FirstState = ReadDiagState(Initial, SourceLocation(), true);
5682 
5683       // Set up the root buffer of the module to start with the initial
5684       // diagnostic state of the module itself, to cover files that contain no
5685       // explicit transitions (for which we did not serialize anything).
5686       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
5687           .StateTransitions.push_back({FirstState, 0});
5688     } else {
5689       // For prefix ASTs, start with whatever the user configured on the
5690       // command line.
5691       Idx++; // Skip flags.
5692       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
5693                                  SourceLocation(), false);
5694     }
5695 
5696     // Read the state transitions.
5697     unsigned NumLocations = Record[Idx++];
5698     while (NumLocations--) {
5699       assert(Idx < Record.size() &&
5700              "Invalid data, missing pragma diagnostic states");
5701       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
5702       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
5703       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
5704       unsigned Transitions = Record[Idx++];
5705 
5706       // Note that we don't need to set up Parent/ParentOffset here, because
5707       // we won't be changing the diagnostic state within imported FileIDs
5708       // (other than perhaps appending to the main source file, which has no
5709       // parent).
5710       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
5711       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
5712       for (unsigned I = 0; I != Transitions; ++I) {
5713         unsigned Offset = Record[Idx++];
5714         auto *State =
5715             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
5716         F.StateTransitions.push_back({State, Offset});
5717       }
5718     }
5719 
5720     // Read the final state.
5721     assert(Idx < Record.size() &&
5722            "Invalid data, missing final pragma diagnostic state");
5723     SourceLocation CurStateLoc =
5724         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
5725     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
5726 
5727     if (!F.isModule()) {
5728       Diag.DiagStatesByLoc.CurDiagState = CurState;
5729       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
5730 
5731       // Preserve the property that the imaginary root file describes the
5732       // current state.
5733       FileID NullFile;
5734       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
5735       if (T.empty())
5736         T.push_back({CurState, 0});
5737       else
5738         T[0].State = CurState;
5739     }
5740 
5741     // Don't try to read these mappings again.
5742     Record.clear();
5743   }
5744 }
5745 
5746 /// \brief Get the correct cursor and offset for loading a type.
5747 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
5748   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
5749   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
5750   ModuleFile *M = I->second;
5751   return RecordLocation(M, M->TypeOffsets[Index - M->BaseTypeIndex]);
5752 }
5753 
5754 /// \brief Read and return the type with the given index..
5755 ///
5756 /// The index is the type ID, shifted and minus the number of predefs. This
5757 /// routine actually reads the record corresponding to the type at the given
5758 /// location. It is a helper routine for GetType, which deals with reading type
5759 /// IDs.
5760 QualType ASTReader::readTypeRecord(unsigned Index) {
5761   assert(ContextObj && "reading type with no AST context");
5762   ASTContext &Context = *ContextObj;
5763   RecordLocation Loc = TypeCursorForIndex(Index);
5764   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
5765 
5766   // Keep track of where we are in the stream, then jump back there
5767   // after reading this type.
5768   SavedStreamPosition SavedPosition(DeclsCursor);
5769 
5770   ReadingKindTracker ReadingKind(Read_Type, *this);
5771 
5772   // Note that we are loading a type record.
5773   Deserializing AType(this);
5774 
5775   unsigned Idx = 0;
5776   DeclsCursor.JumpToBit(Loc.Offset);
5777   RecordData Record;
5778   unsigned Code = DeclsCursor.ReadCode();
5779   switch ((TypeCode)DeclsCursor.readRecord(Code, Record)) {
5780   case TYPE_EXT_QUAL: {
5781     if (Record.size() != 2) {
5782       Error("Incorrect encoding of extended qualifier type");
5783       return QualType();
5784     }
5785     QualType Base = readType(*Loc.F, Record, Idx);
5786     Qualifiers Quals = Qualifiers::fromOpaqueValue(Record[Idx++]);
5787     return Context.getQualifiedType(Base, Quals);
5788   }
5789 
5790   case TYPE_COMPLEX: {
5791     if (Record.size() != 1) {
5792       Error("Incorrect encoding of complex type");
5793       return QualType();
5794     }
5795     QualType ElemType = readType(*Loc.F, Record, Idx);
5796     return Context.getComplexType(ElemType);
5797   }
5798 
5799   case TYPE_POINTER: {
5800     if (Record.size() != 1) {
5801       Error("Incorrect encoding of pointer type");
5802       return QualType();
5803     }
5804     QualType PointeeType = readType(*Loc.F, Record, Idx);
5805     return Context.getPointerType(PointeeType);
5806   }
5807 
5808   case TYPE_DECAYED: {
5809     if (Record.size() != 1) {
5810       Error("Incorrect encoding of decayed type");
5811       return QualType();
5812     }
5813     QualType OriginalType = readType(*Loc.F, Record, Idx);
5814     QualType DT = Context.getAdjustedParameterType(OriginalType);
5815     if (!isa<DecayedType>(DT))
5816       Error("Decayed type does not decay");
5817     return DT;
5818   }
5819 
5820   case TYPE_ADJUSTED: {
5821     if (Record.size() != 2) {
5822       Error("Incorrect encoding of adjusted type");
5823       return QualType();
5824     }
5825     QualType OriginalTy = readType(*Loc.F, Record, Idx);
5826     QualType AdjustedTy = readType(*Loc.F, Record, Idx);
5827     return Context.getAdjustedType(OriginalTy, AdjustedTy);
5828   }
5829 
5830   case TYPE_BLOCK_POINTER: {
5831     if (Record.size() != 1) {
5832       Error("Incorrect encoding of block pointer type");
5833       return QualType();
5834     }
5835     QualType PointeeType = readType(*Loc.F, Record, Idx);
5836     return Context.getBlockPointerType(PointeeType);
5837   }
5838 
5839   case TYPE_LVALUE_REFERENCE: {
5840     if (Record.size() != 2) {
5841       Error("Incorrect encoding of lvalue reference type");
5842       return QualType();
5843     }
5844     QualType PointeeType = readType(*Loc.F, Record, Idx);
5845     return Context.getLValueReferenceType(PointeeType, Record[1]);
5846   }
5847 
5848   case TYPE_RVALUE_REFERENCE: {
5849     if (Record.size() != 1) {
5850       Error("Incorrect encoding of rvalue reference type");
5851       return QualType();
5852     }
5853     QualType PointeeType = readType(*Loc.F, Record, Idx);
5854     return Context.getRValueReferenceType(PointeeType);
5855   }
5856 
5857   case TYPE_MEMBER_POINTER: {
5858     if (Record.size() != 2) {
5859       Error("Incorrect encoding of member pointer type");
5860       return QualType();
5861     }
5862     QualType PointeeType = readType(*Loc.F, Record, Idx);
5863     QualType ClassType = readType(*Loc.F, Record, Idx);
5864     if (PointeeType.isNull() || ClassType.isNull())
5865       return QualType();
5866 
5867     return Context.getMemberPointerType(PointeeType, ClassType.getTypePtr());
5868   }
5869 
5870   case TYPE_CONSTANT_ARRAY: {
5871     QualType ElementType = readType(*Loc.F, Record, Idx);
5872     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5873     unsigned IndexTypeQuals = Record[2];
5874     unsigned Idx = 3;
5875     llvm::APInt Size = ReadAPInt(Record, Idx);
5876     return Context.getConstantArrayType(ElementType, Size,
5877                                          ASM, IndexTypeQuals);
5878   }
5879 
5880   case TYPE_INCOMPLETE_ARRAY: {
5881     QualType ElementType = readType(*Loc.F, Record, Idx);
5882     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5883     unsigned IndexTypeQuals = Record[2];
5884     return Context.getIncompleteArrayType(ElementType, ASM, IndexTypeQuals);
5885   }
5886 
5887   case TYPE_VARIABLE_ARRAY: {
5888     QualType ElementType = readType(*Loc.F, Record, Idx);
5889     ArrayType::ArraySizeModifier ASM = (ArrayType::ArraySizeModifier)Record[1];
5890     unsigned IndexTypeQuals = Record[2];
5891     SourceLocation LBLoc = ReadSourceLocation(*Loc.F, Record[3]);
5892     SourceLocation RBLoc = ReadSourceLocation(*Loc.F, Record[4]);
5893     return Context.getVariableArrayType(ElementType, ReadExpr(*Loc.F),
5894                                          ASM, IndexTypeQuals,
5895                                          SourceRange(LBLoc, RBLoc));
5896   }
5897 
5898   case TYPE_VECTOR: {
5899     if (Record.size() != 3) {
5900       Error("incorrect encoding of vector type in AST file");
5901       return QualType();
5902     }
5903 
5904     QualType ElementType = readType(*Loc.F, Record, Idx);
5905     unsigned NumElements = Record[1];
5906     unsigned VecKind = Record[2];
5907     return Context.getVectorType(ElementType, NumElements,
5908                                   (VectorType::VectorKind)VecKind);
5909   }
5910 
5911   case TYPE_EXT_VECTOR: {
5912     if (Record.size() != 3) {
5913       Error("incorrect encoding of extended vector type in AST file");
5914       return QualType();
5915     }
5916 
5917     QualType ElementType = readType(*Loc.F, Record, Idx);
5918     unsigned NumElements = Record[1];
5919     return Context.getExtVectorType(ElementType, NumElements);
5920   }
5921 
5922   case TYPE_FUNCTION_NO_PROTO: {
5923     if (Record.size() != 7) {
5924       Error("incorrect encoding of no-proto function type");
5925       return QualType();
5926     }
5927     QualType ResultType = readType(*Loc.F, Record, Idx);
5928     FunctionType::ExtInfo Info(Record[1], Record[2], Record[3],
5929                                (CallingConv)Record[4], Record[5], Record[6]);
5930     return Context.getFunctionNoProtoType(ResultType, Info);
5931   }
5932 
5933   case TYPE_FUNCTION_PROTO: {
5934     QualType ResultType = readType(*Loc.F, Record, Idx);
5935 
5936     FunctionProtoType::ExtProtoInfo EPI;
5937     EPI.ExtInfo = FunctionType::ExtInfo(/*noreturn*/ Record[1],
5938                                         /*hasregparm*/ Record[2],
5939                                         /*regparm*/ Record[3],
5940                                         static_cast<CallingConv>(Record[4]),
5941                                         /*produces*/ Record[5],
5942                                         /*nocallersavedregs*/ Record[6]);
5943 
5944     unsigned Idx = 7;
5945 
5946     EPI.Variadic = Record[Idx++];
5947     EPI.HasTrailingReturn = Record[Idx++];
5948     EPI.TypeQuals = Record[Idx++];
5949     EPI.RefQualifier = static_cast<RefQualifierKind>(Record[Idx++]);
5950     SmallVector<QualType, 8> ExceptionStorage;
5951     readExceptionSpec(*Loc.F, ExceptionStorage, EPI.ExceptionSpec, Record, Idx);
5952 
5953     unsigned NumParams = Record[Idx++];
5954     SmallVector<QualType, 16> ParamTypes;
5955     for (unsigned I = 0; I != NumParams; ++I)
5956       ParamTypes.push_back(readType(*Loc.F, Record, Idx));
5957 
5958     SmallVector<FunctionProtoType::ExtParameterInfo, 4> ExtParameterInfos;
5959     if (Idx != Record.size()) {
5960       for (unsigned I = 0; I != NumParams; ++I)
5961         ExtParameterInfos.push_back(
5962           FunctionProtoType::ExtParameterInfo
5963                            ::getFromOpaqueValue(Record[Idx++]));
5964       EPI.ExtParameterInfos = ExtParameterInfos.data();
5965     }
5966 
5967     assert(Idx == Record.size());
5968 
5969     return Context.getFunctionType(ResultType, ParamTypes, EPI);
5970   }
5971 
5972   case TYPE_UNRESOLVED_USING: {
5973     unsigned Idx = 0;
5974     return Context.getTypeDeclType(
5975                   ReadDeclAs<UnresolvedUsingTypenameDecl>(*Loc.F, Record, Idx));
5976   }
5977 
5978   case TYPE_TYPEDEF: {
5979     if (Record.size() != 2) {
5980       Error("incorrect encoding of typedef type");
5981       return QualType();
5982     }
5983     unsigned Idx = 0;
5984     TypedefNameDecl *Decl = ReadDeclAs<TypedefNameDecl>(*Loc.F, Record, Idx);
5985     QualType Canonical = readType(*Loc.F, Record, Idx);
5986     if (!Canonical.isNull())
5987       Canonical = Context.getCanonicalType(Canonical);
5988     return Context.getTypedefType(Decl, Canonical);
5989   }
5990 
5991   case TYPE_TYPEOF_EXPR:
5992     return Context.getTypeOfExprType(ReadExpr(*Loc.F));
5993 
5994   case TYPE_TYPEOF: {
5995     if (Record.size() != 1) {
5996       Error("incorrect encoding of typeof(type) in AST file");
5997       return QualType();
5998     }
5999     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
6000     return Context.getTypeOfType(UnderlyingType);
6001   }
6002 
6003   case TYPE_DECLTYPE: {
6004     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
6005     return Context.getDecltypeType(ReadExpr(*Loc.F), UnderlyingType);
6006   }
6007 
6008   case TYPE_UNARY_TRANSFORM: {
6009     QualType BaseType = readType(*Loc.F, Record, Idx);
6010     QualType UnderlyingType = readType(*Loc.F, Record, Idx);
6011     UnaryTransformType::UTTKind UKind = (UnaryTransformType::UTTKind)Record[2];
6012     return Context.getUnaryTransformType(BaseType, UnderlyingType, UKind);
6013   }
6014 
6015   case TYPE_AUTO: {
6016     QualType Deduced = readType(*Loc.F, Record, Idx);
6017     AutoTypeKeyword Keyword = (AutoTypeKeyword)Record[Idx++];
6018     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
6019     return Context.getAutoType(Deduced, Keyword, IsDependent);
6020   }
6021 
6022   case TYPE_DEDUCED_TEMPLATE_SPECIALIZATION: {
6023     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
6024     QualType Deduced = readType(*Loc.F, Record, Idx);
6025     bool IsDependent = Deduced.isNull() ? Record[Idx++] : false;
6026     return Context.getDeducedTemplateSpecializationType(Name, Deduced,
6027                                                         IsDependent);
6028   }
6029 
6030   case TYPE_RECORD: {
6031     if (Record.size() != 2) {
6032       Error("incorrect encoding of record type");
6033       return QualType();
6034     }
6035     unsigned Idx = 0;
6036     bool IsDependent = Record[Idx++];
6037     RecordDecl *RD = ReadDeclAs<RecordDecl>(*Loc.F, Record, Idx);
6038     RD = cast_or_null<RecordDecl>(RD->getCanonicalDecl());
6039     QualType T = Context.getRecordType(RD);
6040     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
6041     return T;
6042   }
6043 
6044   case TYPE_ENUM: {
6045     if (Record.size() != 2) {
6046       Error("incorrect encoding of enum type");
6047       return QualType();
6048     }
6049     unsigned Idx = 0;
6050     bool IsDependent = Record[Idx++];
6051     QualType T
6052       = Context.getEnumType(ReadDeclAs<EnumDecl>(*Loc.F, Record, Idx));
6053     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
6054     return T;
6055   }
6056 
6057   case TYPE_ATTRIBUTED: {
6058     if (Record.size() != 3) {
6059       Error("incorrect encoding of attributed type");
6060       return QualType();
6061     }
6062     QualType modifiedType = readType(*Loc.F, Record, Idx);
6063     QualType equivalentType = readType(*Loc.F, Record, Idx);
6064     AttributedType::Kind kind = static_cast<AttributedType::Kind>(Record[2]);
6065     return Context.getAttributedType(kind, modifiedType, equivalentType);
6066   }
6067 
6068   case TYPE_PAREN: {
6069     if (Record.size() != 1) {
6070       Error("incorrect encoding of paren type");
6071       return QualType();
6072     }
6073     QualType InnerType = readType(*Loc.F, Record, Idx);
6074     return Context.getParenType(InnerType);
6075   }
6076 
6077   case TYPE_PACK_EXPANSION: {
6078     if (Record.size() != 2) {
6079       Error("incorrect encoding of pack expansion type");
6080       return QualType();
6081     }
6082     QualType Pattern = readType(*Loc.F, Record, Idx);
6083     if (Pattern.isNull())
6084       return QualType();
6085     Optional<unsigned> NumExpansions;
6086     if (Record[1])
6087       NumExpansions = Record[1] - 1;
6088     return Context.getPackExpansionType(Pattern, NumExpansions);
6089   }
6090 
6091   case TYPE_ELABORATED: {
6092     unsigned Idx = 0;
6093     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
6094     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
6095     QualType NamedType = readType(*Loc.F, Record, Idx);
6096     return Context.getElaboratedType(Keyword, NNS, NamedType);
6097   }
6098 
6099   case TYPE_OBJC_INTERFACE: {
6100     unsigned Idx = 0;
6101     ObjCInterfaceDecl *ItfD
6102       = ReadDeclAs<ObjCInterfaceDecl>(*Loc.F, Record, Idx);
6103     return Context.getObjCInterfaceType(ItfD->getCanonicalDecl());
6104   }
6105 
6106   case TYPE_OBJC_TYPE_PARAM: {
6107     unsigned Idx = 0;
6108     ObjCTypeParamDecl *Decl
6109       = ReadDeclAs<ObjCTypeParamDecl>(*Loc.F, Record, Idx);
6110     unsigned NumProtos = Record[Idx++];
6111     SmallVector<ObjCProtocolDecl*, 4> Protos;
6112     for (unsigned I = 0; I != NumProtos; ++I)
6113       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
6114     return Context.getObjCTypeParamType(Decl, Protos);
6115   }
6116   case TYPE_OBJC_OBJECT: {
6117     unsigned Idx = 0;
6118     QualType Base = readType(*Loc.F, Record, Idx);
6119     unsigned NumTypeArgs = Record[Idx++];
6120     SmallVector<QualType, 4> TypeArgs;
6121     for (unsigned I = 0; I != NumTypeArgs; ++I)
6122       TypeArgs.push_back(readType(*Loc.F, Record, Idx));
6123     unsigned NumProtos = Record[Idx++];
6124     SmallVector<ObjCProtocolDecl*, 4> Protos;
6125     for (unsigned I = 0; I != NumProtos; ++I)
6126       Protos.push_back(ReadDeclAs<ObjCProtocolDecl>(*Loc.F, Record, Idx));
6127     bool IsKindOf = Record[Idx++];
6128     return Context.getObjCObjectType(Base, TypeArgs, Protos, IsKindOf);
6129   }
6130 
6131   case TYPE_OBJC_OBJECT_POINTER: {
6132     unsigned Idx = 0;
6133     QualType Pointee = readType(*Loc.F, Record, Idx);
6134     return Context.getObjCObjectPointerType(Pointee);
6135   }
6136 
6137   case TYPE_SUBST_TEMPLATE_TYPE_PARM: {
6138     unsigned Idx = 0;
6139     QualType Parm = readType(*Loc.F, Record, Idx);
6140     QualType Replacement = readType(*Loc.F, Record, Idx);
6141     return Context.getSubstTemplateTypeParmType(
6142         cast<TemplateTypeParmType>(Parm),
6143         Context.getCanonicalType(Replacement));
6144   }
6145 
6146   case TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK: {
6147     unsigned Idx = 0;
6148     QualType Parm = readType(*Loc.F, Record, Idx);
6149     TemplateArgument ArgPack = ReadTemplateArgument(*Loc.F, Record, Idx);
6150     return Context.getSubstTemplateTypeParmPackType(
6151                                                cast<TemplateTypeParmType>(Parm),
6152                                                      ArgPack);
6153   }
6154 
6155   case TYPE_INJECTED_CLASS_NAME: {
6156     CXXRecordDecl *D = ReadDeclAs<CXXRecordDecl>(*Loc.F, Record, Idx);
6157     QualType TST = readType(*Loc.F, Record, Idx); // probably derivable
6158     // FIXME: ASTContext::getInjectedClassNameType is not currently suitable
6159     // for AST reading, too much interdependencies.
6160     const Type *T = nullptr;
6161     for (auto *DI = D; DI; DI = DI->getPreviousDecl()) {
6162       if (const Type *Existing = DI->getTypeForDecl()) {
6163         T = Existing;
6164         break;
6165       }
6166     }
6167     if (!T) {
6168       T = new (Context, TypeAlignment) InjectedClassNameType(D, TST);
6169       for (auto *DI = D; DI; DI = DI->getPreviousDecl())
6170         DI->setTypeForDecl(T);
6171     }
6172     return QualType(T, 0);
6173   }
6174 
6175   case TYPE_TEMPLATE_TYPE_PARM: {
6176     unsigned Idx = 0;
6177     unsigned Depth = Record[Idx++];
6178     unsigned Index = Record[Idx++];
6179     bool Pack = Record[Idx++];
6180     TemplateTypeParmDecl *D
6181       = ReadDeclAs<TemplateTypeParmDecl>(*Loc.F, Record, Idx);
6182     return Context.getTemplateTypeParmType(Depth, Index, Pack, D);
6183   }
6184 
6185   case TYPE_DEPENDENT_NAME: {
6186     unsigned Idx = 0;
6187     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
6188     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
6189     const IdentifierInfo *Name = GetIdentifierInfo(*Loc.F, Record, Idx);
6190     QualType Canon = readType(*Loc.F, Record, Idx);
6191     if (!Canon.isNull())
6192       Canon = Context.getCanonicalType(Canon);
6193     return Context.getDependentNameType(Keyword, NNS, Name, Canon);
6194   }
6195 
6196   case TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION: {
6197     unsigned Idx = 0;
6198     ElaboratedTypeKeyword Keyword = (ElaboratedTypeKeyword)Record[Idx++];
6199     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(*Loc.F, Record, Idx);
6200     const IdentifierInfo *Name = GetIdentifierInfo(*Loc.F, Record, Idx);
6201     unsigned NumArgs = Record[Idx++];
6202     SmallVector<TemplateArgument, 8> Args;
6203     Args.reserve(NumArgs);
6204     while (NumArgs--)
6205       Args.push_back(ReadTemplateArgument(*Loc.F, Record, Idx));
6206     return Context.getDependentTemplateSpecializationType(Keyword, NNS, Name,
6207                                                           Args);
6208   }
6209 
6210   case TYPE_DEPENDENT_SIZED_ARRAY: {
6211     unsigned Idx = 0;
6212 
6213     // ArrayType
6214     QualType ElementType = readType(*Loc.F, Record, Idx);
6215     ArrayType::ArraySizeModifier ASM
6216       = (ArrayType::ArraySizeModifier)Record[Idx++];
6217     unsigned IndexTypeQuals = Record[Idx++];
6218 
6219     // DependentSizedArrayType
6220     Expr *NumElts = ReadExpr(*Loc.F);
6221     SourceRange Brackets = ReadSourceRange(*Loc.F, Record, Idx);
6222 
6223     return Context.getDependentSizedArrayType(ElementType, NumElts, ASM,
6224                                                IndexTypeQuals, Brackets);
6225   }
6226 
6227   case TYPE_TEMPLATE_SPECIALIZATION: {
6228     unsigned Idx = 0;
6229     bool IsDependent = Record[Idx++];
6230     TemplateName Name = ReadTemplateName(*Loc.F, Record, Idx);
6231     SmallVector<TemplateArgument, 8> Args;
6232     ReadTemplateArgumentList(Args, *Loc.F, Record, Idx);
6233     QualType Underlying = readType(*Loc.F, Record, Idx);
6234     QualType T;
6235     if (Underlying.isNull())
6236       T = Context.getCanonicalTemplateSpecializationType(Name, Args);
6237     else
6238       T = Context.getTemplateSpecializationType(Name, Args, Underlying);
6239     const_cast<Type*>(T.getTypePtr())->setDependent(IsDependent);
6240     return T;
6241   }
6242 
6243   case TYPE_ATOMIC: {
6244     if (Record.size() != 1) {
6245       Error("Incorrect encoding of atomic type");
6246       return QualType();
6247     }
6248     QualType ValueType = readType(*Loc.F, Record, Idx);
6249     return Context.getAtomicType(ValueType);
6250   }
6251 
6252   case TYPE_PIPE: {
6253     if (Record.size() != 2) {
6254       Error("Incorrect encoding of pipe type");
6255       return QualType();
6256     }
6257 
6258     // Reading the pipe element type.
6259     QualType ElementType = readType(*Loc.F, Record, Idx);
6260     unsigned ReadOnly = Record[1];
6261     return Context.getPipeType(ElementType, ReadOnly);
6262   }
6263 
6264   case TYPE_DEPENDENT_SIZED_EXT_VECTOR: {
6265     unsigned Idx = 0;
6266 
6267     // DependentSizedExtVectorType
6268     QualType ElementType = readType(*Loc.F, Record, Idx);
6269     Expr *SizeExpr = ReadExpr(*Loc.F);
6270     SourceLocation AttrLoc = ReadSourceLocation(*Loc.F, Record, Idx);
6271 
6272     return Context.getDependentSizedExtVectorType(ElementType, SizeExpr,
6273                                                   AttrLoc);
6274   }
6275 
6276   case TYPE_DEPENDENT_ADDRESS_SPACE: {
6277     unsigned Idx = 0;
6278 
6279     // DependentAddressSpaceType
6280     QualType PointeeType = readType(*Loc.F, Record, Idx);
6281     Expr *AddrSpaceExpr = ReadExpr(*Loc.F);
6282     SourceLocation AttrLoc = ReadSourceLocation(*Loc.F, Record, Idx);
6283 
6284     return Context.getDependentAddressSpaceType(PointeeType, AddrSpaceExpr,
6285                                                    AttrLoc);
6286   }
6287   }
6288   llvm_unreachable("Invalid TypeCode!");
6289 }
6290 
6291 void ASTReader::readExceptionSpec(ModuleFile &ModuleFile,
6292                                   SmallVectorImpl<QualType> &Exceptions,
6293                                   FunctionProtoType::ExceptionSpecInfo &ESI,
6294                                   const RecordData &Record, unsigned &Idx) {
6295   ExceptionSpecificationType EST =
6296       static_cast<ExceptionSpecificationType>(Record[Idx++]);
6297   ESI.Type = EST;
6298   if (EST == EST_Dynamic) {
6299     for (unsigned I = 0, N = Record[Idx++]; I != N; ++I)
6300       Exceptions.push_back(readType(ModuleFile, Record, Idx));
6301     ESI.Exceptions = Exceptions;
6302   } else if (EST == EST_ComputedNoexcept) {
6303     ESI.NoexceptExpr = ReadExpr(ModuleFile);
6304   } else if (EST == EST_Uninstantiated) {
6305     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
6306     ESI.SourceTemplate = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
6307   } else if (EST == EST_Unevaluated) {
6308     ESI.SourceDecl = ReadDeclAs<FunctionDecl>(ModuleFile, Record, Idx);
6309   }
6310 }
6311 
6312 class clang::TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6313   ModuleFile *F;
6314   ASTReader *Reader;
6315   const ASTReader::RecordData &Record;
6316   unsigned &Idx;
6317 
6318   SourceLocation ReadSourceLocation() {
6319     return Reader->ReadSourceLocation(*F, Record, Idx);
6320   }
6321 
6322   TypeSourceInfo *GetTypeSourceInfo() {
6323     return Reader->GetTypeSourceInfo(*F, Record, Idx);
6324   }
6325 
6326   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6327     return Reader->ReadNestedNameSpecifierLoc(*F, Record, Idx);
6328   }
6329 
6330 public:
6331   TypeLocReader(ModuleFile &F, ASTReader &Reader,
6332                 const ASTReader::RecordData &Record, unsigned &Idx)
6333       : F(&F), Reader(&Reader), Record(Record), Idx(Idx) {}
6334 
6335   // We want compile-time assurance that we've enumerated all of
6336   // these, so unfortunately we have to declare them first, then
6337   // define them out-of-line.
6338 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6339 #define TYPELOC(CLASS, PARENT) \
6340   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6341 #include "clang/AST/TypeLocNodes.def"
6342 
6343   void VisitFunctionTypeLoc(FunctionTypeLoc);
6344   void VisitArrayTypeLoc(ArrayTypeLoc);
6345 };
6346 
6347 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6348   // nothing to do
6349 }
6350 
6351 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6352   TL.setBuiltinLoc(ReadSourceLocation());
6353   if (TL.needsExtraLocalData()) {
6354     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Record[Idx++]));
6355     TL.setWrittenSignSpec(static_cast<DeclSpec::TSS>(Record[Idx++]));
6356     TL.setWrittenWidthSpec(static_cast<DeclSpec::TSW>(Record[Idx++]));
6357     TL.setModeAttr(Record[Idx++]);
6358   }
6359 }
6360 
6361 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6362   TL.setNameLoc(ReadSourceLocation());
6363 }
6364 
6365 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6366   TL.setStarLoc(ReadSourceLocation());
6367 }
6368 
6369 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6370   // nothing to do
6371 }
6372 
6373 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6374   // nothing to do
6375 }
6376 
6377 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6378   TL.setCaretLoc(ReadSourceLocation());
6379 }
6380 
6381 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6382   TL.setAmpLoc(ReadSourceLocation());
6383 }
6384 
6385 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6386   TL.setAmpAmpLoc(ReadSourceLocation());
6387 }
6388 
6389 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6390   TL.setStarLoc(ReadSourceLocation());
6391   TL.setClassTInfo(GetTypeSourceInfo());
6392 }
6393 
6394 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6395   TL.setLBracketLoc(ReadSourceLocation());
6396   TL.setRBracketLoc(ReadSourceLocation());
6397   if (Record[Idx++])
6398     TL.setSizeExpr(Reader->ReadExpr(*F));
6399   else
6400     TL.setSizeExpr(nullptr);
6401 }
6402 
6403 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6404   VisitArrayTypeLoc(TL);
6405 }
6406 
6407 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6408   VisitArrayTypeLoc(TL);
6409 }
6410 
6411 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6412   VisitArrayTypeLoc(TL);
6413 }
6414 
6415 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6416                                             DependentSizedArrayTypeLoc TL) {
6417   VisitArrayTypeLoc(TL);
6418 }
6419 
6420 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6421     DependentAddressSpaceTypeLoc TL) {
6422 
6423     TL.setAttrNameLoc(ReadSourceLocation());
6424     SourceRange range;
6425     range.setBegin(ReadSourceLocation());
6426     range.setEnd(ReadSourceLocation());
6427     TL.setAttrOperandParensRange(range);
6428     TL.setAttrExprOperand(Reader->ReadExpr(*F));
6429 }
6430 
6431 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6432                                         DependentSizedExtVectorTypeLoc TL) {
6433   TL.setNameLoc(ReadSourceLocation());
6434 }
6435 
6436 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6437   TL.setNameLoc(ReadSourceLocation());
6438 }
6439 
6440 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6441   TL.setNameLoc(ReadSourceLocation());
6442 }
6443 
6444 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6445   TL.setLocalRangeBegin(ReadSourceLocation());
6446   TL.setLParenLoc(ReadSourceLocation());
6447   TL.setRParenLoc(ReadSourceLocation());
6448   TL.setExceptionSpecRange(SourceRange(Reader->ReadSourceLocation(*F, Record, Idx),
6449                                        Reader->ReadSourceLocation(*F, Record, Idx)));
6450   TL.setLocalRangeEnd(ReadSourceLocation());
6451   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6452     TL.setParam(i, Reader->ReadDeclAs<ParmVarDecl>(*F, Record, Idx));
6453   }
6454 }
6455 
6456 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6457   VisitFunctionTypeLoc(TL);
6458 }
6459 
6460 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6461   VisitFunctionTypeLoc(TL);
6462 }
6463 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6464   TL.setNameLoc(ReadSourceLocation());
6465 }
6466 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6467   TL.setNameLoc(ReadSourceLocation());
6468 }
6469 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6470   TL.setTypeofLoc(ReadSourceLocation());
6471   TL.setLParenLoc(ReadSourceLocation());
6472   TL.setRParenLoc(ReadSourceLocation());
6473 }
6474 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6475   TL.setTypeofLoc(ReadSourceLocation());
6476   TL.setLParenLoc(ReadSourceLocation());
6477   TL.setRParenLoc(ReadSourceLocation());
6478   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6479 }
6480 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6481   TL.setNameLoc(ReadSourceLocation());
6482 }
6483 
6484 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6485   TL.setKWLoc(ReadSourceLocation());
6486   TL.setLParenLoc(ReadSourceLocation());
6487   TL.setRParenLoc(ReadSourceLocation());
6488   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6489 }
6490 
6491 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6492   TL.setNameLoc(ReadSourceLocation());
6493 }
6494 
6495 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6496     DeducedTemplateSpecializationTypeLoc TL) {
6497   TL.setTemplateNameLoc(ReadSourceLocation());
6498 }
6499 
6500 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6501   TL.setNameLoc(ReadSourceLocation());
6502 }
6503 
6504 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6505   TL.setNameLoc(ReadSourceLocation());
6506 }
6507 
6508 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6509   TL.setAttrNameLoc(ReadSourceLocation());
6510   if (TL.hasAttrOperand()) {
6511     SourceRange range;
6512     range.setBegin(ReadSourceLocation());
6513     range.setEnd(ReadSourceLocation());
6514     TL.setAttrOperandParensRange(range);
6515   }
6516   if (TL.hasAttrExprOperand()) {
6517     if (Record[Idx++])
6518       TL.setAttrExprOperand(Reader->ReadExpr(*F));
6519     else
6520       TL.setAttrExprOperand(nullptr);
6521   } else if (TL.hasAttrEnumOperand())
6522     TL.setAttrEnumOperandLoc(ReadSourceLocation());
6523 }
6524 
6525 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6526   TL.setNameLoc(ReadSourceLocation());
6527 }
6528 
6529 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6530                                             SubstTemplateTypeParmTypeLoc TL) {
6531   TL.setNameLoc(ReadSourceLocation());
6532 }
6533 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6534                                           SubstTemplateTypeParmPackTypeLoc TL) {
6535   TL.setNameLoc(ReadSourceLocation());
6536 }
6537 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6538                                            TemplateSpecializationTypeLoc TL) {
6539   TL.setTemplateKeywordLoc(ReadSourceLocation());
6540   TL.setTemplateNameLoc(ReadSourceLocation());
6541   TL.setLAngleLoc(ReadSourceLocation());
6542   TL.setRAngleLoc(ReadSourceLocation());
6543   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6544     TL.setArgLocInfo(
6545         i,
6546         Reader->GetTemplateArgumentLocInfo(
6547             *F, TL.getTypePtr()->getArg(i).getKind(), Record, Idx));
6548 }
6549 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6550   TL.setLParenLoc(ReadSourceLocation());
6551   TL.setRParenLoc(ReadSourceLocation());
6552 }
6553 
6554 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6555   TL.setElaboratedKeywordLoc(ReadSourceLocation());
6556   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6557 }
6558 
6559 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6560   TL.setNameLoc(ReadSourceLocation());
6561 }
6562 
6563 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6564   TL.setElaboratedKeywordLoc(ReadSourceLocation());
6565   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6566   TL.setNameLoc(ReadSourceLocation());
6567 }
6568 
6569 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6570        DependentTemplateSpecializationTypeLoc TL) {
6571   TL.setElaboratedKeywordLoc(ReadSourceLocation());
6572   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6573   TL.setTemplateKeywordLoc(ReadSourceLocation());
6574   TL.setTemplateNameLoc(ReadSourceLocation());
6575   TL.setLAngleLoc(ReadSourceLocation());
6576   TL.setRAngleLoc(ReadSourceLocation());
6577   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6578     TL.setArgLocInfo(
6579         I,
6580         Reader->GetTemplateArgumentLocInfo(
6581             *F, TL.getTypePtr()->getArg(I).getKind(), Record, Idx));
6582 }
6583 
6584 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6585   TL.setEllipsisLoc(ReadSourceLocation());
6586 }
6587 
6588 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6589   TL.setNameLoc(ReadSourceLocation());
6590 }
6591 
6592 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6593   if (TL.getNumProtocols()) {
6594     TL.setProtocolLAngleLoc(ReadSourceLocation());
6595     TL.setProtocolRAngleLoc(ReadSourceLocation());
6596   }
6597   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6598     TL.setProtocolLoc(i, ReadSourceLocation());
6599 }
6600 
6601 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6602   TL.setHasBaseTypeAsWritten(Record[Idx++]);
6603   TL.setTypeArgsLAngleLoc(ReadSourceLocation());
6604   TL.setTypeArgsRAngleLoc(ReadSourceLocation());
6605   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6606     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6607   TL.setProtocolLAngleLoc(ReadSourceLocation());
6608   TL.setProtocolRAngleLoc(ReadSourceLocation());
6609   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6610     TL.setProtocolLoc(i, ReadSourceLocation());
6611 }
6612 
6613 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6614   TL.setStarLoc(ReadSourceLocation());
6615 }
6616 
6617 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6618   TL.setKWLoc(ReadSourceLocation());
6619   TL.setLParenLoc(ReadSourceLocation());
6620   TL.setRParenLoc(ReadSourceLocation());
6621 }
6622 
6623 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6624   TL.setKWLoc(ReadSourceLocation());
6625 }
6626 
6627 TypeSourceInfo *
6628 ASTReader::GetTypeSourceInfo(ModuleFile &F, const ASTReader::RecordData &Record,
6629                              unsigned &Idx) {
6630   QualType InfoTy = readType(F, Record, Idx);
6631   if (InfoTy.isNull())
6632     return nullptr;
6633 
6634   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6635   TypeLocReader TLR(F, *this, Record, Idx);
6636   for (TypeLoc TL = TInfo->getTypeLoc(); !TL.isNull(); TL = TL.getNextTypeLoc())
6637     TLR.Visit(TL);
6638   return TInfo;
6639 }
6640 
6641 QualType ASTReader::GetType(TypeID ID) {
6642   assert(ContextObj && "reading type with no AST context");
6643   ASTContext &Context = *ContextObj;
6644 
6645   unsigned FastQuals = ID & Qualifiers::FastMask;
6646   unsigned Index = ID >> Qualifiers::FastWidth;
6647 
6648   if (Index < NUM_PREDEF_TYPE_IDS) {
6649     QualType T;
6650     switch ((PredefinedTypeIDs)Index) {
6651     case PREDEF_TYPE_NULL_ID:
6652       return QualType();
6653     case PREDEF_TYPE_VOID_ID:
6654       T = Context.VoidTy;
6655       break;
6656     case PREDEF_TYPE_BOOL_ID:
6657       T = Context.BoolTy;
6658       break;
6659 
6660     case PREDEF_TYPE_CHAR_U_ID:
6661     case PREDEF_TYPE_CHAR_S_ID:
6662       // FIXME: Check that the signedness of CharTy is correct!
6663       T = Context.CharTy;
6664       break;
6665 
6666     case PREDEF_TYPE_UCHAR_ID:
6667       T = Context.UnsignedCharTy;
6668       break;
6669     case PREDEF_TYPE_USHORT_ID:
6670       T = Context.UnsignedShortTy;
6671       break;
6672     case PREDEF_TYPE_UINT_ID:
6673       T = Context.UnsignedIntTy;
6674       break;
6675     case PREDEF_TYPE_ULONG_ID:
6676       T = Context.UnsignedLongTy;
6677       break;
6678     case PREDEF_TYPE_ULONGLONG_ID:
6679       T = Context.UnsignedLongLongTy;
6680       break;
6681     case PREDEF_TYPE_UINT128_ID:
6682       T = Context.UnsignedInt128Ty;
6683       break;
6684     case PREDEF_TYPE_SCHAR_ID:
6685       T = Context.SignedCharTy;
6686       break;
6687     case PREDEF_TYPE_WCHAR_ID:
6688       T = Context.WCharTy;
6689       break;
6690     case PREDEF_TYPE_SHORT_ID:
6691       T = Context.ShortTy;
6692       break;
6693     case PREDEF_TYPE_INT_ID:
6694       T = Context.IntTy;
6695       break;
6696     case PREDEF_TYPE_LONG_ID:
6697       T = Context.LongTy;
6698       break;
6699     case PREDEF_TYPE_LONGLONG_ID:
6700       T = Context.LongLongTy;
6701       break;
6702     case PREDEF_TYPE_INT128_ID:
6703       T = Context.Int128Ty;
6704       break;
6705     case PREDEF_TYPE_HALF_ID:
6706       T = Context.HalfTy;
6707       break;
6708     case PREDEF_TYPE_FLOAT_ID:
6709       T = Context.FloatTy;
6710       break;
6711     case PREDEF_TYPE_DOUBLE_ID:
6712       T = Context.DoubleTy;
6713       break;
6714     case PREDEF_TYPE_LONGDOUBLE_ID:
6715       T = Context.LongDoubleTy;
6716       break;
6717     case PREDEF_TYPE_FLOAT16_ID:
6718       T = Context.Float16Ty;
6719       break;
6720     case PREDEF_TYPE_FLOAT128_ID:
6721       T = Context.Float128Ty;
6722       break;
6723     case PREDEF_TYPE_OVERLOAD_ID:
6724       T = Context.OverloadTy;
6725       break;
6726     case PREDEF_TYPE_BOUND_MEMBER:
6727       T = Context.BoundMemberTy;
6728       break;
6729     case PREDEF_TYPE_PSEUDO_OBJECT:
6730       T = Context.PseudoObjectTy;
6731       break;
6732     case PREDEF_TYPE_DEPENDENT_ID:
6733       T = Context.DependentTy;
6734       break;
6735     case PREDEF_TYPE_UNKNOWN_ANY:
6736       T = Context.UnknownAnyTy;
6737       break;
6738     case PREDEF_TYPE_NULLPTR_ID:
6739       T = Context.NullPtrTy;
6740       break;
6741     case PREDEF_TYPE_CHAR16_ID:
6742       T = Context.Char16Ty;
6743       break;
6744     case PREDEF_TYPE_CHAR32_ID:
6745       T = Context.Char32Ty;
6746       break;
6747     case PREDEF_TYPE_OBJC_ID:
6748       T = Context.ObjCBuiltinIdTy;
6749       break;
6750     case PREDEF_TYPE_OBJC_CLASS:
6751       T = Context.ObjCBuiltinClassTy;
6752       break;
6753     case PREDEF_TYPE_OBJC_SEL:
6754       T = Context.ObjCBuiltinSelTy;
6755       break;
6756 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6757     case PREDEF_TYPE_##Id##_ID: \
6758       T = Context.SingletonId; \
6759       break;
6760 #include "clang/Basic/OpenCLImageTypes.def"
6761     case PREDEF_TYPE_SAMPLER_ID:
6762       T = Context.OCLSamplerTy;
6763       break;
6764     case PREDEF_TYPE_EVENT_ID:
6765       T = Context.OCLEventTy;
6766       break;
6767     case PREDEF_TYPE_CLK_EVENT_ID:
6768       T = Context.OCLClkEventTy;
6769       break;
6770     case PREDEF_TYPE_QUEUE_ID:
6771       T = Context.OCLQueueTy;
6772       break;
6773     case PREDEF_TYPE_RESERVE_ID_ID:
6774       T = Context.OCLReserveIDTy;
6775       break;
6776     case PREDEF_TYPE_AUTO_DEDUCT:
6777       T = Context.getAutoDeductType();
6778       break;
6779 
6780     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
6781       T = Context.getAutoRRefDeductType();
6782       break;
6783 
6784     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
6785       T = Context.ARCUnbridgedCastTy;
6786       break;
6787 
6788     case PREDEF_TYPE_BUILTIN_FN:
6789       T = Context.BuiltinFnTy;
6790       break;
6791 
6792     case PREDEF_TYPE_OMP_ARRAY_SECTION:
6793       T = Context.OMPArraySectionTy;
6794       break;
6795     }
6796 
6797     assert(!T.isNull() && "Unknown predefined type");
6798     return T.withFastQualifiers(FastQuals);
6799   }
6800 
6801   Index -= NUM_PREDEF_TYPE_IDS;
6802   assert(Index < TypesLoaded.size() && "Type index out-of-range");
6803   if (TypesLoaded[Index].isNull()) {
6804     TypesLoaded[Index] = readTypeRecord(Index);
6805     if (TypesLoaded[Index].isNull())
6806       return QualType();
6807 
6808     TypesLoaded[Index]->setFromAST();
6809     if (DeserializationListener)
6810       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
6811                                         TypesLoaded[Index]);
6812   }
6813 
6814   return TypesLoaded[Index].withFastQualifiers(FastQuals);
6815 }
6816 
6817 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
6818   return GetType(getGlobalTypeID(F, LocalID));
6819 }
6820 
6821 serialization::TypeID
6822 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
6823   unsigned FastQuals = LocalID & Qualifiers::FastMask;
6824   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
6825 
6826   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
6827     return LocalID;
6828 
6829   if (!F.ModuleOffsetMap.empty())
6830     ReadModuleOffsetMap(F);
6831 
6832   ContinuousRangeMap<uint32_t, int, 2>::iterator I
6833     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
6834   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
6835 
6836   unsigned GlobalIndex = LocalIndex + I->second;
6837   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
6838 }
6839 
6840 TemplateArgumentLocInfo
6841 ASTReader::GetTemplateArgumentLocInfo(ModuleFile &F,
6842                                       TemplateArgument::ArgKind Kind,
6843                                       const RecordData &Record,
6844                                       unsigned &Index) {
6845   switch (Kind) {
6846   case TemplateArgument::Expression:
6847     return ReadExpr(F);
6848   case TemplateArgument::Type:
6849     return GetTypeSourceInfo(F, Record, Index);
6850   case TemplateArgument::Template: {
6851     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6852                                                                      Index);
6853     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6854     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6855                                    SourceLocation());
6856   }
6857   case TemplateArgument::TemplateExpansion: {
6858     NestedNameSpecifierLoc QualifierLoc = ReadNestedNameSpecifierLoc(F, Record,
6859                                                                      Index);
6860     SourceLocation TemplateNameLoc = ReadSourceLocation(F, Record, Index);
6861     SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Index);
6862     return TemplateArgumentLocInfo(QualifierLoc, TemplateNameLoc,
6863                                    EllipsisLoc);
6864   }
6865   case TemplateArgument::Null:
6866   case TemplateArgument::Integral:
6867   case TemplateArgument::Declaration:
6868   case TemplateArgument::NullPtr:
6869   case TemplateArgument::Pack:
6870     // FIXME: Is this right?
6871     return TemplateArgumentLocInfo();
6872   }
6873   llvm_unreachable("unexpected template argument loc");
6874 }
6875 
6876 TemplateArgumentLoc
6877 ASTReader::ReadTemplateArgumentLoc(ModuleFile &F,
6878                                    const RecordData &Record, unsigned &Index) {
6879   TemplateArgument Arg = ReadTemplateArgument(F, Record, Index);
6880 
6881   if (Arg.getKind() == TemplateArgument::Expression) {
6882     if (Record[Index++]) // bool InfoHasSameExpr.
6883       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
6884   }
6885   return TemplateArgumentLoc(Arg, GetTemplateArgumentLocInfo(F, Arg.getKind(),
6886                                                              Record, Index));
6887 }
6888 
6889 const ASTTemplateArgumentListInfo*
6890 ASTReader::ReadASTTemplateArgumentListInfo(ModuleFile &F,
6891                                            const RecordData &Record,
6892                                            unsigned &Index) {
6893   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Index);
6894   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Index);
6895   unsigned NumArgsAsWritten = Record[Index++];
6896   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
6897   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
6898     TemplArgsInfo.addArgument(ReadTemplateArgumentLoc(F, Record, Index));
6899   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
6900 }
6901 
6902 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
6903   return GetDecl(ID);
6904 }
6905 
6906 void ASTReader::CompleteRedeclChain(const Decl *D) {
6907   if (NumCurrentElementsDeserializing) {
6908     // We arrange to not care about the complete redeclaration chain while we're
6909     // deserializing. Just remember that the AST has marked this one as complete
6910     // but that it's not actually complete yet, so we know we still need to
6911     // complete it later.
6912     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
6913     return;
6914   }
6915 
6916   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
6917 
6918   // If this is a named declaration, complete it by looking it up
6919   // within its context.
6920   //
6921   // FIXME: Merging a function definition should merge
6922   // all mergeable entities within it.
6923   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
6924       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
6925     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
6926       if (!getContext().getLangOpts().CPlusPlus &&
6927           isa<TranslationUnitDecl>(DC)) {
6928         // Outside of C++, we don't have a lookup table for the TU, so update
6929         // the identifier instead. (For C++ modules, we don't store decls
6930         // in the serialized identifier table, so we do the lookup in the TU.)
6931         auto *II = Name.getAsIdentifierInfo();
6932         assert(II && "non-identifier name in C?");
6933         if (II->isOutOfDate())
6934           updateOutOfDateIdentifier(*II);
6935       } else
6936         DC->lookup(Name);
6937     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
6938       // Find all declarations of this kind from the relevant context.
6939       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
6940         auto *DC = cast<DeclContext>(DCDecl);
6941         SmallVector<Decl*, 8> Decls;
6942         FindExternalLexicalDecls(
6943             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
6944       }
6945     }
6946   }
6947 
6948   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
6949     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
6950   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
6951     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
6952   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
6953     if (auto *Template = FD->getPrimaryTemplate())
6954       Template->LoadLazySpecializations();
6955   }
6956 }
6957 
6958 CXXCtorInitializer **
6959 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
6960   RecordLocation Loc = getLocalBitOffset(Offset);
6961   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
6962   SavedStreamPosition SavedPosition(Cursor);
6963   Cursor.JumpToBit(Loc.Offset);
6964   ReadingKindTracker ReadingKind(Read_Decl, *this);
6965 
6966   RecordData Record;
6967   unsigned Code = Cursor.ReadCode();
6968   unsigned RecCode = Cursor.readRecord(Code, Record);
6969   if (RecCode != DECL_CXX_CTOR_INITIALIZERS) {
6970     Error("malformed AST file: missing C++ ctor initializers");
6971     return nullptr;
6972   }
6973 
6974   unsigned Idx = 0;
6975   return ReadCXXCtorInitializers(*Loc.F, Record, Idx);
6976 }
6977 
6978 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
6979   assert(ContextObj && "reading base specifiers with no AST context");
6980   ASTContext &Context = *ContextObj;
6981 
6982   RecordLocation Loc = getLocalBitOffset(Offset);
6983   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
6984   SavedStreamPosition SavedPosition(Cursor);
6985   Cursor.JumpToBit(Loc.Offset);
6986   ReadingKindTracker ReadingKind(Read_Decl, *this);
6987   RecordData Record;
6988   unsigned Code = Cursor.ReadCode();
6989   unsigned RecCode = Cursor.readRecord(Code, Record);
6990   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
6991     Error("malformed AST file: missing C++ base specifiers");
6992     return nullptr;
6993   }
6994 
6995   unsigned Idx = 0;
6996   unsigned NumBases = Record[Idx++];
6997   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
6998   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
6999   for (unsigned I = 0; I != NumBases; ++I)
7000     Bases[I] = ReadCXXBaseSpecifier(*Loc.F, Record, Idx);
7001   return Bases;
7002 }
7003 
7004 serialization::DeclID
7005 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7006   if (LocalID < NUM_PREDEF_DECL_IDS)
7007     return LocalID;
7008 
7009   if (!F.ModuleOffsetMap.empty())
7010     ReadModuleOffsetMap(F);
7011 
7012   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7013     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7014   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7015 
7016   return LocalID + I->second;
7017 }
7018 
7019 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7020                                    ModuleFile &M) const {
7021   // Predefined decls aren't from any module.
7022   if (ID < NUM_PREDEF_DECL_IDS)
7023     return false;
7024 
7025   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7026          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7027 }
7028 
7029 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7030   if (!D->isFromASTFile())
7031     return nullptr;
7032   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7033   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7034   return I->second;
7035 }
7036 
7037 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7038   if (ID < NUM_PREDEF_DECL_IDS)
7039     return SourceLocation();
7040 
7041   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7042 
7043   if (Index > DeclsLoaded.size()) {
7044     Error("declaration ID out-of-range for AST file");
7045     return SourceLocation();
7046   }
7047 
7048   if (Decl *D = DeclsLoaded[Index])
7049     return D->getLocation();
7050 
7051   SourceLocation Loc;
7052   DeclCursorForID(ID, Loc);
7053   return Loc;
7054 }
7055 
7056 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7057   switch (ID) {
7058   case PREDEF_DECL_NULL_ID:
7059     return nullptr;
7060 
7061   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7062     return Context.getTranslationUnitDecl();
7063 
7064   case PREDEF_DECL_OBJC_ID_ID:
7065     return Context.getObjCIdDecl();
7066 
7067   case PREDEF_DECL_OBJC_SEL_ID:
7068     return Context.getObjCSelDecl();
7069 
7070   case PREDEF_DECL_OBJC_CLASS_ID:
7071     return Context.getObjCClassDecl();
7072 
7073   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7074     return Context.getObjCProtocolDecl();
7075 
7076   case PREDEF_DECL_INT_128_ID:
7077     return Context.getInt128Decl();
7078 
7079   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7080     return Context.getUInt128Decl();
7081 
7082   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7083     return Context.getObjCInstanceTypeDecl();
7084 
7085   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7086     return Context.getBuiltinVaListDecl();
7087 
7088   case PREDEF_DECL_VA_LIST_TAG:
7089     return Context.getVaListTagDecl();
7090 
7091   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7092     return Context.getBuiltinMSVaListDecl();
7093 
7094   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7095     return Context.getExternCContextDecl();
7096 
7097   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7098     return Context.getMakeIntegerSeqDecl();
7099 
7100   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7101     return Context.getCFConstantStringDecl();
7102 
7103   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7104     return Context.getCFConstantStringTagDecl();
7105 
7106   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7107     return Context.getTypePackElementDecl();
7108   }
7109   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7110 }
7111 
7112 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7113   assert(ContextObj && "reading decl with no AST context");
7114   if (ID < NUM_PREDEF_DECL_IDS) {
7115     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7116     if (D) {
7117       // Track that we have merged the declaration with ID \p ID into the
7118       // pre-existing predefined declaration \p D.
7119       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7120       if (Merged.empty())
7121         Merged.push_back(ID);
7122     }
7123     return D;
7124   }
7125 
7126   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7127 
7128   if (Index >= DeclsLoaded.size()) {
7129     assert(0 && "declaration ID out-of-range for AST file");
7130     Error("declaration ID out-of-range for AST file");
7131     return nullptr;
7132   }
7133 
7134   return DeclsLoaded[Index];
7135 }
7136 
7137 Decl *ASTReader::GetDecl(DeclID ID) {
7138   if (ID < NUM_PREDEF_DECL_IDS)
7139     return GetExistingDecl(ID);
7140 
7141   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7142 
7143   if (Index >= DeclsLoaded.size()) {
7144     assert(0 && "declaration ID out-of-range for AST file");
7145     Error("declaration ID out-of-range for AST file");
7146     return nullptr;
7147   }
7148 
7149   if (!DeclsLoaded[Index]) {
7150     ReadDeclRecord(ID);
7151     if (DeserializationListener)
7152       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7153   }
7154 
7155   return DeclsLoaded[Index];
7156 }
7157 
7158 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7159                                                   DeclID GlobalID) {
7160   if (GlobalID < NUM_PREDEF_DECL_IDS)
7161     return GlobalID;
7162 
7163   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7164   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7165   ModuleFile *Owner = I->second;
7166 
7167   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7168     = M.GlobalToLocalDeclIDs.find(Owner);
7169   if (Pos == M.GlobalToLocalDeclIDs.end())
7170     return 0;
7171 
7172   return GlobalID - Owner->BaseDeclID + Pos->second;
7173 }
7174 
7175 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7176                                             const RecordData &Record,
7177                                             unsigned &Idx) {
7178   if (Idx >= Record.size()) {
7179     Error("Corrupted AST file");
7180     return 0;
7181   }
7182 
7183   return getGlobalDeclID(F, Record[Idx++]);
7184 }
7185 
7186 /// \brief Resolve the offset of a statement into a statement.
7187 ///
7188 /// This operation will read a new statement from the external
7189 /// source each time it is called, and is meant to be used via a
7190 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7191 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7192   // Switch case IDs are per Decl.
7193   ClearSwitchCaseIDs();
7194 
7195   // Offset here is a global offset across the entire chain.
7196   RecordLocation Loc = getLocalBitOffset(Offset);
7197   Loc.F->DeclsCursor.JumpToBit(Loc.Offset);
7198   assert(NumCurrentElementsDeserializing == 0 &&
7199          "should not be called while already deserializing");
7200   Deserializing D(this);
7201   return ReadStmtFromStream(*Loc.F);
7202 }
7203 
7204 void ASTReader::FindExternalLexicalDecls(
7205     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7206     SmallVectorImpl<Decl *> &Decls) {
7207   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7208 
7209   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7210     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7211     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7212       auto K = (Decl::Kind)+LexicalDecls[I];
7213       if (!IsKindWeWant(K))
7214         continue;
7215 
7216       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7217 
7218       // Don't add predefined declarations to the lexical context more
7219       // than once.
7220       if (ID < NUM_PREDEF_DECL_IDS) {
7221         if (PredefsVisited[ID])
7222           continue;
7223 
7224         PredefsVisited[ID] = true;
7225       }
7226 
7227       if (Decl *D = GetLocalDecl(*M, ID)) {
7228         assert(D->getKind() == K && "wrong kind for lexical decl");
7229         if (!DC->isDeclInLexicalTraversal(D))
7230           Decls.push_back(D);
7231       }
7232     }
7233   };
7234 
7235   if (isa<TranslationUnitDecl>(DC)) {
7236     for (auto Lexical : TULexicalDecls)
7237       Visit(Lexical.first, Lexical.second);
7238   } else {
7239     auto I = LexicalDecls.find(DC);
7240     if (I != LexicalDecls.end())
7241       Visit(I->second.first, I->second.second);
7242   }
7243 
7244   ++NumLexicalDeclContextsRead;
7245 }
7246 
7247 namespace {
7248 
7249 class DeclIDComp {
7250   ASTReader &Reader;
7251   ModuleFile &Mod;
7252 
7253 public:
7254   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7255 
7256   bool operator()(LocalDeclID L, LocalDeclID R) const {
7257     SourceLocation LHS = getLocation(L);
7258     SourceLocation RHS = getLocation(R);
7259     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7260   }
7261 
7262   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7263     SourceLocation RHS = getLocation(R);
7264     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7265   }
7266 
7267   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7268     SourceLocation LHS = getLocation(L);
7269     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7270   }
7271 
7272   SourceLocation getLocation(LocalDeclID ID) const {
7273     return Reader.getSourceManager().getFileLoc(
7274             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7275   }
7276 };
7277 
7278 } // end anonymous namespace
7279 
7280 void ASTReader::FindFileRegionDecls(FileID File,
7281                                     unsigned Offset, unsigned Length,
7282                                     SmallVectorImpl<Decl *> &Decls) {
7283   SourceManager &SM = getSourceManager();
7284 
7285   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7286   if (I == FileDeclIDs.end())
7287     return;
7288 
7289   FileDeclsInfo &DInfo = I->second;
7290   if (DInfo.Decls.empty())
7291     return;
7292 
7293   SourceLocation
7294     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7295   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7296 
7297   DeclIDComp DIDComp(*this, *DInfo.Mod);
7298   ArrayRef<serialization::LocalDeclID>::iterator
7299     BeginIt = std::lower_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
7300                                BeginLoc, DIDComp);
7301   if (BeginIt != DInfo.Decls.begin())
7302     --BeginIt;
7303 
7304   // If we are pointing at a top-level decl inside an objc container, we need
7305   // to backtrack until we find it otherwise we will fail to report that the
7306   // region overlaps with an objc container.
7307   while (BeginIt != DInfo.Decls.begin() &&
7308          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7309              ->isTopLevelDeclInObjCContainer())
7310     --BeginIt;
7311 
7312   ArrayRef<serialization::LocalDeclID>::iterator
7313     EndIt = std::upper_bound(DInfo.Decls.begin(), DInfo.Decls.end(),
7314                              EndLoc, DIDComp);
7315   if (EndIt != DInfo.Decls.end())
7316     ++EndIt;
7317 
7318   for (ArrayRef<serialization::LocalDeclID>::iterator
7319          DIt = BeginIt; DIt != EndIt; ++DIt)
7320     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7321 }
7322 
7323 bool
7324 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7325                                           DeclarationName Name) {
7326   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7327          "DeclContext has no visible decls in storage");
7328   if (!Name)
7329     return false;
7330 
7331   auto It = Lookups.find(DC);
7332   if (It == Lookups.end())
7333     return false;
7334 
7335   Deserializing LookupResults(this);
7336 
7337   // Load the list of declarations.
7338   SmallVector<NamedDecl *, 64> Decls;
7339   for (DeclID ID : It->second.Table.find(Name)) {
7340     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7341     if (ND->getDeclName() == Name)
7342       Decls.push_back(ND);
7343   }
7344 
7345   ++NumVisibleDeclContextsRead;
7346   SetExternalVisibleDeclsForName(DC, Name, Decls);
7347   return !Decls.empty();
7348 }
7349 
7350 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7351   if (!DC->hasExternalVisibleStorage())
7352     return;
7353 
7354   auto It = Lookups.find(DC);
7355   assert(It != Lookups.end() &&
7356          "have external visible storage but no lookup tables");
7357 
7358   DeclsMap Decls;
7359 
7360   for (DeclID ID : It->second.Table.findAll()) {
7361     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7362     Decls[ND->getDeclName()].push_back(ND);
7363   }
7364 
7365   ++NumVisibleDeclContextsRead;
7366 
7367   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7368     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7369   }
7370   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7371 }
7372 
7373 const serialization::reader::DeclContextLookupTable *
7374 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7375   auto I = Lookups.find(Primary);
7376   return I == Lookups.end() ? nullptr : &I->second;
7377 }
7378 
7379 /// \brief Under non-PCH compilation the consumer receives the objc methods
7380 /// before receiving the implementation, and codegen depends on this.
7381 /// We simulate this by deserializing and passing to consumer the methods of the
7382 /// implementation before passing the deserialized implementation decl.
7383 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7384                                        ASTConsumer *Consumer) {
7385   assert(ImplD && Consumer);
7386 
7387   for (auto *I : ImplD->methods())
7388     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7389 
7390   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7391 }
7392 
7393 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7394   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7395     PassObjCImplDeclToConsumer(ImplD, Consumer);
7396   else
7397     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7398 }
7399 
7400 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7401   this->Consumer = Consumer;
7402 
7403   if (Consumer)
7404     PassInterestingDeclsToConsumer();
7405 
7406   if (DeserializationListener)
7407     DeserializationListener->ReaderInitialized(this);
7408 }
7409 
7410 void ASTReader::PrintStats() {
7411   std::fprintf(stderr, "*** AST File Statistics:\n");
7412 
7413   unsigned NumTypesLoaded
7414     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7415                                       QualType());
7416   unsigned NumDeclsLoaded
7417     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7418                                       (Decl *)nullptr);
7419   unsigned NumIdentifiersLoaded
7420     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7421                                             IdentifiersLoaded.end(),
7422                                             (IdentifierInfo *)nullptr);
7423   unsigned NumMacrosLoaded
7424     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7425                                        MacrosLoaded.end(),
7426                                        (MacroInfo *)nullptr);
7427   unsigned NumSelectorsLoaded
7428     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7429                                           SelectorsLoaded.end(),
7430                                           Selector());
7431 
7432   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7433     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7434                  NumSLocEntriesRead, TotalNumSLocEntries,
7435                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7436   if (!TypesLoaded.empty())
7437     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7438                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7439                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7440   if (!DeclsLoaded.empty())
7441     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7442                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7443                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7444   if (!IdentifiersLoaded.empty())
7445     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7446                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7447                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7448   if (!MacrosLoaded.empty())
7449     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7450                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7451                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7452   if (!SelectorsLoaded.empty())
7453     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7454                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7455                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7456   if (TotalNumStatements)
7457     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7458                  NumStatementsRead, TotalNumStatements,
7459                  ((float)NumStatementsRead/TotalNumStatements * 100));
7460   if (TotalNumMacros)
7461     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7462                  NumMacrosRead, TotalNumMacros,
7463                  ((float)NumMacrosRead/TotalNumMacros * 100));
7464   if (TotalLexicalDeclContexts)
7465     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7466                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7467                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7468                   * 100));
7469   if (TotalVisibleDeclContexts)
7470     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7471                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7472                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7473                   * 100));
7474   if (TotalNumMethodPoolEntries) {
7475     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7476                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7477                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7478                   * 100));
7479   }
7480   if (NumMethodPoolLookups) {
7481     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7482                  NumMethodPoolHits, NumMethodPoolLookups,
7483                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7484   }
7485   if (NumMethodPoolTableLookups) {
7486     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7487                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7488                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7489                   * 100.0));
7490   }
7491 
7492   if (NumIdentifierLookupHits) {
7493     std::fprintf(stderr,
7494                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7495                  NumIdentifierLookupHits, NumIdentifierLookups,
7496                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7497   }
7498 
7499   if (GlobalIndex) {
7500     std::fprintf(stderr, "\n");
7501     GlobalIndex->printStats();
7502   }
7503 
7504   std::fprintf(stderr, "\n");
7505   dump();
7506   std::fprintf(stderr, "\n");
7507 }
7508 
7509 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7510 LLVM_DUMP_METHOD static void
7511 dumpModuleIDMap(StringRef Name,
7512                 const ContinuousRangeMap<Key, ModuleFile *,
7513                                          InitialCapacity> &Map) {
7514   if (Map.begin() == Map.end())
7515     return;
7516 
7517   typedef ContinuousRangeMap<Key, ModuleFile *, InitialCapacity> MapType;
7518   llvm::errs() << Name << ":\n";
7519   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7520        I != IEnd; ++I) {
7521     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7522       << "\n";
7523   }
7524 }
7525 
7526 LLVM_DUMP_METHOD void ASTReader::dump() {
7527   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7528   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7529   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7530   dumpModuleIDMap("Global type map", GlobalTypeMap);
7531   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7532   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7533   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7534   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7535   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7536   dumpModuleIDMap("Global preprocessed entity map",
7537                   GlobalPreprocessedEntityMap);
7538 
7539   llvm::errs() << "\n*** PCH/Modules Loaded:";
7540   for (ModuleFile &M : ModuleMgr)
7541     M.dump();
7542 }
7543 
7544 /// Return the amount of memory used by memory buffers, breaking down
7545 /// by heap-backed versus mmap'ed memory.
7546 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7547   for (ModuleFile &I : ModuleMgr) {
7548     if (llvm::MemoryBuffer *buf = I.Buffer) {
7549       size_t bytes = buf->getBufferSize();
7550       switch (buf->getBufferKind()) {
7551         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7552           sizes.malloc_bytes += bytes;
7553           break;
7554         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7555           sizes.mmap_bytes += bytes;
7556           break;
7557       }
7558     }
7559   }
7560 }
7561 
7562 void ASTReader::InitializeSema(Sema &S) {
7563   SemaObj = &S;
7564   S.addExternalSource(this);
7565 
7566   // Makes sure any declarations that were deserialized "too early"
7567   // still get added to the identifier's declaration chains.
7568   for (uint64_t ID : PreloadedDeclIDs) {
7569     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7570     pushExternalDeclIntoScope(D, D->getDeclName());
7571   }
7572   PreloadedDeclIDs.clear();
7573 
7574   // FIXME: What happens if these are changed by a module import?
7575   if (!FPPragmaOptions.empty()) {
7576     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7577     SemaObj->FPFeatures = FPOptions(FPPragmaOptions[0]);
7578   }
7579 
7580   SemaObj->OpenCLFeatures.copy(OpenCLExtensions);
7581   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7582   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7583 
7584   UpdateSema();
7585 }
7586 
7587 void ASTReader::UpdateSema() {
7588   assert(SemaObj && "no Sema to update");
7589 
7590   // Load the offsets of the declarations that Sema references.
7591   // They will be lazily deserialized when needed.
7592   if (!SemaDeclRefs.empty()) {
7593     assert(SemaDeclRefs.size() % 3 == 0);
7594     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7595       if (!SemaObj->StdNamespace)
7596         SemaObj->StdNamespace = SemaDeclRefs[I];
7597       if (!SemaObj->StdBadAlloc)
7598         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7599       if (!SemaObj->StdAlignValT)
7600         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7601     }
7602     SemaDeclRefs.clear();
7603   }
7604 
7605   // Update the state of pragmas. Use the same API as if we had encountered the
7606   // pragma in the source.
7607   if(OptimizeOffPragmaLocation.isValid())
7608     SemaObj->ActOnPragmaOptimize(/* IsOn = */ false, OptimizeOffPragmaLocation);
7609   if (PragmaMSStructState != -1)
7610     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7611   if (PointersToMembersPragmaLocation.isValid()) {
7612     SemaObj->ActOnPragmaMSPointersToMembers(
7613         (LangOptions::PragmaMSPointersToMembersKind)
7614             PragmaMSPointersToMembersState,
7615         PointersToMembersPragmaLocation);
7616   }
7617   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7618 
7619   if (PragmaPackCurrentValue) {
7620     // The bottom of the stack might have a default value. It must be adjusted
7621     // to the current value to ensure that the packing state is preserved after
7622     // popping entries that were included/imported from a PCH/module.
7623     bool DropFirst = false;
7624     if (!PragmaPackStack.empty() &&
7625         PragmaPackStack.front().Location.isInvalid()) {
7626       assert(PragmaPackStack.front().Value == SemaObj->PackStack.DefaultValue &&
7627              "Expected a default alignment value");
7628       SemaObj->PackStack.Stack.emplace_back(
7629           PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue,
7630           SemaObj->PackStack.CurrentPragmaLocation,
7631           PragmaPackStack.front().PushLocation);
7632       DropFirst = true;
7633     }
7634     for (const auto &Entry :
7635          llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0))
7636       SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value,
7637                                             Entry.Location, Entry.PushLocation);
7638     if (PragmaPackCurrentLocation.isInvalid()) {
7639       assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue &&
7640              "Expected a default alignment value");
7641       // Keep the current values.
7642     } else {
7643       SemaObj->PackStack.CurrentValue = *PragmaPackCurrentValue;
7644       SemaObj->PackStack.CurrentPragmaLocation = PragmaPackCurrentLocation;
7645     }
7646   }
7647 }
7648 
7649 IdentifierInfo *ASTReader::get(StringRef Name) {
7650   // Note that we are loading an identifier.
7651   Deserializing AnIdentifier(this);
7652 
7653   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7654                                   NumIdentifierLookups,
7655                                   NumIdentifierLookupHits);
7656 
7657   // We don't need to do identifier table lookups in C++ modules (we preload
7658   // all interesting declarations, and don't need to use the scope for name
7659   // lookups). Perform the lookup in PCH files, though, since we don't build
7660   // a complete initial identifier table if we're carrying on from a PCH.
7661   if (PP.getLangOpts().CPlusPlus) {
7662     for (auto F : ModuleMgr.pch_modules())
7663       if (Visitor(*F))
7664         break;
7665   } else {
7666     // If there is a global index, look there first to determine which modules
7667     // provably do not have any results for this identifier.
7668     GlobalModuleIndex::HitSet Hits;
7669     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7670     if (!loadGlobalIndex()) {
7671       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7672         HitsPtr = &Hits;
7673       }
7674     }
7675 
7676     ModuleMgr.visit(Visitor, HitsPtr);
7677   }
7678 
7679   IdentifierInfo *II = Visitor.getIdentifierInfo();
7680   markIdentifierUpToDate(II);
7681   return II;
7682 }
7683 
7684 namespace clang {
7685 
7686   /// \brief An identifier-lookup iterator that enumerates all of the
7687   /// identifiers stored within a set of AST files.
7688   class ASTIdentifierIterator : public IdentifierIterator {
7689     /// \brief The AST reader whose identifiers are being enumerated.
7690     const ASTReader &Reader;
7691 
7692     /// \brief The current index into the chain of AST files stored in
7693     /// the AST reader.
7694     unsigned Index;
7695 
7696     /// \brief The current position within the identifier lookup table
7697     /// of the current AST file.
7698     ASTIdentifierLookupTable::key_iterator Current;
7699 
7700     /// \brief The end position within the identifier lookup table of
7701     /// the current AST file.
7702     ASTIdentifierLookupTable::key_iterator End;
7703 
7704     /// \brief Whether to skip any modules in the ASTReader.
7705     bool SkipModules;
7706 
7707   public:
7708     explicit ASTIdentifierIterator(const ASTReader &Reader,
7709                                    bool SkipModules = false);
7710 
7711     StringRef Next() override;
7712   };
7713 
7714 } // end namespace clang
7715 
7716 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
7717                                              bool SkipModules)
7718     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
7719 }
7720 
7721 StringRef ASTIdentifierIterator::Next() {
7722   while (Current == End) {
7723     // If we have exhausted all of our AST files, we're done.
7724     if (Index == 0)
7725       return StringRef();
7726 
7727     --Index;
7728     ModuleFile &F = Reader.ModuleMgr[Index];
7729     if (SkipModules && F.isModule())
7730       continue;
7731 
7732     ASTIdentifierLookupTable *IdTable =
7733         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
7734     Current = IdTable->key_begin();
7735     End = IdTable->key_end();
7736   }
7737 
7738   // We have any identifiers remaining in the current AST file; return
7739   // the next one.
7740   StringRef Result = *Current;
7741   ++Current;
7742   return Result;
7743 }
7744 
7745 namespace {
7746 
7747 /// A utility for appending two IdentifierIterators.
7748 class ChainedIdentifierIterator : public IdentifierIterator {
7749   std::unique_ptr<IdentifierIterator> Current;
7750   std::unique_ptr<IdentifierIterator> Queued;
7751 
7752 public:
7753   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
7754                             std::unique_ptr<IdentifierIterator> Second)
7755       : Current(std::move(First)), Queued(std::move(Second)) {}
7756 
7757   StringRef Next() override {
7758     if (!Current)
7759       return StringRef();
7760 
7761     StringRef result = Current->Next();
7762     if (!result.empty())
7763       return result;
7764 
7765     // Try the queued iterator, which may itself be empty.
7766     Current.reset();
7767     std::swap(Current, Queued);
7768     return Next();
7769   }
7770 };
7771 
7772 } // end anonymous namespace.
7773 
7774 IdentifierIterator *ASTReader::getIdentifiers() {
7775   if (!loadGlobalIndex()) {
7776     std::unique_ptr<IdentifierIterator> ReaderIter(
7777         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
7778     std::unique_ptr<IdentifierIterator> ModulesIter(
7779         GlobalIndex->createIdentifierIterator());
7780     return new ChainedIdentifierIterator(std::move(ReaderIter),
7781                                          std::move(ModulesIter));
7782   }
7783 
7784   return new ASTIdentifierIterator(*this);
7785 }
7786 
7787 namespace clang {
7788 namespace serialization {
7789 
7790   class ReadMethodPoolVisitor {
7791     ASTReader &Reader;
7792     Selector Sel;
7793     unsigned PriorGeneration;
7794     unsigned InstanceBits;
7795     unsigned FactoryBits;
7796     bool InstanceHasMoreThanOneDecl;
7797     bool FactoryHasMoreThanOneDecl;
7798     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
7799     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
7800 
7801   public:
7802     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
7803                           unsigned PriorGeneration)
7804         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration),
7805           InstanceBits(0), FactoryBits(0), InstanceHasMoreThanOneDecl(false),
7806           FactoryHasMoreThanOneDecl(false) {}
7807 
7808     bool operator()(ModuleFile &M) {
7809       if (!M.SelectorLookupTable)
7810         return false;
7811 
7812       // If we've already searched this module file, skip it now.
7813       if (M.Generation <= PriorGeneration)
7814         return true;
7815 
7816       ++Reader.NumMethodPoolTableLookups;
7817       ASTSelectorLookupTable *PoolTable
7818         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
7819       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
7820       if (Pos == PoolTable->end())
7821         return false;
7822 
7823       ++Reader.NumMethodPoolTableHits;
7824       ++Reader.NumSelectorsRead;
7825       // FIXME: Not quite happy with the statistics here. We probably should
7826       // disable this tracking when called via LoadSelector.
7827       // Also, should entries without methods count as misses?
7828       ++Reader.NumMethodPoolEntriesRead;
7829       ASTSelectorLookupTrait::data_type Data = *Pos;
7830       if (Reader.DeserializationListener)
7831         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
7832 
7833       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
7834       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
7835       InstanceBits = Data.InstanceBits;
7836       FactoryBits = Data.FactoryBits;
7837       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
7838       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
7839       return true;
7840     }
7841 
7842     /// \brief Retrieve the instance methods found by this visitor.
7843     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
7844       return InstanceMethods;
7845     }
7846 
7847     /// \brief Retrieve the instance methods found by this visitor.
7848     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
7849       return FactoryMethods;
7850     }
7851 
7852     unsigned getInstanceBits() const { return InstanceBits; }
7853     unsigned getFactoryBits() const { return FactoryBits; }
7854     bool instanceHasMoreThanOneDecl() const {
7855       return InstanceHasMoreThanOneDecl;
7856     }
7857     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
7858   };
7859 
7860 } // end namespace serialization
7861 } // end namespace clang
7862 
7863 /// \brief Add the given set of methods to the method list.
7864 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
7865                              ObjCMethodList &List) {
7866   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
7867     S.addMethodToGlobalList(&List, Methods[I]);
7868   }
7869 }
7870 
7871 void ASTReader::ReadMethodPool(Selector Sel) {
7872   // Get the selector generation and update it to the current generation.
7873   unsigned &Generation = SelectorGeneration[Sel];
7874   unsigned PriorGeneration = Generation;
7875   Generation = getGeneration();
7876   SelectorOutOfDate[Sel] = false;
7877 
7878   // Search for methods defined with this selector.
7879   ++NumMethodPoolLookups;
7880   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
7881   ModuleMgr.visit(Visitor);
7882 
7883   if (Visitor.getInstanceMethods().empty() &&
7884       Visitor.getFactoryMethods().empty())
7885     return;
7886 
7887   ++NumMethodPoolHits;
7888 
7889   if (!getSema())
7890     return;
7891 
7892   Sema &S = *getSema();
7893   Sema::GlobalMethodPool::iterator Pos
7894     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
7895 
7896   Pos->second.first.setBits(Visitor.getInstanceBits());
7897   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
7898   Pos->second.second.setBits(Visitor.getFactoryBits());
7899   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
7900 
7901   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
7902   // when building a module we keep every method individually and may need to
7903   // update hasMoreThanOneDecl as we add the methods.
7904   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
7905   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
7906 }
7907 
7908 void ASTReader::updateOutOfDateSelector(Selector Sel) {
7909   if (SelectorOutOfDate[Sel])
7910     ReadMethodPool(Sel);
7911 }
7912 
7913 void ASTReader::ReadKnownNamespaces(
7914                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
7915   Namespaces.clear();
7916 
7917   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
7918     if (NamespaceDecl *Namespace
7919                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
7920       Namespaces.push_back(Namespace);
7921   }
7922 }
7923 
7924 void ASTReader::ReadUndefinedButUsed(
7925     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
7926   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
7927     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
7928     SourceLocation Loc =
7929         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
7930     Undefined.insert(std::make_pair(D, Loc));
7931   }
7932 }
7933 
7934 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
7935     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
7936                                                      Exprs) {
7937   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
7938     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
7939     uint64_t Count = DelayedDeleteExprs[Idx++];
7940     for (uint64_t C = 0; C < Count; ++C) {
7941       SourceLocation DeleteLoc =
7942           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
7943       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
7944       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
7945     }
7946   }
7947 }
7948 
7949 void ASTReader::ReadTentativeDefinitions(
7950                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
7951   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
7952     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
7953     if (Var)
7954       TentativeDefs.push_back(Var);
7955   }
7956   TentativeDefinitions.clear();
7957 }
7958 
7959 void ASTReader::ReadUnusedFileScopedDecls(
7960                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
7961   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
7962     DeclaratorDecl *D
7963       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
7964     if (D)
7965       Decls.push_back(D);
7966   }
7967   UnusedFileScopedDecls.clear();
7968 }
7969 
7970 void ASTReader::ReadDelegatingConstructors(
7971                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
7972   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
7973     CXXConstructorDecl *D
7974       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
7975     if (D)
7976       Decls.push_back(D);
7977   }
7978   DelegatingCtorDecls.clear();
7979 }
7980 
7981 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
7982   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
7983     TypedefNameDecl *D
7984       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
7985     if (D)
7986       Decls.push_back(D);
7987   }
7988   ExtVectorDecls.clear();
7989 }
7990 
7991 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
7992     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
7993   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
7994        ++I) {
7995     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
7996         GetDecl(UnusedLocalTypedefNameCandidates[I]));
7997     if (D)
7998       Decls.insert(D);
7999   }
8000   UnusedLocalTypedefNameCandidates.clear();
8001 }
8002 
8003 void ASTReader::ReadReferencedSelectors(
8004        SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {
8005   if (ReferencedSelectorsData.empty())
8006     return;
8007 
8008   // If there are @selector references added them to its pool. This is for
8009   // implementation of -Wselector.
8010   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8011   unsigned I = 0;
8012   while (I < DataSize) {
8013     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8014     SourceLocation SelLoc
8015       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8016     Sels.push_back(std::make_pair(Sel, SelLoc));
8017   }
8018   ReferencedSelectorsData.clear();
8019 }
8020 
8021 void ASTReader::ReadWeakUndeclaredIdentifiers(
8022        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WeakIDs) {
8023   if (WeakUndeclaredIdentifiers.empty())
8024     return;
8025 
8026   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8027     IdentifierInfo *WeakId
8028       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8029     IdentifierInfo *AliasId
8030       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8031     SourceLocation Loc
8032       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8033     bool Used = WeakUndeclaredIdentifiers[I++];
8034     WeakInfo WI(AliasId, Loc);
8035     WI.setUsed(Used);
8036     WeakIDs.push_back(std::make_pair(WeakId, WI));
8037   }
8038   WeakUndeclaredIdentifiers.clear();
8039 }
8040 
8041 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8042   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8043     ExternalVTableUse VT;
8044     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8045     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8046     VT.DefinitionRequired = VTableUses[Idx++];
8047     VTables.push_back(VT);
8048   }
8049 
8050   VTableUses.clear();
8051 }
8052 
8053 void ASTReader::ReadPendingInstantiations(
8054        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation> > &Pending) {
8055   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8056     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8057     SourceLocation Loc
8058       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8059 
8060     Pending.push_back(std::make_pair(D, Loc));
8061   }
8062   PendingInstantiations.clear();
8063 }
8064 
8065 void ASTReader::ReadLateParsedTemplates(
8066     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8067         &LPTMap) {
8068   for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N;
8069        /* In loop */) {
8070     FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++]));
8071 
8072     auto LT = llvm::make_unique<LateParsedTemplate>();
8073     LT->D = GetDecl(LateParsedTemplates[Idx++]);
8074 
8075     ModuleFile *F = getOwningModuleFile(LT->D);
8076     assert(F && "No module");
8077 
8078     unsigned TokN = LateParsedTemplates[Idx++];
8079     LT->Toks.reserve(TokN);
8080     for (unsigned T = 0; T < TokN; ++T)
8081       LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx));
8082 
8083     LPTMap.insert(std::make_pair(FD, std::move(LT)));
8084   }
8085 
8086   LateParsedTemplates.clear();
8087 }
8088 
8089 void ASTReader::LoadSelector(Selector Sel) {
8090   // It would be complicated to avoid reading the methods anyway. So don't.
8091   ReadMethodPool(Sel);
8092 }
8093 
8094 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8095   assert(ID && "Non-zero identifier ID required");
8096   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8097   IdentifiersLoaded[ID - 1] = II;
8098   if (DeserializationListener)
8099     DeserializationListener->IdentifierRead(ID, II);
8100 }
8101 
8102 /// \brief Set the globally-visible declarations associated with the given
8103 /// identifier.
8104 ///
8105 /// If the AST reader is currently in a state where the given declaration IDs
8106 /// cannot safely be resolved, they are queued until it is safe to resolve
8107 /// them.
8108 ///
8109 /// \param II an IdentifierInfo that refers to one or more globally-visible
8110 /// declarations.
8111 ///
8112 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8113 /// visible at global scope.
8114 ///
8115 /// \param Decls if non-null, this vector will be populated with the set of
8116 /// deserialized declarations. These declarations will not be pushed into
8117 /// scope.
8118 void
8119 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8120                               const SmallVectorImpl<uint32_t> &DeclIDs,
8121                                    SmallVectorImpl<Decl *> *Decls) {
8122   if (NumCurrentElementsDeserializing && !Decls) {
8123     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8124     return;
8125   }
8126 
8127   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8128     if (!SemaObj) {
8129       // Queue this declaration so that it will be added to the
8130       // translation unit scope and identifier's declaration chain
8131       // once a Sema object is known.
8132       PreloadedDeclIDs.push_back(DeclIDs[I]);
8133       continue;
8134     }
8135 
8136     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8137 
8138     // If we're simply supposed to record the declarations, do so now.
8139     if (Decls) {
8140       Decls->push_back(D);
8141       continue;
8142     }
8143 
8144     // Introduce this declaration into the translation-unit scope
8145     // and add it to the declaration chain for this identifier, so
8146     // that (unqualified) name lookup will find it.
8147     pushExternalDeclIntoScope(D, II);
8148   }
8149 }
8150 
8151 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8152   if (ID == 0)
8153     return nullptr;
8154 
8155   if (IdentifiersLoaded.empty()) {
8156     Error("no identifier table in AST file");
8157     return nullptr;
8158   }
8159 
8160   ID -= 1;
8161   if (!IdentifiersLoaded[ID]) {
8162     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8163     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8164     ModuleFile *M = I->second;
8165     unsigned Index = ID - M->BaseIdentifierID;
8166     const char *Str = M->IdentifierTableData + M->IdentifierOffsets[Index];
8167 
8168     // All of the strings in the AST file are preceded by a 16-bit length.
8169     // Extract that 16-bit length to avoid having to execute strlen().
8170     // NOTE: 'StrLenPtr' is an 'unsigned char*' so that we load bytes as
8171     //  unsigned integers.  This is important to avoid integer overflow when
8172     //  we cast them to 'unsigned'.
8173     const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
8174     unsigned StrLen = (((unsigned) StrLenPtr[0])
8175                        | (((unsigned) StrLenPtr[1]) << 8)) - 1;
8176     auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
8177     IdentifiersLoaded[ID] = &II;
8178     markIdentifierFromAST(*this,  II);
8179     if (DeserializationListener)
8180       DeserializationListener->IdentifierRead(ID + 1, &II);
8181   }
8182 
8183   return IdentifiersLoaded[ID];
8184 }
8185 
8186 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8187   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8188 }
8189 
8190 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8191   if (LocalID < NUM_PREDEF_IDENT_IDS)
8192     return LocalID;
8193 
8194   if (!M.ModuleOffsetMap.empty())
8195     ReadModuleOffsetMap(M);
8196 
8197   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8198     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8199   assert(I != M.IdentifierRemap.end()
8200          && "Invalid index into identifier index remap");
8201 
8202   return LocalID + I->second;
8203 }
8204 
8205 MacroInfo *ASTReader::getMacro(MacroID ID) {
8206   if (ID == 0)
8207     return nullptr;
8208 
8209   if (MacrosLoaded.empty()) {
8210     Error("no macro table in AST file");
8211     return nullptr;
8212   }
8213 
8214   ID -= NUM_PREDEF_MACRO_IDS;
8215   if (!MacrosLoaded[ID]) {
8216     GlobalMacroMapType::iterator I
8217       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8218     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8219     ModuleFile *M = I->second;
8220     unsigned Index = ID - M->BaseMacroID;
8221     MacrosLoaded[ID] = ReadMacroRecord(*M, M->MacroOffsets[Index]);
8222 
8223     if (DeserializationListener)
8224       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8225                                          MacrosLoaded[ID]);
8226   }
8227 
8228   return MacrosLoaded[ID];
8229 }
8230 
8231 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8232   if (LocalID < NUM_PREDEF_MACRO_IDS)
8233     return LocalID;
8234 
8235   if (!M.ModuleOffsetMap.empty())
8236     ReadModuleOffsetMap(M);
8237 
8238   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8239     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8240   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8241 
8242   return LocalID + I->second;
8243 }
8244 
8245 serialization::SubmoduleID
8246 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8247   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8248     return LocalID;
8249 
8250   if (!M.ModuleOffsetMap.empty())
8251     ReadModuleOffsetMap(M);
8252 
8253   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8254     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8255   assert(I != M.SubmoduleRemap.end()
8256          && "Invalid index into submodule index remap");
8257 
8258   return LocalID + I->second;
8259 }
8260 
8261 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8262   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8263     assert(GlobalID == 0 && "Unhandled global submodule ID");
8264     return nullptr;
8265   }
8266 
8267   if (GlobalID > SubmodulesLoaded.size()) {
8268     Error("submodule ID out of range in AST file");
8269     return nullptr;
8270   }
8271 
8272   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8273 }
8274 
8275 Module *ASTReader::getModule(unsigned ID) {
8276   return getSubmodule(ID);
8277 }
8278 
8279 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8280   if (ID & 1) {
8281     // It's a module, look it up by submodule ID.
8282     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8283     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8284   } else {
8285     // It's a prefix (preamble, PCH, ...). Look it up by index.
8286     unsigned IndexFromEnd = ID >> 1;
8287     assert(IndexFromEnd && "got reference to unknown module file");
8288     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8289   }
8290 }
8291 
8292 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8293   if (!F)
8294     return 1;
8295 
8296   // For a file representing a module, use the submodule ID of the top-level
8297   // module as the file ID. For any other kind of file, the number of such
8298   // files loaded beforehand will be the same on reload.
8299   // FIXME: Is this true even if we have an explicit module file and a PCH?
8300   if (F->isModule())
8301     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8302 
8303   auto PCHModules = getModuleManager().pch_modules();
8304   auto I = std::find(PCHModules.begin(), PCHModules.end(), F);
8305   assert(I != PCHModules.end() && "emitting reference to unknown file");
8306   return (I - PCHModules.end()) << 1;
8307 }
8308 
8309 llvm::Optional<ExternalASTSource::ASTSourceDescriptor>
8310 ASTReader::getSourceDescriptor(unsigned ID) {
8311   if (const Module *M = getSubmodule(ID))
8312     return ExternalASTSource::ASTSourceDescriptor(*M);
8313 
8314   // If there is only a single PCH, return it instead.
8315   // Chained PCH are not supported.
8316   const auto &PCHChain = ModuleMgr.pch_modules();
8317   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8318     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8319     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8320     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8321     return ASTReader::ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8322                                           MF.Signature);
8323   }
8324   return None;
8325 }
8326 
8327 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8328   auto I = DefinitionSource.find(FD);
8329   if (I == DefinitionSource.end())
8330     return EK_ReplyHazy;
8331   return I->second ? EK_Never : EK_Always;
8332 }
8333 
8334 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8335   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8336 }
8337 
8338 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8339   if (ID == 0)
8340     return Selector();
8341 
8342   if (ID > SelectorsLoaded.size()) {
8343     Error("selector ID out of range in AST file");
8344     return Selector();
8345   }
8346 
8347   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8348     // Load this selector from the selector table.
8349     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8350     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8351     ModuleFile &M = *I->second;
8352     ASTSelectorLookupTrait Trait(*this, M);
8353     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8354     SelectorsLoaded[ID - 1] =
8355       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8356     if (DeserializationListener)
8357       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8358   }
8359 
8360   return SelectorsLoaded[ID - 1];
8361 }
8362 
8363 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8364   return DecodeSelector(ID);
8365 }
8366 
8367 uint32_t ASTReader::GetNumExternalSelectors() {
8368   // ID 0 (the null selector) is considered an external selector.
8369   return getTotalNumSelectors() + 1;
8370 }
8371 
8372 serialization::SelectorID
8373 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8374   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8375     return LocalID;
8376 
8377   if (!M.ModuleOffsetMap.empty())
8378     ReadModuleOffsetMap(M);
8379 
8380   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8381     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8382   assert(I != M.SelectorRemap.end()
8383          && "Invalid index into selector index remap");
8384 
8385   return LocalID + I->second;
8386 }
8387 
8388 DeclarationName
8389 ASTReader::ReadDeclarationName(ModuleFile &F,
8390                                const RecordData &Record, unsigned &Idx) {
8391   ASTContext &Context = getContext();
8392   DeclarationName::NameKind Kind = (DeclarationName::NameKind)Record[Idx++];
8393   switch (Kind) {
8394   case DeclarationName::Identifier:
8395     return DeclarationName(GetIdentifierInfo(F, Record, Idx));
8396 
8397   case DeclarationName::ObjCZeroArgSelector:
8398   case DeclarationName::ObjCOneArgSelector:
8399   case DeclarationName::ObjCMultiArgSelector:
8400     return DeclarationName(ReadSelector(F, Record, Idx));
8401 
8402   case DeclarationName::CXXConstructorName:
8403     return Context.DeclarationNames.getCXXConstructorName(
8404                           Context.getCanonicalType(readType(F, Record, Idx)));
8405 
8406   case DeclarationName::CXXDestructorName:
8407     return Context.DeclarationNames.getCXXDestructorName(
8408                           Context.getCanonicalType(readType(F, Record, Idx)));
8409 
8410   case DeclarationName::CXXDeductionGuideName:
8411     return Context.DeclarationNames.getCXXDeductionGuideName(
8412                           ReadDeclAs<TemplateDecl>(F, Record, Idx));
8413 
8414   case DeclarationName::CXXConversionFunctionName:
8415     return Context.DeclarationNames.getCXXConversionFunctionName(
8416                           Context.getCanonicalType(readType(F, Record, Idx)));
8417 
8418   case DeclarationName::CXXOperatorName:
8419     return Context.DeclarationNames.getCXXOperatorName(
8420                                        (OverloadedOperatorKind)Record[Idx++]);
8421 
8422   case DeclarationName::CXXLiteralOperatorName:
8423     return Context.DeclarationNames.getCXXLiteralOperatorName(
8424                                        GetIdentifierInfo(F, Record, Idx));
8425 
8426   case DeclarationName::CXXUsingDirective:
8427     return DeclarationName::getUsingDirectiveName();
8428   }
8429 
8430   llvm_unreachable("Invalid NameKind!");
8431 }
8432 
8433 void ASTReader::ReadDeclarationNameLoc(ModuleFile &F,
8434                                        DeclarationNameLoc &DNLoc,
8435                                        DeclarationName Name,
8436                                       const RecordData &Record, unsigned &Idx) {
8437   switch (Name.getNameKind()) {
8438   case DeclarationName::CXXConstructorName:
8439   case DeclarationName::CXXDestructorName:
8440   case DeclarationName::CXXConversionFunctionName:
8441     DNLoc.NamedType.TInfo = GetTypeSourceInfo(F, Record, Idx);
8442     break;
8443 
8444   case DeclarationName::CXXOperatorName:
8445     DNLoc.CXXOperatorName.BeginOpNameLoc
8446         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
8447     DNLoc.CXXOperatorName.EndOpNameLoc
8448         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
8449     break;
8450 
8451   case DeclarationName::CXXLiteralOperatorName:
8452     DNLoc.CXXLiteralOperatorName.OpNameLoc
8453         = ReadSourceLocation(F, Record, Idx).getRawEncoding();
8454     break;
8455 
8456   case DeclarationName::Identifier:
8457   case DeclarationName::ObjCZeroArgSelector:
8458   case DeclarationName::ObjCOneArgSelector:
8459   case DeclarationName::ObjCMultiArgSelector:
8460   case DeclarationName::CXXUsingDirective:
8461   case DeclarationName::CXXDeductionGuideName:
8462     break;
8463   }
8464 }
8465 
8466 void ASTReader::ReadDeclarationNameInfo(ModuleFile &F,
8467                                         DeclarationNameInfo &NameInfo,
8468                                       const RecordData &Record, unsigned &Idx) {
8469   NameInfo.setName(ReadDeclarationName(F, Record, Idx));
8470   NameInfo.setLoc(ReadSourceLocation(F, Record, Idx));
8471   DeclarationNameLoc DNLoc;
8472   ReadDeclarationNameLoc(F, DNLoc, NameInfo.getName(), Record, Idx);
8473   NameInfo.setInfo(DNLoc);
8474 }
8475 
8476 void ASTReader::ReadQualifierInfo(ModuleFile &F, QualifierInfo &Info,
8477                                   const RecordData &Record, unsigned &Idx) {
8478   Info.QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
8479   unsigned NumTPLists = Record[Idx++];
8480   Info.NumTemplParamLists = NumTPLists;
8481   if (NumTPLists) {
8482     Info.TemplParamLists =
8483         new (getContext()) TemplateParameterList *[NumTPLists];
8484     for (unsigned i = 0; i != NumTPLists; ++i)
8485       Info.TemplParamLists[i] = ReadTemplateParameterList(F, Record, Idx);
8486   }
8487 }
8488 
8489 TemplateName
8490 ASTReader::ReadTemplateName(ModuleFile &F, const RecordData &Record,
8491                             unsigned &Idx) {
8492   ASTContext &Context = getContext();
8493   TemplateName::NameKind Kind = (TemplateName::NameKind)Record[Idx++];
8494   switch (Kind) {
8495   case TemplateName::Template:
8496       return TemplateName(ReadDeclAs<TemplateDecl>(F, Record, Idx));
8497 
8498   case TemplateName::OverloadedTemplate: {
8499     unsigned size = Record[Idx++];
8500     UnresolvedSet<8> Decls;
8501     while (size--)
8502       Decls.addDecl(ReadDeclAs<NamedDecl>(F, Record, Idx));
8503 
8504     return Context.getOverloadedTemplateName(Decls.begin(), Decls.end());
8505   }
8506 
8507   case TemplateName::QualifiedTemplate: {
8508     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
8509     bool hasTemplKeyword = Record[Idx++];
8510     TemplateDecl *Template = ReadDeclAs<TemplateDecl>(F, Record, Idx);
8511     return Context.getQualifiedTemplateName(NNS, hasTemplKeyword, Template);
8512   }
8513 
8514   case TemplateName::DependentTemplate: {
8515     NestedNameSpecifier *NNS = ReadNestedNameSpecifier(F, Record, Idx);
8516     if (Record[Idx++])  // isIdentifier
8517       return Context.getDependentTemplateName(NNS,
8518                                                GetIdentifierInfo(F, Record,
8519                                                                  Idx));
8520     return Context.getDependentTemplateName(NNS,
8521                                          (OverloadedOperatorKind)Record[Idx++]);
8522   }
8523 
8524   case TemplateName::SubstTemplateTemplateParm: {
8525     TemplateTemplateParmDecl *param
8526       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
8527     if (!param) return TemplateName();
8528     TemplateName replacement = ReadTemplateName(F, Record, Idx);
8529     return Context.getSubstTemplateTemplateParm(param, replacement);
8530   }
8531 
8532   case TemplateName::SubstTemplateTemplateParmPack: {
8533     TemplateTemplateParmDecl *Param
8534       = ReadDeclAs<TemplateTemplateParmDecl>(F, Record, Idx);
8535     if (!Param)
8536       return TemplateName();
8537 
8538     TemplateArgument ArgPack = ReadTemplateArgument(F, Record, Idx);
8539     if (ArgPack.getKind() != TemplateArgument::Pack)
8540       return TemplateName();
8541 
8542     return Context.getSubstTemplateTemplateParmPack(Param, ArgPack);
8543   }
8544   }
8545 
8546   llvm_unreachable("Unhandled template name kind!");
8547 }
8548 
8549 TemplateArgument ASTReader::ReadTemplateArgument(ModuleFile &F,
8550                                                  const RecordData &Record,
8551                                                  unsigned &Idx,
8552                                                  bool Canonicalize) {
8553   ASTContext &Context = getContext();
8554   if (Canonicalize) {
8555     // The caller wants a canonical template argument. Sometimes the AST only
8556     // wants template arguments in canonical form (particularly as the template
8557     // argument lists of template specializations) so ensure we preserve that
8558     // canonical form across serialization.
8559     TemplateArgument Arg = ReadTemplateArgument(F, Record, Idx, false);
8560     return Context.getCanonicalTemplateArgument(Arg);
8561   }
8562 
8563   TemplateArgument::ArgKind Kind = (TemplateArgument::ArgKind)Record[Idx++];
8564   switch (Kind) {
8565   case TemplateArgument::Null:
8566     return TemplateArgument();
8567   case TemplateArgument::Type:
8568     return TemplateArgument(readType(F, Record, Idx));
8569   case TemplateArgument::Declaration: {
8570     ValueDecl *D = ReadDeclAs<ValueDecl>(F, Record, Idx);
8571     return TemplateArgument(D, readType(F, Record, Idx));
8572   }
8573   case TemplateArgument::NullPtr:
8574     return TemplateArgument(readType(F, Record, Idx), /*isNullPtr*/true);
8575   case TemplateArgument::Integral: {
8576     llvm::APSInt Value = ReadAPSInt(Record, Idx);
8577     QualType T = readType(F, Record, Idx);
8578     return TemplateArgument(Context, Value, T);
8579   }
8580   case TemplateArgument::Template:
8581     return TemplateArgument(ReadTemplateName(F, Record, Idx));
8582   case TemplateArgument::TemplateExpansion: {
8583     TemplateName Name = ReadTemplateName(F, Record, Idx);
8584     Optional<unsigned> NumTemplateExpansions;
8585     if (unsigned NumExpansions = Record[Idx++])
8586       NumTemplateExpansions = NumExpansions - 1;
8587     return TemplateArgument(Name, NumTemplateExpansions);
8588   }
8589   case TemplateArgument::Expression:
8590     return TemplateArgument(ReadExpr(F));
8591   case TemplateArgument::Pack: {
8592     unsigned NumArgs = Record[Idx++];
8593     TemplateArgument *Args = new (Context) TemplateArgument[NumArgs];
8594     for (unsigned I = 0; I != NumArgs; ++I)
8595       Args[I] = ReadTemplateArgument(F, Record, Idx);
8596     return TemplateArgument(llvm::makeArrayRef(Args, NumArgs));
8597   }
8598   }
8599 
8600   llvm_unreachable("Unhandled template argument kind!");
8601 }
8602 
8603 TemplateParameterList *
8604 ASTReader::ReadTemplateParameterList(ModuleFile &F,
8605                                      const RecordData &Record, unsigned &Idx) {
8606   SourceLocation TemplateLoc = ReadSourceLocation(F, Record, Idx);
8607   SourceLocation LAngleLoc = ReadSourceLocation(F, Record, Idx);
8608   SourceLocation RAngleLoc = ReadSourceLocation(F, Record, Idx);
8609 
8610   unsigned NumParams = Record[Idx++];
8611   SmallVector<NamedDecl *, 16> Params;
8612   Params.reserve(NumParams);
8613   while (NumParams--)
8614     Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx));
8615 
8616   // TODO: Concepts
8617   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8618       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, nullptr);
8619   return TemplateParams;
8620 }
8621 
8622 void
8623 ASTReader::
8624 ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
8625                          ModuleFile &F, const RecordData &Record,
8626                          unsigned &Idx, bool Canonicalize) {
8627   unsigned NumTemplateArgs = Record[Idx++];
8628   TemplArgs.reserve(NumTemplateArgs);
8629   while (NumTemplateArgs--)
8630     TemplArgs.push_back(ReadTemplateArgument(F, Record, Idx, Canonicalize));
8631 }
8632 
8633 /// \brief Read a UnresolvedSet structure.
8634 void ASTReader::ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
8635                                   const RecordData &Record, unsigned &Idx) {
8636   unsigned NumDecls = Record[Idx++];
8637   Set.reserve(getContext(), NumDecls);
8638   while (NumDecls--) {
8639     DeclID ID = ReadDeclID(F, Record, Idx);
8640     AccessSpecifier AS = (AccessSpecifier)Record[Idx++];
8641     Set.addLazyDecl(getContext(), ID, AS);
8642   }
8643 }
8644 
8645 CXXBaseSpecifier
8646 ASTReader::ReadCXXBaseSpecifier(ModuleFile &F,
8647                                 const RecordData &Record, unsigned &Idx) {
8648   bool isVirtual = static_cast<bool>(Record[Idx++]);
8649   bool isBaseOfClass = static_cast<bool>(Record[Idx++]);
8650   AccessSpecifier AS = static_cast<AccessSpecifier>(Record[Idx++]);
8651   bool inheritConstructors = static_cast<bool>(Record[Idx++]);
8652   TypeSourceInfo *TInfo = GetTypeSourceInfo(F, Record, Idx);
8653   SourceRange Range = ReadSourceRange(F, Record, Idx);
8654   SourceLocation EllipsisLoc = ReadSourceLocation(F, Record, Idx);
8655   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8656                           EllipsisLoc);
8657   Result.setInheritConstructors(inheritConstructors);
8658   return Result;
8659 }
8660 
8661 CXXCtorInitializer **
8662 ASTReader::ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
8663                                    unsigned &Idx) {
8664   ASTContext &Context = getContext();
8665   unsigned NumInitializers = Record[Idx++];
8666   assert(NumInitializers && "wrote ctor initializers but have no inits");
8667   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8668   for (unsigned i = 0; i != NumInitializers; ++i) {
8669     TypeSourceInfo *TInfo = nullptr;
8670     bool IsBaseVirtual = false;
8671     FieldDecl *Member = nullptr;
8672     IndirectFieldDecl *IndirectMember = nullptr;
8673 
8674     CtorInitializerType Type = (CtorInitializerType)Record[Idx++];
8675     switch (Type) {
8676     case CTOR_INITIALIZER_BASE:
8677       TInfo = GetTypeSourceInfo(F, Record, Idx);
8678       IsBaseVirtual = Record[Idx++];
8679       break;
8680 
8681     case CTOR_INITIALIZER_DELEGATING:
8682       TInfo = GetTypeSourceInfo(F, Record, Idx);
8683       break;
8684 
8685      case CTOR_INITIALIZER_MEMBER:
8686       Member = ReadDeclAs<FieldDecl>(F, Record, Idx);
8687       break;
8688 
8689      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8690       IndirectMember = ReadDeclAs<IndirectFieldDecl>(F, Record, Idx);
8691       break;
8692     }
8693 
8694     SourceLocation MemberOrEllipsisLoc = ReadSourceLocation(F, Record, Idx);
8695     Expr *Init = ReadExpr(F);
8696     SourceLocation LParenLoc = ReadSourceLocation(F, Record, Idx);
8697     SourceLocation RParenLoc = ReadSourceLocation(F, Record, Idx);
8698 
8699     CXXCtorInitializer *BOMInit;
8700     if (Type == CTOR_INITIALIZER_BASE)
8701       BOMInit = new (Context)
8702           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8703                              RParenLoc, MemberOrEllipsisLoc);
8704     else if (Type == CTOR_INITIALIZER_DELEGATING)
8705       BOMInit = new (Context)
8706           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8707     else if (Member)
8708       BOMInit = new (Context)
8709           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8710                              Init, RParenLoc);
8711     else
8712       BOMInit = new (Context)
8713           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8714                              LParenLoc, Init, RParenLoc);
8715 
8716     if (/*IsWritten*/Record[Idx++]) {
8717       unsigned SourceOrder = Record[Idx++];
8718       BOMInit->setSourceOrder(SourceOrder);
8719     }
8720 
8721     CtorInitializers[i] = BOMInit;
8722   }
8723 
8724   return CtorInitializers;
8725 }
8726 
8727 NestedNameSpecifier *
8728 ASTReader::ReadNestedNameSpecifier(ModuleFile &F,
8729                                    const RecordData &Record, unsigned &Idx) {
8730   ASTContext &Context = getContext();
8731   unsigned N = Record[Idx++];
8732   NestedNameSpecifier *NNS = nullptr, *Prev = nullptr;
8733   for (unsigned I = 0; I != N; ++I) {
8734     NestedNameSpecifier::SpecifierKind Kind
8735       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
8736     switch (Kind) {
8737     case NestedNameSpecifier::Identifier: {
8738       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
8739       NNS = NestedNameSpecifier::Create(Context, Prev, II);
8740       break;
8741     }
8742 
8743     case NestedNameSpecifier::Namespace: {
8744       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
8745       NNS = NestedNameSpecifier::Create(Context, Prev, NS);
8746       break;
8747     }
8748 
8749     case NestedNameSpecifier::NamespaceAlias: {
8750       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
8751       NNS = NestedNameSpecifier::Create(Context, Prev, Alias);
8752       break;
8753     }
8754 
8755     case NestedNameSpecifier::TypeSpec:
8756     case NestedNameSpecifier::TypeSpecWithTemplate: {
8757       const Type *T = readType(F, Record, Idx).getTypePtrOrNull();
8758       if (!T)
8759         return nullptr;
8760 
8761       bool Template = Record[Idx++];
8762       NNS = NestedNameSpecifier::Create(Context, Prev, Template, T);
8763       break;
8764     }
8765 
8766     case NestedNameSpecifier::Global: {
8767       NNS = NestedNameSpecifier::GlobalSpecifier(Context);
8768       // No associated value, and there can't be a prefix.
8769       break;
8770     }
8771 
8772     case NestedNameSpecifier::Super: {
8773       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
8774       NNS = NestedNameSpecifier::SuperSpecifier(Context, RD);
8775       break;
8776     }
8777     }
8778     Prev = NNS;
8779   }
8780   return NNS;
8781 }
8782 
8783 NestedNameSpecifierLoc
8784 ASTReader::ReadNestedNameSpecifierLoc(ModuleFile &F, const RecordData &Record,
8785                                       unsigned &Idx) {
8786   ASTContext &Context = getContext();
8787   unsigned N = Record[Idx++];
8788   NestedNameSpecifierLocBuilder Builder;
8789   for (unsigned I = 0; I != N; ++I) {
8790     NestedNameSpecifier::SpecifierKind Kind
8791       = (NestedNameSpecifier::SpecifierKind)Record[Idx++];
8792     switch (Kind) {
8793     case NestedNameSpecifier::Identifier: {
8794       IdentifierInfo *II = GetIdentifierInfo(F, Record, Idx);
8795       SourceRange Range = ReadSourceRange(F, Record, Idx);
8796       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8797       break;
8798     }
8799 
8800     case NestedNameSpecifier::Namespace: {
8801       NamespaceDecl *NS = ReadDeclAs<NamespaceDecl>(F, Record, Idx);
8802       SourceRange Range = ReadSourceRange(F, Record, Idx);
8803       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8804       break;
8805     }
8806 
8807     case NestedNameSpecifier::NamespaceAlias: {
8808       NamespaceAliasDecl *Alias =ReadDeclAs<NamespaceAliasDecl>(F, Record, Idx);
8809       SourceRange Range = ReadSourceRange(F, Record, Idx);
8810       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8811       break;
8812     }
8813 
8814     case NestedNameSpecifier::TypeSpec:
8815     case NestedNameSpecifier::TypeSpecWithTemplate: {
8816       bool Template = Record[Idx++];
8817       TypeSourceInfo *T = GetTypeSourceInfo(F, Record, Idx);
8818       if (!T)
8819         return NestedNameSpecifierLoc();
8820       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
8821 
8822       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8823       Builder.Extend(Context,
8824                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8825                      T->getTypeLoc(), ColonColonLoc);
8826       break;
8827     }
8828 
8829     case NestedNameSpecifier::Global: {
8830       SourceLocation ColonColonLoc = ReadSourceLocation(F, Record, Idx);
8831       Builder.MakeGlobal(Context, ColonColonLoc);
8832       break;
8833     }
8834 
8835     case NestedNameSpecifier::Super: {
8836       CXXRecordDecl *RD = ReadDeclAs<CXXRecordDecl>(F, Record, Idx);
8837       SourceRange Range = ReadSourceRange(F, Record, Idx);
8838       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8839       break;
8840     }
8841     }
8842   }
8843 
8844   return Builder.getWithLocInContext(Context);
8845 }
8846 
8847 SourceRange
8848 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8849                            unsigned &Idx) {
8850   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8851   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8852   return SourceRange(beg, end);
8853 }
8854 
8855 /// \brief Read an integral value
8856 llvm::APInt ASTReader::ReadAPInt(const RecordData &Record, unsigned &Idx) {
8857   unsigned BitWidth = Record[Idx++];
8858   unsigned NumWords = llvm::APInt::getNumWords(BitWidth);
8859   llvm::APInt Result(BitWidth, NumWords, &Record[Idx]);
8860   Idx += NumWords;
8861   return Result;
8862 }
8863 
8864 /// \brief Read a signed integral value
8865 llvm::APSInt ASTReader::ReadAPSInt(const RecordData &Record, unsigned &Idx) {
8866   bool isUnsigned = Record[Idx++];
8867   return llvm::APSInt(ReadAPInt(Record, Idx), isUnsigned);
8868 }
8869 
8870 /// \brief Read a floating-point value
8871 llvm::APFloat ASTReader::ReadAPFloat(const RecordData &Record,
8872                                      const llvm::fltSemantics &Sem,
8873                                      unsigned &Idx) {
8874   return llvm::APFloat(Sem, ReadAPInt(Record, Idx));
8875 }
8876 
8877 // \brief Read a string
8878 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8879   unsigned Len = Record[Idx++];
8880   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8881   Idx += Len;
8882   return Result;
8883 }
8884 
8885 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8886                                 unsigned &Idx) {
8887   std::string Filename = ReadString(Record, Idx);
8888   ResolveImportedPath(F, Filename);
8889   return Filename;
8890 }
8891 
8892 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8893                                          unsigned &Idx) {
8894   unsigned Major = Record[Idx++];
8895   unsigned Minor = Record[Idx++];
8896   unsigned Subminor = Record[Idx++];
8897   if (Minor == 0)
8898     return VersionTuple(Major);
8899   if (Subminor == 0)
8900     return VersionTuple(Major, Minor - 1);
8901   return VersionTuple(Major, Minor - 1, Subminor - 1);
8902 }
8903 
8904 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
8905                                           const RecordData &Record,
8906                                           unsigned &Idx) {
8907   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
8908   return CXXTemporary::Create(getContext(), Decl);
8909 }
8910 
8911 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
8912   return Diag(CurrentImportLoc, DiagID);
8913 }
8914 
8915 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
8916   return Diags.Report(Loc, DiagID);
8917 }
8918 
8919 /// \brief Retrieve the identifier table associated with the
8920 /// preprocessor.
8921 IdentifierTable &ASTReader::getIdentifierTable() {
8922   return PP.getIdentifierTable();
8923 }
8924 
8925 /// \brief Record that the given ID maps to the given switch-case
8926 /// statement.
8927 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
8928   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
8929          "Already have a SwitchCase with this ID");
8930   (*CurrSwitchCaseStmts)[ID] = SC;
8931 }
8932 
8933 /// \brief Retrieve the switch-case statement with the given ID.
8934 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
8935   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
8936   return (*CurrSwitchCaseStmts)[ID];
8937 }
8938 
8939 void ASTReader::ClearSwitchCaseIDs() {
8940   CurrSwitchCaseStmts->clear();
8941 }
8942 
8943 void ASTReader::ReadComments() {
8944   ASTContext &Context = getContext();
8945   std::vector<RawComment *> Comments;
8946   for (SmallVectorImpl<std::pair<BitstreamCursor,
8947                                  serialization::ModuleFile *> >::iterator
8948        I = CommentsCursors.begin(),
8949        E = CommentsCursors.end();
8950        I != E; ++I) {
8951     Comments.clear();
8952     BitstreamCursor &Cursor = I->first;
8953     serialization::ModuleFile &F = *I->second;
8954     SavedStreamPosition SavedPosition(Cursor);
8955 
8956     RecordData Record;
8957     while (true) {
8958       llvm::BitstreamEntry Entry =
8959         Cursor.advanceSkippingSubblocks(BitstreamCursor::AF_DontPopBlockAtEnd);
8960 
8961       switch (Entry.Kind) {
8962       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
8963       case llvm::BitstreamEntry::Error:
8964         Error("malformed block record in AST file");
8965         return;
8966       case llvm::BitstreamEntry::EndBlock:
8967         goto NextCursor;
8968       case llvm::BitstreamEntry::Record:
8969         // The interesting case.
8970         break;
8971       }
8972 
8973       // Read a record.
8974       Record.clear();
8975       switch ((CommentRecordTypes)Cursor.readRecord(Entry.ID, Record)) {
8976       case COMMENTS_RAW_COMMENT: {
8977         unsigned Idx = 0;
8978         SourceRange SR = ReadSourceRange(F, Record, Idx);
8979         RawComment::CommentKind Kind =
8980             (RawComment::CommentKind) Record[Idx++];
8981         bool IsTrailingComment = Record[Idx++];
8982         bool IsAlmostTrailingComment = Record[Idx++];
8983         Comments.push_back(new (Context) RawComment(
8984             SR, Kind, IsTrailingComment, IsAlmostTrailingComment,
8985             Context.getLangOpts().CommentOpts.ParseAllComments));
8986         break;
8987       }
8988       }
8989     }
8990   NextCursor:
8991     // De-serialized SourceLocations get negative FileIDs for other modules,
8992     // potentially invalidating the original order. Sort it again.
8993     std::sort(Comments.begin(), Comments.end(),
8994               BeforeThanCompare<RawComment>(SourceMgr));
8995     Context.Comments.addDeserializedComments(Comments);
8996   }
8997 }
8998 
8999 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9000                                 bool IncludeSystem, bool Complain,
9001                     llvm::function_ref<void(const serialization::InputFile &IF,
9002                                             bool isSystem)> Visitor) {
9003   unsigned NumUserInputs = MF.NumUserInputFiles;
9004   unsigned NumInputs = MF.InputFilesLoaded.size();
9005   assert(NumUserInputs <= NumInputs);
9006   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9007   for (unsigned I = 0; I < N; ++I) {
9008     bool IsSystem = I >= NumUserInputs;
9009     InputFile IF = getInputFile(MF, I+1, Complain);
9010     Visitor(IF, IsSystem);
9011   }
9012 }
9013 
9014 void ASTReader::visitTopLevelModuleMaps(
9015     serialization::ModuleFile &MF,
9016     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9017   unsigned NumInputs = MF.InputFilesLoaded.size();
9018   for (unsigned I = 0; I < NumInputs; ++I) {
9019     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9020     if (IFI.TopLevelModuleMap)
9021       // FIXME: This unnecessarily re-reads the InputFileInfo.
9022       if (auto *FE = getInputFile(MF, I + 1).getFile())
9023         Visitor(FE);
9024   }
9025 }
9026 
9027 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9028   // If we know the owning module, use it.
9029   if (Module *M = D->getImportedOwningModule())
9030     return M->getFullModuleName();
9031 
9032   // Otherwise, use the name of the top-level module the decl is within.
9033   if (ModuleFile *M = getOwningModuleFile(D))
9034     return M->ModuleName;
9035 
9036   // Not from a module.
9037   return "";
9038 }
9039 
9040 void ASTReader::finishPendingActions() {
9041   while (!PendingIdentifierInfos.empty() ||
9042          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9043          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9044          !PendingUpdateRecords.empty()) {
9045     // If any identifiers with corresponding top-level declarations have
9046     // been loaded, load those declarations now.
9047     typedef llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2> >
9048       TopLevelDeclsMap;
9049     TopLevelDeclsMap TopLevelDecls;
9050 
9051     while (!PendingIdentifierInfos.empty()) {
9052       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9053       SmallVector<uint32_t, 4> DeclIDs =
9054           std::move(PendingIdentifierInfos.back().second);
9055       PendingIdentifierInfos.pop_back();
9056 
9057       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9058     }
9059 
9060     // For each decl chain that we wanted to complete while deserializing, mark
9061     // it as "still needs to be completed".
9062     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9063       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9064     }
9065     PendingIncompleteDeclChains.clear();
9066 
9067     // Load pending declaration chains.
9068     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9069       loadPendingDeclChain(PendingDeclChains[I].first, PendingDeclChains[I].second);
9070     PendingDeclChains.clear();
9071 
9072     // Make the most recent of the top-level declarations visible.
9073     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9074            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9075       IdentifierInfo *II = TLD->first;
9076       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9077         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9078       }
9079     }
9080 
9081     // Load any pending macro definitions.
9082     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9083       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9084       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9085       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9086       // Initialize the macro history from chained-PCHs ahead of module imports.
9087       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9088            ++IDIdx) {
9089         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9090         if (!Info.M->isModule())
9091           resolvePendingMacro(II, Info);
9092       }
9093       // Handle module imports.
9094       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9095            ++IDIdx) {
9096         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9097         if (Info.M->isModule())
9098           resolvePendingMacro(II, Info);
9099       }
9100     }
9101     PendingMacroIDs.clear();
9102 
9103     // Wire up the DeclContexts for Decls that we delayed setting until
9104     // recursive loading is completed.
9105     while (!PendingDeclContextInfos.empty()) {
9106       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9107       PendingDeclContextInfos.pop_front();
9108       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9109       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9110       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9111     }
9112 
9113     // Perform any pending declaration updates.
9114     while (!PendingUpdateRecords.empty()) {
9115       auto Update = PendingUpdateRecords.pop_back_val();
9116       ReadingKindTracker ReadingKind(Read_Decl, *this);
9117       loadDeclUpdateRecords(Update);
9118     }
9119   }
9120 
9121   // At this point, all update records for loaded decls are in place, so any
9122   // fake class definitions should have become real.
9123   assert(PendingFakeDefinitionData.empty() &&
9124          "faked up a class definition but never saw the real one");
9125 
9126   // If we deserialized any C++ or Objective-C class definitions, any
9127   // Objective-C protocol definitions, or any redeclarable templates, make sure
9128   // that all redeclarations point to the definitions. Note that this can only
9129   // happen now, after the redeclaration chains have been fully wired.
9130   for (Decl *D : PendingDefinitions) {
9131     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9132       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9133         // Make sure that the TagType points at the definition.
9134         const_cast<TagType*>(TagT)->decl = TD;
9135       }
9136 
9137       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9138         for (auto *R = getMostRecentExistingDecl(RD); R;
9139              R = R->getPreviousDecl()) {
9140           assert((R == D) ==
9141                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9142                  "declaration thinks it's the definition but it isn't");
9143           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9144         }
9145       }
9146 
9147       continue;
9148     }
9149 
9150     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9151       // Make sure that the ObjCInterfaceType points at the definition.
9152       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9153         ->Decl = ID;
9154 
9155       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9156         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9157 
9158       continue;
9159     }
9160 
9161     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9162       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9163         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9164 
9165       continue;
9166     }
9167 
9168     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9169     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9170       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9171   }
9172   PendingDefinitions.clear();
9173 
9174   // Load the bodies of any functions or methods we've encountered. We do
9175   // this now (delayed) so that we can be sure that the declaration chains
9176   // have been fully wired up (hasBody relies on this).
9177   // FIXME: We shouldn't require complete redeclaration chains here.
9178   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9179                                PBEnd = PendingBodies.end();
9180        PB != PBEnd; ++PB) {
9181     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9182       // FIXME: Check for =delete/=default?
9183       // FIXME: Complain about ODR violations here?
9184       const FunctionDecl *Defn = nullptr;
9185       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9186         FD->setLazyBody(PB->second);
9187       } else
9188         mergeDefinitionVisibility(const_cast<FunctionDecl*>(Defn), FD);
9189       continue;
9190     }
9191 
9192     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9193     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9194       MD->setLazyBody(PB->second);
9195   }
9196   PendingBodies.clear();
9197 
9198   // Do some cleanup.
9199   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9200     getContext().deduplicateMergedDefinitonsFor(ND);
9201   PendingMergedDefinitionsToDeduplicate.clear();
9202 }
9203 
9204 void ASTReader::diagnoseOdrViolations() {
9205   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty())
9206     return;
9207 
9208   // Trigger the import of the full definition of each class that had any
9209   // odr-merging problems, so we can produce better diagnostics for them.
9210   // These updates may in turn find and diagnose some ODR failures, so take
9211   // ownership of the set first.
9212   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9213   PendingOdrMergeFailures.clear();
9214   for (auto &Merge : OdrMergeFailures) {
9215     Merge.first->buildLookup();
9216     Merge.first->decls_begin();
9217     Merge.first->bases_begin();
9218     Merge.first->vbases_begin();
9219     for (auto &RecordPair : Merge.second) {
9220       auto *RD = RecordPair.first;
9221       RD->decls_begin();
9222       RD->bases_begin();
9223       RD->vbases_begin();
9224     }
9225   }
9226 
9227   // For each declaration from a merged context, check that the canonical
9228   // definition of that context also contains a declaration of the same
9229   // entity.
9230   //
9231   // Caution: this loop does things that might invalidate iterators into
9232   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9233   while (!PendingOdrMergeChecks.empty()) {
9234     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9235 
9236     // FIXME: Skip over implicit declarations for now. This matters for things
9237     // like implicitly-declared special member functions. This isn't entirely
9238     // correct; we can end up with multiple unmerged declarations of the same
9239     // implicit entity.
9240     if (D->isImplicit())
9241       continue;
9242 
9243     DeclContext *CanonDef = D->getDeclContext();
9244 
9245     bool Found = false;
9246     const Decl *DCanon = D->getCanonicalDecl();
9247 
9248     for (auto RI : D->redecls()) {
9249       if (RI->getLexicalDeclContext() == CanonDef) {
9250         Found = true;
9251         break;
9252       }
9253     }
9254     if (Found)
9255       continue;
9256 
9257     // Quick check failed, time to do the slow thing. Note, we can't just
9258     // look up the name of D in CanonDef here, because the member that is
9259     // in CanonDef might not be found by name lookup (it might have been
9260     // replaced by a more recent declaration in the lookup table), and we
9261     // can't necessarily find it in the redeclaration chain because it might
9262     // be merely mergeable, not redeclarable.
9263     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9264     for (auto *CanonMember : CanonDef->decls()) {
9265       if (CanonMember->getCanonicalDecl() == DCanon) {
9266         // This can happen if the declaration is merely mergeable and not
9267         // actually redeclarable (we looked for redeclarations earlier).
9268         //
9269         // FIXME: We should be able to detect this more efficiently, without
9270         // pulling in all of the members of CanonDef.
9271         Found = true;
9272         break;
9273       }
9274       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9275         if (ND->getDeclName() == D->getDeclName())
9276           Candidates.push_back(ND);
9277     }
9278 
9279     if (!Found) {
9280       // The AST doesn't like TagDecls becoming invalid after they've been
9281       // completed. We only really need to mark FieldDecls as invalid here.
9282       if (!isa<TagDecl>(D))
9283         D->setInvalidDecl();
9284 
9285       // Ensure we don't accidentally recursively enter deserialization while
9286       // we're producing our diagnostic.
9287       Deserializing RecursionGuard(this);
9288 
9289       std::string CanonDefModule =
9290           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9291       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9292         << D << getOwningModuleNameForDiagnostic(D)
9293         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9294 
9295       if (Candidates.empty())
9296         Diag(cast<Decl>(CanonDef)->getLocation(),
9297              diag::note_module_odr_violation_no_possible_decls) << D;
9298       else {
9299         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9300           Diag(Candidates[I]->getLocation(),
9301                diag::note_module_odr_violation_possible_decl)
9302             << Candidates[I];
9303       }
9304 
9305       DiagnosedOdrMergeFailures.insert(CanonDef);
9306     }
9307   }
9308 
9309   if (OdrMergeFailures.empty())
9310     return;
9311 
9312   // Ensure we don't accidentally recursively enter deserialization while
9313   // we're producing our diagnostics.
9314   Deserializing RecursionGuard(this);
9315 
9316   // Issue any pending ODR-failure diagnostics.
9317   for (auto &Merge : OdrMergeFailures) {
9318     // If we've already pointed out a specific problem with this class, don't
9319     // bother issuing a general "something's different" diagnostic.
9320     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9321       continue;
9322 
9323     bool Diagnosed = false;
9324     CXXRecordDecl *FirstRecord = Merge.first;
9325     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9326     for (auto &RecordPair : Merge.second) {
9327       CXXRecordDecl *SecondRecord = RecordPair.first;
9328       // Multiple different declarations got merged together; tell the user
9329       // where they came from.
9330       if (FirstRecord == SecondRecord)
9331         continue;
9332 
9333       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
9334 
9335       auto *FirstDD = FirstRecord->DefinitionData;
9336       auto *SecondDD = RecordPair.second;
9337 
9338       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
9339 
9340       // Diagnostics from DefinitionData are emitted here.
9341       if (FirstDD != SecondDD) {
9342         enum ODRDefinitionDataDifference {
9343           NumBases,
9344           NumVBases,
9345           BaseType,
9346           BaseVirtual,
9347           BaseAccess,
9348         };
9349         auto ODRDiagError = [FirstRecord, &FirstModule,
9350                              this](SourceLocation Loc, SourceRange Range,
9351                                    ODRDefinitionDataDifference DiffType) {
9352           return Diag(Loc, diag::err_module_odr_violation_definition_data)
9353                  << FirstRecord << FirstModule.empty() << FirstModule << Range
9354                  << DiffType;
9355         };
9356         auto ODRDiagNote = [&SecondModule,
9357                             this](SourceLocation Loc, SourceRange Range,
9358                                   ODRDefinitionDataDifference DiffType) {
9359           return Diag(Loc, diag::note_module_odr_violation_definition_data)
9360                  << SecondModule << Range << DiffType;
9361         };
9362 
9363         ODRHash Hash;
9364         auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9365           Hash.clear();
9366           Hash.AddQualType(Ty);
9367           return Hash.CalculateHash();
9368         };
9369 
9370         unsigned FirstNumBases = FirstDD->NumBases;
9371         unsigned FirstNumVBases = FirstDD->NumVBases;
9372         unsigned SecondNumBases = SecondDD->NumBases;
9373         unsigned SecondNumVBases = SecondDD->NumVBases;
9374 
9375         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
9376           unsigned NumBases = DD->NumBases;
9377           if (NumBases == 0) return SourceRange();
9378           auto bases = DD->bases();
9379           return SourceRange(bases[0].getLocStart(),
9380                              bases[NumBases - 1].getLocEnd());
9381         };
9382 
9383         if (FirstNumBases != SecondNumBases) {
9384           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9385                        NumBases)
9386               << FirstNumBases;
9387           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9388                       NumBases)
9389               << SecondNumBases;
9390           Diagnosed = true;
9391           break;
9392         }
9393 
9394         if (FirstNumVBases != SecondNumVBases) {
9395           ODRDiagError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
9396                        NumVBases)
9397               << FirstNumVBases;
9398           ODRDiagNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
9399                       NumVBases)
9400               << SecondNumVBases;
9401           Diagnosed = true;
9402           break;
9403         }
9404 
9405         auto FirstBases = FirstDD->bases();
9406         auto SecondBases = SecondDD->bases();
9407         unsigned i = 0;
9408         for (i = 0; i < FirstNumBases; ++i) {
9409           auto FirstBase = FirstBases[i];
9410           auto SecondBase = SecondBases[i];
9411           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
9412               ComputeQualTypeODRHash(SecondBase.getType())) {
9413             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9414                          BaseType)
9415                 << (i + 1) << FirstBase.getType();
9416             ODRDiagNote(SecondRecord->getLocation(),
9417                         SecondBase.getSourceRange(), BaseType)
9418                 << (i + 1) << SecondBase.getType();
9419             break;
9420           }
9421 
9422           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
9423             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9424                          BaseVirtual)
9425                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
9426             ODRDiagNote(SecondRecord->getLocation(),
9427                         SecondBase.getSourceRange(), BaseVirtual)
9428                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
9429             break;
9430           }
9431 
9432           if (FirstBase.getAccessSpecifierAsWritten() !=
9433               SecondBase.getAccessSpecifierAsWritten()) {
9434             ODRDiagError(FirstRecord->getLocation(), FirstBase.getSourceRange(),
9435                          BaseAccess)
9436                 << (i + 1) << FirstBase.getType()
9437                 << (int)FirstBase.getAccessSpecifierAsWritten();
9438             ODRDiagNote(SecondRecord->getLocation(),
9439                         SecondBase.getSourceRange(), BaseAccess)
9440                 << (i + 1) << SecondBase.getType()
9441                 << (int)SecondBase.getAccessSpecifierAsWritten();
9442             break;
9443           }
9444         }
9445 
9446         if (i != FirstNumBases) {
9447           Diagnosed = true;
9448           break;
9449         }
9450       }
9451 
9452       using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9453 
9454       const ClassTemplateDecl *FirstTemplate =
9455           FirstRecord->getDescribedClassTemplate();
9456       const ClassTemplateDecl *SecondTemplate =
9457           SecondRecord->getDescribedClassTemplate();
9458 
9459       assert(!FirstTemplate == !SecondTemplate &&
9460              "Both pointers should be null or non-null");
9461 
9462       enum ODRTemplateDifference {
9463         ParamEmptyName,
9464         ParamName,
9465         ParamSingleDefaultArgument,
9466         ParamDifferentDefaultArgument,
9467       };
9468 
9469       if (FirstTemplate && SecondTemplate) {
9470         DeclHashes FirstTemplateHashes;
9471         DeclHashes SecondTemplateHashes;
9472         ODRHash Hash;
9473 
9474         auto PopulateTemplateParameterHashs =
9475             [&Hash](DeclHashes &Hashes, const ClassTemplateDecl *TD) {
9476               for (auto *D : TD->getTemplateParameters()->asArray()) {
9477                 Hash.clear();
9478                 Hash.AddSubDecl(D);
9479                 Hashes.emplace_back(D, Hash.CalculateHash());
9480               }
9481             };
9482 
9483         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
9484         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
9485 
9486         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
9487                "Number of template parameters should be equal.");
9488 
9489         auto FirstIt = FirstTemplateHashes.begin();
9490         auto FirstEnd = FirstTemplateHashes.end();
9491         auto SecondIt = SecondTemplateHashes.begin();
9492         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
9493           if (FirstIt->second == SecondIt->second)
9494             continue;
9495 
9496           auto ODRDiagError = [FirstRecord, &FirstModule,
9497                                this](SourceLocation Loc, SourceRange Range,
9498                                      ODRTemplateDifference DiffType) {
9499             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
9500                    << FirstRecord << FirstModule.empty() << FirstModule << Range
9501                    << DiffType;
9502           };
9503           auto ODRDiagNote = [&SecondModule,
9504                               this](SourceLocation Loc, SourceRange Range,
9505                                     ODRTemplateDifference DiffType) {
9506             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
9507                    << SecondModule << Range << DiffType;
9508           };
9509 
9510           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
9511           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
9512 
9513           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
9514                  "Parameter Decl's should be the same kind.");
9515 
9516           DeclarationName FirstName = FirstDecl->getDeclName();
9517           DeclarationName SecondName = SecondDecl->getDeclName();
9518 
9519           if (FirstName != SecondName) {
9520             const bool FirstNameEmpty =
9521                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
9522             const bool SecondNameEmpty =
9523                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
9524             assert((!FirstNameEmpty || !SecondNameEmpty) &&
9525                    "Both template parameters cannot be unnamed.");
9526             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9527                          FirstNameEmpty ? ParamEmptyName : ParamName)
9528                 << FirstName;
9529             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9530                         SecondNameEmpty ? ParamEmptyName : ParamName)
9531                 << SecondName;
9532             break;
9533           }
9534 
9535           switch (FirstDecl->getKind()) {
9536           default:
9537             llvm_unreachable("Invalid template parameter type.");
9538           case Decl::TemplateTypeParm: {
9539             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
9540             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
9541             const bool HasFirstDefaultArgument =
9542                 FirstParam->hasDefaultArgument() &&
9543                 !FirstParam->defaultArgumentWasInherited();
9544             const bool HasSecondDefaultArgument =
9545                 SecondParam->hasDefaultArgument() &&
9546                 !SecondParam->defaultArgumentWasInherited();
9547 
9548             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9549               ODRDiagError(FirstDecl->getLocation(),
9550                            FirstDecl->getSourceRange(),
9551                            ParamSingleDefaultArgument)
9552                   << HasFirstDefaultArgument;
9553               ODRDiagNote(SecondDecl->getLocation(),
9554                           SecondDecl->getSourceRange(),
9555                           ParamSingleDefaultArgument)
9556                   << HasSecondDefaultArgument;
9557               break;
9558             }
9559 
9560             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9561                    "Expecting default arguments.");
9562 
9563             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9564                          ParamDifferentDefaultArgument);
9565             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9566                         ParamDifferentDefaultArgument);
9567 
9568             break;
9569           }
9570           case Decl::NonTypeTemplateParm: {
9571             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
9572             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
9573             const bool HasFirstDefaultArgument =
9574                 FirstParam->hasDefaultArgument() &&
9575                 !FirstParam->defaultArgumentWasInherited();
9576             const bool HasSecondDefaultArgument =
9577                 SecondParam->hasDefaultArgument() &&
9578                 !SecondParam->defaultArgumentWasInherited();
9579 
9580             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9581               ODRDiagError(FirstDecl->getLocation(),
9582                            FirstDecl->getSourceRange(),
9583                            ParamSingleDefaultArgument)
9584                   << HasFirstDefaultArgument;
9585               ODRDiagNote(SecondDecl->getLocation(),
9586                           SecondDecl->getSourceRange(),
9587                           ParamSingleDefaultArgument)
9588                   << HasSecondDefaultArgument;
9589               break;
9590             }
9591 
9592             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9593                    "Expecting default arguments.");
9594 
9595             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9596                          ParamDifferentDefaultArgument);
9597             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9598                         ParamDifferentDefaultArgument);
9599 
9600             break;
9601           }
9602           case Decl::TemplateTemplateParm: {
9603             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
9604             const auto *SecondParam =
9605                 cast<TemplateTemplateParmDecl>(SecondDecl);
9606             const bool HasFirstDefaultArgument =
9607                 FirstParam->hasDefaultArgument() &&
9608                 !FirstParam->defaultArgumentWasInherited();
9609             const bool HasSecondDefaultArgument =
9610                 SecondParam->hasDefaultArgument() &&
9611                 !SecondParam->defaultArgumentWasInherited();
9612 
9613             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
9614               ODRDiagError(FirstDecl->getLocation(),
9615                            FirstDecl->getSourceRange(),
9616                            ParamSingleDefaultArgument)
9617                   << HasFirstDefaultArgument;
9618               ODRDiagNote(SecondDecl->getLocation(),
9619                           SecondDecl->getSourceRange(),
9620                           ParamSingleDefaultArgument)
9621                   << HasSecondDefaultArgument;
9622               break;
9623             }
9624 
9625             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
9626                    "Expecting default arguments.");
9627 
9628             ODRDiagError(FirstDecl->getLocation(), FirstDecl->getSourceRange(),
9629                          ParamDifferentDefaultArgument);
9630             ODRDiagNote(SecondDecl->getLocation(), SecondDecl->getSourceRange(),
9631                         ParamDifferentDefaultArgument);
9632 
9633             break;
9634           }
9635           }
9636 
9637           break;
9638         }
9639 
9640         if (FirstIt != FirstEnd) {
9641           Diagnosed = true;
9642           break;
9643         }
9644       }
9645 
9646       DeclHashes FirstHashes;
9647       DeclHashes SecondHashes;
9648       ODRHash Hash;
9649 
9650       auto PopulateHashes = [&Hash, FirstRecord](DeclHashes &Hashes,
9651                                                  CXXRecordDecl *Record) {
9652         for (auto *D : Record->decls()) {
9653           // Due to decl merging, the first CXXRecordDecl is the parent of
9654           // Decls in both records.
9655           if (!ODRHash::isWhitelistedDecl(D, FirstRecord))
9656             continue;
9657           Hash.clear();
9658           Hash.AddSubDecl(D);
9659           Hashes.emplace_back(D, Hash.CalculateHash());
9660         }
9661       };
9662       PopulateHashes(FirstHashes, FirstRecord);
9663       PopulateHashes(SecondHashes, SecondRecord);
9664 
9665       // Used with err_module_odr_violation_mismatch_decl and
9666       // note_module_odr_violation_mismatch_decl
9667       // This list should be the same Decl's as in ODRHash::isWhiteListedDecl
9668       enum {
9669         EndOfClass,
9670         PublicSpecifer,
9671         PrivateSpecifer,
9672         ProtectedSpecifer,
9673         StaticAssert,
9674         Field,
9675         CXXMethod,
9676         TypeAlias,
9677         TypeDef,
9678         Var,
9679         Friend,
9680         Other
9681       } FirstDiffType = Other,
9682         SecondDiffType = Other;
9683 
9684       auto DifferenceSelector = [](Decl *D) {
9685         assert(D && "valid Decl required");
9686         switch (D->getKind()) {
9687         default:
9688           return Other;
9689         case Decl::AccessSpec:
9690           switch (D->getAccess()) {
9691           case AS_public:
9692             return PublicSpecifer;
9693           case AS_private:
9694             return PrivateSpecifer;
9695           case AS_protected:
9696             return ProtectedSpecifer;
9697           case AS_none:
9698             break;
9699           }
9700           llvm_unreachable("Invalid access specifier");
9701         case Decl::StaticAssert:
9702           return StaticAssert;
9703         case Decl::Field:
9704           return Field;
9705         case Decl::CXXMethod:
9706         case Decl::CXXConstructor:
9707         case Decl::CXXDestructor:
9708           return CXXMethod;
9709         case Decl::TypeAlias:
9710           return TypeAlias;
9711         case Decl::Typedef:
9712           return TypeDef;
9713         case Decl::Var:
9714           return Var;
9715         case Decl::Friend:
9716           return Friend;
9717         }
9718       };
9719 
9720       Decl *FirstDecl = nullptr;
9721       Decl *SecondDecl = nullptr;
9722       auto FirstIt = FirstHashes.begin();
9723       auto SecondIt = SecondHashes.begin();
9724 
9725       // If there is a diagnoseable difference, FirstDiffType and
9726       // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9727       // filled in if not EndOfClass.
9728       while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9729         if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9730             FirstIt->second == SecondIt->second) {
9731           ++FirstIt;
9732           ++SecondIt;
9733           continue;
9734         }
9735 
9736         FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9737         SecondDecl = SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9738 
9739         FirstDiffType = FirstDecl ? DifferenceSelector(FirstDecl) : EndOfClass;
9740         SecondDiffType =
9741             SecondDecl ? DifferenceSelector(SecondDecl) : EndOfClass;
9742 
9743         break;
9744       }
9745 
9746       if (FirstDiffType == Other || SecondDiffType == Other) {
9747         // Reaching this point means an unexpected Decl was encountered
9748         // or no difference was detected.  This causes a generic error
9749         // message to be emitted.
9750         Diag(FirstRecord->getLocation(),
9751              diag::err_module_odr_violation_different_definitions)
9752             << FirstRecord << FirstModule.empty() << FirstModule;
9753 
9754         if (FirstDecl) {
9755           Diag(FirstDecl->getLocation(), diag::note_first_module_difference)
9756               << FirstRecord << FirstDecl->getSourceRange();
9757         }
9758 
9759         Diag(SecondRecord->getLocation(),
9760              diag::note_module_odr_violation_different_definitions)
9761             << SecondModule;
9762 
9763         if (SecondDecl) {
9764           Diag(SecondDecl->getLocation(), diag::note_second_module_difference)
9765               << SecondDecl->getSourceRange();
9766         }
9767 
9768         Diagnosed = true;
9769         break;
9770       }
9771 
9772       if (FirstDiffType != SecondDiffType) {
9773         SourceLocation FirstLoc;
9774         SourceRange FirstRange;
9775         if (FirstDiffType == EndOfClass) {
9776           FirstLoc = FirstRecord->getBraceRange().getEnd();
9777         } else {
9778           FirstLoc = FirstIt->first->getLocation();
9779           FirstRange = FirstIt->first->getSourceRange();
9780         }
9781         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9782             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9783             << FirstDiffType;
9784 
9785         SourceLocation SecondLoc;
9786         SourceRange SecondRange;
9787         if (SecondDiffType == EndOfClass) {
9788           SecondLoc = SecondRecord->getBraceRange().getEnd();
9789         } else {
9790           SecondLoc = SecondDecl->getLocation();
9791           SecondRange = SecondDecl->getSourceRange();
9792         }
9793         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9794             << SecondModule << SecondRange << SecondDiffType;
9795         Diagnosed = true;
9796         break;
9797       }
9798 
9799       assert(FirstDiffType == SecondDiffType);
9800 
9801       // Used with err_module_odr_violation_mismatch_decl_diff and
9802       // note_module_odr_violation_mismatch_decl_diff
9803       enum ODRDeclDifference{
9804         StaticAssertCondition,
9805         StaticAssertMessage,
9806         StaticAssertOnlyMessage,
9807         FieldName,
9808         FieldTypeName,
9809         FieldSingleBitField,
9810         FieldDifferentWidthBitField,
9811         FieldSingleMutable,
9812         FieldSingleInitializer,
9813         FieldDifferentInitializers,
9814         MethodName,
9815         MethodDeleted,
9816         MethodVirtual,
9817         MethodStatic,
9818         MethodVolatile,
9819         MethodConst,
9820         MethodInline,
9821         MethodNumberParameters,
9822         MethodParameterType,
9823         MethodParameterName,
9824         MethodParameterSingleDefaultArgument,
9825         MethodParameterDifferentDefaultArgument,
9826         TypedefName,
9827         TypedefType,
9828         VarName,
9829         VarType,
9830         VarSingleInitializer,
9831         VarDifferentInitializer,
9832         VarConstexpr,
9833         FriendTypeFunction,
9834         FriendType,
9835         FriendFunction,
9836       };
9837 
9838       // These lambdas have the common portions of the ODR diagnostics.  This
9839       // has the same return as Diag(), so addition parameters can be passed
9840       // in with operator<<
9841       auto ODRDiagError = [FirstRecord, &FirstModule, this](
9842           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
9843         return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9844                << FirstRecord << FirstModule.empty() << FirstModule << Range
9845                << DiffType;
9846       };
9847       auto ODRDiagNote = [&SecondModule, this](
9848           SourceLocation Loc, SourceRange Range, ODRDeclDifference DiffType) {
9849         return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9850                << SecondModule << Range << DiffType;
9851       };
9852 
9853       auto ComputeODRHash = [&Hash](const Stmt* S) {
9854         assert(S);
9855         Hash.clear();
9856         Hash.AddStmt(S);
9857         return Hash.CalculateHash();
9858       };
9859 
9860       auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9861         Hash.clear();
9862         Hash.AddQualType(Ty);
9863         return Hash.CalculateHash();
9864       };
9865 
9866       switch (FirstDiffType) {
9867       case Other:
9868       case EndOfClass:
9869       case PublicSpecifer:
9870       case PrivateSpecifer:
9871       case ProtectedSpecifer:
9872         llvm_unreachable("Invalid diff type");
9873 
9874       case StaticAssert: {
9875         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
9876         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
9877 
9878         Expr *FirstExpr = FirstSA->getAssertExpr();
9879         Expr *SecondExpr = SecondSA->getAssertExpr();
9880         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
9881         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
9882         if (FirstODRHash != SecondODRHash) {
9883           ODRDiagError(FirstExpr->getLocStart(), FirstExpr->getSourceRange(),
9884                        StaticAssertCondition);
9885           ODRDiagNote(SecondExpr->getLocStart(),
9886                       SecondExpr->getSourceRange(), StaticAssertCondition);
9887           Diagnosed = true;
9888           break;
9889         }
9890 
9891         StringLiteral *FirstStr = FirstSA->getMessage();
9892         StringLiteral *SecondStr = SecondSA->getMessage();
9893         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
9894         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
9895           SourceLocation FirstLoc, SecondLoc;
9896           SourceRange FirstRange, SecondRange;
9897           if (FirstStr) {
9898             FirstLoc = FirstStr->getLocStart();
9899             FirstRange = FirstStr->getSourceRange();
9900           } else {
9901             FirstLoc = FirstSA->getLocStart();
9902             FirstRange = FirstSA->getSourceRange();
9903           }
9904           if (SecondStr) {
9905             SecondLoc = SecondStr->getLocStart();
9906             SecondRange = SecondStr->getSourceRange();
9907           } else {
9908             SecondLoc = SecondSA->getLocStart();
9909             SecondRange = SecondSA->getSourceRange();
9910           }
9911           ODRDiagError(FirstLoc, FirstRange, StaticAssertOnlyMessage)
9912               << (FirstStr == nullptr);
9913           ODRDiagNote(SecondLoc, SecondRange, StaticAssertOnlyMessage)
9914               << (SecondStr == nullptr);
9915           Diagnosed = true;
9916           break;
9917         }
9918 
9919         if (FirstStr && SecondStr &&
9920             FirstStr->getString() != SecondStr->getString()) {
9921           ODRDiagError(FirstStr->getLocStart(), FirstStr->getSourceRange(),
9922                        StaticAssertMessage);
9923           ODRDiagNote(SecondStr->getLocStart(), SecondStr->getSourceRange(),
9924                       StaticAssertMessage);
9925           Diagnosed = true;
9926           break;
9927         }
9928         break;
9929       }
9930       case Field: {
9931         FieldDecl *FirstField = cast<FieldDecl>(FirstDecl);
9932         FieldDecl *SecondField = cast<FieldDecl>(SecondDecl);
9933         IdentifierInfo *FirstII = FirstField->getIdentifier();
9934         IdentifierInfo *SecondII = SecondField->getIdentifier();
9935         if (FirstII->getName() != SecondII->getName()) {
9936           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
9937                        FieldName)
9938               << FirstII;
9939           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
9940                       FieldName)
9941               << SecondII;
9942 
9943           Diagnosed = true;
9944           break;
9945         }
9946 
9947         assert(getContext().hasSameType(FirstField->getType(),
9948                                         SecondField->getType()));
9949 
9950         QualType FirstType = FirstField->getType();
9951         QualType SecondType = SecondField->getType();
9952         if (ComputeQualTypeODRHash(FirstType) !=
9953             ComputeQualTypeODRHash(SecondType)) {
9954           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
9955                        FieldTypeName)
9956               << FirstII << FirstType;
9957           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
9958                       FieldTypeName)
9959               << SecondII << SecondType;
9960 
9961           Diagnosed = true;
9962           break;
9963         }
9964 
9965         const bool IsFirstBitField = FirstField->isBitField();
9966         const bool IsSecondBitField = SecondField->isBitField();
9967         if (IsFirstBitField != IsSecondBitField) {
9968           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
9969                        FieldSingleBitField)
9970               << FirstII << IsFirstBitField;
9971           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
9972                       FieldSingleBitField)
9973               << SecondII << IsSecondBitField;
9974           Diagnosed = true;
9975           break;
9976         }
9977 
9978         if (IsFirstBitField && IsSecondBitField) {
9979           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
9980                        FieldDifferentWidthBitField)
9981               << FirstII << FirstField->getBitWidth()->getSourceRange();
9982           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
9983                       FieldDifferentWidthBitField)
9984               << SecondII << SecondField->getBitWidth()->getSourceRange();
9985           Diagnosed = true;
9986           break;
9987         }
9988 
9989         const bool IsFirstMutable = FirstField->isMutable();
9990         const bool IsSecondMutable = SecondField->isMutable();
9991         if (IsFirstMutable != IsSecondMutable) {
9992           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
9993                        FieldSingleMutable)
9994               << FirstII << IsFirstMutable;
9995           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
9996                       FieldSingleMutable)
9997               << SecondII << IsSecondMutable;
9998           Diagnosed = true;
9999           break;
10000         }
10001 
10002         const Expr *FirstInitializer = FirstField->getInClassInitializer();
10003         const Expr *SecondInitializer = SecondField->getInClassInitializer();
10004         if ((!FirstInitializer && SecondInitializer) ||
10005             (FirstInitializer && !SecondInitializer)) {
10006           ODRDiagError(FirstField->getLocation(), FirstField->getSourceRange(),
10007                        FieldSingleInitializer)
10008               << FirstII << (FirstInitializer != nullptr);
10009           ODRDiagNote(SecondField->getLocation(), SecondField->getSourceRange(),
10010                       FieldSingleInitializer)
10011               << SecondII << (SecondInitializer != nullptr);
10012           Diagnosed = true;
10013           break;
10014         }
10015 
10016         if (FirstInitializer && SecondInitializer) {
10017           unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
10018           unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
10019           if (FirstInitHash != SecondInitHash) {
10020             ODRDiagError(FirstField->getLocation(),
10021                          FirstField->getSourceRange(),
10022                          FieldDifferentInitializers)
10023                 << FirstII << FirstInitializer->getSourceRange();
10024             ODRDiagNote(SecondField->getLocation(),
10025                         SecondField->getSourceRange(),
10026                         FieldDifferentInitializers)
10027                 << SecondII << SecondInitializer->getSourceRange();
10028             Diagnosed = true;
10029             break;
10030           }
10031         }
10032 
10033         break;
10034       }
10035       case CXXMethod: {
10036         enum {
10037           DiagMethod,
10038           DiagConstructor,
10039           DiagDestructor,
10040         } FirstMethodType,
10041             SecondMethodType;
10042         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10043           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10044           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10045           return DiagMethod;
10046         };
10047         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10048         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10049         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10050         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10051         auto FirstName = FirstMethod->getDeclName();
10052         auto SecondName = SecondMethod->getDeclName();
10053         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10054           ODRDiagError(FirstMethod->getLocation(),
10055                        FirstMethod->getSourceRange(), MethodName)
10056               << FirstMethodType << FirstName;
10057           ODRDiagNote(SecondMethod->getLocation(),
10058                       SecondMethod->getSourceRange(), MethodName)
10059               << SecondMethodType << SecondName;
10060 
10061           Diagnosed = true;
10062           break;
10063         }
10064 
10065         const bool FirstDeleted = FirstMethod->isDeleted();
10066         const bool SecondDeleted = SecondMethod->isDeleted();
10067         if (FirstDeleted != SecondDeleted) {
10068           ODRDiagError(FirstMethod->getLocation(),
10069                        FirstMethod->getSourceRange(), MethodDeleted)
10070               << FirstMethodType << FirstName << FirstDeleted;
10071 
10072           ODRDiagNote(SecondMethod->getLocation(),
10073                       SecondMethod->getSourceRange(), MethodDeleted)
10074               << SecondMethodType << SecondName << SecondDeleted;
10075           Diagnosed = true;
10076           break;
10077         }
10078 
10079         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10080         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10081         const bool FirstPure = FirstMethod->isPure();
10082         const bool SecondPure = SecondMethod->isPure();
10083         if ((FirstVirtual || SecondVirtual) &&
10084             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10085           ODRDiagError(FirstMethod->getLocation(),
10086                        FirstMethod->getSourceRange(), MethodVirtual)
10087               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10088           ODRDiagNote(SecondMethod->getLocation(),
10089                       SecondMethod->getSourceRange(), MethodVirtual)
10090               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10091           Diagnosed = true;
10092           break;
10093         }
10094 
10095         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10096         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10097         // class needs to be checked instead.
10098         const auto FirstStorage = FirstMethod->getStorageClass();
10099         const auto SecondStorage = SecondMethod->getStorageClass();
10100         const bool FirstStatic = FirstStorage == SC_Static;
10101         const bool SecondStatic = SecondStorage == SC_Static;
10102         if (FirstStatic != SecondStatic) {
10103           ODRDiagError(FirstMethod->getLocation(),
10104                        FirstMethod->getSourceRange(), MethodStatic)
10105               << FirstMethodType << FirstName << FirstStatic;
10106           ODRDiagNote(SecondMethod->getLocation(),
10107                       SecondMethod->getSourceRange(), MethodStatic)
10108               << SecondMethodType << SecondName << SecondStatic;
10109           Diagnosed = true;
10110           break;
10111         }
10112 
10113         const bool FirstVolatile = FirstMethod->isVolatile();
10114         const bool SecondVolatile = SecondMethod->isVolatile();
10115         if (FirstVolatile != SecondVolatile) {
10116           ODRDiagError(FirstMethod->getLocation(),
10117                        FirstMethod->getSourceRange(), MethodVolatile)
10118               << FirstMethodType << FirstName << FirstVolatile;
10119           ODRDiagNote(SecondMethod->getLocation(),
10120                       SecondMethod->getSourceRange(), MethodVolatile)
10121               << SecondMethodType << SecondName << SecondVolatile;
10122           Diagnosed = true;
10123           break;
10124         }
10125 
10126         const bool FirstConst = FirstMethod->isConst();
10127         const bool SecondConst = SecondMethod->isConst();
10128         if (FirstConst != SecondConst) {
10129           ODRDiagError(FirstMethod->getLocation(),
10130                        FirstMethod->getSourceRange(), MethodConst)
10131               << FirstMethodType << FirstName << FirstConst;
10132           ODRDiagNote(SecondMethod->getLocation(),
10133                       SecondMethod->getSourceRange(), MethodConst)
10134               << SecondMethodType << SecondName << SecondConst;
10135           Diagnosed = true;
10136           break;
10137         }
10138 
10139         const bool FirstInline = FirstMethod->isInlineSpecified();
10140         const bool SecondInline = SecondMethod->isInlineSpecified();
10141         if (FirstInline != SecondInline) {
10142           ODRDiagError(FirstMethod->getLocation(),
10143                        FirstMethod->getSourceRange(), MethodInline)
10144               << FirstMethodType << FirstName << FirstInline;
10145           ODRDiagNote(SecondMethod->getLocation(),
10146                       SecondMethod->getSourceRange(), MethodInline)
10147               << SecondMethodType << SecondName << SecondInline;
10148           Diagnosed = true;
10149           break;
10150         }
10151 
10152         const unsigned FirstNumParameters = FirstMethod->param_size();
10153         const unsigned SecondNumParameters = SecondMethod->param_size();
10154         if (FirstNumParameters != SecondNumParameters) {
10155           ODRDiagError(FirstMethod->getLocation(),
10156                        FirstMethod->getSourceRange(), MethodNumberParameters)
10157               << FirstMethodType << FirstName << FirstNumParameters;
10158           ODRDiagNote(SecondMethod->getLocation(),
10159                       SecondMethod->getSourceRange(), MethodNumberParameters)
10160               << SecondMethodType << SecondName << SecondNumParameters;
10161           Diagnosed = true;
10162           break;
10163         }
10164 
10165         // Need this status boolean to know when break out of the switch.
10166         bool ParameterMismatch = false;
10167         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10168           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10169           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10170 
10171           QualType FirstParamType = FirstParam->getType();
10172           QualType SecondParamType = SecondParam->getType();
10173           if (FirstParamType != SecondParamType &&
10174               ComputeQualTypeODRHash(FirstParamType) !=
10175                   ComputeQualTypeODRHash(SecondParamType)) {
10176             if (const DecayedType *ParamDecayedType =
10177                     FirstParamType->getAs<DecayedType>()) {
10178               ODRDiagError(FirstMethod->getLocation(),
10179                            FirstMethod->getSourceRange(), MethodParameterType)
10180                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10181                   << true << ParamDecayedType->getOriginalType();
10182             } else {
10183               ODRDiagError(FirstMethod->getLocation(),
10184                            FirstMethod->getSourceRange(), MethodParameterType)
10185                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10186                   << false;
10187             }
10188 
10189             if (const DecayedType *ParamDecayedType =
10190                     SecondParamType->getAs<DecayedType>()) {
10191               ODRDiagNote(SecondMethod->getLocation(),
10192                           SecondMethod->getSourceRange(), MethodParameterType)
10193                   << SecondMethodType << SecondName << (I + 1)
10194                   << SecondParamType << true
10195                   << ParamDecayedType->getOriginalType();
10196             } else {
10197               ODRDiagNote(SecondMethod->getLocation(),
10198                           SecondMethod->getSourceRange(), MethodParameterType)
10199                   << SecondMethodType << SecondName << (I + 1)
10200                   << SecondParamType << false;
10201             }
10202             ParameterMismatch = true;
10203             break;
10204           }
10205 
10206           DeclarationName FirstParamName = FirstParam->getDeclName();
10207           DeclarationName SecondParamName = SecondParam->getDeclName();
10208           if (FirstParamName != SecondParamName) {
10209             ODRDiagError(FirstMethod->getLocation(),
10210                          FirstMethod->getSourceRange(), MethodParameterName)
10211                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10212             ODRDiagNote(SecondMethod->getLocation(),
10213                         SecondMethod->getSourceRange(), MethodParameterName)
10214                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10215             ParameterMismatch = true;
10216             break;
10217           }
10218 
10219           const Expr *FirstInit = FirstParam->getInit();
10220           const Expr *SecondInit = SecondParam->getInit();
10221           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10222             ODRDiagError(FirstMethod->getLocation(),
10223                          FirstMethod->getSourceRange(),
10224                          MethodParameterSingleDefaultArgument)
10225                 << FirstMethodType << FirstName << (I + 1)
10226                 << (FirstInit == nullptr)
10227                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10228             ODRDiagNote(SecondMethod->getLocation(),
10229                         SecondMethod->getSourceRange(),
10230                         MethodParameterSingleDefaultArgument)
10231                 << SecondMethodType << SecondName << (I + 1)
10232                 << (SecondInit == nullptr)
10233                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10234             ParameterMismatch = true;
10235             break;
10236           }
10237 
10238           if (FirstInit && SecondInit &&
10239               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10240             ODRDiagError(FirstMethod->getLocation(),
10241                          FirstMethod->getSourceRange(),
10242                          MethodParameterDifferentDefaultArgument)
10243                 << FirstMethodType << FirstName << (I + 1)
10244                 << FirstInit->getSourceRange();
10245             ODRDiagNote(SecondMethod->getLocation(),
10246                         SecondMethod->getSourceRange(),
10247                         MethodParameterDifferentDefaultArgument)
10248                 << SecondMethodType << SecondName << (I + 1)
10249                 << SecondInit->getSourceRange();
10250             ParameterMismatch = true;
10251             break;
10252 
10253           }
10254         }
10255 
10256         if (ParameterMismatch) {
10257           Diagnosed = true;
10258           break;
10259         }
10260 
10261         break;
10262       }
10263       case TypeAlias:
10264       case TypeDef: {
10265         TypedefNameDecl *FirstTD = cast<TypedefNameDecl>(FirstDecl);
10266         TypedefNameDecl *SecondTD = cast<TypedefNameDecl>(SecondDecl);
10267         auto FirstName = FirstTD->getDeclName();
10268         auto SecondName = SecondTD->getDeclName();
10269         if (FirstName != SecondName) {
10270           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
10271                        TypedefName)
10272               << (FirstDiffType == TypeAlias) << FirstName;
10273           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
10274                       TypedefName)
10275               << (FirstDiffType == TypeAlias) << SecondName;
10276           Diagnosed = true;
10277           break;
10278         }
10279 
10280         QualType FirstType = FirstTD->getUnderlyingType();
10281         QualType SecondType = SecondTD->getUnderlyingType();
10282         if (ComputeQualTypeODRHash(FirstType) !=
10283             ComputeQualTypeODRHash(SecondType)) {
10284           ODRDiagError(FirstTD->getLocation(), FirstTD->getSourceRange(),
10285                        TypedefType)
10286               << (FirstDiffType == TypeAlias) << FirstName << FirstType;
10287           ODRDiagNote(SecondTD->getLocation(), SecondTD->getSourceRange(),
10288                       TypedefType)
10289               << (FirstDiffType == TypeAlias) << SecondName << SecondType;
10290           Diagnosed = true;
10291           break;
10292         }
10293         break;
10294       }
10295       case Var: {
10296         VarDecl *FirstVD = cast<VarDecl>(FirstDecl);
10297         VarDecl *SecondVD = cast<VarDecl>(SecondDecl);
10298         auto FirstName = FirstVD->getDeclName();
10299         auto SecondName = SecondVD->getDeclName();
10300         if (FirstName != SecondName) {
10301           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10302                        VarName)
10303               << FirstName;
10304           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10305                       VarName)
10306               << SecondName;
10307           Diagnosed = true;
10308           break;
10309         }
10310 
10311         QualType FirstType = FirstVD->getType();
10312         QualType SecondType = SecondVD->getType();
10313         if (ComputeQualTypeODRHash(FirstType) !=
10314                         ComputeQualTypeODRHash(SecondType)) {
10315           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10316                        VarType)
10317               << FirstName << FirstType;
10318           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10319                       VarType)
10320               << SecondName << SecondType;
10321           Diagnosed = true;
10322           break;
10323         }
10324 
10325         const Expr *FirstInit = FirstVD->getInit();
10326         const Expr *SecondInit = SecondVD->getInit();
10327         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10328           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10329                        VarSingleInitializer)
10330               << FirstName << (FirstInit == nullptr)
10331               << (FirstInit ? FirstInit->getSourceRange(): SourceRange());
10332           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10333                       VarSingleInitializer)
10334               << SecondName << (SecondInit == nullptr)
10335               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10336           Diagnosed = true;
10337           break;
10338         }
10339 
10340         if (FirstInit && SecondInit &&
10341             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10342           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10343                        VarDifferentInitializer)
10344               << FirstName << FirstInit->getSourceRange();
10345           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10346                       VarDifferentInitializer)
10347               << SecondName << SecondInit->getSourceRange();
10348           Diagnosed = true;
10349           break;
10350         }
10351 
10352         const bool FirstIsConstexpr = FirstVD->isConstexpr();
10353         const bool SecondIsConstexpr = SecondVD->isConstexpr();
10354         if (FirstIsConstexpr != SecondIsConstexpr) {
10355           ODRDiagError(FirstVD->getLocation(), FirstVD->getSourceRange(),
10356                        VarConstexpr)
10357               << FirstName << FirstIsConstexpr;
10358           ODRDiagNote(SecondVD->getLocation(), SecondVD->getSourceRange(),
10359                       VarConstexpr)
10360               << SecondName << SecondIsConstexpr;
10361           Diagnosed = true;
10362           break;
10363         }
10364         break;
10365       }
10366       case Friend: {
10367         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10368         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10369 
10370         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10371         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10372 
10373         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10374         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10375 
10376         if (FirstND && SecondND) {
10377           ODRDiagError(FirstFriend->getFriendLoc(),
10378                        FirstFriend->getSourceRange(), FriendFunction)
10379               << FirstND;
10380           ODRDiagNote(SecondFriend->getFriendLoc(),
10381                       SecondFriend->getSourceRange(), FriendFunction)
10382               << SecondND;
10383 
10384           Diagnosed = true;
10385           break;
10386         }
10387 
10388         if (FirstTSI && SecondTSI) {
10389           QualType FirstFriendType = FirstTSI->getType();
10390           QualType SecondFriendType = SecondTSI->getType();
10391           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10392                  ComputeQualTypeODRHash(SecondFriendType));
10393           ODRDiagError(FirstFriend->getFriendLoc(),
10394                        FirstFriend->getSourceRange(), FriendType)
10395               << FirstFriendType;
10396           ODRDiagNote(SecondFriend->getFriendLoc(),
10397                       SecondFriend->getSourceRange(), FriendType)
10398               << SecondFriendType;
10399           Diagnosed = true;
10400           break;
10401         }
10402 
10403         ODRDiagError(FirstFriend->getFriendLoc(), FirstFriend->getSourceRange(),
10404                      FriendTypeFunction)
10405             << (FirstTSI == nullptr);
10406         ODRDiagNote(SecondFriend->getFriendLoc(),
10407                     SecondFriend->getSourceRange(), FriendTypeFunction)
10408             << (SecondTSI == nullptr);
10409 
10410         Diagnosed = true;
10411         break;
10412       }
10413       }
10414 
10415       if (Diagnosed == true)
10416         continue;
10417 
10418       Diag(FirstDecl->getLocation(),
10419            diag::err_module_odr_violation_mismatch_decl_unknown)
10420           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
10421           << FirstDecl->getSourceRange();
10422       Diag(SecondDecl->getLocation(),
10423            diag::note_module_odr_violation_mismatch_decl_unknown)
10424           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
10425       Diagnosed = true;
10426     }
10427 
10428     if (!Diagnosed) {
10429       // All definitions are updates to the same declaration. This happens if a
10430       // module instantiates the declaration of a class template specialization
10431       // and two or more other modules instantiate its definition.
10432       //
10433       // FIXME: Indicate which modules had instantiations of this definition.
10434       // FIXME: How can this even happen?
10435       Diag(Merge.first->getLocation(),
10436            diag::err_module_odr_violation_different_instantiations)
10437         << Merge.first;
10438     }
10439   }
10440 }
10441 
10442 void ASTReader::StartedDeserializing() {
10443   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
10444     ReadTimer->startTimer();
10445 }
10446 
10447 void ASTReader::FinishedDeserializing() {
10448   assert(NumCurrentElementsDeserializing &&
10449          "FinishedDeserializing not paired with StartedDeserializing");
10450   if (NumCurrentElementsDeserializing == 1) {
10451     // We decrease NumCurrentElementsDeserializing only after pending actions
10452     // are finished, to avoid recursively re-calling finishPendingActions().
10453     finishPendingActions();
10454   }
10455   --NumCurrentElementsDeserializing;
10456 
10457   if (NumCurrentElementsDeserializing == 0) {
10458     // Propagate exception specification updates along redeclaration chains.
10459     while (!PendingExceptionSpecUpdates.empty()) {
10460       auto Updates = std::move(PendingExceptionSpecUpdates);
10461       PendingExceptionSpecUpdates.clear();
10462       for (auto Update : Updates) {
10463         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
10464         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
10465         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
10466         if (auto *Listener = getContext().getASTMutationListener())
10467           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
10468         for (auto *Redecl : Update.second->redecls())
10469           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
10470       }
10471     }
10472 
10473     if (ReadTimer)
10474       ReadTimer->stopTimer();
10475 
10476     diagnoseOdrViolations();
10477 
10478     // We are not in recursive loading, so it's safe to pass the "interesting"
10479     // decls to the consumer.
10480     if (Consumer)
10481       PassInterestingDeclsToConsumer();
10482   }
10483 }
10484 
10485 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
10486   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
10487     // Remove any fake results before adding any real ones.
10488     auto It = PendingFakeLookupResults.find(II);
10489     if (It != PendingFakeLookupResults.end()) {
10490       for (auto *ND : It->second)
10491         SemaObj->IdResolver.RemoveDecl(ND);
10492       // FIXME: this works around module+PCH performance issue.
10493       // Rather than erase the result from the map, which is O(n), just clear
10494       // the vector of NamedDecls.
10495       It->second.clear();
10496     }
10497   }
10498 
10499   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
10500     SemaObj->TUScope->AddDecl(D);
10501   } else if (SemaObj->TUScope) {
10502     // Adding the decl to IdResolver may have failed because it was already in
10503     // (even though it was not added in scope). If it is already in, make sure
10504     // it gets in the scope as well.
10505     if (std::find(SemaObj->IdResolver.begin(Name),
10506                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
10507       SemaObj->TUScope->AddDecl(D);
10508   }
10509 }
10510 
10511 ASTReader::ASTReader(Preprocessor &PP, ASTContext *Context,
10512                      const PCHContainerReader &PCHContainerRdr,
10513                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
10514                      StringRef isysroot, bool DisableValidation,
10515                      bool AllowASTWithCompilerErrors,
10516                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
10517                      bool UseGlobalIndex,
10518                      std::unique_ptr<llvm::Timer> ReadTimer)
10519     : Listener(DisableValidation
10520                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
10521                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
10522       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
10523       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
10524       ContextObj(Context),
10525       ModuleMgr(PP.getFileManager(), PP.getPCMCache(), PCHContainerRdr,
10526                 PP.getHeaderSearchInfo()),
10527       PCMCache(PP.getPCMCache()), DummyIdResolver(PP),
10528       ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
10529       DisableValidation(DisableValidation),
10530       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
10531       AllowConfigurationMismatch(AllowConfigurationMismatch),
10532       ValidateSystemInputs(ValidateSystemInputs),
10533       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
10534   SourceMgr.setExternalSLocEntrySource(this);
10535 
10536   for (const auto &Ext : Extensions) {
10537     auto BlockName = Ext->getExtensionMetadata().BlockName;
10538     auto Known = ModuleFileExtensions.find(BlockName);
10539     if (Known != ModuleFileExtensions.end()) {
10540       Diags.Report(diag::warn_duplicate_module_file_extension)
10541         << BlockName;
10542       continue;
10543     }
10544 
10545     ModuleFileExtensions.insert({BlockName, Ext});
10546   }
10547 }
10548 
10549 ASTReader::~ASTReader() {
10550   if (OwnsDeserializationListener)
10551     delete DeserializationListener;
10552 }
10553 
10554 IdentifierResolver &ASTReader::getIdResolver() {
10555   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
10556 }
10557 
10558 unsigned ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
10559                                      unsigned AbbrevID) {
10560   Idx = 0;
10561   Record.clear();
10562   return Cursor.readRecord(AbbrevID, Record);
10563 }
10564