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