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