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