1 //===- ASTReader.cpp - AST File Reader ------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file defines the ASTReader class, which reads AST files.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "ASTCommon.h"
14 #include "ASTReaderInternals.h"
15 #include "clang/AST/ASTConsumer.h"
16 #include "clang/AST/ASTContext.h"
17 #include "clang/AST/ASTMutationListener.h"
18 #include "clang/AST/ASTUnresolvedSet.h"
19 #include "clang/AST/AbstractTypeReader.h"
20 #include "clang/AST/Decl.h"
21 #include "clang/AST/DeclBase.h"
22 #include "clang/AST/DeclCXX.h"
23 #include "clang/AST/DeclFriend.h"
24 #include "clang/AST/DeclGroup.h"
25 #include "clang/AST/DeclObjC.h"
26 #include "clang/AST/DeclTemplate.h"
27 #include "clang/AST/DeclarationName.h"
28 #include "clang/AST/Expr.h"
29 #include "clang/AST/ExprCXX.h"
30 #include "clang/AST/ExternalASTSource.h"
31 #include "clang/AST/NestedNameSpecifier.h"
32 #include "clang/AST/ODRHash.h"
33 #include "clang/AST/OpenMPClause.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/DiagnosticError.h"
44 #include "clang/Basic/DiagnosticOptions.h"
45 #include "clang/Basic/ExceptionSpecificationType.h"
46 #include "clang/Basic/FileManager.h"
47 #include "clang/Basic/FileSystemOptions.h"
48 #include "clang/Basic/IdentifierTable.h"
49 #include "clang/Basic/LLVM.h"
50 #include "clang/Basic/LangOptions.h"
51 #include "clang/Basic/Module.h"
52 #include "clang/Basic/ObjCRuntime.h"
53 #include "clang/Basic/OpenMPKinds.h"
54 #include "clang/Basic/OperatorKinds.h"
55 #include "clang/Basic/PragmaKinds.h"
56 #include "clang/Basic/Sanitizers.h"
57 #include "clang/Basic/SourceLocation.h"
58 #include "clang/Basic/SourceManager.h"
59 #include "clang/Basic/SourceManagerInternals.h"
60 #include "clang/Basic/Specifiers.h"
61 #include "clang/Basic/TargetInfo.h"
62 #include "clang/Basic/TargetOptions.h"
63 #include "clang/Basic/TokenKinds.h"
64 #include "clang/Basic/Version.h"
65 #include "clang/Lex/HeaderSearch.h"
66 #include "clang/Lex/HeaderSearchOptions.h"
67 #include "clang/Lex/MacroInfo.h"
68 #include "clang/Lex/ModuleMap.h"
69 #include "clang/Lex/PreprocessingRecord.h"
70 #include "clang/Lex/Preprocessor.h"
71 #include "clang/Lex/PreprocessorOptions.h"
72 #include "clang/Lex/Token.h"
73 #include "clang/Sema/ObjCMethodList.h"
74 #include "clang/Sema/Scope.h"
75 #include "clang/Sema/Sema.h"
76 #include "clang/Sema/Weak.h"
77 #include "clang/Serialization/ASTBitCodes.h"
78 #include "clang/Serialization/ASTDeserializationListener.h"
79 #include "clang/Serialization/ASTRecordReader.h"
80 #include "clang/Serialization/ContinuousRangeMap.h"
81 #include "clang/Serialization/GlobalModuleIndex.h"
82 #include "clang/Serialization/InMemoryModuleCache.h"
83 #include "clang/Serialization/ModuleFile.h"
84 #include "clang/Serialization/ModuleFileExtension.h"
85 #include "clang/Serialization/ModuleManager.h"
86 #include "clang/Serialization/PCHContainerOperations.h"
87 #include "clang/Serialization/SerializationDiagnostic.h"
88 #include "llvm/ADT/APFloat.h"
89 #include "llvm/ADT/APInt.h"
90 #include "llvm/ADT/APSInt.h"
91 #include "llvm/ADT/ArrayRef.h"
92 #include "llvm/ADT/DenseMap.h"
93 #include "llvm/ADT/FloatingPointMode.h"
94 #include "llvm/ADT/FoldingSet.h"
95 #include "llvm/ADT/Hashing.h"
96 #include "llvm/ADT/IntrusiveRefCntPtr.h"
97 #include "llvm/ADT/None.h"
98 #include "llvm/ADT/Optional.h"
99 #include "llvm/ADT/STLExtras.h"
100 #include "llvm/ADT/ScopeExit.h"
101 #include "llvm/ADT/SmallPtrSet.h"
102 #include "llvm/ADT/SmallString.h"
103 #include "llvm/ADT/SmallVector.h"
104 #include "llvm/ADT/StringExtras.h"
105 #include "llvm/ADT/StringMap.h"
106 #include "llvm/ADT/StringRef.h"
107 #include "llvm/ADT/Triple.h"
108 #include "llvm/ADT/iterator_range.h"
109 #include "llvm/Bitstream/BitstreamReader.h"
110 #include "llvm/Support/Casting.h"
111 #include "llvm/Support/Compiler.h"
112 #include "llvm/Support/Compression.h"
113 #include "llvm/Support/DJB.h"
114 #include "llvm/Support/Endian.h"
115 #include "llvm/Support/Error.h"
116 #include "llvm/Support/ErrorHandling.h"
117 #include "llvm/Support/FileSystem.h"
118 #include "llvm/Support/LEB128.h"
119 #include "llvm/Support/MemoryBuffer.h"
120 #include "llvm/Support/Path.h"
121 #include "llvm/Support/SaveAndRestore.h"
122 #include "llvm/Support/Timer.h"
123 #include "llvm/Support/VersionTuple.h"
124 #include "llvm/Support/raw_ostream.h"
125 #include <algorithm>
126 #include <cassert>
127 #include <cstddef>
128 #include <cstdint>
129 #include <cstdio>
130 #include <ctime>
131 #include <iterator>
132 #include <limits>
133 #include <map>
134 #include <memory>
135 #include <string>
136 #include <system_error>
137 #include <tuple>
138 #include <utility>
139 #include <vector>
140 
141 using namespace clang;
142 using namespace clang::serialization;
143 using namespace clang::serialization::reader;
144 using llvm::BitstreamCursor;
145 using llvm::RoundingMode;
146 
147 //===----------------------------------------------------------------------===//
148 // ChainedASTReaderListener implementation
149 //===----------------------------------------------------------------------===//
150 
151 bool
152 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
153   return First->ReadFullVersionInformation(FullVersion) ||
154          Second->ReadFullVersionInformation(FullVersion);
155 }
156 
157 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
158   First->ReadModuleName(ModuleName);
159   Second->ReadModuleName(ModuleName);
160 }
161 
162 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
163   First->ReadModuleMapFile(ModuleMapPath);
164   Second->ReadModuleMapFile(ModuleMapPath);
165 }
166 
167 bool
168 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
169                                               bool Complain,
170                                               bool AllowCompatibleDifferences) {
171   return First->ReadLanguageOptions(LangOpts, Complain,
172                                     AllowCompatibleDifferences) ||
173          Second->ReadLanguageOptions(LangOpts, Complain,
174                                      AllowCompatibleDifferences);
175 }
176 
177 bool ChainedASTReaderListener::ReadTargetOptions(
178     const TargetOptions &TargetOpts, bool Complain,
179     bool AllowCompatibleDifferences) {
180   return First->ReadTargetOptions(TargetOpts, Complain,
181                                   AllowCompatibleDifferences) ||
182          Second->ReadTargetOptions(TargetOpts, Complain,
183                                    AllowCompatibleDifferences);
184 }
185 
186 bool ChainedASTReaderListener::ReadDiagnosticOptions(
187     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
188   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
189          Second->ReadDiagnosticOptions(DiagOpts, Complain);
190 }
191 
192 bool
193 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
194                                                 bool Complain) {
195   return First->ReadFileSystemOptions(FSOpts, Complain) ||
196          Second->ReadFileSystemOptions(FSOpts, Complain);
197 }
198 
199 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
200     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
201     bool Complain) {
202   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
203                                         Complain) ||
204          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
205                                          Complain);
206 }
207 
208 bool ChainedASTReaderListener::ReadPreprocessorOptions(
209     const PreprocessorOptions &PPOpts, bool Complain,
210     std::string &SuggestedPredefines) {
211   return First->ReadPreprocessorOptions(PPOpts, Complain,
212                                         SuggestedPredefines) ||
213          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
214 }
215 
216 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
217                                            unsigned Value) {
218   First->ReadCounter(M, Value);
219   Second->ReadCounter(M, Value);
220 }
221 
222 bool ChainedASTReaderListener::needsInputFileVisitation() {
223   return First->needsInputFileVisitation() ||
224          Second->needsInputFileVisitation();
225 }
226 
227 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
228   return First->needsSystemInputFileVisitation() ||
229   Second->needsSystemInputFileVisitation();
230 }
231 
232 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
233                                                ModuleKind Kind) {
234   First->visitModuleFile(Filename, Kind);
235   Second->visitModuleFile(Filename, Kind);
236 }
237 
238 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
239                                               bool isSystem,
240                                               bool isOverridden,
241                                               bool isExplicitModule) {
242   bool Continue = false;
243   if (First->needsInputFileVisitation() &&
244       (!isSystem || First->needsSystemInputFileVisitation()))
245     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
246                                       isExplicitModule);
247   if (Second->needsInputFileVisitation() &&
248       (!isSystem || Second->needsSystemInputFileVisitation()))
249     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
250                                        isExplicitModule);
251   return Continue;
252 }
253 
254 void ChainedASTReaderListener::readModuleFileExtension(
255        const ModuleFileExtensionMetadata &Metadata) {
256   First->readModuleFileExtension(Metadata);
257   Second->readModuleFileExtension(Metadata);
258 }
259 
260 //===----------------------------------------------------------------------===//
261 // PCH validator implementation
262 //===----------------------------------------------------------------------===//
263 
264 ASTReaderListener::~ASTReaderListener() = default;
265 
266 /// Compare the given set of language options against an existing set of
267 /// language options.
268 ///
269 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
270 /// \param AllowCompatibleDifferences If true, differences between compatible
271 ///        language options will be permitted.
272 ///
273 /// \returns true if the languagae options mis-match, false otherwise.
274 static bool checkLanguageOptions(const LangOptions &LangOpts,
275                                  const LangOptions &ExistingLangOpts,
276                                  DiagnosticsEngine *Diags,
277                                  bool AllowCompatibleDifferences = true) {
278 #define LANGOPT(Name, Bits, Default, Description)                 \
279   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
280     if (Diags)                                                    \
281       Diags->Report(diag::err_pch_langopt_mismatch)               \
282         << Description << LangOpts.Name << ExistingLangOpts.Name; \
283     return true;                                                  \
284   }
285 
286 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
287   if (ExistingLangOpts.Name != LangOpts.Name) {           \
288     if (Diags)                                            \
289       Diags->Report(diag::err_pch_langopt_value_mismatch) \
290         << Description;                                   \
291     return true;                                          \
292   }
293 
294 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
295   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
296     if (Diags)                                                 \
297       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
298         << Description;                                        \
299     return true;                                               \
300   }
301 
302 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
303   if (!AllowCompatibleDifferences)                            \
304     LANGOPT(Name, Bits, Default, Description)
305 
306 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
307   if (!AllowCompatibleDifferences)                                 \
308     ENUM_LANGOPT(Name, Bits, Default, Description)
309 
310 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
311   if (!AllowCompatibleDifferences)                                 \
312     VALUE_LANGOPT(Name, Bits, Default, Description)
313 
314 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
315 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
316 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
317 #include "clang/Basic/LangOptions.def"
318 
319   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
320     if (Diags)
321       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
322     return true;
323   }
324 
325   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
326     if (Diags)
327       Diags->Report(diag::err_pch_langopt_value_mismatch)
328       << "target Objective-C runtime";
329     return true;
330   }
331 
332   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
333       LangOpts.CommentOpts.BlockCommandNames) {
334     if (Diags)
335       Diags->Report(diag::err_pch_langopt_value_mismatch)
336         << "block command names";
337     return true;
338   }
339 
340   // Sanitizer feature mismatches are treated as compatible differences. If
341   // compatible differences aren't allowed, we still only want to check for
342   // mismatches of non-modular sanitizers (the only ones which can affect AST
343   // generation).
344   if (!AllowCompatibleDifferences) {
345     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
346     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
347     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
348     ExistingSanitizers.clear(ModularSanitizers);
349     ImportedSanitizers.clear(ModularSanitizers);
350     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
351       const std::string Flag = "-fsanitize=";
352       if (Diags) {
353 #define SANITIZER(NAME, ID)                                                    \
354   {                                                                            \
355     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
356     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
357     if (InExistingModule != InImportedModule)                                  \
358       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
359           << InExistingModule << (Flag + NAME);                                \
360   }
361 #include "clang/Basic/Sanitizers.def"
362       }
363       return true;
364     }
365   }
366 
367   return false;
368 }
369 
370 /// Compare the given set of target options against an existing set of
371 /// target options.
372 ///
373 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
374 ///
375 /// \returns true if the target options mis-match, false otherwise.
376 static bool checkTargetOptions(const TargetOptions &TargetOpts,
377                                const TargetOptions &ExistingTargetOpts,
378                                DiagnosticsEngine *Diags,
379                                bool AllowCompatibleDifferences = true) {
380 #define CHECK_TARGET_OPT(Field, Name)                             \
381   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
382     if (Diags)                                                    \
383       Diags->Report(diag::err_pch_targetopt_mismatch)             \
384         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
385     return true;                                                  \
386   }
387 
388   // The triple and ABI must match exactly.
389   CHECK_TARGET_OPT(Triple, "target");
390   CHECK_TARGET_OPT(ABI, "target ABI");
391 
392   // We can tolerate different CPUs in many cases, notably when one CPU
393   // supports a strict superset of another. When allowing compatible
394   // differences skip this check.
395   if (!AllowCompatibleDifferences) {
396     CHECK_TARGET_OPT(CPU, "target CPU");
397     CHECK_TARGET_OPT(TuneCPU, "tune CPU");
398   }
399 
400 #undef CHECK_TARGET_OPT
401 
402   // Compare feature sets.
403   SmallVector<StringRef, 4> ExistingFeatures(
404                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
405                                              ExistingTargetOpts.FeaturesAsWritten.end());
406   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
407                                          TargetOpts.FeaturesAsWritten.end());
408   llvm::sort(ExistingFeatures);
409   llvm::sort(ReadFeatures);
410 
411   // We compute the set difference in both directions explicitly so that we can
412   // diagnose the differences differently.
413   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
414   std::set_difference(
415       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
416       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
417   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
418                       ExistingFeatures.begin(), ExistingFeatures.end(),
419                       std::back_inserter(UnmatchedReadFeatures));
420 
421   // If we are allowing compatible differences and the read feature set is
422   // a strict subset of the existing feature set, there is nothing to diagnose.
423   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
424     return false;
425 
426   if (Diags) {
427     for (StringRef Feature : UnmatchedReadFeatures)
428       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
429           << /* is-existing-feature */ false << Feature;
430     for (StringRef Feature : UnmatchedExistingFeatures)
431       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
432           << /* is-existing-feature */ true << Feature;
433   }
434 
435   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
436 }
437 
438 bool
439 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
440                                   bool Complain,
441                                   bool AllowCompatibleDifferences) {
442   const LangOptions &ExistingLangOpts = PP.getLangOpts();
443   return checkLanguageOptions(LangOpts, ExistingLangOpts,
444                               Complain ? &Reader.Diags : nullptr,
445                               AllowCompatibleDifferences);
446 }
447 
448 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
449                                      bool Complain,
450                                      bool AllowCompatibleDifferences) {
451   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
452   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
453                             Complain ? &Reader.Diags : nullptr,
454                             AllowCompatibleDifferences);
455 }
456 
457 namespace {
458 
459 using MacroDefinitionsMap =
460     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
461 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
462 
463 } // namespace
464 
465 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
466                                          DiagnosticsEngine &Diags,
467                                          bool Complain) {
468   using Level = DiagnosticsEngine::Level;
469 
470   // Check current mappings for new -Werror mappings, and the stored mappings
471   // for cases that were explicitly mapped to *not* be errors that are now
472   // errors because of options like -Werror.
473   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
474 
475   for (DiagnosticsEngine *MappingSource : MappingSources) {
476     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
477       diag::kind DiagID = DiagIDMappingPair.first;
478       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
479       if (CurLevel < DiagnosticsEngine::Error)
480         continue; // not significant
481       Level StoredLevel =
482           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
483       if (StoredLevel < DiagnosticsEngine::Error) {
484         if (Complain)
485           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
486               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
487         return true;
488       }
489     }
490   }
491 
492   return false;
493 }
494 
495 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
496   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
497   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
498     return true;
499   return Ext >= diag::Severity::Error;
500 }
501 
502 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
503                                     DiagnosticsEngine &Diags,
504                                     bool IsSystem, bool Complain) {
505   // Top-level options
506   if (IsSystem) {
507     if (Diags.getSuppressSystemWarnings())
508       return false;
509     // If -Wsystem-headers was not enabled before, be conservative
510     if (StoredDiags.getSuppressSystemWarnings()) {
511       if (Complain)
512         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
513       return true;
514     }
515   }
516 
517   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
518     if (Complain)
519       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
520     return true;
521   }
522 
523   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
524       !StoredDiags.getEnableAllWarnings()) {
525     if (Complain)
526       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
527     return true;
528   }
529 
530   if (isExtHandlingFromDiagsError(Diags) &&
531       !isExtHandlingFromDiagsError(StoredDiags)) {
532     if (Complain)
533       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
534     return true;
535   }
536 
537   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
538 }
539 
540 /// Return the top import module if it is implicit, nullptr otherwise.
541 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
542                                           Preprocessor &PP) {
543   // If the original import came from a file explicitly generated by the user,
544   // don't check the diagnostic mappings.
545   // FIXME: currently this is approximated by checking whether this is not a
546   // module import of an implicitly-loaded module file.
547   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
548   // the transitive closure of its imports, since unrelated modules cannot be
549   // imported until after this module finishes validation.
550   ModuleFile *TopImport = &*ModuleMgr.rbegin();
551   while (!TopImport->ImportedBy.empty())
552     TopImport = TopImport->ImportedBy[0];
553   if (TopImport->Kind != MK_ImplicitModule)
554     return nullptr;
555 
556   StringRef ModuleName = TopImport->ModuleName;
557   assert(!ModuleName.empty() && "diagnostic options read before module name");
558 
559   Module *M =
560       PP.getHeaderSearchInfo().lookupModule(ModuleName, TopImport->ImportLoc);
561   assert(M && "missing module");
562   return M;
563 }
564 
565 bool PCHValidator::ReadDiagnosticOptions(
566     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
567   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
568   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
569   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
570       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
571   // This should never fail, because we would have processed these options
572   // before writing them to an ASTFile.
573   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
574 
575   ModuleManager &ModuleMgr = Reader.getModuleManager();
576   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
577 
578   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
579   if (!TopM)
580     return false;
581 
582   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
583   // contains the union of their flags.
584   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
585                                  Complain);
586 }
587 
588 /// Collect the macro definitions provided by the given preprocessor
589 /// options.
590 static void
591 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
592                         MacroDefinitionsMap &Macros,
593                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
594   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
595     StringRef Macro = PPOpts.Macros[I].first;
596     bool IsUndef = PPOpts.Macros[I].second;
597 
598     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
599     StringRef MacroName = MacroPair.first;
600     StringRef MacroBody = MacroPair.second;
601 
602     // For an #undef'd macro, we only care about the name.
603     if (IsUndef) {
604       if (MacroNames && !Macros.count(MacroName))
605         MacroNames->push_back(MacroName);
606 
607       Macros[MacroName] = std::make_pair("", true);
608       continue;
609     }
610 
611     // For a #define'd macro, figure out the actual definition.
612     if (MacroName.size() == Macro.size())
613       MacroBody = "1";
614     else {
615       // Note: GCC drops anything following an end-of-line character.
616       StringRef::size_type End = MacroBody.find_first_of("\n\r");
617       MacroBody = MacroBody.substr(0, End);
618     }
619 
620     if (MacroNames && !Macros.count(MacroName))
621       MacroNames->push_back(MacroName);
622     Macros[MacroName] = std::make_pair(MacroBody, false);
623   }
624 }
625 
626 /// Check the preprocessor options deserialized from the control block
627 /// against the preprocessor options in an existing preprocessor.
628 ///
629 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
630 /// \param Validate If true, validate preprocessor options. If false, allow
631 ///        macros defined by \p ExistingPPOpts to override those defined by
632 ///        \p PPOpts in SuggestedPredefines.
633 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
634                                      const PreprocessorOptions &ExistingPPOpts,
635                                      DiagnosticsEngine *Diags,
636                                      FileManager &FileMgr,
637                                      std::string &SuggestedPredefines,
638                                      const LangOptions &LangOpts,
639                                      bool Validate = true) {
640   // Check macro definitions.
641   MacroDefinitionsMap ASTFileMacros;
642   collectMacroDefinitions(PPOpts, ASTFileMacros);
643   MacroDefinitionsMap ExistingMacros;
644   SmallVector<StringRef, 4> ExistingMacroNames;
645   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
646 
647   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
648     // Dig out the macro definition in the existing preprocessor options.
649     StringRef MacroName = ExistingMacroNames[I];
650     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
651 
652     // Check whether we know anything about this macro name or not.
653     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
654         ASTFileMacros.find(MacroName);
655     if (!Validate || Known == ASTFileMacros.end()) {
656       // FIXME: Check whether this identifier was referenced anywhere in the
657       // AST file. If so, we should reject the AST file. Unfortunately, this
658       // information isn't in the control block. What shall we do about it?
659 
660       if (Existing.second) {
661         SuggestedPredefines += "#undef ";
662         SuggestedPredefines += MacroName.str();
663         SuggestedPredefines += '\n';
664       } else {
665         SuggestedPredefines += "#define ";
666         SuggestedPredefines += MacroName.str();
667         SuggestedPredefines += ' ';
668         SuggestedPredefines += Existing.first.str();
669         SuggestedPredefines += '\n';
670       }
671       continue;
672     }
673 
674     // If the macro was defined in one but undef'd in the other, we have a
675     // conflict.
676     if (Existing.second != Known->second.second) {
677       if (Diags) {
678         Diags->Report(diag::err_pch_macro_def_undef)
679           << MacroName << Known->second.second;
680       }
681       return true;
682     }
683 
684     // If the macro was #undef'd in both, or if the macro bodies are identical,
685     // it's fine.
686     if (Existing.second || Existing.first == Known->second.first)
687       continue;
688 
689     // The macro bodies differ; complain.
690     if (Diags) {
691       Diags->Report(diag::err_pch_macro_def_conflict)
692         << MacroName << Known->second.first << Existing.first;
693     }
694     return true;
695   }
696 
697   // Check whether we're using predefines.
698   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
699     if (Diags) {
700       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
701     }
702     return true;
703   }
704 
705   // Detailed record is important since it is used for the module cache hash.
706   if (LangOpts.Modules &&
707       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
708     if (Diags) {
709       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
710     }
711     return true;
712   }
713 
714   // Compute the #include and #include_macros lines we need.
715   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
716     StringRef File = ExistingPPOpts.Includes[I];
717 
718     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
719         !ExistingPPOpts.PCHThroughHeader.empty()) {
720       // In case the through header is an include, we must add all the includes
721       // to the predefines so the start point can be determined.
722       SuggestedPredefines += "#include \"";
723       SuggestedPredefines += File;
724       SuggestedPredefines += "\"\n";
725       continue;
726     }
727 
728     if (File == ExistingPPOpts.ImplicitPCHInclude)
729       continue;
730 
731     if (llvm::is_contained(PPOpts.Includes, File))
732       continue;
733 
734     SuggestedPredefines += "#include \"";
735     SuggestedPredefines += File;
736     SuggestedPredefines += "\"\n";
737   }
738 
739   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
740     StringRef File = ExistingPPOpts.MacroIncludes[I];
741     if (llvm::is_contained(PPOpts.MacroIncludes, File))
742       continue;
743 
744     SuggestedPredefines += "#__include_macros \"";
745     SuggestedPredefines += File;
746     SuggestedPredefines += "\"\n##\n";
747   }
748 
749   return false;
750 }
751 
752 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
753                                            bool Complain,
754                                            std::string &SuggestedPredefines) {
755   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
756 
757   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
758                                   Complain? &Reader.Diags : nullptr,
759                                   PP.getFileManager(),
760                                   SuggestedPredefines,
761                                   PP.getLangOpts());
762 }
763 
764 bool SimpleASTReaderListener::ReadPreprocessorOptions(
765                                   const PreprocessorOptions &PPOpts,
766                                   bool Complain,
767                                   std::string &SuggestedPredefines) {
768   return checkPreprocessorOptions(PPOpts,
769                                   PP.getPreprocessorOpts(),
770                                   nullptr,
771                                   PP.getFileManager(),
772                                   SuggestedPredefines,
773                                   PP.getLangOpts(),
774                                   false);
775 }
776 
777 /// Check the header search options deserialized from the control block
778 /// against the header search options in an existing preprocessor.
779 ///
780 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
781 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
782                                      StringRef SpecificModuleCachePath,
783                                      StringRef ExistingModuleCachePath,
784                                      DiagnosticsEngine *Diags,
785                                      const LangOptions &LangOpts,
786                                      const PreprocessorOptions &PPOpts) {
787   if (LangOpts.Modules) {
788     if (SpecificModuleCachePath != ExistingModuleCachePath &&
789         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
790       if (Diags)
791         Diags->Report(diag::err_pch_modulecache_mismatch)
792           << SpecificModuleCachePath << ExistingModuleCachePath;
793       return true;
794     }
795   }
796 
797   return false;
798 }
799 
800 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
801                                            StringRef SpecificModuleCachePath,
802                                            bool Complain) {
803   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
804                                   PP.getHeaderSearchInfo().getModuleCachePath(),
805                                   Complain ? &Reader.Diags : nullptr,
806                                   PP.getLangOpts(), PP.getPreprocessorOpts());
807 }
808 
809 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
810   PP.setCounterValue(Value);
811 }
812 
813 //===----------------------------------------------------------------------===//
814 // AST reader implementation
815 //===----------------------------------------------------------------------===//
816 
817 static uint64_t readULEB(const unsigned char *&P) {
818   unsigned Length = 0;
819   const char *Error = nullptr;
820 
821   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
822   if (Error)
823     llvm::report_fatal_error(Error);
824   P += Length;
825   return Val;
826 }
827 
828 /// Read ULEB-encoded key length and data length.
829 static std::pair<unsigned, unsigned>
830 readULEBKeyDataLength(const unsigned char *&P) {
831   unsigned KeyLen = readULEB(P);
832   if ((unsigned)KeyLen != KeyLen)
833     llvm::report_fatal_error("key too large");
834 
835   unsigned DataLen = readULEB(P);
836   if ((unsigned)DataLen != DataLen)
837     llvm::report_fatal_error("data too large");
838 
839   return std::make_pair(KeyLen, DataLen);
840 }
841 
842 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
843                                            bool TakeOwnership) {
844   DeserializationListener = Listener;
845   OwnsDeserializationListener = TakeOwnership;
846 }
847 
848 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
849   return serialization::ComputeHash(Sel);
850 }
851 
852 std::pair<unsigned, unsigned>
853 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
854   return readULEBKeyDataLength(d);
855 }
856 
857 ASTSelectorLookupTrait::internal_key_type
858 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
859   using namespace llvm::support;
860 
861   SelectorTable &SelTable = Reader.getContext().Selectors;
862   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
863   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
864       F, endian::readNext<uint32_t, little, unaligned>(d));
865   if (N == 0)
866     return SelTable.getNullarySelector(FirstII);
867   else if (N == 1)
868     return SelTable.getUnarySelector(FirstII);
869 
870   SmallVector<IdentifierInfo *, 16> Args;
871   Args.push_back(FirstII);
872   for (unsigned I = 1; I != N; ++I)
873     Args.push_back(Reader.getLocalIdentifier(
874         F, endian::readNext<uint32_t, little, unaligned>(d)));
875 
876   return SelTable.getSelector(N, Args.data());
877 }
878 
879 ASTSelectorLookupTrait::data_type
880 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
881                                  unsigned DataLen) {
882   using namespace llvm::support;
883 
884   data_type Result;
885 
886   Result.ID = Reader.getGlobalSelectorID(
887       F, endian::readNext<uint32_t, little, unaligned>(d));
888   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
889   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
890   Result.InstanceBits = FullInstanceBits & 0x3;
891   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
892   Result.FactoryBits = FullFactoryBits & 0x3;
893   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
894   unsigned NumInstanceMethods = FullInstanceBits >> 3;
895   unsigned NumFactoryMethods = FullFactoryBits >> 3;
896 
897   // Load instance methods
898   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
899     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
900             F, endian::readNext<uint32_t, little, unaligned>(d)))
901       Result.Instance.push_back(Method);
902   }
903 
904   // Load factory methods
905   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
906     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
907             F, endian::readNext<uint32_t, little, unaligned>(d)))
908       Result.Factory.push_back(Method);
909   }
910 
911   return Result;
912 }
913 
914 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
915   return llvm::djbHash(a);
916 }
917 
918 std::pair<unsigned, unsigned>
919 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
920   return readULEBKeyDataLength(d);
921 }
922 
923 ASTIdentifierLookupTraitBase::internal_key_type
924 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
925   assert(n >= 2 && d[n-1] == '\0');
926   return StringRef((const char*) d, n-1);
927 }
928 
929 /// Whether the given identifier is "interesting".
930 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
931                                     bool IsModule) {
932   return II.hadMacroDefinition() || II.isPoisoned() ||
933          (!IsModule && II.getObjCOrBuiltinID()) ||
934          II.hasRevertedTokenIDToIdentifier() ||
935          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
936           II.getFETokenInfo());
937 }
938 
939 static bool readBit(unsigned &Bits) {
940   bool Value = Bits & 0x1;
941   Bits >>= 1;
942   return Value;
943 }
944 
945 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
946   using namespace llvm::support;
947 
948   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
949   return Reader.getGlobalIdentifierID(F, RawID >> 1);
950 }
951 
952 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
953   if (!II.isFromAST()) {
954     II.setIsFromAST();
955     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
956     if (isInterestingIdentifier(Reader, II, IsModule))
957       II.setChangedSinceDeserialization();
958   }
959 }
960 
961 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
962                                                    const unsigned char* d,
963                                                    unsigned DataLen) {
964   using namespace llvm::support;
965 
966   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
967   bool IsInteresting = RawID & 0x01;
968 
969   // Wipe out the "is interesting" bit.
970   RawID = RawID >> 1;
971 
972   // Build the IdentifierInfo and link the identifier ID with it.
973   IdentifierInfo *II = KnownII;
974   if (!II) {
975     II = &Reader.getIdentifierTable().getOwn(k);
976     KnownII = II;
977   }
978   markIdentifierFromAST(Reader, *II);
979   Reader.markIdentifierUpToDate(II);
980 
981   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
982   if (!IsInteresting) {
983     // For uninteresting identifiers, there's nothing else to do. Just notify
984     // the reader that we've finished loading this identifier.
985     Reader.SetIdentifierInfo(ID, II);
986     return II;
987   }
988 
989   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
990   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
991   bool CPlusPlusOperatorKeyword = readBit(Bits);
992   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
993   bool Poisoned = readBit(Bits);
994   bool ExtensionToken = readBit(Bits);
995   bool HadMacroDefinition = readBit(Bits);
996 
997   assert(Bits == 0 && "Extra bits in the identifier?");
998   DataLen -= 8;
999 
1000   // Set or check the various bits in the IdentifierInfo structure.
1001   // Token IDs are read-only.
1002   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1003     II->revertTokenIDToIdentifier();
1004   if (!F.isModule())
1005     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1006   assert(II->isExtensionToken() == ExtensionToken &&
1007          "Incorrect extension token flag");
1008   (void)ExtensionToken;
1009   if (Poisoned)
1010     II->setIsPoisoned(true);
1011   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1012          "Incorrect C++ operator keyword flag");
1013   (void)CPlusPlusOperatorKeyword;
1014 
1015   // If this identifier is a macro, deserialize the macro
1016   // definition.
1017   if (HadMacroDefinition) {
1018     uint32_t MacroDirectivesOffset =
1019         endian::readNext<uint32_t, little, unaligned>(d);
1020     DataLen -= 4;
1021 
1022     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1023   }
1024 
1025   Reader.SetIdentifierInfo(ID, II);
1026 
1027   // Read all of the declarations visible at global scope with this
1028   // name.
1029   if (DataLen > 0) {
1030     SmallVector<uint32_t, 4> DeclIDs;
1031     for (; DataLen > 0; DataLen -= 4)
1032       DeclIDs.push_back(Reader.getGlobalDeclID(
1033           F, endian::readNext<uint32_t, little, unaligned>(d)));
1034     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1035   }
1036 
1037   return II;
1038 }
1039 
1040 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1041     : Kind(Name.getNameKind()) {
1042   switch (Kind) {
1043   case DeclarationName::Identifier:
1044     Data = (uint64_t)Name.getAsIdentifierInfo();
1045     break;
1046   case DeclarationName::ObjCZeroArgSelector:
1047   case DeclarationName::ObjCOneArgSelector:
1048   case DeclarationName::ObjCMultiArgSelector:
1049     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1050     break;
1051   case DeclarationName::CXXOperatorName:
1052     Data = Name.getCXXOverloadedOperator();
1053     break;
1054   case DeclarationName::CXXLiteralOperatorName:
1055     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1056     break;
1057   case DeclarationName::CXXDeductionGuideName:
1058     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1059                ->getDeclName().getAsIdentifierInfo();
1060     break;
1061   case DeclarationName::CXXConstructorName:
1062   case DeclarationName::CXXDestructorName:
1063   case DeclarationName::CXXConversionFunctionName:
1064   case DeclarationName::CXXUsingDirective:
1065     Data = 0;
1066     break;
1067   }
1068 }
1069 
1070 unsigned DeclarationNameKey::getHash() const {
1071   llvm::FoldingSetNodeID ID;
1072   ID.AddInteger(Kind);
1073 
1074   switch (Kind) {
1075   case DeclarationName::Identifier:
1076   case DeclarationName::CXXLiteralOperatorName:
1077   case DeclarationName::CXXDeductionGuideName:
1078     ID.AddString(((IdentifierInfo*)Data)->getName());
1079     break;
1080   case DeclarationName::ObjCZeroArgSelector:
1081   case DeclarationName::ObjCOneArgSelector:
1082   case DeclarationName::ObjCMultiArgSelector:
1083     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1084     break;
1085   case DeclarationName::CXXOperatorName:
1086     ID.AddInteger((OverloadedOperatorKind)Data);
1087     break;
1088   case DeclarationName::CXXConstructorName:
1089   case DeclarationName::CXXDestructorName:
1090   case DeclarationName::CXXConversionFunctionName:
1091   case DeclarationName::CXXUsingDirective:
1092     break;
1093   }
1094 
1095   return ID.ComputeHash();
1096 }
1097 
1098 ModuleFile *
1099 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1100   using namespace llvm::support;
1101 
1102   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1103   return Reader.getLocalModuleFile(F, ModuleFileID);
1104 }
1105 
1106 std::pair<unsigned, unsigned>
1107 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1108   return readULEBKeyDataLength(d);
1109 }
1110 
1111 ASTDeclContextNameLookupTrait::internal_key_type
1112 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1113   using namespace llvm::support;
1114 
1115   auto Kind = (DeclarationName::NameKind)*d++;
1116   uint64_t Data;
1117   switch (Kind) {
1118   case DeclarationName::Identifier:
1119   case DeclarationName::CXXLiteralOperatorName:
1120   case DeclarationName::CXXDeductionGuideName:
1121     Data = (uint64_t)Reader.getLocalIdentifier(
1122         F, endian::readNext<uint32_t, little, unaligned>(d));
1123     break;
1124   case DeclarationName::ObjCZeroArgSelector:
1125   case DeclarationName::ObjCOneArgSelector:
1126   case DeclarationName::ObjCMultiArgSelector:
1127     Data =
1128         (uint64_t)Reader.getLocalSelector(
1129                              F, endian::readNext<uint32_t, little, unaligned>(
1130                                     d)).getAsOpaquePtr();
1131     break;
1132   case DeclarationName::CXXOperatorName:
1133     Data = *d++; // OverloadedOperatorKind
1134     break;
1135   case DeclarationName::CXXConstructorName:
1136   case DeclarationName::CXXDestructorName:
1137   case DeclarationName::CXXConversionFunctionName:
1138   case DeclarationName::CXXUsingDirective:
1139     Data = 0;
1140     break;
1141   }
1142 
1143   return DeclarationNameKey(Kind, Data);
1144 }
1145 
1146 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1147                                                  const unsigned char *d,
1148                                                  unsigned DataLen,
1149                                                  data_type_builder &Val) {
1150   using namespace llvm::support;
1151 
1152   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1153     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1154     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1155   }
1156 }
1157 
1158 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1159                                               BitstreamCursor &Cursor,
1160                                               uint64_t Offset,
1161                                               DeclContext *DC) {
1162   assert(Offset != 0);
1163 
1164   SavedStreamPosition SavedPosition(Cursor);
1165   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1166     Error(std::move(Err));
1167     return true;
1168   }
1169 
1170   RecordData Record;
1171   StringRef Blob;
1172   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1173   if (!MaybeCode) {
1174     Error(MaybeCode.takeError());
1175     return true;
1176   }
1177   unsigned Code = MaybeCode.get();
1178 
1179   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1180   if (!MaybeRecCode) {
1181     Error(MaybeRecCode.takeError());
1182     return true;
1183   }
1184   unsigned RecCode = MaybeRecCode.get();
1185   if (RecCode != DECL_CONTEXT_LEXICAL) {
1186     Error("Expected lexical block");
1187     return true;
1188   }
1189 
1190   assert(!isa<TranslationUnitDecl>(DC) &&
1191          "expected a TU_UPDATE_LEXICAL record for TU");
1192   // If we are handling a C++ class template instantiation, we can see multiple
1193   // lexical updates for the same record. It's important that we select only one
1194   // of them, so that field numbering works properly. Just pick the first one we
1195   // see.
1196   auto &Lex = LexicalDecls[DC];
1197   if (!Lex.first) {
1198     Lex = std::make_pair(
1199         &M, llvm::makeArrayRef(
1200                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1201                     Blob.data()),
1202                 Blob.size() / 4));
1203   }
1204   DC->setHasExternalLexicalStorage(true);
1205   return false;
1206 }
1207 
1208 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1209                                               BitstreamCursor &Cursor,
1210                                               uint64_t Offset,
1211                                               DeclID ID) {
1212   assert(Offset != 0);
1213 
1214   SavedStreamPosition SavedPosition(Cursor);
1215   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1216     Error(std::move(Err));
1217     return true;
1218   }
1219 
1220   RecordData Record;
1221   StringRef Blob;
1222   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1223   if (!MaybeCode) {
1224     Error(MaybeCode.takeError());
1225     return true;
1226   }
1227   unsigned Code = MaybeCode.get();
1228 
1229   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1230   if (!MaybeRecCode) {
1231     Error(MaybeRecCode.takeError());
1232     return true;
1233   }
1234   unsigned RecCode = MaybeRecCode.get();
1235   if (RecCode != DECL_CONTEXT_VISIBLE) {
1236     Error("Expected visible lookup table block");
1237     return true;
1238   }
1239 
1240   // We can't safely determine the primary context yet, so delay attaching the
1241   // lookup table until we're done with recursive deserialization.
1242   auto *Data = (const unsigned char*)Blob.data();
1243   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1244   return false;
1245 }
1246 
1247 void ASTReader::Error(StringRef Msg) const {
1248   Error(diag::err_fe_pch_malformed, Msg);
1249   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1250       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1251     Diag(diag::note_module_cache_path)
1252       << PP.getHeaderSearchInfo().getModuleCachePath();
1253   }
1254 }
1255 
1256 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1257                       StringRef Arg3) const {
1258   if (Diags.isDiagnosticInFlight())
1259     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1260   else
1261     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1262 }
1263 
1264 void ASTReader::Error(llvm::Error &&Err) const {
1265   llvm::Error RemainingErr =
1266       handleErrors(std::move(Err), [this](const DiagnosticError &E) {
1267         auto Diag = E.getDiagnostic().second;
1268 
1269         // Ideally we'd just emit it, but have to handle a possible in-flight
1270         // diagnostic. Note that the location is currently ignored as well.
1271         auto NumArgs = Diag.getStorage()->NumDiagArgs;
1272         assert(NumArgs <= 3 && "Can only have up to 3 arguments");
1273         StringRef Arg1, Arg2, Arg3;
1274         switch (NumArgs) {
1275         case 3:
1276           Arg3 = Diag.getStringArg(2);
1277           LLVM_FALLTHROUGH;
1278         case 2:
1279           Arg2 = Diag.getStringArg(1);
1280           LLVM_FALLTHROUGH;
1281         case 1:
1282           Arg1 = Diag.getStringArg(0);
1283         }
1284         Error(Diag.getDiagID(), Arg1, Arg2, Arg3);
1285       });
1286   if (RemainingErr)
1287     Error(toString(std::move(RemainingErr)));
1288 }
1289 
1290 //===----------------------------------------------------------------------===//
1291 // Source Manager Deserialization
1292 //===----------------------------------------------------------------------===//
1293 
1294 /// Read the line table in the source manager block.
1295 void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
1296   unsigned Idx = 0;
1297   LineTableInfo &LineTable = SourceMgr.getLineTable();
1298 
1299   // Parse the file names
1300   std::map<int, int> FileIDs;
1301   FileIDs[-1] = -1; // For unspecified filenames.
1302   for (unsigned I = 0; Record[Idx]; ++I) {
1303     // Extract the file name
1304     auto Filename = ReadPath(F, Record, Idx);
1305     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1306   }
1307   ++Idx;
1308 
1309   // Parse the line entries
1310   std::vector<LineEntry> Entries;
1311   while (Idx < Record.size()) {
1312     int FID = Record[Idx++];
1313     assert(FID >= 0 && "Serialized line entries for non-local file.");
1314     // Remap FileID from 1-based old view.
1315     FID += F.SLocEntryBaseID - 1;
1316 
1317     // Extract the line entries
1318     unsigned NumEntries = Record[Idx++];
1319     assert(NumEntries && "no line entries for file ID");
1320     Entries.clear();
1321     Entries.reserve(NumEntries);
1322     for (unsigned I = 0; I != NumEntries; ++I) {
1323       unsigned FileOffset = Record[Idx++];
1324       unsigned LineNo = Record[Idx++];
1325       int FilenameID = FileIDs[Record[Idx++]];
1326       SrcMgr::CharacteristicKind FileKind
1327         = (SrcMgr::CharacteristicKind)Record[Idx++];
1328       unsigned IncludeOffset = Record[Idx++];
1329       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1330                                        FileKind, IncludeOffset));
1331     }
1332     LineTable.AddEntry(FileID::get(FID), Entries);
1333   }
1334 }
1335 
1336 /// Read a source manager block
1337 llvm::Error ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1338   using namespace SrcMgr;
1339 
1340   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1341 
1342   // Set the source-location entry cursor to the current position in
1343   // the stream. This cursor will be used to read the contents of the
1344   // source manager block initially, and then lazily read
1345   // source-location entries as needed.
1346   SLocEntryCursor = F.Stream;
1347 
1348   // The stream itself is going to skip over the source manager block.
1349   if (llvm::Error Err = F.Stream.SkipBlock())
1350     return Err;
1351 
1352   // Enter the source manager block.
1353   if (llvm::Error Err = SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID))
1354     return Err;
1355   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1356 
1357   RecordData Record;
1358   while (true) {
1359     Expected<llvm::BitstreamEntry> MaybeE =
1360         SLocEntryCursor.advanceSkippingSubblocks();
1361     if (!MaybeE)
1362       return MaybeE.takeError();
1363     llvm::BitstreamEntry E = MaybeE.get();
1364 
1365     switch (E.Kind) {
1366     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1367     case llvm::BitstreamEntry::Error:
1368       return llvm::createStringError(std::errc::illegal_byte_sequence,
1369                                      "malformed block record in AST file");
1370     case llvm::BitstreamEntry::EndBlock:
1371       return llvm::Error::success();
1372     case llvm::BitstreamEntry::Record:
1373       // The interesting case.
1374       break;
1375     }
1376 
1377     // Read a record.
1378     Record.clear();
1379     StringRef Blob;
1380     Expected<unsigned> MaybeRecord =
1381         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1382     if (!MaybeRecord)
1383       return MaybeRecord.takeError();
1384     switch (MaybeRecord.get()) {
1385     default:  // Default behavior: ignore.
1386       break;
1387 
1388     case SM_SLOC_FILE_ENTRY:
1389     case SM_SLOC_BUFFER_ENTRY:
1390     case SM_SLOC_EXPANSION_ENTRY:
1391       // Once we hit one of the source location entries, we're done.
1392       return llvm::Error::success();
1393     }
1394   }
1395 }
1396 
1397 /// If a header file is not found at the path that we expect it to be
1398 /// and the PCH file was moved from its original location, try to resolve the
1399 /// file by assuming that header+PCH were moved together and the header is in
1400 /// the same place relative to the PCH.
1401 static std::string
1402 resolveFileRelativeToOriginalDir(const std::string &Filename,
1403                                  const std::string &OriginalDir,
1404                                  const std::string &CurrDir) {
1405   assert(OriginalDir != CurrDir &&
1406          "No point trying to resolve the file if the PCH dir didn't change");
1407 
1408   using namespace llvm::sys;
1409 
1410   SmallString<128> filePath(Filename);
1411   fs::make_absolute(filePath);
1412   assert(path::is_absolute(OriginalDir));
1413   SmallString<128> currPCHPath(CurrDir);
1414 
1415   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1416                        fileDirE = path::end(path::parent_path(filePath));
1417   path::const_iterator origDirI = path::begin(OriginalDir),
1418                        origDirE = path::end(OriginalDir);
1419   // Skip the common path components from filePath and OriginalDir.
1420   while (fileDirI != fileDirE && origDirI != origDirE &&
1421          *fileDirI == *origDirI) {
1422     ++fileDirI;
1423     ++origDirI;
1424   }
1425   for (; origDirI != origDirE; ++origDirI)
1426     path::append(currPCHPath, "..");
1427   path::append(currPCHPath, fileDirI, fileDirE);
1428   path::append(currPCHPath, path::filename(Filename));
1429   return std::string(currPCHPath.str());
1430 }
1431 
1432 bool ASTReader::ReadSLocEntry(int ID) {
1433   if (ID == 0)
1434     return false;
1435 
1436   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1437     Error("source location entry ID out-of-range for AST file");
1438     return true;
1439   }
1440 
1441   // Local helper to read the (possibly-compressed) buffer data following the
1442   // entry record.
1443   auto ReadBuffer = [this](
1444       BitstreamCursor &SLocEntryCursor,
1445       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1446     RecordData Record;
1447     StringRef Blob;
1448     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1449     if (!MaybeCode) {
1450       Error(MaybeCode.takeError());
1451       return nullptr;
1452     }
1453     unsigned Code = MaybeCode.get();
1454 
1455     Expected<unsigned> MaybeRecCode =
1456         SLocEntryCursor.readRecord(Code, Record, &Blob);
1457     if (!MaybeRecCode) {
1458       Error(MaybeRecCode.takeError());
1459       return nullptr;
1460     }
1461     unsigned RecCode = MaybeRecCode.get();
1462 
1463     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1464       if (!llvm::zlib::isAvailable()) {
1465         Error("zlib is not available");
1466         return nullptr;
1467       }
1468       SmallString<0> Uncompressed;
1469       if (llvm::Error E =
1470               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1471         Error("could not decompress embedded file contents: " +
1472               llvm::toString(std::move(E)));
1473         return nullptr;
1474       }
1475       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1476     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1477       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1478     } else {
1479       Error("AST record has invalid code");
1480       return nullptr;
1481     }
1482   };
1483 
1484   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1485   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1486           F->SLocEntryOffsetsBase +
1487           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1488     Error(std::move(Err));
1489     return true;
1490   }
1491 
1492   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1493   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1494 
1495   ++NumSLocEntriesRead;
1496   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1497   if (!MaybeEntry) {
1498     Error(MaybeEntry.takeError());
1499     return true;
1500   }
1501   llvm::BitstreamEntry Entry = MaybeEntry.get();
1502 
1503   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1504     Error("incorrectly-formatted source location entry in AST file");
1505     return true;
1506   }
1507 
1508   RecordData Record;
1509   StringRef Blob;
1510   Expected<unsigned> MaybeSLOC =
1511       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1512   if (!MaybeSLOC) {
1513     Error(MaybeSLOC.takeError());
1514     return true;
1515   }
1516   switch (MaybeSLOC.get()) {
1517   default:
1518     Error("incorrectly-formatted source location entry in AST file");
1519     return true;
1520 
1521   case SM_SLOC_FILE_ENTRY: {
1522     // We will detect whether a file changed and return 'Failure' for it, but
1523     // we will also try to fail gracefully by setting up the SLocEntry.
1524     unsigned InputID = Record[4];
1525     InputFile IF = getInputFile(*F, InputID);
1526     Optional<FileEntryRef> File = IF.getFile();
1527     bool OverriddenBuffer = IF.isOverridden();
1528 
1529     // Note that we only check if a File was returned. If it was out-of-date
1530     // we have complained but we will continue creating a FileID to recover
1531     // gracefully.
1532     if (!File)
1533       return true;
1534 
1535     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1536     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1537       // This is the module's main file.
1538       IncludeLoc = getImportLocation(F);
1539     }
1540     SrcMgr::CharacteristicKind
1541       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1542     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1543                                         BaseOffset + Record[0]);
1544     SrcMgr::FileInfo &FileInfo =
1545           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1546     FileInfo.NumCreatedFIDs = Record[5];
1547     if (Record[3])
1548       FileInfo.setHasLineDirectives();
1549 
1550     unsigned NumFileDecls = Record[7];
1551     if (NumFileDecls && ContextObj) {
1552       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1553       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1554       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1555                                                              NumFileDecls));
1556     }
1557 
1558     const SrcMgr::ContentCache &ContentCache =
1559         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1560     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1561         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1562         !ContentCache.getBufferIfLoaded()) {
1563       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1564       if (!Buffer)
1565         return true;
1566       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1567     }
1568 
1569     break;
1570   }
1571 
1572   case SM_SLOC_BUFFER_ENTRY: {
1573     const char *Name = Blob.data();
1574     unsigned Offset = Record[0];
1575     SrcMgr::CharacteristicKind
1576       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1577     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1578     if (IncludeLoc.isInvalid() && F->isModule()) {
1579       IncludeLoc = getImportLocation(F);
1580     }
1581 
1582     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1583     if (!Buffer)
1584       return true;
1585     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1586                            BaseOffset + Offset, IncludeLoc);
1587     break;
1588   }
1589 
1590   case SM_SLOC_EXPANSION_ENTRY: {
1591     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1592     SourceMgr.createExpansionLoc(SpellingLoc,
1593                                      ReadSourceLocation(*F, Record[2]),
1594                                      ReadSourceLocation(*F, Record[3]),
1595                                      Record[5],
1596                                      Record[4],
1597                                      ID,
1598                                      BaseOffset + Record[0]);
1599     break;
1600   }
1601   }
1602 
1603   return false;
1604 }
1605 
1606 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1607   if (ID == 0)
1608     return std::make_pair(SourceLocation(), "");
1609 
1610   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1611     Error("source location entry ID out-of-range for AST file");
1612     return std::make_pair(SourceLocation(), "");
1613   }
1614 
1615   // Find which module file this entry lands in.
1616   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1617   if (!M->isModule())
1618     return std::make_pair(SourceLocation(), "");
1619 
1620   // FIXME: Can we map this down to a particular submodule? That would be
1621   // ideal.
1622   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1623 }
1624 
1625 /// Find the location where the module F is imported.
1626 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1627   if (F->ImportLoc.isValid())
1628     return F->ImportLoc;
1629 
1630   // Otherwise we have a PCH. It's considered to be "imported" at the first
1631   // location of its includer.
1632   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1633     // Main file is the importer.
1634     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1635     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1636   }
1637   return F->ImportedBy[0]->FirstLoc;
1638 }
1639 
1640 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1641 /// the abbreviations that are at the top of the block and then leave the cursor
1642 /// pointing into the block.
1643 llvm::Error ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor,
1644                                         unsigned BlockID,
1645                                         uint64_t *StartOfBlockOffset) {
1646   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID))
1647     return Err;
1648 
1649   if (StartOfBlockOffset)
1650     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1651 
1652   while (true) {
1653     uint64_t Offset = Cursor.GetCurrentBitNo();
1654     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1655     if (!MaybeCode)
1656       return MaybeCode.takeError();
1657     unsigned Code = MaybeCode.get();
1658 
1659     // We expect all abbrevs to be at the start of the block.
1660     if (Code != llvm::bitc::DEFINE_ABBREV) {
1661       if (llvm::Error Err = Cursor.JumpToBit(Offset))
1662         return Err;
1663       return llvm::Error::success();
1664     }
1665     if (llvm::Error Err = Cursor.ReadAbbrevRecord())
1666       return Err;
1667   }
1668 }
1669 
1670 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1671                            unsigned &Idx) {
1672   Token Tok;
1673   Tok.startToken();
1674   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1675   Tok.setLength(Record[Idx++]);
1676   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1677     Tok.setIdentifierInfo(II);
1678   Tok.setKind((tok::TokenKind)Record[Idx++]);
1679   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1680   return Tok;
1681 }
1682 
1683 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1684   BitstreamCursor &Stream = F.MacroCursor;
1685 
1686   // Keep track of where we are in the stream, then jump back there
1687   // after reading this macro.
1688   SavedStreamPosition SavedPosition(Stream);
1689 
1690   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1691     // FIXME this drops errors on the floor.
1692     consumeError(std::move(Err));
1693     return nullptr;
1694   }
1695   RecordData Record;
1696   SmallVector<IdentifierInfo*, 16> MacroParams;
1697   MacroInfo *Macro = nullptr;
1698 
1699   while (true) {
1700     // Advance to the next record, but if we get to the end of the block, don't
1701     // pop it (removing all the abbreviations from the cursor) since we want to
1702     // be able to reseek within the block and read entries.
1703     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1704     Expected<llvm::BitstreamEntry> MaybeEntry =
1705         Stream.advanceSkippingSubblocks(Flags);
1706     if (!MaybeEntry) {
1707       Error(MaybeEntry.takeError());
1708       return Macro;
1709     }
1710     llvm::BitstreamEntry Entry = MaybeEntry.get();
1711 
1712     switch (Entry.Kind) {
1713     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1714     case llvm::BitstreamEntry::Error:
1715       Error("malformed block record in AST file");
1716       return Macro;
1717     case llvm::BitstreamEntry::EndBlock:
1718       return Macro;
1719     case llvm::BitstreamEntry::Record:
1720       // The interesting case.
1721       break;
1722     }
1723 
1724     // Read a record.
1725     Record.clear();
1726     PreprocessorRecordTypes RecType;
1727     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1728       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1729     else {
1730       Error(MaybeRecType.takeError());
1731       return Macro;
1732     }
1733     switch (RecType) {
1734     case PP_MODULE_MACRO:
1735     case PP_MACRO_DIRECTIVE_HISTORY:
1736       return Macro;
1737 
1738     case PP_MACRO_OBJECT_LIKE:
1739     case PP_MACRO_FUNCTION_LIKE: {
1740       // If we already have a macro, that means that we've hit the end
1741       // of the definition of the macro we were looking for. We're
1742       // done.
1743       if (Macro)
1744         return Macro;
1745 
1746       unsigned NextIndex = 1; // Skip identifier ID.
1747       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1748       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1749       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1750       MI->setIsUsed(Record[NextIndex++]);
1751       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1752 
1753       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1754         // Decode function-like macro info.
1755         bool isC99VarArgs = Record[NextIndex++];
1756         bool isGNUVarArgs = Record[NextIndex++];
1757         bool hasCommaPasting = Record[NextIndex++];
1758         MacroParams.clear();
1759         unsigned NumArgs = Record[NextIndex++];
1760         for (unsigned i = 0; i != NumArgs; ++i)
1761           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1762 
1763         // Install function-like macro info.
1764         MI->setIsFunctionLike();
1765         if (isC99VarArgs) MI->setIsC99Varargs();
1766         if (isGNUVarArgs) MI->setIsGNUVarargs();
1767         if (hasCommaPasting) MI->setHasCommaPasting();
1768         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1769       }
1770 
1771       // Remember that we saw this macro last so that we add the tokens that
1772       // form its body to it.
1773       Macro = MI;
1774 
1775       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1776           Record[NextIndex]) {
1777         // We have a macro definition. Register the association
1778         PreprocessedEntityID
1779             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1780         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1781         PreprocessingRecord::PPEntityID PPID =
1782             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1783         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1784             PPRec.getPreprocessedEntity(PPID));
1785         if (PPDef)
1786           PPRec.RegisterMacroDefinition(Macro, PPDef);
1787       }
1788 
1789       ++NumMacrosRead;
1790       break;
1791     }
1792 
1793     case PP_TOKEN: {
1794       // If we see a TOKEN before a PP_MACRO_*, then the file is
1795       // erroneous, just pretend we didn't see this.
1796       if (!Macro) break;
1797 
1798       unsigned Idx = 0;
1799       Token Tok = ReadToken(F, Record, Idx);
1800       Macro->AddTokenToBody(Tok);
1801       break;
1802     }
1803     }
1804   }
1805 }
1806 
1807 PreprocessedEntityID
1808 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1809                                          unsigned LocalID) const {
1810   if (!M.ModuleOffsetMap.empty())
1811     ReadModuleOffsetMap(M);
1812 
1813   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1814     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1815   assert(I != M.PreprocessedEntityRemap.end()
1816          && "Invalid index into preprocessed entity index remap");
1817 
1818   return LocalID + I->second;
1819 }
1820 
1821 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1822   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1823 }
1824 
1825 HeaderFileInfoTrait::internal_key_type
1826 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1827   internal_key_type ikey = {FE->getSize(),
1828                             M.HasTimestamps ? FE->getModificationTime() : 0,
1829                             FE->getName(), /*Imported*/ false};
1830   return ikey;
1831 }
1832 
1833 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1834   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1835     return false;
1836 
1837   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1838     return true;
1839 
1840   // Determine whether the actual files are equivalent.
1841   FileManager &FileMgr = Reader.getFileManager();
1842   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1843     if (!Key.Imported) {
1844       if (auto File = FileMgr.getFile(Key.Filename))
1845         return *File;
1846       return nullptr;
1847     }
1848 
1849     std::string Resolved = std::string(Key.Filename);
1850     Reader.ResolveImportedPath(M, Resolved);
1851     if (auto File = FileMgr.getFile(Resolved))
1852       return *File;
1853     return nullptr;
1854   };
1855 
1856   const FileEntry *FEA = GetFile(a);
1857   const FileEntry *FEB = GetFile(b);
1858   return FEA && FEA == FEB;
1859 }
1860 
1861 std::pair<unsigned, unsigned>
1862 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1863   return readULEBKeyDataLength(d);
1864 }
1865 
1866 HeaderFileInfoTrait::internal_key_type
1867 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1868   using namespace llvm::support;
1869 
1870   internal_key_type ikey;
1871   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1872   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1873   ikey.Filename = (const char *)d;
1874   ikey.Imported = true;
1875   return ikey;
1876 }
1877 
1878 HeaderFileInfoTrait::data_type
1879 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1880                               unsigned DataLen) {
1881   using namespace llvm::support;
1882 
1883   const unsigned char *End = d + DataLen;
1884   HeaderFileInfo HFI;
1885   unsigned Flags = *d++;
1886   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1887   HFI.isImport |= (Flags >> 5) & 0x01;
1888   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1889   HFI.DirInfo = (Flags >> 1) & 0x07;
1890   HFI.IndexHeaderMapHeader = Flags & 0x01;
1891   // FIXME: Find a better way to handle this. Maybe just store a
1892   // "has been included" flag?
1893   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1894                              HFI.NumIncludes);
1895   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1896       M, endian::readNext<uint32_t, little, unaligned>(d));
1897   if (unsigned FrameworkOffset =
1898           endian::readNext<uint32_t, little, unaligned>(d)) {
1899     // The framework offset is 1 greater than the actual offset,
1900     // since 0 is used as an indicator for "no framework name".
1901     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1902     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1903   }
1904 
1905   assert((End - d) % 4 == 0 &&
1906          "Wrong data length in HeaderFileInfo deserialization");
1907   while (d != End) {
1908     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1909     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1910     LocalSMID >>= 2;
1911 
1912     // This header is part of a module. Associate it with the module to enable
1913     // implicit module import.
1914     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1915     Module *Mod = Reader.getSubmodule(GlobalSMID);
1916     FileManager &FileMgr = Reader.getFileManager();
1917     ModuleMap &ModMap =
1918         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1919 
1920     std::string Filename = std::string(key.Filename);
1921     if (key.Imported)
1922       Reader.ResolveImportedPath(M, Filename);
1923     // FIXME: NameAsWritten
1924     Module::Header H = {std::string(key.Filename), "",
1925                         *FileMgr.getFile(Filename)};
1926     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1927     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1928   }
1929 
1930   // This HeaderFileInfo was externally loaded.
1931   HFI.External = true;
1932   HFI.IsValid = true;
1933   return HFI;
1934 }
1935 
1936 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1937                                 uint32_t MacroDirectivesOffset) {
1938   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1939   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1940 }
1941 
1942 void ASTReader::ReadDefinedMacros() {
1943   // Note that we are loading defined macros.
1944   Deserializing Macros(this);
1945 
1946   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1947     BitstreamCursor &MacroCursor = I.MacroCursor;
1948 
1949     // If there was no preprocessor block, skip this file.
1950     if (MacroCursor.getBitcodeBytes().empty())
1951       continue;
1952 
1953     BitstreamCursor Cursor = MacroCursor;
1954     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1955       Error(std::move(Err));
1956       return;
1957     }
1958 
1959     RecordData Record;
1960     while (true) {
1961       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1962       if (!MaybeE) {
1963         Error(MaybeE.takeError());
1964         return;
1965       }
1966       llvm::BitstreamEntry E = MaybeE.get();
1967 
1968       switch (E.Kind) {
1969       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1970       case llvm::BitstreamEntry::Error:
1971         Error("malformed block record in AST file");
1972         return;
1973       case llvm::BitstreamEntry::EndBlock:
1974         goto NextCursor;
1975 
1976       case llvm::BitstreamEntry::Record: {
1977         Record.clear();
1978         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1979         if (!MaybeRecord) {
1980           Error(MaybeRecord.takeError());
1981           return;
1982         }
1983         switch (MaybeRecord.get()) {
1984         default:  // Default behavior: ignore.
1985           break;
1986 
1987         case PP_MACRO_OBJECT_LIKE:
1988         case PP_MACRO_FUNCTION_LIKE: {
1989           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1990           if (II->isOutOfDate())
1991             updateOutOfDateIdentifier(*II);
1992           break;
1993         }
1994 
1995         case PP_TOKEN:
1996           // Ignore tokens.
1997           break;
1998         }
1999         break;
2000       }
2001       }
2002     }
2003     NextCursor:  ;
2004   }
2005 }
2006 
2007 namespace {
2008 
2009   /// Visitor class used to look up identifirs in an AST file.
2010   class IdentifierLookupVisitor {
2011     StringRef Name;
2012     unsigned NameHash;
2013     unsigned PriorGeneration;
2014     unsigned &NumIdentifierLookups;
2015     unsigned &NumIdentifierLookupHits;
2016     IdentifierInfo *Found = nullptr;
2017 
2018   public:
2019     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2020                             unsigned &NumIdentifierLookups,
2021                             unsigned &NumIdentifierLookupHits)
2022       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2023         PriorGeneration(PriorGeneration),
2024         NumIdentifierLookups(NumIdentifierLookups),
2025         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2026 
2027     bool operator()(ModuleFile &M) {
2028       // If we've already searched this module file, skip it now.
2029       if (M.Generation <= PriorGeneration)
2030         return true;
2031 
2032       ASTIdentifierLookupTable *IdTable
2033         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2034       if (!IdTable)
2035         return false;
2036 
2037       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2038                                      Found);
2039       ++NumIdentifierLookups;
2040       ASTIdentifierLookupTable::iterator Pos =
2041           IdTable->find_hashed(Name, NameHash, &Trait);
2042       if (Pos == IdTable->end())
2043         return false;
2044 
2045       // Dereferencing the iterator has the effect of building the
2046       // IdentifierInfo node and populating it with the various
2047       // declarations it needs.
2048       ++NumIdentifierLookupHits;
2049       Found = *Pos;
2050       return true;
2051     }
2052 
2053     // Retrieve the identifier info found within the module
2054     // files.
2055     IdentifierInfo *getIdentifierInfo() const { return Found; }
2056   };
2057 
2058 } // namespace
2059 
2060 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2061   // Note that we are loading an identifier.
2062   Deserializing AnIdentifier(this);
2063 
2064   unsigned PriorGeneration = 0;
2065   if (getContext().getLangOpts().Modules)
2066     PriorGeneration = IdentifierGeneration[&II];
2067 
2068   // If there is a global index, look there first to determine which modules
2069   // provably do not have any results for this identifier.
2070   GlobalModuleIndex::HitSet Hits;
2071   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2072   if (!loadGlobalIndex()) {
2073     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2074       HitsPtr = &Hits;
2075     }
2076   }
2077 
2078   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2079                                   NumIdentifierLookups,
2080                                   NumIdentifierLookupHits);
2081   ModuleMgr.visit(Visitor, HitsPtr);
2082   markIdentifierUpToDate(&II);
2083 }
2084 
2085 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2086   if (!II)
2087     return;
2088 
2089   II->setOutOfDate(false);
2090 
2091   // Update the generation for this identifier.
2092   if (getContext().getLangOpts().Modules)
2093     IdentifierGeneration[II] = getGeneration();
2094 }
2095 
2096 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2097                                     const PendingMacroInfo &PMInfo) {
2098   ModuleFile &M = *PMInfo.M;
2099 
2100   BitstreamCursor &Cursor = M.MacroCursor;
2101   SavedStreamPosition SavedPosition(Cursor);
2102   if (llvm::Error Err =
2103           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2104     Error(std::move(Err));
2105     return;
2106   }
2107 
2108   struct ModuleMacroRecord {
2109     SubmoduleID SubModID;
2110     MacroInfo *MI;
2111     SmallVector<SubmoduleID, 8> Overrides;
2112   };
2113   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2114 
2115   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2116   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2117   // macro histroy.
2118   RecordData Record;
2119   while (true) {
2120     Expected<llvm::BitstreamEntry> MaybeEntry =
2121         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2122     if (!MaybeEntry) {
2123       Error(MaybeEntry.takeError());
2124       return;
2125     }
2126     llvm::BitstreamEntry Entry = MaybeEntry.get();
2127 
2128     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2129       Error("malformed block record in AST file");
2130       return;
2131     }
2132 
2133     Record.clear();
2134     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2135     if (!MaybePP) {
2136       Error(MaybePP.takeError());
2137       return;
2138     }
2139     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2140     case PP_MACRO_DIRECTIVE_HISTORY:
2141       break;
2142 
2143     case PP_MODULE_MACRO: {
2144       ModuleMacros.push_back(ModuleMacroRecord());
2145       auto &Info = ModuleMacros.back();
2146       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2147       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2148       for (int I = 2, N = Record.size(); I != N; ++I)
2149         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2150       continue;
2151     }
2152 
2153     default:
2154       Error("malformed block record in AST file");
2155       return;
2156     }
2157 
2158     // We found the macro directive history; that's the last record
2159     // for this macro.
2160     break;
2161   }
2162 
2163   // Module macros are listed in reverse dependency order.
2164   {
2165     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2166     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2167     for (auto &MMR : ModuleMacros) {
2168       Overrides.clear();
2169       for (unsigned ModID : MMR.Overrides) {
2170         Module *Mod = getSubmodule(ModID);
2171         auto *Macro = PP.getModuleMacro(Mod, II);
2172         assert(Macro && "missing definition for overridden macro");
2173         Overrides.push_back(Macro);
2174       }
2175 
2176       bool Inserted = false;
2177       Module *Owner = getSubmodule(MMR.SubModID);
2178       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2179     }
2180   }
2181 
2182   // Don't read the directive history for a module; we don't have anywhere
2183   // to put it.
2184   if (M.isModule())
2185     return;
2186 
2187   // Deserialize the macro directives history in reverse source-order.
2188   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2189   unsigned Idx = 0, N = Record.size();
2190   while (Idx < N) {
2191     MacroDirective *MD = nullptr;
2192     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2193     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2194     switch (K) {
2195     case MacroDirective::MD_Define: {
2196       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2197       MD = PP.AllocateDefMacroDirective(MI, Loc);
2198       break;
2199     }
2200     case MacroDirective::MD_Undefine:
2201       MD = PP.AllocateUndefMacroDirective(Loc);
2202       break;
2203     case MacroDirective::MD_Visibility:
2204       bool isPublic = Record[Idx++];
2205       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2206       break;
2207     }
2208 
2209     if (!Latest)
2210       Latest = MD;
2211     if (Earliest)
2212       Earliest->setPrevious(MD);
2213     Earliest = MD;
2214   }
2215 
2216   if (Latest)
2217     PP.setLoadedMacroDirective(II, Earliest, Latest);
2218 }
2219 
2220 bool ASTReader::shouldDisableValidationForFile(
2221     const serialization::ModuleFile &M) const {
2222   if (DisableValidationKind == DisableValidationForModuleKind::None)
2223     return false;
2224 
2225   // If a PCH is loaded and validation is disabled for PCH then disable
2226   // validation for the PCH and the modules it loads.
2227   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2228 
2229   switch (K) {
2230   case MK_MainFile:
2231   case MK_Preamble:
2232   case MK_PCH:
2233     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2234   case MK_ImplicitModule:
2235   case MK_ExplicitModule:
2236   case MK_PrebuiltModule:
2237     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2238   }
2239 
2240   return false;
2241 }
2242 
2243 ASTReader::InputFileInfo
2244 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2245   // Go find this input file.
2246   BitstreamCursor &Cursor = F.InputFilesCursor;
2247   SavedStreamPosition SavedPosition(Cursor);
2248   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2249     // FIXME this drops errors on the floor.
2250     consumeError(std::move(Err));
2251   }
2252 
2253   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2254   if (!MaybeCode) {
2255     // FIXME this drops errors on the floor.
2256     consumeError(MaybeCode.takeError());
2257   }
2258   unsigned Code = MaybeCode.get();
2259   RecordData Record;
2260   StringRef Blob;
2261 
2262   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2263     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2264            "invalid record type for input file");
2265   else {
2266     // FIXME this drops errors on the floor.
2267     consumeError(Maybe.takeError());
2268   }
2269 
2270   assert(Record[0] == ID && "Bogus stored ID or offset");
2271   InputFileInfo R;
2272   R.StoredSize = static_cast<off_t>(Record[1]);
2273   R.StoredTime = static_cast<time_t>(Record[2]);
2274   R.Overridden = static_cast<bool>(Record[3]);
2275   R.Transient = static_cast<bool>(Record[4]);
2276   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2277   R.Filename = std::string(Blob);
2278   ResolveImportedPath(F, R.Filename);
2279 
2280   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2281   if (!MaybeEntry) // FIXME this drops errors on the floor.
2282     consumeError(MaybeEntry.takeError());
2283   llvm::BitstreamEntry Entry = MaybeEntry.get();
2284   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2285          "expected record type for input file hash");
2286 
2287   Record.clear();
2288   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2289     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2290            "invalid record type for input file hash");
2291   else {
2292     // FIXME this drops errors on the floor.
2293     consumeError(Maybe.takeError());
2294   }
2295   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2296                   static_cast<uint64_t>(Record[0]);
2297   return R;
2298 }
2299 
2300 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2301 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2302   // If this ID is bogus, just return an empty input file.
2303   if (ID == 0 || ID > F.InputFilesLoaded.size())
2304     return InputFile();
2305 
2306   // If we've already loaded this input file, return it.
2307   if (F.InputFilesLoaded[ID-1].getFile())
2308     return F.InputFilesLoaded[ID-1];
2309 
2310   if (F.InputFilesLoaded[ID-1].isNotFound())
2311     return InputFile();
2312 
2313   // Go find this input file.
2314   BitstreamCursor &Cursor = F.InputFilesCursor;
2315   SavedStreamPosition SavedPosition(Cursor);
2316   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2317     // FIXME this drops errors on the floor.
2318     consumeError(std::move(Err));
2319   }
2320 
2321   InputFileInfo FI = readInputFileInfo(F, ID);
2322   off_t StoredSize = FI.StoredSize;
2323   time_t StoredTime = FI.StoredTime;
2324   bool Overridden = FI.Overridden;
2325   bool Transient = FI.Transient;
2326   StringRef Filename = FI.Filename;
2327   uint64_t StoredContentHash = FI.ContentHash;
2328 
2329   OptionalFileEntryRefDegradesToFileEntryPtr File =
2330       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2331 
2332   // If we didn't find the file, resolve it relative to the
2333   // original directory from which this AST file was created.
2334   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2335       F.OriginalDir != F.BaseDirectory) {
2336     std::string Resolved = resolveFileRelativeToOriginalDir(
2337         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2338     if (!Resolved.empty())
2339       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2340   }
2341 
2342   // For an overridden file, create a virtual file with the stored
2343   // size/timestamp.
2344   if ((Overridden || Transient) && !File)
2345     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2346 
2347   if (!File) {
2348     if (Complain) {
2349       std::string ErrorStr = "could not find file '";
2350       ErrorStr += Filename;
2351       ErrorStr += "' referenced by AST file '";
2352       ErrorStr += F.FileName;
2353       ErrorStr += "'";
2354       Error(ErrorStr);
2355     }
2356     // Record that we didn't find the file.
2357     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2358     return InputFile();
2359   }
2360 
2361   // Check if there was a request to override the contents of the file
2362   // that was part of the precompiled header. Overriding such a file
2363   // can lead to problems when lexing using the source locations from the
2364   // PCH.
2365   SourceManager &SM = getSourceManager();
2366   // FIXME: Reject if the overrides are different.
2367   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2368     if (Complain)
2369       Error(diag::err_fe_pch_file_overridden, Filename);
2370 
2371     // After emitting the diagnostic, bypass the overriding file to recover
2372     // (this creates a separate FileEntry).
2373     File = SM.bypassFileContentsOverride(*File);
2374     if (!File) {
2375       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2376       return InputFile();
2377     }
2378   }
2379 
2380   struct Change {
2381     enum ModificationKind {
2382       Size,
2383       ModTime,
2384       Content,
2385       None,
2386     } Kind;
2387     llvm::Optional<int64_t> Old = llvm::None;
2388     llvm::Optional<int64_t> New = llvm::None;
2389   };
2390   auto HasInputFileChanged = [&]() {
2391     if (StoredSize != File->getSize())
2392       return Change{Change::Size, StoredSize, File->getSize()};
2393     if (!shouldDisableValidationForFile(F) && StoredTime &&
2394         StoredTime != File->getModificationTime()) {
2395       Change MTimeChange = {Change::ModTime, StoredTime,
2396                             File->getModificationTime()};
2397 
2398       // In case the modification time changes but not the content,
2399       // accept the cached file as legit.
2400       if (ValidateASTInputFilesContent &&
2401           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2402         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2403         if (!MemBuffOrError) {
2404           if (!Complain)
2405             return MTimeChange;
2406           std::string ErrorStr = "could not get buffer for file '";
2407           ErrorStr += File->getName();
2408           ErrorStr += "'";
2409           Error(ErrorStr);
2410           return MTimeChange;
2411         }
2412 
2413         // FIXME: hash_value is not guaranteed to be stable!
2414         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2415         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2416           return Change{Change::None};
2417 
2418         return Change{Change::Content};
2419       }
2420       return MTimeChange;
2421     }
2422     return Change{Change::None};
2423   };
2424 
2425   bool IsOutOfDate = false;
2426   auto FileChange = HasInputFileChanged();
2427   // For an overridden file, there is nothing to validate.
2428   if (!Overridden && FileChange.Kind != Change::None) {
2429     if (Complain && !Diags.isDiagnosticInFlight()) {
2430       // Build a list of the PCH imports that got us here (in reverse).
2431       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2432       while (!ImportStack.back()->ImportedBy.empty())
2433         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2434 
2435       // The top-level PCH is stale.
2436       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2437       Diag(diag::err_fe_ast_file_modified)
2438           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2439           << TopLevelPCHName << FileChange.Kind
2440           << (FileChange.Old && FileChange.New)
2441           << llvm::itostr(FileChange.Old.getValueOr(0))
2442           << llvm::itostr(FileChange.New.getValueOr(0));
2443 
2444       // Print the import stack.
2445       if (ImportStack.size() > 1) {
2446         Diag(diag::note_pch_required_by)
2447           << Filename << ImportStack[0]->FileName;
2448         for (unsigned I = 1; I < ImportStack.size(); ++I)
2449           Diag(diag::note_pch_required_by)
2450             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2451       }
2452 
2453       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2454     }
2455 
2456     IsOutOfDate = true;
2457   }
2458   // FIXME: If the file is overridden and we've already opened it,
2459   // issue an error (or split it into a separate FileEntry).
2460 
2461   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2462 
2463   // Note that we've loaded this input file.
2464   F.InputFilesLoaded[ID-1] = IF;
2465   return IF;
2466 }
2467 
2468 /// If we are loading a relocatable PCH or module file, and the filename
2469 /// is not an absolute path, add the system or module root to the beginning of
2470 /// the file name.
2471 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2472   // Resolve relative to the base directory, if we have one.
2473   if (!M.BaseDirectory.empty())
2474     return ResolveImportedPath(Filename, M.BaseDirectory);
2475 }
2476 
2477 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2478   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2479     return;
2480 
2481   SmallString<128> Buffer;
2482   llvm::sys::path::append(Buffer, Prefix, Filename);
2483   Filename.assign(Buffer.begin(), Buffer.end());
2484 }
2485 
2486 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2487   switch (ARR) {
2488   case ASTReader::Failure: return true;
2489   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2490   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2491   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2492   case ASTReader::ConfigurationMismatch:
2493     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2494   case ASTReader::HadErrors: return true;
2495   case ASTReader::Success: return false;
2496   }
2497 
2498   llvm_unreachable("unknown ASTReadResult");
2499 }
2500 
2501 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2502     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2503     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2504     std::string &SuggestedPredefines) {
2505   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2506     // FIXME this drops errors on the floor.
2507     consumeError(std::move(Err));
2508     return Failure;
2509   }
2510 
2511   // Read all of the records in the options block.
2512   RecordData Record;
2513   ASTReadResult Result = Success;
2514   while (true) {
2515     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2516     if (!MaybeEntry) {
2517       // FIXME this drops errors on the floor.
2518       consumeError(MaybeEntry.takeError());
2519       return Failure;
2520     }
2521     llvm::BitstreamEntry Entry = MaybeEntry.get();
2522 
2523     switch (Entry.Kind) {
2524     case llvm::BitstreamEntry::Error:
2525     case llvm::BitstreamEntry::SubBlock:
2526       return Failure;
2527 
2528     case llvm::BitstreamEntry::EndBlock:
2529       return Result;
2530 
2531     case llvm::BitstreamEntry::Record:
2532       // The interesting case.
2533       break;
2534     }
2535 
2536     // Read and process a record.
2537     Record.clear();
2538     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2539     if (!MaybeRecordType) {
2540       // FIXME this drops errors on the floor.
2541       consumeError(MaybeRecordType.takeError());
2542       return Failure;
2543     }
2544     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2545     case LANGUAGE_OPTIONS: {
2546       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2547       if (ParseLanguageOptions(Record, Complain, Listener,
2548                                AllowCompatibleConfigurationMismatch))
2549         Result = ConfigurationMismatch;
2550       break;
2551     }
2552 
2553     case TARGET_OPTIONS: {
2554       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2555       if (ParseTargetOptions(Record, Complain, Listener,
2556                              AllowCompatibleConfigurationMismatch))
2557         Result = ConfigurationMismatch;
2558       break;
2559     }
2560 
2561     case FILE_SYSTEM_OPTIONS: {
2562       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2563       if (!AllowCompatibleConfigurationMismatch &&
2564           ParseFileSystemOptions(Record, Complain, Listener))
2565         Result = ConfigurationMismatch;
2566       break;
2567     }
2568 
2569     case HEADER_SEARCH_OPTIONS: {
2570       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2571       if (!AllowCompatibleConfigurationMismatch &&
2572           ParseHeaderSearchOptions(Record, Complain, Listener))
2573         Result = ConfigurationMismatch;
2574       break;
2575     }
2576 
2577     case PREPROCESSOR_OPTIONS:
2578       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2579       if (!AllowCompatibleConfigurationMismatch &&
2580           ParsePreprocessorOptions(Record, Complain, Listener,
2581                                    SuggestedPredefines))
2582         Result = ConfigurationMismatch;
2583       break;
2584     }
2585   }
2586 }
2587 
2588 ASTReader::ASTReadResult
2589 ASTReader::ReadControlBlock(ModuleFile &F,
2590                             SmallVectorImpl<ImportedModule> &Loaded,
2591                             const ModuleFile *ImportedBy,
2592                             unsigned ClientLoadCapabilities) {
2593   BitstreamCursor &Stream = F.Stream;
2594 
2595   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2596     Error(std::move(Err));
2597     return Failure;
2598   }
2599 
2600   // Lambda to read the unhashed control block the first time it's called.
2601   //
2602   // For PCM files, the unhashed control block cannot be read until after the
2603   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2604   // need to look ahead before reading the IMPORTS record.  For consistency,
2605   // this block is always read somehow (see BitstreamEntry::EndBlock).
2606   bool HasReadUnhashedControlBlock = false;
2607   auto readUnhashedControlBlockOnce = [&]() {
2608     if (!HasReadUnhashedControlBlock) {
2609       HasReadUnhashedControlBlock = true;
2610       if (ASTReadResult Result =
2611               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2612         return Result;
2613     }
2614     return Success;
2615   };
2616 
2617   bool DisableValidation = shouldDisableValidationForFile(F);
2618 
2619   // Read all of the records and blocks in the control block.
2620   RecordData Record;
2621   unsigned NumInputs = 0;
2622   unsigned NumUserInputs = 0;
2623   StringRef BaseDirectoryAsWritten;
2624   while (true) {
2625     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2626     if (!MaybeEntry) {
2627       Error(MaybeEntry.takeError());
2628       return Failure;
2629     }
2630     llvm::BitstreamEntry Entry = MaybeEntry.get();
2631 
2632     switch (Entry.Kind) {
2633     case llvm::BitstreamEntry::Error:
2634       Error("malformed block record in AST file");
2635       return Failure;
2636     case llvm::BitstreamEntry::EndBlock: {
2637       // Validate the module before returning.  This call catches an AST with
2638       // no module name and no imports.
2639       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2640         return Result;
2641 
2642       // Validate input files.
2643       const HeaderSearchOptions &HSOpts =
2644           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2645 
2646       // All user input files reside at the index range [0, NumUserInputs), and
2647       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2648       // loaded module files, ignore missing inputs.
2649       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2650           F.Kind != MK_PrebuiltModule) {
2651         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2652 
2653         // If we are reading a module, we will create a verification timestamp,
2654         // so we verify all input files.  Otherwise, verify only user input
2655         // files.
2656 
2657         unsigned N = NumUserInputs;
2658         if (ValidateSystemInputs ||
2659             (HSOpts.ModulesValidateOncePerBuildSession &&
2660              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2661              F.Kind == MK_ImplicitModule))
2662           N = NumInputs;
2663 
2664         for (unsigned I = 0; I < N; ++I) {
2665           InputFile IF = getInputFile(F, I+1, Complain);
2666           if (!IF.getFile() || IF.isOutOfDate())
2667             return OutOfDate;
2668         }
2669       }
2670 
2671       if (Listener)
2672         Listener->visitModuleFile(F.FileName, F.Kind);
2673 
2674       if (Listener && Listener->needsInputFileVisitation()) {
2675         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2676                                                                 : NumUserInputs;
2677         for (unsigned I = 0; I < N; ++I) {
2678           bool IsSystem = I >= NumUserInputs;
2679           InputFileInfo FI = readInputFileInfo(F, I+1);
2680           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2681                                    F.Kind == MK_ExplicitModule ||
2682                                    F.Kind == MK_PrebuiltModule);
2683         }
2684       }
2685 
2686       return Success;
2687     }
2688 
2689     case llvm::BitstreamEntry::SubBlock:
2690       switch (Entry.ID) {
2691       case INPUT_FILES_BLOCK_ID:
2692         F.InputFilesCursor = Stream;
2693         if (llvm::Error Err = Stream.SkipBlock()) {
2694           Error(std::move(Err));
2695           return Failure;
2696         }
2697         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2698           Error("malformed block record in AST file");
2699           return Failure;
2700         }
2701         continue;
2702 
2703       case OPTIONS_BLOCK_ID:
2704         // If we're reading the first module for this group, check its options
2705         // are compatible with ours. For modules it imports, no further checking
2706         // is required, because we checked them when we built it.
2707         if (Listener && !ImportedBy) {
2708           // Should we allow the configuration of the module file to differ from
2709           // the configuration of the current translation unit in a compatible
2710           // way?
2711           //
2712           // FIXME: Allow this for files explicitly specified with -include-pch.
2713           bool AllowCompatibleConfigurationMismatch =
2714               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2715 
2716           ASTReadResult Result =
2717               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2718                                AllowCompatibleConfigurationMismatch, *Listener,
2719                                SuggestedPredefines);
2720           if (Result == Failure) {
2721             Error("malformed block record in AST file");
2722             return Result;
2723           }
2724 
2725           if (DisableValidation ||
2726               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2727             Result = Success;
2728 
2729           // If we can't load the module, exit early since we likely
2730           // will rebuild the module anyway. The stream may be in the
2731           // middle of a block.
2732           if (Result != Success)
2733             return Result;
2734         } else if (llvm::Error Err = Stream.SkipBlock()) {
2735           Error(std::move(Err));
2736           return Failure;
2737         }
2738         continue;
2739 
2740       default:
2741         if (llvm::Error Err = Stream.SkipBlock()) {
2742           Error(std::move(Err));
2743           return Failure;
2744         }
2745         continue;
2746       }
2747 
2748     case llvm::BitstreamEntry::Record:
2749       // The interesting case.
2750       break;
2751     }
2752 
2753     // Read and process a record.
2754     Record.clear();
2755     StringRef Blob;
2756     Expected<unsigned> MaybeRecordType =
2757         Stream.readRecord(Entry.ID, Record, &Blob);
2758     if (!MaybeRecordType) {
2759       Error(MaybeRecordType.takeError());
2760       return Failure;
2761     }
2762     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2763     case METADATA: {
2764       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2765         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2766           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2767                                         : diag::err_pch_version_too_new);
2768         return VersionMismatch;
2769       }
2770 
2771       bool hasErrors = Record[6];
2772       if (hasErrors && !DisableValidation) {
2773         // If requested by the caller and the module hasn't already been read
2774         // or compiled, mark modules on error as out-of-date.
2775         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2776             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2777           return OutOfDate;
2778 
2779         if (!AllowASTWithCompilerErrors) {
2780           Diag(diag::err_pch_with_compiler_errors);
2781           return HadErrors;
2782         }
2783       }
2784       if (hasErrors) {
2785         Diags.ErrorOccurred = true;
2786         Diags.UncompilableErrorOccurred = true;
2787         Diags.UnrecoverableErrorOccurred = true;
2788       }
2789 
2790       F.RelocatablePCH = Record[4];
2791       // Relative paths in a relocatable PCH are relative to our sysroot.
2792       if (F.RelocatablePCH)
2793         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2794 
2795       F.HasTimestamps = Record[5];
2796 
2797       const std::string &CurBranch = getClangFullRepositoryVersion();
2798       StringRef ASTBranch = Blob;
2799       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2800         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2801           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2802         return VersionMismatch;
2803       }
2804       break;
2805     }
2806 
2807     case IMPORTS: {
2808       // Validate the AST before processing any imports (otherwise, untangling
2809       // them can be error-prone and expensive).  A module will have a name and
2810       // will already have been validated, but this catches the PCH case.
2811       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2812         return Result;
2813 
2814       // Load each of the imported PCH files.
2815       unsigned Idx = 0, N = Record.size();
2816       while (Idx < N) {
2817         // Read information about the AST file.
2818         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2819         // The import location will be the local one for now; we will adjust
2820         // all import locations of module imports after the global source
2821         // location info are setup, in ReadAST.
2822         SourceLocation ImportLoc =
2823             ReadUntranslatedSourceLocation(Record[Idx++]);
2824         off_t StoredSize = (off_t)Record[Idx++];
2825         time_t StoredModTime = (time_t)Record[Idx++];
2826         auto FirstSignatureByte = Record.begin() + Idx;
2827         ASTFileSignature StoredSignature = ASTFileSignature::create(
2828             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2829         Idx += ASTFileSignature::size;
2830 
2831         std::string ImportedName = ReadString(Record, Idx);
2832         std::string ImportedFile;
2833 
2834         // For prebuilt and explicit modules first consult the file map for
2835         // an override. Note that here we don't search prebuilt module
2836         // directories, only the explicit name to file mappings. Also, we will
2837         // still verify the size/signature making sure it is essentially the
2838         // same file but perhaps in a different location.
2839         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2840           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2841             ImportedName, /*FileMapOnly*/ true);
2842 
2843         if (ImportedFile.empty())
2844           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2845           // ModuleCache as when writing.
2846           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2847         else
2848           SkipPath(Record, Idx);
2849 
2850         // If our client can't cope with us being out of date, we can't cope with
2851         // our dependency being missing.
2852         unsigned Capabilities = ClientLoadCapabilities;
2853         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2854           Capabilities &= ~ARR_Missing;
2855 
2856         // Load the AST file.
2857         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2858                                   Loaded, StoredSize, StoredModTime,
2859                                   StoredSignature, Capabilities);
2860 
2861         // If we diagnosed a problem, produce a backtrace.
2862         bool recompilingFinalized =
2863             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2864             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2865         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2866           Diag(diag::note_module_file_imported_by)
2867               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2868         if (recompilingFinalized)
2869           Diag(diag::note_module_file_conflict);
2870 
2871         switch (Result) {
2872         case Failure: return Failure;
2873           // If we have to ignore the dependency, we'll have to ignore this too.
2874         case Missing:
2875         case OutOfDate: return OutOfDate;
2876         case VersionMismatch: return VersionMismatch;
2877         case ConfigurationMismatch: return ConfigurationMismatch;
2878         case HadErrors: return HadErrors;
2879         case Success: break;
2880         }
2881       }
2882       break;
2883     }
2884 
2885     case ORIGINAL_FILE:
2886       F.OriginalSourceFileID = FileID::get(Record[0]);
2887       F.ActualOriginalSourceFileName = std::string(Blob);
2888       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2889       ResolveImportedPath(F, F.OriginalSourceFileName);
2890       break;
2891 
2892     case ORIGINAL_FILE_ID:
2893       F.OriginalSourceFileID = FileID::get(Record[0]);
2894       break;
2895 
2896     case ORIGINAL_PCH_DIR:
2897       F.OriginalDir = std::string(Blob);
2898       break;
2899 
2900     case MODULE_NAME:
2901       F.ModuleName = std::string(Blob);
2902       Diag(diag::remark_module_import)
2903           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2904           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2905       if (Listener)
2906         Listener->ReadModuleName(F.ModuleName);
2907 
2908       // Validate the AST as soon as we have a name so we can exit early on
2909       // failure.
2910       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2911         return Result;
2912 
2913       break;
2914 
2915     case MODULE_DIRECTORY: {
2916       // Save the BaseDirectory as written in the PCM for computing the module
2917       // filename for the ModuleCache.
2918       BaseDirectoryAsWritten = Blob;
2919       assert(!F.ModuleName.empty() &&
2920              "MODULE_DIRECTORY found before MODULE_NAME");
2921       // If we've already loaded a module map file covering this module, we may
2922       // have a better path for it (relative to the current build).
2923       Module *M = PP.getHeaderSearchInfo().lookupModule(
2924           F.ModuleName, SourceLocation(), /*AllowSearch*/ true,
2925           /*AllowExtraModuleMapSearch*/ true);
2926       if (M && M->Directory) {
2927         // If we're implicitly loading a module, the base directory can't
2928         // change between the build and use.
2929         // Don't emit module relocation error if we have -fno-validate-pch
2930         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2931                   DisableValidationForModuleKind::Module) &&
2932             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2933           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2934           if (!BuildDir || *BuildDir != M->Directory) {
2935             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2936               Diag(diag::err_imported_module_relocated)
2937                   << F.ModuleName << Blob << M->Directory->getName();
2938             return OutOfDate;
2939           }
2940         }
2941         F.BaseDirectory = std::string(M->Directory->getName());
2942       } else {
2943         F.BaseDirectory = std::string(Blob);
2944       }
2945       break;
2946     }
2947 
2948     case MODULE_MAP_FILE:
2949       if (ASTReadResult Result =
2950               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2951         return Result;
2952       break;
2953 
2954     case INPUT_FILE_OFFSETS:
2955       NumInputs = Record[0];
2956       NumUserInputs = Record[1];
2957       F.InputFileOffsets =
2958           (const llvm::support::unaligned_uint64_t *)Blob.data();
2959       F.InputFilesLoaded.resize(NumInputs);
2960       F.NumUserInputFiles = NumUserInputs;
2961       break;
2962     }
2963   }
2964 }
2965 
2966 llvm::Error ASTReader::ReadASTBlock(ModuleFile &F,
2967                                     unsigned ClientLoadCapabilities) {
2968   BitstreamCursor &Stream = F.Stream;
2969 
2970   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID))
2971     return Err;
2972   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2973 
2974   // Read all of the records and blocks for the AST file.
2975   RecordData Record;
2976   while (true) {
2977     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2978     if (!MaybeEntry)
2979       return MaybeEntry.takeError();
2980     llvm::BitstreamEntry Entry = MaybeEntry.get();
2981 
2982     switch (Entry.Kind) {
2983     case llvm::BitstreamEntry::Error:
2984       return llvm::createStringError(
2985           std::errc::illegal_byte_sequence,
2986           "error at end of module block in AST file");
2987     case llvm::BitstreamEntry::EndBlock:
2988       // Outside of C++, we do not store a lookup map for the translation unit.
2989       // Instead, mark it as needing a lookup map to be built if this module
2990       // contains any declarations lexically within it (which it always does!).
2991       // This usually has no cost, since we very rarely need the lookup map for
2992       // the translation unit outside C++.
2993       if (ASTContext *Ctx = ContextObj) {
2994         DeclContext *DC = Ctx->getTranslationUnitDecl();
2995         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2996           DC->setMustBuildLookupTable();
2997       }
2998 
2999       return llvm::Error::success();
3000     case llvm::BitstreamEntry::SubBlock:
3001       switch (Entry.ID) {
3002       case DECLTYPES_BLOCK_ID:
3003         // We lazily load the decls block, but we want to set up the
3004         // DeclsCursor cursor to point into it.  Clone our current bitcode
3005         // cursor to it, enter the block and read the abbrevs in that block.
3006         // With the main cursor, we just skip over it.
3007         F.DeclsCursor = Stream;
3008         if (llvm::Error Err = Stream.SkipBlock())
3009           return Err;
3010         if (llvm::Error Err = ReadBlockAbbrevs(
3011                 F.DeclsCursor, DECLTYPES_BLOCK_ID, &F.DeclsBlockStartOffset))
3012           return Err;
3013         break;
3014 
3015       case PREPROCESSOR_BLOCK_ID:
3016         F.MacroCursor = Stream;
3017         if (!PP.getExternalSource())
3018           PP.setExternalSource(this);
3019 
3020         if (llvm::Error Err = Stream.SkipBlock())
3021           return Err;
3022         if (llvm::Error Err =
3023                 ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID))
3024           return Err;
3025         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3026         break;
3027 
3028       case PREPROCESSOR_DETAIL_BLOCK_ID:
3029         F.PreprocessorDetailCursor = Stream;
3030 
3031         if (llvm::Error Err = Stream.SkipBlock()) {
3032           return Err;
3033         }
3034         if (llvm::Error Err = ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3035                                                PREPROCESSOR_DETAIL_BLOCK_ID))
3036           return Err;
3037         F.PreprocessorDetailStartOffset
3038         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3039 
3040         if (!PP.getPreprocessingRecord())
3041           PP.createPreprocessingRecord();
3042         if (!PP.getPreprocessingRecord()->getExternalSource())
3043           PP.getPreprocessingRecord()->SetExternalSource(*this);
3044         break;
3045 
3046       case SOURCE_MANAGER_BLOCK_ID:
3047         if (llvm::Error Err = ReadSourceManagerBlock(F))
3048           return Err;
3049         break;
3050 
3051       case SUBMODULE_BLOCK_ID:
3052         if (llvm::Error Err = ReadSubmoduleBlock(F, ClientLoadCapabilities))
3053           return Err;
3054         break;
3055 
3056       case COMMENTS_BLOCK_ID: {
3057         BitstreamCursor C = Stream;
3058 
3059         if (llvm::Error Err = Stream.SkipBlock())
3060           return Err;
3061         if (llvm::Error Err = ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID))
3062           return Err;
3063         CommentsCursors.push_back(std::make_pair(C, &F));
3064         break;
3065       }
3066 
3067       default:
3068         if (llvm::Error Err = Stream.SkipBlock())
3069           return Err;
3070         break;
3071       }
3072       continue;
3073 
3074     case llvm::BitstreamEntry::Record:
3075       // The interesting case.
3076       break;
3077     }
3078 
3079     // Read and process a record.
3080     Record.clear();
3081     StringRef Blob;
3082     Expected<unsigned> MaybeRecordType =
3083         Stream.readRecord(Entry.ID, Record, &Blob);
3084     if (!MaybeRecordType)
3085       return MaybeRecordType.takeError();
3086     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3087 
3088     // If we're not loading an AST context, we don't care about most records.
3089     if (!ContextObj) {
3090       switch (RecordType) {
3091       case IDENTIFIER_TABLE:
3092       case IDENTIFIER_OFFSET:
3093       case INTERESTING_IDENTIFIERS:
3094       case STATISTICS:
3095       case PP_CONDITIONAL_STACK:
3096       case PP_COUNTER_VALUE:
3097       case SOURCE_LOCATION_OFFSETS:
3098       case MODULE_OFFSET_MAP:
3099       case SOURCE_MANAGER_LINE_TABLE:
3100       case SOURCE_LOCATION_PRELOADS:
3101       case PPD_ENTITIES_OFFSETS:
3102       case HEADER_SEARCH_TABLE:
3103       case IMPORTED_MODULES:
3104       case MACRO_OFFSET:
3105         break;
3106       default:
3107         continue;
3108       }
3109     }
3110 
3111     switch (RecordType) {
3112     default:  // Default behavior: ignore.
3113       break;
3114 
3115     case TYPE_OFFSET: {
3116       if (F.LocalNumTypes != 0)
3117         return llvm::createStringError(
3118             std::errc::illegal_byte_sequence,
3119             "duplicate TYPE_OFFSET record in AST file");
3120       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3121       F.LocalNumTypes = Record[0];
3122       unsigned LocalBaseTypeIndex = Record[1];
3123       F.BaseTypeIndex = getTotalNumTypes();
3124 
3125       if (F.LocalNumTypes > 0) {
3126         // Introduce the global -> local mapping for types within this module.
3127         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3128 
3129         // Introduce the local -> global mapping for types within this module.
3130         F.TypeRemap.insertOrReplace(
3131           std::make_pair(LocalBaseTypeIndex,
3132                          F.BaseTypeIndex - LocalBaseTypeIndex));
3133 
3134         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3135       }
3136       break;
3137     }
3138 
3139     case DECL_OFFSET: {
3140       if (F.LocalNumDecls != 0)
3141         return llvm::createStringError(
3142             std::errc::illegal_byte_sequence,
3143             "duplicate DECL_OFFSET record in AST file");
3144       F.DeclOffsets = (const DeclOffset *)Blob.data();
3145       F.LocalNumDecls = Record[0];
3146       unsigned LocalBaseDeclID = Record[1];
3147       F.BaseDeclID = getTotalNumDecls();
3148 
3149       if (F.LocalNumDecls > 0) {
3150         // Introduce the global -> local mapping for declarations within this
3151         // module.
3152         GlobalDeclMap.insert(
3153           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3154 
3155         // Introduce the local -> global mapping for declarations within this
3156         // module.
3157         F.DeclRemap.insertOrReplace(
3158           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3159 
3160         // Introduce the global -> local mapping for declarations within this
3161         // module.
3162         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3163 
3164         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3165       }
3166       break;
3167     }
3168 
3169     case TU_UPDATE_LEXICAL: {
3170       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3171       LexicalContents Contents(
3172           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3173               Blob.data()),
3174           static_cast<unsigned int>(Blob.size() / 4));
3175       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3176       TU->setHasExternalLexicalStorage(true);
3177       break;
3178     }
3179 
3180     case UPDATE_VISIBLE: {
3181       unsigned Idx = 0;
3182       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3183       auto *Data = (const unsigned char*)Blob.data();
3184       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3185       // If we've already loaded the decl, perform the updates when we finish
3186       // loading this block.
3187       if (Decl *D = GetExistingDecl(ID))
3188         PendingUpdateRecords.push_back(
3189             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3190       break;
3191     }
3192 
3193     case IDENTIFIER_TABLE:
3194       F.IdentifierTableData =
3195           reinterpret_cast<const unsigned char *>(Blob.data());
3196       if (Record[0]) {
3197         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3198             F.IdentifierTableData + Record[0],
3199             F.IdentifierTableData + sizeof(uint32_t),
3200             F.IdentifierTableData,
3201             ASTIdentifierLookupTrait(*this, F));
3202 
3203         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3204       }
3205       break;
3206 
3207     case IDENTIFIER_OFFSET: {
3208       if (F.LocalNumIdentifiers != 0)
3209         return llvm::createStringError(
3210             std::errc::illegal_byte_sequence,
3211             "duplicate IDENTIFIER_OFFSET record in AST file");
3212       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3213       F.LocalNumIdentifiers = Record[0];
3214       unsigned LocalBaseIdentifierID = Record[1];
3215       F.BaseIdentifierID = getTotalNumIdentifiers();
3216 
3217       if (F.LocalNumIdentifiers > 0) {
3218         // Introduce the global -> local mapping for identifiers within this
3219         // module.
3220         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3221                                                   &F));
3222 
3223         // Introduce the local -> global mapping for identifiers within this
3224         // module.
3225         F.IdentifierRemap.insertOrReplace(
3226           std::make_pair(LocalBaseIdentifierID,
3227                          F.BaseIdentifierID - LocalBaseIdentifierID));
3228 
3229         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3230                                  + F.LocalNumIdentifiers);
3231       }
3232       break;
3233     }
3234 
3235     case INTERESTING_IDENTIFIERS:
3236       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3237       break;
3238 
3239     case EAGERLY_DESERIALIZED_DECLS:
3240       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3241       // about "interesting" decls (for instance, if we're building a module).
3242       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3243         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3244       break;
3245 
3246     case MODULAR_CODEGEN_DECLS:
3247       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3248       // them (ie: if we're not codegenerating this module).
3249       if (F.Kind == MK_MainFile ||
3250           getContext().getLangOpts().BuildingPCHWithObjectFile)
3251         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3252           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3253       break;
3254 
3255     case SPECIAL_TYPES:
3256       if (SpecialTypes.empty()) {
3257         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3258           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3259         break;
3260       }
3261 
3262       if (SpecialTypes.size() != Record.size())
3263         return llvm::createStringError(std::errc::illegal_byte_sequence,
3264                                        "invalid special-types record");
3265 
3266       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3267         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3268         if (!SpecialTypes[I])
3269           SpecialTypes[I] = ID;
3270         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3271         // merge step?
3272       }
3273       break;
3274 
3275     case STATISTICS:
3276       TotalNumStatements += Record[0];
3277       TotalNumMacros += Record[1];
3278       TotalLexicalDeclContexts += Record[2];
3279       TotalVisibleDeclContexts += Record[3];
3280       break;
3281 
3282     case UNUSED_FILESCOPED_DECLS:
3283       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3284         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3285       break;
3286 
3287     case DELEGATING_CTORS:
3288       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3289         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3290       break;
3291 
3292     case WEAK_UNDECLARED_IDENTIFIERS:
3293       if (Record.size() % 4 != 0)
3294         return llvm::createStringError(std::errc::illegal_byte_sequence,
3295                                        "invalid weak identifiers record");
3296 
3297       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3298       // files. This isn't the way to do it :)
3299       WeakUndeclaredIdentifiers.clear();
3300 
3301       // Translate the weak, undeclared identifiers into global IDs.
3302       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3303         WeakUndeclaredIdentifiers.push_back(
3304           getGlobalIdentifierID(F, Record[I++]));
3305         WeakUndeclaredIdentifiers.push_back(
3306           getGlobalIdentifierID(F, Record[I++]));
3307         WeakUndeclaredIdentifiers.push_back(
3308           ReadSourceLocation(F, Record, I).getRawEncoding());
3309         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3310       }
3311       break;
3312 
3313     case SELECTOR_OFFSETS: {
3314       F.SelectorOffsets = (const uint32_t *)Blob.data();
3315       F.LocalNumSelectors = Record[0];
3316       unsigned LocalBaseSelectorID = Record[1];
3317       F.BaseSelectorID = getTotalNumSelectors();
3318 
3319       if (F.LocalNumSelectors > 0) {
3320         // Introduce the global -> local mapping for selectors within this
3321         // module.
3322         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3323 
3324         // Introduce the local -> global mapping for selectors within this
3325         // module.
3326         F.SelectorRemap.insertOrReplace(
3327           std::make_pair(LocalBaseSelectorID,
3328                          F.BaseSelectorID - LocalBaseSelectorID));
3329 
3330         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3331       }
3332       break;
3333     }
3334 
3335     case METHOD_POOL:
3336       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3337       if (Record[0])
3338         F.SelectorLookupTable
3339           = ASTSelectorLookupTable::Create(
3340                         F.SelectorLookupTableData + Record[0],
3341                         F.SelectorLookupTableData,
3342                         ASTSelectorLookupTrait(*this, F));
3343       TotalNumMethodPoolEntries += Record[1];
3344       break;
3345 
3346     case REFERENCED_SELECTOR_POOL:
3347       if (!Record.empty()) {
3348         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3349           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3350                                                                 Record[Idx++]));
3351           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3352                                               getRawEncoding());
3353         }
3354       }
3355       break;
3356 
3357     case PP_CONDITIONAL_STACK:
3358       if (!Record.empty()) {
3359         unsigned Idx = 0, End = Record.size() - 1;
3360         bool ReachedEOFWhileSkipping = Record[Idx++];
3361         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3362         if (ReachedEOFWhileSkipping) {
3363           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3364           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3365           bool FoundNonSkipPortion = Record[Idx++];
3366           bool FoundElse = Record[Idx++];
3367           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3368           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3369                            FoundElse, ElseLoc);
3370         }
3371         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3372         while (Idx < End) {
3373           auto Loc = ReadSourceLocation(F, Record, Idx);
3374           bool WasSkipping = Record[Idx++];
3375           bool FoundNonSkip = Record[Idx++];
3376           bool FoundElse = Record[Idx++];
3377           ConditionalStack.push_back(
3378               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3379         }
3380         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3381       }
3382       break;
3383 
3384     case PP_COUNTER_VALUE:
3385       if (!Record.empty() && Listener)
3386         Listener->ReadCounter(F, Record[0]);
3387       break;
3388 
3389     case FILE_SORTED_DECLS:
3390       F.FileSortedDecls = (const DeclID *)Blob.data();
3391       F.NumFileSortedDecls = Record[0];
3392       break;
3393 
3394     case SOURCE_LOCATION_OFFSETS: {
3395       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3396       F.LocalNumSLocEntries = Record[0];
3397       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3398       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3399       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3400           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3401                                               SLocSpaceSize);
3402       if (!F.SLocEntryBaseID)
3403         return llvm::createStringError(std::errc::invalid_argument,
3404                                        "ran out of source locations");
3405       // Make our entry in the range map. BaseID is negative and growing, so
3406       // we invert it. Because we invert it, though, we need the other end of
3407       // the range.
3408       unsigned RangeStart =
3409           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3410       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3411       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3412 
3413       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3414       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3415       GlobalSLocOffsetMap.insert(
3416           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3417                            - SLocSpaceSize,&F));
3418 
3419       // Initialize the remapping table.
3420       // Invalid stays invalid.
3421       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3422       // This module. Base was 2 when being compiled.
3423       F.SLocRemap.insertOrReplace(std::make_pair(
3424           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3425 
3426       TotalNumSLocEntries += F.LocalNumSLocEntries;
3427       break;
3428     }
3429 
3430     case MODULE_OFFSET_MAP:
3431       F.ModuleOffsetMap = Blob;
3432       break;
3433 
3434     case SOURCE_MANAGER_LINE_TABLE:
3435       ParseLineTable(F, Record);
3436       break;
3437 
3438     case SOURCE_LOCATION_PRELOADS: {
3439       // Need to transform from the local view (1-based IDs) to the global view,
3440       // which is based off F.SLocEntryBaseID.
3441       if (!F.PreloadSLocEntries.empty())
3442         return llvm::createStringError(
3443             std::errc::illegal_byte_sequence,
3444             "Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3445 
3446       F.PreloadSLocEntries.swap(Record);
3447       break;
3448     }
3449 
3450     case EXT_VECTOR_DECLS:
3451       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3452         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3453       break;
3454 
3455     case VTABLE_USES:
3456       if (Record.size() % 3 != 0)
3457         return llvm::createStringError(std::errc::illegal_byte_sequence,
3458                                        "Invalid VTABLE_USES record");
3459 
3460       // Later tables overwrite earlier ones.
3461       // FIXME: Modules will have some trouble with this. This is clearly not
3462       // the right way to do this.
3463       VTableUses.clear();
3464 
3465       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3466         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3467         VTableUses.push_back(
3468           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3469         VTableUses.push_back(Record[Idx++]);
3470       }
3471       break;
3472 
3473     case PENDING_IMPLICIT_INSTANTIATIONS:
3474       if (PendingInstantiations.size() % 2 != 0)
3475         return llvm::createStringError(
3476             std::errc::illegal_byte_sequence,
3477             "Invalid existing PendingInstantiations");
3478 
3479       if (Record.size() % 2 != 0)
3480         return llvm::createStringError(
3481             std::errc::illegal_byte_sequence,
3482             "Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3483 
3484       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3485         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3486         PendingInstantiations.push_back(
3487           ReadSourceLocation(F, Record, I).getRawEncoding());
3488       }
3489       break;
3490 
3491     case SEMA_DECL_REFS:
3492       if (Record.size() != 3)
3493         return llvm::createStringError(std::errc::illegal_byte_sequence,
3494                                        "Invalid SEMA_DECL_REFS block");
3495       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3496         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3497       break;
3498 
3499     case PPD_ENTITIES_OFFSETS: {
3500       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3501       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3502       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3503 
3504       unsigned LocalBasePreprocessedEntityID = Record[0];
3505 
3506       unsigned StartingID;
3507       if (!PP.getPreprocessingRecord())
3508         PP.createPreprocessingRecord();
3509       if (!PP.getPreprocessingRecord()->getExternalSource())
3510         PP.getPreprocessingRecord()->SetExternalSource(*this);
3511       StartingID
3512         = PP.getPreprocessingRecord()
3513             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3514       F.BasePreprocessedEntityID = StartingID;
3515 
3516       if (F.NumPreprocessedEntities > 0) {
3517         // Introduce the global -> local mapping for preprocessed entities in
3518         // this module.
3519         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3520 
3521         // Introduce the local -> global mapping for preprocessed entities in
3522         // this module.
3523         F.PreprocessedEntityRemap.insertOrReplace(
3524           std::make_pair(LocalBasePreprocessedEntityID,
3525             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3526       }
3527 
3528       break;
3529     }
3530 
3531     case PPD_SKIPPED_RANGES: {
3532       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3533       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3534       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3535 
3536       if (!PP.getPreprocessingRecord())
3537         PP.createPreprocessingRecord();
3538       if (!PP.getPreprocessingRecord()->getExternalSource())
3539         PP.getPreprocessingRecord()->SetExternalSource(*this);
3540       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3541           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3542 
3543       if (F.NumPreprocessedSkippedRanges > 0)
3544         GlobalSkippedRangeMap.insert(
3545             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3546       break;
3547     }
3548 
3549     case DECL_UPDATE_OFFSETS:
3550       if (Record.size() % 2 != 0)
3551         return llvm::createStringError(
3552             std::errc::illegal_byte_sequence,
3553             "invalid DECL_UPDATE_OFFSETS block in AST file");
3554       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3555         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3556         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3557 
3558         // If we've already loaded the decl, perform the updates when we finish
3559         // loading this block.
3560         if (Decl *D = GetExistingDecl(ID))
3561           PendingUpdateRecords.push_back(
3562               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3563       }
3564       break;
3565 
3566     case OBJC_CATEGORIES_MAP:
3567       if (F.LocalNumObjCCategoriesInMap != 0)
3568         return llvm::createStringError(
3569             std::errc::illegal_byte_sequence,
3570             "duplicate OBJC_CATEGORIES_MAP record in AST file");
3571 
3572       F.LocalNumObjCCategoriesInMap = Record[0];
3573       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3574       break;
3575 
3576     case OBJC_CATEGORIES:
3577       F.ObjCCategories.swap(Record);
3578       break;
3579 
3580     case CUDA_SPECIAL_DECL_REFS:
3581       // Later tables overwrite earlier ones.
3582       // FIXME: Modules will have trouble with this.
3583       CUDASpecialDeclRefs.clear();
3584       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3585         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3586       break;
3587 
3588     case HEADER_SEARCH_TABLE:
3589       F.HeaderFileInfoTableData = Blob.data();
3590       F.LocalNumHeaderFileInfos = Record[1];
3591       if (Record[0]) {
3592         F.HeaderFileInfoTable
3593           = HeaderFileInfoLookupTable::Create(
3594                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3595                    (const unsigned char *)F.HeaderFileInfoTableData,
3596                    HeaderFileInfoTrait(*this, F,
3597                                        &PP.getHeaderSearchInfo(),
3598                                        Blob.data() + Record[2]));
3599 
3600         PP.getHeaderSearchInfo().SetExternalSource(this);
3601         if (!PP.getHeaderSearchInfo().getExternalLookup())
3602           PP.getHeaderSearchInfo().SetExternalLookup(this);
3603       }
3604       break;
3605 
3606     case FP_PRAGMA_OPTIONS:
3607       // Later tables overwrite earlier ones.
3608       FPPragmaOptions.swap(Record);
3609       break;
3610 
3611     case OPENCL_EXTENSIONS:
3612       for (unsigned I = 0, E = Record.size(); I != E; ) {
3613         auto Name = ReadString(Record, I);
3614         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3615         OptInfo.Supported = Record[I++] != 0;
3616         OptInfo.Enabled = Record[I++] != 0;
3617         OptInfo.WithPragma = Record[I++] != 0;
3618         OptInfo.Avail = Record[I++];
3619         OptInfo.Core = Record[I++];
3620         OptInfo.Opt = Record[I++];
3621       }
3622       break;
3623 
3624     case TENTATIVE_DEFINITIONS:
3625       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3626         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3627       break;
3628 
3629     case KNOWN_NAMESPACES:
3630       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3631         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3632       break;
3633 
3634     case UNDEFINED_BUT_USED:
3635       if (UndefinedButUsed.size() % 2 != 0)
3636         return llvm::createStringError(std::errc::illegal_byte_sequence,
3637                                        "Invalid existing UndefinedButUsed");
3638 
3639       if (Record.size() % 2 != 0)
3640         return llvm::createStringError(std::errc::illegal_byte_sequence,
3641                                        "invalid undefined-but-used record");
3642       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3643         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3644         UndefinedButUsed.push_back(
3645             ReadSourceLocation(F, Record, I).getRawEncoding());
3646       }
3647       break;
3648 
3649     case DELETE_EXPRS_TO_ANALYZE:
3650       for (unsigned I = 0, N = Record.size(); I != N;) {
3651         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3652         const uint64_t Count = Record[I++];
3653         DelayedDeleteExprs.push_back(Count);
3654         for (uint64_t C = 0; C < Count; ++C) {
3655           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3656           bool IsArrayForm = Record[I++] == 1;
3657           DelayedDeleteExprs.push_back(IsArrayForm);
3658         }
3659       }
3660       break;
3661 
3662     case IMPORTED_MODULES:
3663       if (!F.isModule()) {
3664         // If we aren't loading a module (which has its own exports), make
3665         // all of the imported modules visible.
3666         // FIXME: Deal with macros-only imports.
3667         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3668           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3669           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3670           if (GlobalID) {
3671             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3672             if (DeserializationListener)
3673               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3674           }
3675         }
3676       }
3677       break;
3678 
3679     case MACRO_OFFSET: {
3680       if (F.LocalNumMacros != 0)
3681         return llvm::createStringError(
3682             std::errc::illegal_byte_sequence,
3683             "duplicate MACRO_OFFSET record in AST file");
3684       F.MacroOffsets = (const uint32_t *)Blob.data();
3685       F.LocalNumMacros = Record[0];
3686       unsigned LocalBaseMacroID = Record[1];
3687       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3688       F.BaseMacroID = getTotalNumMacros();
3689 
3690       if (F.LocalNumMacros > 0) {
3691         // Introduce the global -> local mapping for macros within this module.
3692         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3693 
3694         // Introduce the local -> global mapping for macros within this module.
3695         F.MacroRemap.insertOrReplace(
3696           std::make_pair(LocalBaseMacroID,
3697                          F.BaseMacroID - LocalBaseMacroID));
3698 
3699         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3700       }
3701       break;
3702     }
3703 
3704     case LATE_PARSED_TEMPLATE:
3705       LateParsedTemplates.emplace_back(
3706           std::piecewise_construct, std::forward_as_tuple(&F),
3707           std::forward_as_tuple(Record.begin(), Record.end()));
3708       break;
3709 
3710     case OPTIMIZE_PRAGMA_OPTIONS:
3711       if (Record.size() != 1)
3712         return llvm::createStringError(std::errc::illegal_byte_sequence,
3713                                        "invalid pragma optimize record");
3714       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3715       break;
3716 
3717     case MSSTRUCT_PRAGMA_OPTIONS:
3718       if (Record.size() != 1)
3719         return llvm::createStringError(std::errc::illegal_byte_sequence,
3720                                        "invalid pragma ms_struct record");
3721       PragmaMSStructState = Record[0];
3722       break;
3723 
3724     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3725       if (Record.size() != 2)
3726         return llvm::createStringError(
3727             std::errc::illegal_byte_sequence,
3728             "invalid pragma pointers to members record");
3729       PragmaMSPointersToMembersState = Record[0];
3730       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3731       break;
3732 
3733     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3734       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3735         UnusedLocalTypedefNameCandidates.push_back(
3736             getGlobalDeclID(F, Record[I]));
3737       break;
3738 
3739     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3740       if (Record.size() != 1)
3741         return llvm::createStringError(std::errc::illegal_byte_sequence,
3742                                        "invalid cuda pragma options record");
3743       ForceCUDAHostDeviceDepth = Record[0];
3744       break;
3745 
3746     case ALIGN_PACK_PRAGMA_OPTIONS: {
3747       if (Record.size() < 3)
3748         return llvm::createStringError(std::errc::illegal_byte_sequence,
3749                                        "invalid pragma pack record");
3750       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3751       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3752       unsigned NumStackEntries = Record[2];
3753       unsigned Idx = 3;
3754       // Reset the stack when importing a new module.
3755       PragmaAlignPackStack.clear();
3756       for (unsigned I = 0; I < NumStackEntries; ++I) {
3757         PragmaAlignPackStackEntry Entry;
3758         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3759         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3760         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3761         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3762         Entry.SlotLabel = PragmaAlignPackStrings.back();
3763         PragmaAlignPackStack.push_back(Entry);
3764       }
3765       break;
3766     }
3767 
3768     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3769       if (Record.size() < 3)
3770         return llvm::createStringError(std::errc::illegal_byte_sequence,
3771                                        "invalid pragma float control record");
3772       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3773       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3774       unsigned NumStackEntries = Record[2];
3775       unsigned Idx = 3;
3776       // Reset the stack when importing a new module.
3777       FpPragmaStack.clear();
3778       for (unsigned I = 0; I < NumStackEntries; ++I) {
3779         FpPragmaStackEntry Entry;
3780         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3781         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3782         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3783         FpPragmaStrings.push_back(ReadString(Record, Idx));
3784         Entry.SlotLabel = FpPragmaStrings.back();
3785         FpPragmaStack.push_back(Entry);
3786       }
3787       break;
3788     }
3789 
3790     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3791       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3792         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3793       break;
3794     }
3795   }
3796 }
3797 
3798 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3799   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3800 
3801   // Additional remapping information.
3802   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3803   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3804   F.ModuleOffsetMap = StringRef();
3805 
3806   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3807   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3808     F.SLocRemap.insert(std::make_pair(0U, 0));
3809     F.SLocRemap.insert(std::make_pair(2U, 1));
3810   }
3811 
3812   // Continuous range maps we may be updating in our module.
3813   using SLocRemapBuilder =
3814       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3815                          2>::Builder;
3816   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3817   SLocRemapBuilder SLocRemap(F.SLocRemap);
3818   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3819   RemapBuilder MacroRemap(F.MacroRemap);
3820   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3821   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3822   RemapBuilder SelectorRemap(F.SelectorRemap);
3823   RemapBuilder DeclRemap(F.DeclRemap);
3824   RemapBuilder TypeRemap(F.TypeRemap);
3825 
3826   while (Data < DataEnd) {
3827     // FIXME: Looking up dependency modules by filename is horrible. Let's
3828     // start fixing this with prebuilt, explicit and implicit modules and see
3829     // how it goes...
3830     using namespace llvm::support;
3831     ModuleKind Kind = static_cast<ModuleKind>(
3832       endian::readNext<uint8_t, little, unaligned>(Data));
3833     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3834     StringRef Name = StringRef((const char*)Data, Len);
3835     Data += Len;
3836     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3837                               Kind == MK_ImplicitModule
3838                           ? ModuleMgr.lookupByModuleName(Name)
3839                           : ModuleMgr.lookupByFileName(Name));
3840     if (!OM) {
3841       std::string Msg =
3842           "SourceLocation remap refers to unknown module, cannot find ";
3843       Msg.append(std::string(Name));
3844       Error(Msg);
3845       return;
3846     }
3847 
3848     SourceLocation::UIntTy SLocOffset =
3849         endian::readNext<uint32_t, little, unaligned>(Data);
3850     uint32_t IdentifierIDOffset =
3851         endian::readNext<uint32_t, little, unaligned>(Data);
3852     uint32_t MacroIDOffset =
3853         endian::readNext<uint32_t, little, unaligned>(Data);
3854     uint32_t PreprocessedEntityIDOffset =
3855         endian::readNext<uint32_t, little, unaligned>(Data);
3856     uint32_t SubmoduleIDOffset =
3857         endian::readNext<uint32_t, little, unaligned>(Data);
3858     uint32_t SelectorIDOffset =
3859         endian::readNext<uint32_t, little, unaligned>(Data);
3860     uint32_t DeclIDOffset =
3861         endian::readNext<uint32_t, little, unaligned>(Data);
3862     uint32_t TypeIndexOffset =
3863         endian::readNext<uint32_t, little, unaligned>(Data);
3864 
3865     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3866                          RemapBuilder &Remap) {
3867       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3868       if (Offset != None)
3869         Remap.insert(std::make_pair(Offset,
3870                                     static_cast<int>(BaseOffset - Offset)));
3871     };
3872 
3873     constexpr SourceLocation::UIntTy SLocNone =
3874         std::numeric_limits<SourceLocation::UIntTy>::max();
3875     if (SLocOffset != SLocNone)
3876       SLocRemap.insert(std::make_pair(
3877           SLocOffset, static_cast<SourceLocation::IntTy>(
3878                           OM->SLocEntryBaseOffset - SLocOffset)));
3879 
3880     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3881     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3882     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3883               PreprocessedEntityRemap);
3884     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3885     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3886     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3887     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3888 
3889     // Global -> local mappings.
3890     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3891   }
3892 }
3893 
3894 ASTReader::ASTReadResult
3895 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3896                                   const ModuleFile *ImportedBy,
3897                                   unsigned ClientLoadCapabilities) {
3898   unsigned Idx = 0;
3899   F.ModuleMapPath = ReadPath(F, Record, Idx);
3900 
3901   // Try to resolve ModuleName in the current header search context and
3902   // verify that it is found in the same module map file as we saved. If the
3903   // top-level AST file is a main file, skip this check because there is no
3904   // usable header search context.
3905   assert(!F.ModuleName.empty() &&
3906          "MODULE_NAME should come before MODULE_MAP_FILE");
3907   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3908     // An implicitly-loaded module file should have its module listed in some
3909     // module map file that we've already loaded.
3910     Module *M =
3911         PP.getHeaderSearchInfo().lookupModule(F.ModuleName, F.ImportLoc);
3912     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3913     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3914     // Don't emit module relocation error if we have -fno-validate-pch
3915     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3916               DisableValidationForModuleKind::Module) &&
3917         !ModMap) {
3918       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3919         if (auto ASTFE = M ? M->getASTFile() : None) {
3920           // This module was defined by an imported (explicit) module.
3921           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3922                                                << ASTFE->getName();
3923         } else {
3924           // This module was built with a different module map.
3925           Diag(diag::err_imported_module_not_found)
3926               << F.ModuleName << F.FileName
3927               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3928               << !ImportedBy;
3929           // In case it was imported by a PCH, there's a chance the user is
3930           // just missing to include the search path to the directory containing
3931           // the modulemap.
3932           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3933             Diag(diag::note_imported_by_pch_module_not_found)
3934                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3935         }
3936       }
3937       return OutOfDate;
3938     }
3939 
3940     assert(M && M->Name == F.ModuleName && "found module with different name");
3941 
3942     // Check the primary module map file.
3943     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3944     if (!StoredModMap || *StoredModMap != ModMap) {
3945       assert(ModMap && "found module is missing module map file");
3946       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3947              "top-level import should be verified");
3948       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3949       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3950         Diag(diag::err_imported_module_modmap_changed)
3951             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3952             << ModMap->getName() << F.ModuleMapPath << NotImported;
3953       return OutOfDate;
3954     }
3955 
3956     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3957     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3958       // FIXME: we should use input files rather than storing names.
3959       std::string Filename = ReadPath(F, Record, Idx);
3960       auto SF = FileMgr.getFile(Filename, false, false);
3961       if (!SF) {
3962         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3963           Error("could not find file '" + Filename +"' referenced by AST file");
3964         return OutOfDate;
3965       }
3966       AdditionalStoredMaps.insert(*SF);
3967     }
3968 
3969     // Check any additional module map files (e.g. module.private.modulemap)
3970     // that are not in the pcm.
3971     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3972       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3973         // Remove files that match
3974         // Note: SmallPtrSet::erase is really remove
3975         if (!AdditionalStoredMaps.erase(ModMap)) {
3976           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3977             Diag(diag::err_module_different_modmap)
3978               << F.ModuleName << /*new*/0 << ModMap->getName();
3979           return OutOfDate;
3980         }
3981       }
3982     }
3983 
3984     // Check any additional module map files that are in the pcm, but not
3985     // found in header search. Cases that match are already removed.
3986     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3987       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3988         Diag(diag::err_module_different_modmap)
3989           << F.ModuleName << /*not new*/1 << ModMap->getName();
3990       return OutOfDate;
3991     }
3992   }
3993 
3994   if (Listener)
3995     Listener->ReadModuleMapFile(F.ModuleMapPath);
3996   return Success;
3997 }
3998 
3999 /// Move the given method to the back of the global list of methods.
4000 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4001   // Find the entry for this selector in the method pool.
4002   Sema::GlobalMethodPool::iterator Known
4003     = S.MethodPool.find(Method->getSelector());
4004   if (Known == S.MethodPool.end())
4005     return;
4006 
4007   // Retrieve the appropriate method list.
4008   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4009                                                     : Known->second.second;
4010   bool Found = false;
4011   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4012     if (!Found) {
4013       if (List->getMethod() == Method) {
4014         Found = true;
4015       } else {
4016         // Keep searching.
4017         continue;
4018       }
4019     }
4020 
4021     if (List->getNext())
4022       List->setMethod(List->getNext()->getMethod());
4023     else
4024       List->setMethod(Method);
4025   }
4026 }
4027 
4028 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4029   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4030   for (Decl *D : Names) {
4031     bool wasHidden = !D->isUnconditionallyVisible();
4032     D->setVisibleDespiteOwningModule();
4033 
4034     if (wasHidden && SemaObj) {
4035       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4036         moveMethodToBackOfGlobalList(*SemaObj, Method);
4037       }
4038     }
4039   }
4040 }
4041 
4042 void ASTReader::makeModuleVisible(Module *Mod,
4043                                   Module::NameVisibilityKind NameVisibility,
4044                                   SourceLocation ImportLoc) {
4045   llvm::SmallPtrSet<Module *, 4> Visited;
4046   SmallVector<Module *, 4> Stack;
4047   Stack.push_back(Mod);
4048   while (!Stack.empty()) {
4049     Mod = Stack.pop_back_val();
4050 
4051     if (NameVisibility <= Mod->NameVisibility) {
4052       // This module already has this level of visibility (or greater), so
4053       // there is nothing more to do.
4054       continue;
4055     }
4056 
4057     if (Mod->isUnimportable()) {
4058       // Modules that aren't importable cannot be made visible.
4059       continue;
4060     }
4061 
4062     // Update the module's name visibility.
4063     Mod->NameVisibility = NameVisibility;
4064 
4065     // If we've already deserialized any names from this module,
4066     // mark them as visible.
4067     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4068     if (Hidden != HiddenNamesMap.end()) {
4069       auto HiddenNames = std::move(*Hidden);
4070       HiddenNamesMap.erase(Hidden);
4071       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4072       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4073              "making names visible added hidden names");
4074     }
4075 
4076     // Push any exported modules onto the stack to be marked as visible.
4077     SmallVector<Module *, 16> Exports;
4078     Mod->getExportedModules(Exports);
4079     for (SmallVectorImpl<Module *>::iterator
4080            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4081       Module *Exported = *I;
4082       if (Visited.insert(Exported).second)
4083         Stack.push_back(Exported);
4084     }
4085   }
4086 }
4087 
4088 /// We've merged the definition \p MergedDef into the existing definition
4089 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4090 /// visible.
4091 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4092                                           NamedDecl *MergedDef) {
4093   if (!Def->isUnconditionallyVisible()) {
4094     // If MergedDef is visible or becomes visible, make the definition visible.
4095     if (MergedDef->isUnconditionallyVisible())
4096       Def->setVisibleDespiteOwningModule();
4097     else {
4098       getContext().mergeDefinitionIntoModule(
4099           Def, MergedDef->getImportedOwningModule(),
4100           /*NotifyListeners*/ false);
4101       PendingMergedDefinitionsToDeduplicate.insert(Def);
4102     }
4103   }
4104 }
4105 
4106 bool ASTReader::loadGlobalIndex() {
4107   if (GlobalIndex)
4108     return false;
4109 
4110   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4111       !PP.getLangOpts().Modules)
4112     return true;
4113 
4114   // Try to load the global index.
4115   TriedLoadingGlobalIndex = true;
4116   StringRef ModuleCachePath
4117     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4118   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4119       GlobalModuleIndex::readIndex(ModuleCachePath);
4120   if (llvm::Error Err = std::move(Result.second)) {
4121     assert(!Result.first);
4122     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4123     return true;
4124   }
4125 
4126   GlobalIndex.reset(Result.first);
4127   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4128   return false;
4129 }
4130 
4131 bool ASTReader::isGlobalIndexUnavailable() const {
4132   return PP.getLangOpts().Modules && UseGlobalIndex &&
4133          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4134 }
4135 
4136 static void updateModuleTimestamp(ModuleFile &MF) {
4137   // Overwrite the timestamp file contents so that file's mtime changes.
4138   std::string TimestampFilename = MF.getTimestampFilename();
4139   std::error_code EC;
4140   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4141                           llvm::sys::fs::OF_TextWithCRLF);
4142   if (EC)
4143     return;
4144   OS << "Timestamp file\n";
4145   OS.close();
4146   OS.clear_error(); // Avoid triggering a fatal error.
4147 }
4148 
4149 /// Given a cursor at the start of an AST file, scan ahead and drop the
4150 /// cursor into the start of the given block ID, returning false on success and
4151 /// true on failure.
4152 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4153   while (true) {
4154     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4155     if (!MaybeEntry) {
4156       // FIXME this drops errors on the floor.
4157       consumeError(MaybeEntry.takeError());
4158       return true;
4159     }
4160     llvm::BitstreamEntry Entry = MaybeEntry.get();
4161 
4162     switch (Entry.Kind) {
4163     case llvm::BitstreamEntry::Error:
4164     case llvm::BitstreamEntry::EndBlock:
4165       return true;
4166 
4167     case llvm::BitstreamEntry::Record:
4168       // Ignore top-level records.
4169       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4170         break;
4171       else {
4172         // FIXME this drops errors on the floor.
4173         consumeError(Skipped.takeError());
4174         return true;
4175       }
4176 
4177     case llvm::BitstreamEntry::SubBlock:
4178       if (Entry.ID == BlockID) {
4179         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4180           // FIXME this drops the error on the floor.
4181           consumeError(std::move(Err));
4182           return true;
4183         }
4184         // Found it!
4185         return false;
4186       }
4187 
4188       if (llvm::Error Err = Cursor.SkipBlock()) {
4189         // FIXME this drops the error on the floor.
4190         consumeError(std::move(Err));
4191         return true;
4192       }
4193     }
4194   }
4195 }
4196 
4197 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4198                                             ModuleKind Type,
4199                                             SourceLocation ImportLoc,
4200                                             unsigned ClientLoadCapabilities,
4201                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4202   llvm::SaveAndRestore<SourceLocation>
4203     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4204   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4205       CurrentDeserializingModuleKind, Type);
4206 
4207   // Defer any pending actions until we get to the end of reading the AST file.
4208   Deserializing AnASTFile(this);
4209 
4210   // Bump the generation number.
4211   unsigned PreviousGeneration = 0;
4212   if (ContextObj)
4213     PreviousGeneration = incrementGeneration(*ContextObj);
4214 
4215   unsigned NumModules = ModuleMgr.size();
4216   SmallVector<ImportedModule, 4> Loaded;
4217   if (ASTReadResult ReadResult =
4218           ReadASTCore(FileName, Type, ImportLoc,
4219                       /*ImportedBy=*/nullptr, Loaded, 0, 0, ASTFileSignature(),
4220                       ClientLoadCapabilities)) {
4221     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4222                             PP.getLangOpts().Modules
4223                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4224                                 : nullptr);
4225 
4226     // If we find that any modules are unusable, the global index is going
4227     // to be out-of-date. Just remove it.
4228     GlobalIndex.reset();
4229     ModuleMgr.setGlobalIndex(nullptr);
4230     return ReadResult;
4231   }
4232 
4233   // Here comes stuff that we only do once the entire chain is loaded. Do *not*
4234   // remove modules from this point. Various fields are updated during reading
4235   // the AST block and removing the modules would result in dangling pointers.
4236   // They are generally only incidentally dereferenced, ie. a binary search
4237   // runs over `GlobalSLocEntryMap`, which could cause an invalid module to
4238   // be dereferenced but it wouldn't actually be used.
4239 
4240   // Load the AST blocks of all of the modules that we loaded. We can still
4241   // hit errors parsing the ASTs at this point.
4242   for (ImportedModule &M : Loaded) {
4243     ModuleFile &F = *M.Mod;
4244 
4245     // Read the AST block.
4246     if (llvm::Error Err = ReadASTBlock(F, ClientLoadCapabilities)) {
4247       Error(std::move(Err));
4248       return Failure;
4249     }
4250 
4251     // The AST block should always have a definition for the main module.
4252     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4253       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4254       return Failure;
4255     }
4256 
4257     // Read the extension blocks.
4258     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4259       if (llvm::Error Err = ReadExtensionBlock(F)) {
4260         Error(std::move(Err));
4261         return Failure;
4262       }
4263     }
4264 
4265     // Once read, set the ModuleFile bit base offset and update the size in
4266     // bits of all files we've seen.
4267     F.GlobalBitOffset = TotalModulesSizeInBits;
4268     TotalModulesSizeInBits += F.SizeInBits;
4269     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4270   }
4271 
4272   // Preload source locations and interesting indentifiers.
4273   for (ImportedModule &M : Loaded) {
4274     ModuleFile &F = *M.Mod;
4275 
4276     // Preload SLocEntries.
4277     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4278       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4279       // Load it through the SourceManager and don't call ReadSLocEntry()
4280       // directly because the entry may have already been loaded in which case
4281       // calling ReadSLocEntry() directly would trigger an assertion in
4282       // SourceManager.
4283       SourceMgr.getLoadedSLocEntryByID(Index);
4284     }
4285 
4286     // Map the original source file ID into the ID space of the current
4287     // compilation.
4288     if (F.OriginalSourceFileID.isValid()) {
4289       F.OriginalSourceFileID = FileID::get(
4290           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4291     }
4292 
4293     // Preload all the pending interesting identifiers by marking them out of
4294     // date.
4295     for (auto Offset : F.PreloadIdentifierOffsets) {
4296       const unsigned char *Data = F.IdentifierTableData + Offset;
4297 
4298       ASTIdentifierLookupTrait Trait(*this, F);
4299       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4300       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4301       auto &II = PP.getIdentifierTable().getOwn(Key);
4302       II.setOutOfDate(true);
4303 
4304       // Mark this identifier as being from an AST file so that we can track
4305       // whether we need to serialize it.
4306       markIdentifierFromAST(*this, II);
4307 
4308       // Associate the ID with the identifier so that the writer can reuse it.
4309       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4310       SetIdentifierInfo(ID, &II);
4311     }
4312   }
4313 
4314   // Setup the import locations and notify the module manager that we've
4315   // committed to these module files.
4316   for (ImportedModule &M : Loaded) {
4317     ModuleFile &F = *M.Mod;
4318 
4319     ModuleMgr.moduleFileAccepted(&F);
4320 
4321     // Set the import location.
4322     F.DirectImportLoc = ImportLoc;
4323     // FIXME: We assume that locations from PCH / preamble do not need
4324     // any translation.
4325     if (!M.ImportedBy)
4326       F.ImportLoc = M.ImportLoc;
4327     else
4328       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4329   }
4330 
4331   if (!PP.getLangOpts().CPlusPlus ||
4332       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4333        Type != MK_PrebuiltModule)) {
4334     // Mark all of the identifiers in the identifier table as being out of date,
4335     // so that various accessors know to check the loaded modules when the
4336     // identifier is used.
4337     //
4338     // For C++ modules, we don't need information on many identifiers (just
4339     // those that provide macros or are poisoned), so we mark all of
4340     // the interesting ones via PreloadIdentifierOffsets.
4341     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4342                                 IdEnd = PP.getIdentifierTable().end();
4343          Id != IdEnd; ++Id)
4344       Id->second->setOutOfDate(true);
4345   }
4346   // Mark selectors as out of date.
4347   for (auto Sel : SelectorGeneration)
4348     SelectorOutOfDate[Sel.first] = true;
4349 
4350   // Resolve any unresolved module exports.
4351   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4352     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4353     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4354     Module *ResolvedMod = getSubmodule(GlobalID);
4355 
4356     switch (Unresolved.Kind) {
4357     case UnresolvedModuleRef::Conflict:
4358       if (ResolvedMod) {
4359         Module::Conflict Conflict;
4360         Conflict.Other = ResolvedMod;
4361         Conflict.Message = Unresolved.String.str();
4362         Unresolved.Mod->Conflicts.push_back(Conflict);
4363       }
4364       continue;
4365 
4366     case UnresolvedModuleRef::Import:
4367       if (ResolvedMod)
4368         Unresolved.Mod->Imports.insert(ResolvedMod);
4369       continue;
4370 
4371     case UnresolvedModuleRef::Export:
4372       if (ResolvedMod || Unresolved.IsWildcard)
4373         Unresolved.Mod->Exports.push_back(
4374           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4375       continue;
4376     }
4377   }
4378   UnresolvedModuleRefs.clear();
4379 
4380   if (Imported)
4381     Imported->append(ImportedModules.begin(),
4382                      ImportedModules.end());
4383 
4384   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4385   // Might be unnecessary as use declarations are only used to build the
4386   // module itself.
4387 
4388   if (ContextObj)
4389     InitializeContext();
4390 
4391   if (SemaObj)
4392     UpdateSema();
4393 
4394   if (DeserializationListener)
4395     DeserializationListener->ReaderInitialized(this);
4396 
4397   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4398   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4399     // If this AST file is a precompiled preamble, then set the
4400     // preamble file ID of the source manager to the file source file
4401     // from which the preamble was built.
4402     if (Type == MK_Preamble) {
4403       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4404     } else if (Type == MK_MainFile) {
4405       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4406     }
4407   }
4408 
4409   // For any Objective-C class definitions we have already loaded, make sure
4410   // that we load any additional categories.
4411   if (ContextObj) {
4412     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4413       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4414                          ObjCClassesLoaded[I],
4415                          PreviousGeneration);
4416     }
4417   }
4418 
4419   if (PP.getHeaderSearchInfo()
4420           .getHeaderSearchOpts()
4421           .ModulesValidateOncePerBuildSession) {
4422     // Now we are certain that the module and all modules it depends on are
4423     // up to date.  Create or update timestamp files for modules that are
4424     // located in the module cache (not for PCH files that could be anywhere
4425     // in the filesystem).
4426     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4427       ImportedModule &M = Loaded[I];
4428       if (M.Mod->Kind == MK_ImplicitModule) {
4429         updateModuleTimestamp(*M.Mod);
4430       }
4431     }
4432   }
4433 
4434   return Success;
4435 }
4436 
4437 static ASTFileSignature readASTFileSignature(StringRef PCH);
4438 
4439 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4440 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4441   // FIXME checking magic headers is done in other places such as
4442   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4443   // always done the same. Unify it all with a helper.
4444   if (!Stream.canSkipToPos(4))
4445     return llvm::createStringError(std::errc::illegal_byte_sequence,
4446                                    "file too small to contain AST file magic");
4447   for (unsigned C : {'C', 'P', 'C', 'H'})
4448     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4449       if (Res.get() != C)
4450         return llvm::createStringError(
4451             std::errc::illegal_byte_sequence,
4452             "file doesn't start with AST file magic");
4453     } else
4454       return Res.takeError();
4455   return llvm::Error::success();
4456 }
4457 
4458 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4459   switch (Kind) {
4460   case MK_PCH:
4461     return 0; // PCH
4462   case MK_ImplicitModule:
4463   case MK_ExplicitModule:
4464   case MK_PrebuiltModule:
4465     return 1; // module
4466   case MK_MainFile:
4467   case MK_Preamble:
4468     return 2; // main source file
4469   }
4470   llvm_unreachable("unknown module kind");
4471 }
4472 
4473 ASTReader::ASTReadResult
4474 ASTReader::ReadASTCore(StringRef FileName,
4475                        ModuleKind Type,
4476                        SourceLocation ImportLoc,
4477                        ModuleFile *ImportedBy,
4478                        SmallVectorImpl<ImportedModule> &Loaded,
4479                        off_t ExpectedSize, time_t ExpectedModTime,
4480                        ASTFileSignature ExpectedSignature,
4481                        unsigned ClientLoadCapabilities) {
4482   ModuleFile *M;
4483   std::string ErrorStr;
4484   ModuleManager::AddModuleResult AddResult
4485     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4486                           getGeneration(), ExpectedSize, ExpectedModTime,
4487                           ExpectedSignature, readASTFileSignature,
4488                           M, ErrorStr);
4489 
4490   switch (AddResult) {
4491   case ModuleManager::AlreadyLoaded:
4492     Diag(diag::remark_module_import)
4493         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4494         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4495     return Success;
4496 
4497   case ModuleManager::NewlyLoaded:
4498     // Load module file below.
4499     break;
4500 
4501   case ModuleManager::Missing:
4502     // The module file was missing; if the client can handle that, return
4503     // it.
4504     if (ClientLoadCapabilities & ARR_Missing)
4505       return Missing;
4506 
4507     // Otherwise, return an error.
4508     Diag(diag::err_ast_file_not_found)
4509         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4510         << ErrorStr;
4511     return Failure;
4512 
4513   case ModuleManager::OutOfDate:
4514     // We couldn't load the module file because it is out-of-date. If the
4515     // client can handle out-of-date, return it.
4516     if (ClientLoadCapabilities & ARR_OutOfDate)
4517       return OutOfDate;
4518 
4519     // Otherwise, return an error.
4520     Diag(diag::err_ast_file_out_of_date)
4521         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4522         << ErrorStr;
4523     return Failure;
4524   }
4525 
4526   assert(M && "Missing module file");
4527 
4528   bool ShouldFinalizePCM = false;
4529   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4530     auto &MC = getModuleManager().getModuleCache();
4531     if (ShouldFinalizePCM)
4532       MC.finalizePCM(FileName);
4533     else
4534       MC.tryToDropPCM(FileName);
4535   });
4536   ModuleFile &F = *M;
4537   BitstreamCursor &Stream = F.Stream;
4538   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4539   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4540 
4541   // Sniff for the signature.
4542   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4543     Diag(diag::err_ast_file_invalid)
4544         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4545     return Failure;
4546   }
4547 
4548   // This is used for compatibility with older PCH formats.
4549   bool HaveReadControlBlock = false;
4550   while (true) {
4551     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4552     if (!MaybeEntry) {
4553       Error(MaybeEntry.takeError());
4554       return Failure;
4555     }
4556     llvm::BitstreamEntry Entry = MaybeEntry.get();
4557 
4558     switch (Entry.Kind) {
4559     case llvm::BitstreamEntry::Error:
4560     case llvm::BitstreamEntry::Record:
4561     case llvm::BitstreamEntry::EndBlock:
4562       Error("invalid record at top-level of AST file");
4563       return Failure;
4564 
4565     case llvm::BitstreamEntry::SubBlock:
4566       break;
4567     }
4568 
4569     switch (Entry.ID) {
4570     case CONTROL_BLOCK_ID:
4571       HaveReadControlBlock = true;
4572       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4573       case Success:
4574         // Check that we didn't try to load a non-module AST file as a module.
4575         //
4576         // FIXME: Should we also perform the converse check? Loading a module as
4577         // a PCH file sort of works, but it's a bit wonky.
4578         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4579              Type == MK_PrebuiltModule) &&
4580             F.ModuleName.empty()) {
4581           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4582           if (Result != OutOfDate ||
4583               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4584             Diag(diag::err_module_file_not_module) << FileName;
4585           return Result;
4586         }
4587         break;
4588 
4589       case Failure: return Failure;
4590       case Missing: return Missing;
4591       case OutOfDate: return OutOfDate;
4592       case VersionMismatch: return VersionMismatch;
4593       case ConfigurationMismatch: return ConfigurationMismatch;
4594       case HadErrors: return HadErrors;
4595       }
4596       break;
4597 
4598     case AST_BLOCK_ID:
4599       if (!HaveReadControlBlock) {
4600         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4601           Diag(diag::err_pch_version_too_old);
4602         return VersionMismatch;
4603       }
4604 
4605       // Record that we've loaded this module.
4606       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4607       ShouldFinalizePCM = true;
4608       return Success;
4609 
4610     case UNHASHED_CONTROL_BLOCK_ID:
4611       // This block is handled using look-ahead during ReadControlBlock.  We
4612       // shouldn't get here!
4613       Error("malformed block record in AST file");
4614       return Failure;
4615 
4616     default:
4617       if (llvm::Error Err = Stream.SkipBlock()) {
4618         Error(std::move(Err));
4619         return Failure;
4620       }
4621       break;
4622     }
4623   }
4624 
4625   llvm_unreachable("unexpected break; expected return");
4626 }
4627 
4628 ASTReader::ASTReadResult
4629 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4630                                     unsigned ClientLoadCapabilities) {
4631   const HeaderSearchOptions &HSOpts =
4632       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4633   bool AllowCompatibleConfigurationMismatch =
4634       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4635   bool DisableValidation = shouldDisableValidationForFile(F);
4636 
4637   ASTReadResult Result = readUnhashedControlBlockImpl(
4638       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4639       Listener.get(),
4640       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4641 
4642   // If F was directly imported by another module, it's implicitly validated by
4643   // the importing module.
4644   if (DisableValidation || WasImportedBy ||
4645       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4646     return Success;
4647 
4648   if (Result == Failure) {
4649     Error("malformed block record in AST file");
4650     return Failure;
4651   }
4652 
4653   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4654     // If this module has already been finalized in the ModuleCache, we're stuck
4655     // with it; we can only load a single version of each module.
4656     //
4657     // This can happen when a module is imported in two contexts: in one, as a
4658     // user module; in another, as a system module (due to an import from
4659     // another module marked with the [system] flag).  It usually indicates a
4660     // bug in the module map: this module should also be marked with [system].
4661     //
4662     // If -Wno-system-headers (the default), and the first import is as a
4663     // system module, then validation will fail during the as-user import,
4664     // since -Werror flags won't have been validated.  However, it's reasonable
4665     // to treat this consistently as a system module.
4666     //
4667     // If -Wsystem-headers, the PCM on disk was built with
4668     // -Wno-system-headers, and the first import is as a user module, then
4669     // validation will fail during the as-system import since the PCM on disk
4670     // doesn't guarantee that -Werror was respected.  However, the -Werror
4671     // flags were checked during the initial as-user import.
4672     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4673       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4674       return Success;
4675     }
4676   }
4677 
4678   return Result;
4679 }
4680 
4681 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4682     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4683     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4684     bool ValidateDiagnosticOptions) {
4685   // Initialize a stream.
4686   BitstreamCursor Stream(StreamData);
4687 
4688   // Sniff for the signature.
4689   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4690     // FIXME this drops the error on the floor.
4691     consumeError(std::move(Err));
4692     return Failure;
4693   }
4694 
4695   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4696   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4697     return Failure;
4698 
4699   // Read all of the records in the options block.
4700   RecordData Record;
4701   ASTReadResult Result = Success;
4702   while (true) {
4703     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4704     if (!MaybeEntry) {
4705       // FIXME this drops the error on the floor.
4706       consumeError(MaybeEntry.takeError());
4707       return Failure;
4708     }
4709     llvm::BitstreamEntry Entry = MaybeEntry.get();
4710 
4711     switch (Entry.Kind) {
4712     case llvm::BitstreamEntry::Error:
4713     case llvm::BitstreamEntry::SubBlock:
4714       return Failure;
4715 
4716     case llvm::BitstreamEntry::EndBlock:
4717       return Result;
4718 
4719     case llvm::BitstreamEntry::Record:
4720       // The interesting case.
4721       break;
4722     }
4723 
4724     // Read and process a record.
4725     Record.clear();
4726     StringRef Blob;
4727     Expected<unsigned> MaybeRecordType =
4728         Stream.readRecord(Entry.ID, Record, &Blob);
4729     if (!MaybeRecordType) {
4730       // FIXME this drops the error.
4731       return Failure;
4732     }
4733     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4734     case SIGNATURE:
4735       if (F)
4736         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4737       break;
4738     case AST_BLOCK_HASH:
4739       if (F)
4740         F->ASTBlockHash =
4741             ASTFileSignature::create(Record.begin(), Record.end());
4742       break;
4743     case DIAGNOSTIC_OPTIONS: {
4744       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4745       if (Listener && ValidateDiagnosticOptions &&
4746           !AllowCompatibleConfigurationMismatch &&
4747           ParseDiagnosticOptions(Record, Complain, *Listener))
4748         Result = OutOfDate; // Don't return early.  Read the signature.
4749       break;
4750     }
4751     case DIAG_PRAGMA_MAPPINGS:
4752       if (!F)
4753         break;
4754       if (F->PragmaDiagMappings.empty())
4755         F->PragmaDiagMappings.swap(Record);
4756       else
4757         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4758                                      Record.begin(), Record.end());
4759       break;
4760     case HEADER_SEARCH_ENTRY_USAGE:
4761       if (!F)
4762         break;
4763       unsigned Count = Record[0];
4764       const char *Byte = Blob.data();
4765       F->SearchPathUsage = llvm::BitVector(Count, 0);
4766       for (unsigned I = 0; I < Count; ++Byte)
4767         for (unsigned Bit = 0; Bit < 8 && I < Count; ++Bit, ++I)
4768           if (*Byte & (1 << Bit))
4769             F->SearchPathUsage[I] = 1;
4770       break;
4771     }
4772   }
4773 }
4774 
4775 /// Parse a record and blob containing module file extension metadata.
4776 static bool parseModuleFileExtensionMetadata(
4777               const SmallVectorImpl<uint64_t> &Record,
4778               StringRef Blob,
4779               ModuleFileExtensionMetadata &Metadata) {
4780   if (Record.size() < 4) return true;
4781 
4782   Metadata.MajorVersion = Record[0];
4783   Metadata.MinorVersion = Record[1];
4784 
4785   unsigned BlockNameLen = Record[2];
4786   unsigned UserInfoLen = Record[3];
4787 
4788   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4789 
4790   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4791   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4792                                   Blob.data() + BlockNameLen + UserInfoLen);
4793   return false;
4794 }
4795 
4796 llvm::Error ASTReader::ReadExtensionBlock(ModuleFile &F) {
4797   BitstreamCursor &Stream = F.Stream;
4798 
4799   RecordData Record;
4800   while (true) {
4801     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4802     if (!MaybeEntry)
4803       return MaybeEntry.takeError();
4804     llvm::BitstreamEntry Entry = MaybeEntry.get();
4805 
4806     switch (Entry.Kind) {
4807     case llvm::BitstreamEntry::SubBlock:
4808       if (llvm::Error Err = Stream.SkipBlock())
4809         return Err;
4810       continue;
4811     case llvm::BitstreamEntry::EndBlock:
4812       return llvm::Error::success();
4813     case llvm::BitstreamEntry::Error:
4814       return llvm::createStringError(std::errc::illegal_byte_sequence,
4815                                      "malformed block record in AST file");
4816     case llvm::BitstreamEntry::Record:
4817       break;
4818     }
4819 
4820     Record.clear();
4821     StringRef Blob;
4822     Expected<unsigned> MaybeRecCode =
4823         Stream.readRecord(Entry.ID, Record, &Blob);
4824     if (!MaybeRecCode)
4825       return MaybeRecCode.takeError();
4826     switch (MaybeRecCode.get()) {
4827     case EXTENSION_METADATA: {
4828       ModuleFileExtensionMetadata Metadata;
4829       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4830         return llvm::createStringError(
4831             std::errc::illegal_byte_sequence,
4832             "malformed EXTENSION_METADATA in AST file");
4833 
4834       // Find a module file extension with this block name.
4835       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4836       if (Known == ModuleFileExtensions.end()) break;
4837 
4838       // Form a reader.
4839       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4840                                                              F, Stream)) {
4841         F.ExtensionReaders.push_back(std::move(Reader));
4842       }
4843 
4844       break;
4845     }
4846     }
4847   }
4848 
4849   return llvm::Error::success();
4850 }
4851 
4852 void ASTReader::InitializeContext() {
4853   assert(ContextObj && "no context to initialize");
4854   ASTContext &Context = *ContextObj;
4855 
4856   // If there's a listener, notify them that we "read" the translation unit.
4857   if (DeserializationListener)
4858     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4859                                       Context.getTranslationUnitDecl());
4860 
4861   // FIXME: Find a better way to deal with collisions between these
4862   // built-in types. Right now, we just ignore the problem.
4863 
4864   // Load the special types.
4865   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4866     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4867       if (!Context.CFConstantStringTypeDecl)
4868         Context.setCFConstantStringType(GetType(String));
4869     }
4870 
4871     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4872       QualType FileType = GetType(File);
4873       if (FileType.isNull()) {
4874         Error("FILE type is NULL");
4875         return;
4876       }
4877 
4878       if (!Context.FILEDecl) {
4879         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4880           Context.setFILEDecl(Typedef->getDecl());
4881         else {
4882           const TagType *Tag = FileType->getAs<TagType>();
4883           if (!Tag) {
4884             Error("Invalid FILE type in AST file");
4885             return;
4886           }
4887           Context.setFILEDecl(Tag->getDecl());
4888         }
4889       }
4890     }
4891 
4892     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4893       QualType Jmp_bufType = GetType(Jmp_buf);
4894       if (Jmp_bufType.isNull()) {
4895         Error("jmp_buf type is NULL");
4896         return;
4897       }
4898 
4899       if (!Context.jmp_bufDecl) {
4900         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4901           Context.setjmp_bufDecl(Typedef->getDecl());
4902         else {
4903           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4904           if (!Tag) {
4905             Error("Invalid jmp_buf type in AST file");
4906             return;
4907           }
4908           Context.setjmp_bufDecl(Tag->getDecl());
4909         }
4910       }
4911     }
4912 
4913     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4914       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4915       if (Sigjmp_bufType.isNull()) {
4916         Error("sigjmp_buf type is NULL");
4917         return;
4918       }
4919 
4920       if (!Context.sigjmp_bufDecl) {
4921         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4922           Context.setsigjmp_bufDecl(Typedef->getDecl());
4923         else {
4924           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4925           assert(Tag && "Invalid sigjmp_buf type in AST file");
4926           Context.setsigjmp_bufDecl(Tag->getDecl());
4927         }
4928       }
4929     }
4930 
4931     if (unsigned ObjCIdRedef
4932           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4933       if (Context.ObjCIdRedefinitionType.isNull())
4934         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4935     }
4936 
4937     if (unsigned ObjCClassRedef
4938           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4939       if (Context.ObjCClassRedefinitionType.isNull())
4940         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4941     }
4942 
4943     if (unsigned ObjCSelRedef
4944           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4945       if (Context.ObjCSelRedefinitionType.isNull())
4946         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4947     }
4948 
4949     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4950       QualType Ucontext_tType = GetType(Ucontext_t);
4951       if (Ucontext_tType.isNull()) {
4952         Error("ucontext_t type is NULL");
4953         return;
4954       }
4955 
4956       if (!Context.ucontext_tDecl) {
4957         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4958           Context.setucontext_tDecl(Typedef->getDecl());
4959         else {
4960           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4961           assert(Tag && "Invalid ucontext_t type in AST file");
4962           Context.setucontext_tDecl(Tag->getDecl());
4963         }
4964       }
4965     }
4966   }
4967 
4968   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4969 
4970   // If there were any CUDA special declarations, deserialize them.
4971   if (!CUDASpecialDeclRefs.empty()) {
4972     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4973     Context.setcudaConfigureCallDecl(
4974                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4975   }
4976 
4977   // Re-export any modules that were imported by a non-module AST file.
4978   // FIXME: This does not make macro-only imports visible again.
4979   for (auto &Import : ImportedModules) {
4980     if (Module *Imported = getSubmodule(Import.ID)) {
4981       makeModuleVisible(Imported, Module::AllVisible,
4982                         /*ImportLoc=*/Import.ImportLoc);
4983       if (Import.ImportLoc.isValid())
4984         PP.makeModuleVisible(Imported, Import.ImportLoc);
4985       // This updates visibility for Preprocessor only. For Sema, which can be
4986       // nullptr here, we do the same later, in UpdateSema().
4987     }
4988   }
4989 }
4990 
4991 void ASTReader::finalizeForWriting() {
4992   // Nothing to do for now.
4993 }
4994 
4995 /// Reads and return the signature record from \p PCH's control block, or
4996 /// else returns 0.
4997 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4998   BitstreamCursor Stream(PCH);
4999   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5000     // FIXME this drops the error on the floor.
5001     consumeError(std::move(Err));
5002     return ASTFileSignature();
5003   }
5004 
5005   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5006   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5007     return ASTFileSignature();
5008 
5009   // Scan for SIGNATURE inside the diagnostic options block.
5010   ASTReader::RecordData Record;
5011   while (true) {
5012     Expected<llvm::BitstreamEntry> MaybeEntry =
5013         Stream.advanceSkippingSubblocks();
5014     if (!MaybeEntry) {
5015       // FIXME this drops the error on the floor.
5016       consumeError(MaybeEntry.takeError());
5017       return ASTFileSignature();
5018     }
5019     llvm::BitstreamEntry Entry = MaybeEntry.get();
5020 
5021     if (Entry.Kind != llvm::BitstreamEntry::Record)
5022       return ASTFileSignature();
5023 
5024     Record.clear();
5025     StringRef Blob;
5026     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5027     if (!MaybeRecord) {
5028       // FIXME this drops the error on the floor.
5029       consumeError(MaybeRecord.takeError());
5030       return ASTFileSignature();
5031     }
5032     if (SIGNATURE == MaybeRecord.get())
5033       return ASTFileSignature::create(Record.begin(),
5034                                       Record.begin() + ASTFileSignature::size);
5035   }
5036 }
5037 
5038 /// Retrieve the name of the original source file name
5039 /// directly from the AST file, without actually loading the AST
5040 /// file.
5041 std::string ASTReader::getOriginalSourceFile(
5042     const std::string &ASTFileName, FileManager &FileMgr,
5043     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5044   // Open the AST file.
5045   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5046   if (!Buffer) {
5047     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5048         << ASTFileName << Buffer.getError().message();
5049     return std::string();
5050   }
5051 
5052   // Initialize the stream
5053   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5054 
5055   // Sniff for the signature.
5056   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5057     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5058     return std::string();
5059   }
5060 
5061   // Scan for the CONTROL_BLOCK_ID block.
5062   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5063     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5064     return std::string();
5065   }
5066 
5067   // Scan for ORIGINAL_FILE inside the control block.
5068   RecordData Record;
5069   while (true) {
5070     Expected<llvm::BitstreamEntry> MaybeEntry =
5071         Stream.advanceSkippingSubblocks();
5072     if (!MaybeEntry) {
5073       // FIXME this drops errors on the floor.
5074       consumeError(MaybeEntry.takeError());
5075       return std::string();
5076     }
5077     llvm::BitstreamEntry Entry = MaybeEntry.get();
5078 
5079     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5080       return std::string();
5081 
5082     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5083       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5084       return std::string();
5085     }
5086 
5087     Record.clear();
5088     StringRef Blob;
5089     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5090     if (!MaybeRecord) {
5091       // FIXME this drops the errors on the floor.
5092       consumeError(MaybeRecord.takeError());
5093       return std::string();
5094     }
5095     if (ORIGINAL_FILE == MaybeRecord.get())
5096       return Blob.str();
5097   }
5098 }
5099 
5100 namespace {
5101 
5102   class SimplePCHValidator : public ASTReaderListener {
5103     const LangOptions &ExistingLangOpts;
5104     const TargetOptions &ExistingTargetOpts;
5105     const PreprocessorOptions &ExistingPPOpts;
5106     std::string ExistingModuleCachePath;
5107     FileManager &FileMgr;
5108 
5109   public:
5110     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5111                        const TargetOptions &ExistingTargetOpts,
5112                        const PreprocessorOptions &ExistingPPOpts,
5113                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5114         : ExistingLangOpts(ExistingLangOpts),
5115           ExistingTargetOpts(ExistingTargetOpts),
5116           ExistingPPOpts(ExistingPPOpts),
5117           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5118 
5119     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5120                              bool AllowCompatibleDifferences) override {
5121       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5122                                   AllowCompatibleDifferences);
5123     }
5124 
5125     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5126                            bool AllowCompatibleDifferences) override {
5127       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5128                                 AllowCompatibleDifferences);
5129     }
5130 
5131     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5132                                  StringRef SpecificModuleCachePath,
5133                                  bool Complain) override {
5134       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5135                                       ExistingModuleCachePath, nullptr,
5136                                       ExistingLangOpts, ExistingPPOpts);
5137     }
5138 
5139     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5140                                  bool Complain,
5141                                  std::string &SuggestedPredefines) override {
5142       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5143                                       SuggestedPredefines, ExistingLangOpts);
5144     }
5145   };
5146 
5147 } // namespace
5148 
5149 bool ASTReader::readASTFileControlBlock(
5150     StringRef Filename, FileManager &FileMgr,
5151     const PCHContainerReader &PCHContainerRdr,
5152     bool FindModuleFileExtensions,
5153     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5154   // Open the AST file.
5155   // FIXME: This allows use of the VFS; we do not allow use of the
5156   // VFS when actually loading a module.
5157   auto Buffer = FileMgr.getBufferForFile(Filename);
5158   if (!Buffer) {
5159     return true;
5160   }
5161 
5162   // Initialize the stream
5163   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5164   BitstreamCursor Stream(Bytes);
5165 
5166   // Sniff for the signature.
5167   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5168     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5169     return true;
5170   }
5171 
5172   // Scan for the CONTROL_BLOCK_ID block.
5173   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5174     return true;
5175 
5176   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5177   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5178   bool NeedsImports = Listener.needsImportVisitation();
5179   BitstreamCursor InputFilesCursor;
5180 
5181   RecordData Record;
5182   std::string ModuleDir;
5183   bool DoneWithControlBlock = false;
5184   while (!DoneWithControlBlock) {
5185     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5186     if (!MaybeEntry) {
5187       // FIXME this drops the error on the floor.
5188       consumeError(MaybeEntry.takeError());
5189       return true;
5190     }
5191     llvm::BitstreamEntry Entry = MaybeEntry.get();
5192 
5193     switch (Entry.Kind) {
5194     case llvm::BitstreamEntry::SubBlock: {
5195       switch (Entry.ID) {
5196       case OPTIONS_BLOCK_ID: {
5197         std::string IgnoredSuggestedPredefines;
5198         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5199                              /*AllowCompatibleConfigurationMismatch*/ false,
5200                              Listener, IgnoredSuggestedPredefines) != Success)
5201           return true;
5202         break;
5203       }
5204 
5205       case INPUT_FILES_BLOCK_ID:
5206         InputFilesCursor = Stream;
5207         if (llvm::Error Err = Stream.SkipBlock()) {
5208           // FIXME this drops the error on the floor.
5209           consumeError(std::move(Err));
5210           return true;
5211         }
5212         if (NeedsInputFiles &&
5213             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5214           return true;
5215         break;
5216 
5217       default:
5218         if (llvm::Error Err = Stream.SkipBlock()) {
5219           // FIXME this drops the error on the floor.
5220           consumeError(std::move(Err));
5221           return true;
5222         }
5223         break;
5224       }
5225 
5226       continue;
5227     }
5228 
5229     case llvm::BitstreamEntry::EndBlock:
5230       DoneWithControlBlock = true;
5231       break;
5232 
5233     case llvm::BitstreamEntry::Error:
5234       return true;
5235 
5236     case llvm::BitstreamEntry::Record:
5237       break;
5238     }
5239 
5240     if (DoneWithControlBlock) break;
5241 
5242     Record.clear();
5243     StringRef Blob;
5244     Expected<unsigned> MaybeRecCode =
5245         Stream.readRecord(Entry.ID, Record, &Blob);
5246     if (!MaybeRecCode) {
5247       // FIXME this drops the error.
5248       return Failure;
5249     }
5250     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5251     case METADATA:
5252       if (Record[0] != VERSION_MAJOR)
5253         return true;
5254       if (Listener.ReadFullVersionInformation(Blob))
5255         return true;
5256       break;
5257     case MODULE_NAME:
5258       Listener.ReadModuleName(Blob);
5259       break;
5260     case MODULE_DIRECTORY:
5261       ModuleDir = std::string(Blob);
5262       break;
5263     case MODULE_MAP_FILE: {
5264       unsigned Idx = 0;
5265       auto Path = ReadString(Record, Idx);
5266       ResolveImportedPath(Path, ModuleDir);
5267       Listener.ReadModuleMapFile(Path);
5268       break;
5269     }
5270     case INPUT_FILE_OFFSETS: {
5271       if (!NeedsInputFiles)
5272         break;
5273 
5274       unsigned NumInputFiles = Record[0];
5275       unsigned NumUserFiles = Record[1];
5276       const llvm::support::unaligned_uint64_t *InputFileOffs =
5277           (const llvm::support::unaligned_uint64_t *)Blob.data();
5278       for (unsigned I = 0; I != NumInputFiles; ++I) {
5279         // Go find this input file.
5280         bool isSystemFile = I >= NumUserFiles;
5281 
5282         if (isSystemFile && !NeedsSystemInputFiles)
5283           break; // the rest are system input files
5284 
5285         BitstreamCursor &Cursor = InputFilesCursor;
5286         SavedStreamPosition SavedPosition(Cursor);
5287         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5288           // FIXME this drops errors on the floor.
5289           consumeError(std::move(Err));
5290         }
5291 
5292         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5293         if (!MaybeCode) {
5294           // FIXME this drops errors on the floor.
5295           consumeError(MaybeCode.takeError());
5296         }
5297         unsigned Code = MaybeCode.get();
5298 
5299         RecordData Record;
5300         StringRef Blob;
5301         bool shouldContinue = false;
5302         Expected<unsigned> MaybeRecordType =
5303             Cursor.readRecord(Code, Record, &Blob);
5304         if (!MaybeRecordType) {
5305           // FIXME this drops errors on the floor.
5306           consumeError(MaybeRecordType.takeError());
5307         }
5308         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5309         case INPUT_FILE_HASH:
5310           break;
5311         case INPUT_FILE:
5312           bool Overridden = static_cast<bool>(Record[3]);
5313           std::string Filename = std::string(Blob);
5314           ResolveImportedPath(Filename, ModuleDir);
5315           shouldContinue = Listener.visitInputFile(
5316               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5317           break;
5318         }
5319         if (!shouldContinue)
5320           break;
5321       }
5322       break;
5323     }
5324 
5325     case IMPORTS: {
5326       if (!NeedsImports)
5327         break;
5328 
5329       unsigned Idx = 0, N = Record.size();
5330       while (Idx < N) {
5331         // Read information about the AST file.
5332         Idx +=
5333             1 + 1 + 1 + 1 +
5334             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5335         std::string ModuleName = ReadString(Record, Idx);
5336         std::string Filename = ReadString(Record, Idx);
5337         ResolveImportedPath(Filename, ModuleDir);
5338         Listener.visitImport(ModuleName, Filename);
5339       }
5340       break;
5341     }
5342 
5343     default:
5344       // No other validation to perform.
5345       break;
5346     }
5347   }
5348 
5349   // Look for module file extension blocks, if requested.
5350   if (FindModuleFileExtensions) {
5351     BitstreamCursor SavedStream = Stream;
5352     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5353       bool DoneWithExtensionBlock = false;
5354       while (!DoneWithExtensionBlock) {
5355         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5356         if (!MaybeEntry) {
5357           // FIXME this drops the error.
5358           return true;
5359         }
5360         llvm::BitstreamEntry Entry = MaybeEntry.get();
5361 
5362         switch (Entry.Kind) {
5363         case llvm::BitstreamEntry::SubBlock:
5364           if (llvm::Error Err = Stream.SkipBlock()) {
5365             // FIXME this drops the error on the floor.
5366             consumeError(std::move(Err));
5367             return true;
5368           }
5369           continue;
5370 
5371         case llvm::BitstreamEntry::EndBlock:
5372           DoneWithExtensionBlock = true;
5373           continue;
5374 
5375         case llvm::BitstreamEntry::Error:
5376           return true;
5377 
5378         case llvm::BitstreamEntry::Record:
5379           break;
5380         }
5381 
5382        Record.clear();
5383        StringRef Blob;
5384        Expected<unsigned> MaybeRecCode =
5385            Stream.readRecord(Entry.ID, Record, &Blob);
5386        if (!MaybeRecCode) {
5387          // FIXME this drops the error.
5388          return true;
5389        }
5390        switch (MaybeRecCode.get()) {
5391        case EXTENSION_METADATA: {
5392          ModuleFileExtensionMetadata Metadata;
5393          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5394            return true;
5395 
5396          Listener.readModuleFileExtension(Metadata);
5397          break;
5398        }
5399        }
5400       }
5401     }
5402     Stream = SavedStream;
5403   }
5404 
5405   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5406   if (readUnhashedControlBlockImpl(
5407           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5408           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5409           ValidateDiagnosticOptions) != Success)
5410     return true;
5411 
5412   return false;
5413 }
5414 
5415 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5416                                     const PCHContainerReader &PCHContainerRdr,
5417                                     const LangOptions &LangOpts,
5418                                     const TargetOptions &TargetOpts,
5419                                     const PreprocessorOptions &PPOpts,
5420                                     StringRef ExistingModuleCachePath) {
5421   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5422                                ExistingModuleCachePath, FileMgr);
5423   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5424                                   /*FindModuleFileExtensions=*/false,
5425                                   validator,
5426                                   /*ValidateDiagnosticOptions=*/true);
5427 }
5428 
5429 llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F,
5430                                           unsigned ClientLoadCapabilities) {
5431   // Enter the submodule block.
5432   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID))
5433     return Err;
5434 
5435   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5436   bool First = true;
5437   Module *CurrentModule = nullptr;
5438   RecordData Record;
5439   while (true) {
5440     Expected<llvm::BitstreamEntry> MaybeEntry =
5441         F.Stream.advanceSkippingSubblocks();
5442     if (!MaybeEntry)
5443       return MaybeEntry.takeError();
5444     llvm::BitstreamEntry Entry = MaybeEntry.get();
5445 
5446     switch (Entry.Kind) {
5447     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5448     case llvm::BitstreamEntry::Error:
5449       return llvm::createStringError(std::errc::illegal_byte_sequence,
5450                                      "malformed block record in AST file");
5451     case llvm::BitstreamEntry::EndBlock:
5452       return llvm::Error::success();
5453     case llvm::BitstreamEntry::Record:
5454       // The interesting case.
5455       break;
5456     }
5457 
5458     // Read a record.
5459     StringRef Blob;
5460     Record.clear();
5461     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5462     if (!MaybeKind)
5463       return MaybeKind.takeError();
5464     unsigned Kind = MaybeKind.get();
5465 
5466     if ((Kind == SUBMODULE_METADATA) != First)
5467       return llvm::createStringError(
5468           std::errc::illegal_byte_sequence,
5469           "submodule metadata record should be at beginning of block");
5470     First = false;
5471 
5472     // Submodule information is only valid if we have a current module.
5473     // FIXME: Should we error on these cases?
5474     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5475         Kind != SUBMODULE_DEFINITION)
5476       continue;
5477 
5478     switch (Kind) {
5479     default:  // Default behavior: ignore.
5480       break;
5481 
5482     case SUBMODULE_DEFINITION: {
5483       if (Record.size() < 12)
5484         return llvm::createStringError(std::errc::illegal_byte_sequence,
5485                                        "malformed module definition");
5486 
5487       StringRef Name = Blob;
5488       unsigned Idx = 0;
5489       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5490       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5491       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5492       bool IsFramework = Record[Idx++];
5493       bool IsExplicit = Record[Idx++];
5494       bool IsSystem = Record[Idx++];
5495       bool IsExternC = Record[Idx++];
5496       bool InferSubmodules = Record[Idx++];
5497       bool InferExplicitSubmodules = Record[Idx++];
5498       bool InferExportWildcard = Record[Idx++];
5499       bool ConfigMacrosExhaustive = Record[Idx++];
5500       bool ModuleMapIsPrivate = Record[Idx++];
5501 
5502       Module *ParentModule = nullptr;
5503       if (Parent)
5504         ParentModule = getSubmodule(Parent);
5505 
5506       // Retrieve this (sub)module from the module map, creating it if
5507       // necessary.
5508       CurrentModule =
5509           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5510               .first;
5511 
5512       // FIXME: set the definition loc for CurrentModule, or call
5513       // ModMap.setInferredModuleAllowedBy()
5514 
5515       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5516       if (GlobalIndex >= SubmodulesLoaded.size() ||
5517           SubmodulesLoaded[GlobalIndex])
5518         return llvm::createStringError(std::errc::invalid_argument,
5519                                        "too many submodules");
5520 
5521       if (!ParentModule) {
5522         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5523           // Don't emit module relocation error if we have -fno-validate-pch
5524           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5525                     DisableValidationForModuleKind::Module) &&
5526               CurFile != F.File) {
5527             auto ConflictError =
5528                 PartialDiagnostic(diag::err_module_file_conflict,
5529                                   ContextObj->DiagAllocator)
5530                 << CurrentModule->getTopLevelModuleName() << CurFile->getName()
5531                 << F.File->getName();
5532             return DiagnosticError::create(CurrentImportLoc, ConflictError);
5533           }
5534         }
5535 
5536         F.DidReadTopLevelSubmodule = true;
5537         CurrentModule->setASTFile(F.File);
5538         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5539       }
5540 
5541       CurrentModule->Kind = Kind;
5542       CurrentModule->Signature = F.Signature;
5543       CurrentModule->IsFromModuleFile = true;
5544       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5545       CurrentModule->IsExternC = IsExternC;
5546       CurrentModule->InferSubmodules = InferSubmodules;
5547       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5548       CurrentModule->InferExportWildcard = InferExportWildcard;
5549       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5550       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5551       if (DeserializationListener)
5552         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5553 
5554       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5555 
5556       // Clear out data that will be replaced by what is in the module file.
5557       CurrentModule->LinkLibraries.clear();
5558       CurrentModule->ConfigMacros.clear();
5559       CurrentModule->UnresolvedConflicts.clear();
5560       CurrentModule->Conflicts.clear();
5561 
5562       // The module is available unless it's missing a requirement; relevant
5563       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5564       // Missing headers that were present when the module was built do not
5565       // make it unavailable -- if we got this far, this must be an explicitly
5566       // imported module file.
5567       CurrentModule->Requirements.clear();
5568       CurrentModule->MissingHeaders.clear();
5569       CurrentModule->IsUnimportable =
5570           ParentModule && ParentModule->IsUnimportable;
5571       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5572       break;
5573     }
5574 
5575     case SUBMODULE_UMBRELLA_HEADER: {
5576       // FIXME: This doesn't work for framework modules as `Filename` is the
5577       //        name as written in the module file and does not include
5578       //        `Headers/`, so this path will never exist.
5579       std::string Filename = std::string(Blob);
5580       ResolveImportedPath(F, Filename);
5581       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5582         if (!CurrentModule->getUmbrellaHeader()) {
5583           // FIXME: NameAsWritten
5584           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5585         }
5586         // Note that it's too late at this point to return out of date if the
5587         // name from the PCM doesn't match up with the one in the module map,
5588         // but also quite unlikely since we will have already checked the
5589         // modification time and size of the module map file itself.
5590       }
5591       break;
5592     }
5593 
5594     case SUBMODULE_HEADER:
5595     case SUBMODULE_EXCLUDED_HEADER:
5596     case SUBMODULE_PRIVATE_HEADER:
5597       // We lazily associate headers with their modules via the HeaderInfo table.
5598       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5599       // of complete filenames or remove it entirely.
5600       break;
5601 
5602     case SUBMODULE_TEXTUAL_HEADER:
5603     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5604       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5605       // them here.
5606       break;
5607 
5608     case SUBMODULE_TOPHEADER:
5609       CurrentModule->addTopHeaderFilename(Blob);
5610       break;
5611 
5612     case SUBMODULE_UMBRELLA_DIR: {
5613       // See comments in SUBMODULE_UMBRELLA_HEADER
5614       std::string Dirname = std::string(Blob);
5615       ResolveImportedPath(F, Dirname);
5616       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5617         if (!CurrentModule->getUmbrellaDir()) {
5618           // FIXME: NameAsWritten
5619           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5620         }
5621       }
5622       break;
5623     }
5624 
5625     case SUBMODULE_METADATA: {
5626       F.BaseSubmoduleID = getTotalNumSubmodules();
5627       F.LocalNumSubmodules = Record[0];
5628       unsigned LocalBaseSubmoduleID = Record[1];
5629       if (F.LocalNumSubmodules > 0) {
5630         // Introduce the global -> local mapping for submodules within this
5631         // module.
5632         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5633 
5634         // Introduce the local -> global mapping for submodules within this
5635         // module.
5636         F.SubmoduleRemap.insertOrReplace(
5637           std::make_pair(LocalBaseSubmoduleID,
5638                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5639 
5640         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5641       }
5642       break;
5643     }
5644 
5645     case SUBMODULE_IMPORTS:
5646       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5647         UnresolvedModuleRef Unresolved;
5648         Unresolved.File = &F;
5649         Unresolved.Mod = CurrentModule;
5650         Unresolved.ID = Record[Idx];
5651         Unresolved.Kind = UnresolvedModuleRef::Import;
5652         Unresolved.IsWildcard = false;
5653         UnresolvedModuleRefs.push_back(Unresolved);
5654       }
5655       break;
5656 
5657     case SUBMODULE_EXPORTS:
5658       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5659         UnresolvedModuleRef Unresolved;
5660         Unresolved.File = &F;
5661         Unresolved.Mod = CurrentModule;
5662         Unresolved.ID = Record[Idx];
5663         Unresolved.Kind = UnresolvedModuleRef::Export;
5664         Unresolved.IsWildcard = Record[Idx + 1];
5665         UnresolvedModuleRefs.push_back(Unresolved);
5666       }
5667 
5668       // Once we've loaded the set of exports, there's no reason to keep
5669       // the parsed, unresolved exports around.
5670       CurrentModule->UnresolvedExports.clear();
5671       break;
5672 
5673     case SUBMODULE_REQUIRES:
5674       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5675                                     PP.getTargetInfo());
5676       break;
5677 
5678     case SUBMODULE_LINK_LIBRARY:
5679       ModMap.resolveLinkAsDependencies(CurrentModule);
5680       CurrentModule->LinkLibraries.push_back(
5681           Module::LinkLibrary(std::string(Blob), Record[0]));
5682       break;
5683 
5684     case SUBMODULE_CONFIG_MACRO:
5685       CurrentModule->ConfigMacros.push_back(Blob.str());
5686       break;
5687 
5688     case SUBMODULE_CONFLICT: {
5689       UnresolvedModuleRef Unresolved;
5690       Unresolved.File = &F;
5691       Unresolved.Mod = CurrentModule;
5692       Unresolved.ID = Record[0];
5693       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5694       Unresolved.IsWildcard = false;
5695       Unresolved.String = Blob;
5696       UnresolvedModuleRefs.push_back(Unresolved);
5697       break;
5698     }
5699 
5700     case SUBMODULE_INITIALIZERS: {
5701       if (!ContextObj)
5702         break;
5703       SmallVector<uint32_t, 16> Inits;
5704       for (auto &ID : Record)
5705         Inits.push_back(getGlobalDeclID(F, ID));
5706       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5707       break;
5708     }
5709 
5710     case SUBMODULE_EXPORT_AS:
5711       CurrentModule->ExportAsModule = Blob.str();
5712       ModMap.addLinkAsDependency(CurrentModule);
5713       break;
5714     }
5715   }
5716 }
5717 
5718 /// Parse the record that corresponds to a LangOptions data
5719 /// structure.
5720 ///
5721 /// This routine parses the language options from the AST file and then gives
5722 /// them to the AST listener if one is set.
5723 ///
5724 /// \returns true if the listener deems the file unacceptable, false otherwise.
5725 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5726                                      bool Complain,
5727                                      ASTReaderListener &Listener,
5728                                      bool AllowCompatibleDifferences) {
5729   LangOptions LangOpts;
5730   unsigned Idx = 0;
5731 #define LANGOPT(Name, Bits, Default, Description) \
5732   LangOpts.Name = Record[Idx++];
5733 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5734   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5735 #include "clang/Basic/LangOptions.def"
5736 #define SANITIZER(NAME, ID)                                                    \
5737   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5738 #include "clang/Basic/Sanitizers.def"
5739 
5740   for (unsigned N = Record[Idx++]; N; --N)
5741     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5742 
5743   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5744   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5745   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5746 
5747   LangOpts.CurrentModule = ReadString(Record, Idx);
5748 
5749   // Comment options.
5750   for (unsigned N = Record[Idx++]; N; --N) {
5751     LangOpts.CommentOpts.BlockCommandNames.push_back(
5752       ReadString(Record, Idx));
5753   }
5754   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5755 
5756   // OpenMP offloading options.
5757   for (unsigned N = Record[Idx++]; N; --N) {
5758     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5759   }
5760 
5761   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5762 
5763   return Listener.ReadLanguageOptions(LangOpts, Complain,
5764                                       AllowCompatibleDifferences);
5765 }
5766 
5767 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5768                                    ASTReaderListener &Listener,
5769                                    bool AllowCompatibleDifferences) {
5770   unsigned Idx = 0;
5771   TargetOptions TargetOpts;
5772   TargetOpts.Triple = ReadString(Record, Idx);
5773   TargetOpts.CPU = ReadString(Record, Idx);
5774   TargetOpts.TuneCPU = ReadString(Record, Idx);
5775   TargetOpts.ABI = ReadString(Record, Idx);
5776   for (unsigned N = Record[Idx++]; N; --N) {
5777     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5778   }
5779   for (unsigned N = Record[Idx++]; N; --N) {
5780     TargetOpts.Features.push_back(ReadString(Record, Idx));
5781   }
5782 
5783   return Listener.ReadTargetOptions(TargetOpts, Complain,
5784                                     AllowCompatibleDifferences);
5785 }
5786 
5787 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5788                                        ASTReaderListener &Listener) {
5789   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5790   unsigned Idx = 0;
5791 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5792 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5793   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5794 #include "clang/Basic/DiagnosticOptions.def"
5795 
5796   for (unsigned N = Record[Idx++]; N; --N)
5797     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5798   for (unsigned N = Record[Idx++]; N; --N)
5799     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5800 
5801   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5802 }
5803 
5804 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5805                                        ASTReaderListener &Listener) {
5806   FileSystemOptions FSOpts;
5807   unsigned Idx = 0;
5808   FSOpts.WorkingDir = ReadString(Record, Idx);
5809   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5810 }
5811 
5812 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5813                                          bool Complain,
5814                                          ASTReaderListener &Listener) {
5815   HeaderSearchOptions HSOpts;
5816   unsigned Idx = 0;
5817   HSOpts.Sysroot = ReadString(Record, Idx);
5818 
5819   // Include entries.
5820   for (unsigned N = Record[Idx++]; N; --N) {
5821     std::string Path = ReadString(Record, Idx);
5822     frontend::IncludeDirGroup Group
5823       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5824     bool IsFramework = Record[Idx++];
5825     bool IgnoreSysRoot = Record[Idx++];
5826     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5827                                     IgnoreSysRoot);
5828   }
5829 
5830   // System header prefixes.
5831   for (unsigned N = Record[Idx++]; N; --N) {
5832     std::string Prefix = ReadString(Record, Idx);
5833     bool IsSystemHeader = Record[Idx++];
5834     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5835   }
5836 
5837   HSOpts.ResourceDir = ReadString(Record, Idx);
5838   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5839   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5840   HSOpts.DisableModuleHash = Record[Idx++];
5841   HSOpts.ImplicitModuleMaps = Record[Idx++];
5842   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5843   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5844   HSOpts.UseBuiltinIncludes = Record[Idx++];
5845   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5846   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5847   HSOpts.UseLibcxx = Record[Idx++];
5848   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5849 
5850   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5851                                           Complain);
5852 }
5853 
5854 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5855                                          bool Complain,
5856                                          ASTReaderListener &Listener,
5857                                          std::string &SuggestedPredefines) {
5858   PreprocessorOptions PPOpts;
5859   unsigned Idx = 0;
5860 
5861   // Macro definitions/undefs
5862   for (unsigned N = Record[Idx++]; N; --N) {
5863     std::string Macro = ReadString(Record, Idx);
5864     bool IsUndef = Record[Idx++];
5865     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5866   }
5867 
5868   // Includes
5869   for (unsigned N = Record[Idx++]; N; --N) {
5870     PPOpts.Includes.push_back(ReadString(Record, Idx));
5871   }
5872 
5873   // Macro Includes
5874   for (unsigned N = Record[Idx++]; N; --N) {
5875     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5876   }
5877 
5878   PPOpts.UsePredefines = Record[Idx++];
5879   PPOpts.DetailedRecord = Record[Idx++];
5880   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5881   PPOpts.ObjCXXARCStandardLibrary =
5882     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5883   SuggestedPredefines.clear();
5884   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5885                                           SuggestedPredefines);
5886 }
5887 
5888 std::pair<ModuleFile *, unsigned>
5889 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5890   GlobalPreprocessedEntityMapType::iterator
5891   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5892   assert(I != GlobalPreprocessedEntityMap.end() &&
5893          "Corrupted global preprocessed entity map");
5894   ModuleFile *M = I->second;
5895   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5896   return std::make_pair(M, LocalIndex);
5897 }
5898 
5899 llvm::iterator_range<PreprocessingRecord::iterator>
5900 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5901   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5902     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5903                                              Mod.NumPreprocessedEntities);
5904 
5905   return llvm::make_range(PreprocessingRecord::iterator(),
5906                           PreprocessingRecord::iterator());
5907 }
5908 
5909 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5910                                         unsigned int ClientLoadCapabilities) {
5911   return ClientLoadCapabilities & ARR_OutOfDate &&
5912          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
5913 }
5914 
5915 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5916 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5917   return llvm::make_range(
5918       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5919       ModuleDeclIterator(this, &Mod,
5920                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5921 }
5922 
5923 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5924   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5925   assert(I != GlobalSkippedRangeMap.end() &&
5926     "Corrupted global skipped range map");
5927   ModuleFile *M = I->second;
5928   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5929   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5930   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5931   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5932                     TranslateSourceLocation(*M, RawRange.getEnd()));
5933   assert(Range.isValid());
5934   return Range;
5935 }
5936 
5937 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5938   PreprocessedEntityID PPID = Index+1;
5939   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5940   ModuleFile &M = *PPInfo.first;
5941   unsigned LocalIndex = PPInfo.second;
5942   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5943 
5944   if (!PP.getPreprocessingRecord()) {
5945     Error("no preprocessing record");
5946     return nullptr;
5947   }
5948 
5949   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5950   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5951           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5952     Error(std::move(Err));
5953     return nullptr;
5954   }
5955 
5956   Expected<llvm::BitstreamEntry> MaybeEntry =
5957       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5958   if (!MaybeEntry) {
5959     Error(MaybeEntry.takeError());
5960     return nullptr;
5961   }
5962   llvm::BitstreamEntry Entry = MaybeEntry.get();
5963 
5964   if (Entry.Kind != llvm::BitstreamEntry::Record)
5965     return nullptr;
5966 
5967   // Read the record.
5968   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5969                     TranslateSourceLocation(M, PPOffs.getEnd()));
5970   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5971   StringRef Blob;
5972   RecordData Record;
5973   Expected<unsigned> MaybeRecType =
5974       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5975   if (!MaybeRecType) {
5976     Error(MaybeRecType.takeError());
5977     return nullptr;
5978   }
5979   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5980   case PPD_MACRO_EXPANSION: {
5981     bool isBuiltin = Record[0];
5982     IdentifierInfo *Name = nullptr;
5983     MacroDefinitionRecord *Def = nullptr;
5984     if (isBuiltin)
5985       Name = getLocalIdentifier(M, Record[1]);
5986     else {
5987       PreprocessedEntityID GlobalID =
5988           getGlobalPreprocessedEntityID(M, Record[1]);
5989       Def = cast<MacroDefinitionRecord>(
5990           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5991     }
5992 
5993     MacroExpansion *ME;
5994     if (isBuiltin)
5995       ME = new (PPRec) MacroExpansion(Name, Range);
5996     else
5997       ME = new (PPRec) MacroExpansion(Def, Range);
5998 
5999     return ME;
6000   }
6001 
6002   case PPD_MACRO_DEFINITION: {
6003     // Decode the identifier info and then check again; if the macro is
6004     // still defined and associated with the identifier,
6005     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6006     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6007 
6008     if (DeserializationListener)
6009       DeserializationListener->MacroDefinitionRead(PPID, MD);
6010 
6011     return MD;
6012   }
6013 
6014   case PPD_INCLUSION_DIRECTIVE: {
6015     const char *FullFileNameStart = Blob.data() + Record[0];
6016     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6017     const FileEntry *File = nullptr;
6018     if (!FullFileName.empty())
6019       if (auto FE = PP.getFileManager().getFile(FullFileName))
6020         File = *FE;
6021 
6022     // FIXME: Stable encoding
6023     InclusionDirective::InclusionKind Kind
6024       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6025     InclusionDirective *ID
6026       = new (PPRec) InclusionDirective(PPRec, Kind,
6027                                        StringRef(Blob.data(), Record[0]),
6028                                        Record[1], Record[3],
6029                                        File,
6030                                        Range);
6031     return ID;
6032   }
6033   }
6034 
6035   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6036 }
6037 
6038 /// Find the next module that contains entities and return the ID
6039 /// of the first entry.
6040 ///
6041 /// \param SLocMapI points at a chunk of a module that contains no
6042 /// preprocessed entities or the entities it contains are not the ones we are
6043 /// looking for.
6044 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6045                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6046   ++SLocMapI;
6047   for (GlobalSLocOffsetMapType::const_iterator
6048          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6049     ModuleFile &M = *SLocMapI->second;
6050     if (M.NumPreprocessedEntities)
6051       return M.BasePreprocessedEntityID;
6052   }
6053 
6054   return getTotalNumPreprocessedEntities();
6055 }
6056 
6057 namespace {
6058 
6059 struct PPEntityComp {
6060   const ASTReader &Reader;
6061   ModuleFile &M;
6062 
6063   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6064 
6065   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6066     SourceLocation LHS = getLoc(L);
6067     SourceLocation RHS = getLoc(R);
6068     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6069   }
6070 
6071   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6072     SourceLocation LHS = getLoc(L);
6073     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6074   }
6075 
6076   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6077     SourceLocation RHS = getLoc(R);
6078     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6079   }
6080 
6081   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6082     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6083   }
6084 };
6085 
6086 } // namespace
6087 
6088 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6089                                                        bool EndsAfter) const {
6090   if (SourceMgr.isLocalSourceLocation(Loc))
6091     return getTotalNumPreprocessedEntities();
6092 
6093   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6094       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6095   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6096          "Corrupted global sloc offset map");
6097 
6098   if (SLocMapI->second->NumPreprocessedEntities == 0)
6099     return findNextPreprocessedEntity(SLocMapI);
6100 
6101   ModuleFile &M = *SLocMapI->second;
6102 
6103   using pp_iterator = const PPEntityOffset *;
6104 
6105   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6106   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6107 
6108   size_t Count = M.NumPreprocessedEntities;
6109   size_t Half;
6110   pp_iterator First = pp_begin;
6111   pp_iterator PPI;
6112 
6113   if (EndsAfter) {
6114     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6115                            PPEntityComp(*this, M));
6116   } else {
6117     // Do a binary search manually instead of using std::lower_bound because
6118     // The end locations of entities may be unordered (when a macro expansion
6119     // is inside another macro argument), but for this case it is not important
6120     // whether we get the first macro expansion or its containing macro.
6121     while (Count > 0) {
6122       Half = Count / 2;
6123       PPI = First;
6124       std::advance(PPI, Half);
6125       if (SourceMgr.isBeforeInTranslationUnit(
6126               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6127         First = PPI;
6128         ++First;
6129         Count = Count - Half - 1;
6130       } else
6131         Count = Half;
6132     }
6133   }
6134 
6135   if (PPI == pp_end)
6136     return findNextPreprocessedEntity(SLocMapI);
6137 
6138   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6139 }
6140 
6141 /// Returns a pair of [Begin, End) indices of preallocated
6142 /// preprocessed entities that \arg Range encompasses.
6143 std::pair<unsigned, unsigned>
6144     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6145   if (Range.isInvalid())
6146     return std::make_pair(0,0);
6147   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6148 
6149   PreprocessedEntityID BeginID =
6150       findPreprocessedEntity(Range.getBegin(), false);
6151   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6152   return std::make_pair(BeginID, EndID);
6153 }
6154 
6155 /// Optionally returns true or false if the preallocated preprocessed
6156 /// entity with index \arg Index came from file \arg FID.
6157 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6158                                                              FileID FID) {
6159   if (FID.isInvalid())
6160     return false;
6161 
6162   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6163   ModuleFile &M = *PPInfo.first;
6164   unsigned LocalIndex = PPInfo.second;
6165   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6166 
6167   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6168   if (Loc.isInvalid())
6169     return false;
6170 
6171   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6172     return true;
6173   else
6174     return false;
6175 }
6176 
6177 namespace {
6178 
6179   /// Visitor used to search for information about a header file.
6180   class HeaderFileInfoVisitor {
6181     const FileEntry *FE;
6182     Optional<HeaderFileInfo> HFI;
6183 
6184   public:
6185     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6186 
6187     bool operator()(ModuleFile &M) {
6188       HeaderFileInfoLookupTable *Table
6189         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6190       if (!Table)
6191         return false;
6192 
6193       // Look in the on-disk hash table for an entry for this file name.
6194       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6195       if (Pos == Table->end())
6196         return false;
6197 
6198       HFI = *Pos;
6199       return true;
6200     }
6201 
6202     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6203   };
6204 
6205 } // namespace
6206 
6207 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6208   HeaderFileInfoVisitor Visitor(FE);
6209   ModuleMgr.visit(Visitor);
6210   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6211     return *HFI;
6212 
6213   return HeaderFileInfo();
6214 }
6215 
6216 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6217   using DiagState = DiagnosticsEngine::DiagState;
6218   SmallVector<DiagState *, 32> DiagStates;
6219 
6220   for (ModuleFile &F : ModuleMgr) {
6221     unsigned Idx = 0;
6222     auto &Record = F.PragmaDiagMappings;
6223     if (Record.empty())
6224       continue;
6225 
6226     DiagStates.clear();
6227 
6228     auto ReadDiagState =
6229         [&](const DiagState &BasedOn, SourceLocation Loc,
6230             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6231       unsigned BackrefID = Record[Idx++];
6232       if (BackrefID != 0)
6233         return DiagStates[BackrefID - 1];
6234 
6235       // A new DiagState was created here.
6236       Diag.DiagStates.push_back(BasedOn);
6237       DiagState *NewState = &Diag.DiagStates.back();
6238       DiagStates.push_back(NewState);
6239       unsigned Size = Record[Idx++];
6240       assert(Idx + Size * 2 <= Record.size() &&
6241              "Invalid data, not enough diag/map pairs");
6242       while (Size--) {
6243         unsigned DiagID = Record[Idx++];
6244         DiagnosticMapping NewMapping =
6245             DiagnosticMapping::deserialize(Record[Idx++]);
6246         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6247           continue;
6248 
6249         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6250 
6251         // If this mapping was specified as a warning but the severity was
6252         // upgraded due to diagnostic settings, simulate the current diagnostic
6253         // settings (and use a warning).
6254         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6255           NewMapping.setSeverity(diag::Severity::Warning);
6256           NewMapping.setUpgradedFromWarning(false);
6257         }
6258 
6259         Mapping = NewMapping;
6260       }
6261       return NewState;
6262     };
6263 
6264     // Read the first state.
6265     DiagState *FirstState;
6266     if (F.Kind == MK_ImplicitModule) {
6267       // Implicitly-built modules are reused with different diagnostic
6268       // settings.  Use the initial diagnostic state from Diag to simulate this
6269       // compilation's diagnostic settings.
6270       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6271       DiagStates.push_back(FirstState);
6272 
6273       // Skip the initial diagnostic state from the serialized module.
6274       assert(Record[1] == 0 &&
6275              "Invalid data, unexpected backref in initial state");
6276       Idx = 3 + Record[2] * 2;
6277       assert(Idx < Record.size() &&
6278              "Invalid data, not enough state change pairs in initial state");
6279     } else if (F.isModule()) {
6280       // For an explicit module, preserve the flags from the module build
6281       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6282       // -Wblah flags.
6283       unsigned Flags = Record[Idx++];
6284       DiagState Initial;
6285       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6286       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6287       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6288       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6289       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6290       Initial.ExtBehavior = (diag::Severity)Flags;
6291       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6292 
6293       assert(F.OriginalSourceFileID.isValid());
6294 
6295       // Set up the root buffer of the module to start with the initial
6296       // diagnostic state of the module itself, to cover files that contain no
6297       // explicit transitions (for which we did not serialize anything).
6298       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6299           .StateTransitions.push_back({FirstState, 0});
6300     } else {
6301       // For prefix ASTs, start with whatever the user configured on the
6302       // command line.
6303       Idx++; // Skip flags.
6304       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6305                                  SourceLocation(), false);
6306     }
6307 
6308     // Read the state transitions.
6309     unsigned NumLocations = Record[Idx++];
6310     while (NumLocations--) {
6311       assert(Idx < Record.size() &&
6312              "Invalid data, missing pragma diagnostic states");
6313       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6314       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6315       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6316       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6317       unsigned Transitions = Record[Idx++];
6318 
6319       // Note that we don't need to set up Parent/ParentOffset here, because
6320       // we won't be changing the diagnostic state within imported FileIDs
6321       // (other than perhaps appending to the main source file, which has no
6322       // parent).
6323       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6324       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6325       for (unsigned I = 0; I != Transitions; ++I) {
6326         unsigned Offset = Record[Idx++];
6327         auto *State =
6328             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6329         F.StateTransitions.push_back({State, Offset});
6330       }
6331     }
6332 
6333     // Read the final state.
6334     assert(Idx < Record.size() &&
6335            "Invalid data, missing final pragma diagnostic state");
6336     SourceLocation CurStateLoc =
6337         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6338     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6339 
6340     if (!F.isModule()) {
6341       Diag.DiagStatesByLoc.CurDiagState = CurState;
6342       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6343 
6344       // Preserve the property that the imaginary root file describes the
6345       // current state.
6346       FileID NullFile;
6347       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6348       if (T.empty())
6349         T.push_back({CurState, 0});
6350       else
6351         T[0].State = CurState;
6352     }
6353 
6354     // Don't try to read these mappings again.
6355     Record.clear();
6356   }
6357 }
6358 
6359 /// Get the correct cursor and offset for loading a type.
6360 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6361   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6362   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6363   ModuleFile *M = I->second;
6364   return RecordLocation(
6365       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6366              M->DeclsBlockStartOffset);
6367 }
6368 
6369 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6370   switch (code) {
6371 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6372   case TYPE_##CODE_ID: return Type::CLASS_ID;
6373 #include "clang/Serialization/TypeBitCodes.def"
6374   default: return llvm::None;
6375   }
6376 }
6377 
6378 /// Read and return the type with the given index..
6379 ///
6380 /// The index is the type ID, shifted and minus the number of predefs. This
6381 /// routine actually reads the record corresponding to the type at the given
6382 /// location. It is a helper routine for GetType, which deals with reading type
6383 /// IDs.
6384 QualType ASTReader::readTypeRecord(unsigned Index) {
6385   assert(ContextObj && "reading type with no AST context");
6386   ASTContext &Context = *ContextObj;
6387   RecordLocation Loc = TypeCursorForIndex(Index);
6388   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6389 
6390   // Keep track of where we are in the stream, then jump back there
6391   // after reading this type.
6392   SavedStreamPosition SavedPosition(DeclsCursor);
6393 
6394   ReadingKindTracker ReadingKind(Read_Type, *this);
6395 
6396   // Note that we are loading a type record.
6397   Deserializing AType(this);
6398 
6399   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6400     Error(std::move(Err));
6401     return QualType();
6402   }
6403   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6404   if (!RawCode) {
6405     Error(RawCode.takeError());
6406     return QualType();
6407   }
6408 
6409   ASTRecordReader Record(*this, *Loc.F);
6410   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6411   if (!Code) {
6412     Error(Code.takeError());
6413     return QualType();
6414   }
6415   if (Code.get() == TYPE_EXT_QUAL) {
6416     QualType baseType = Record.readQualType();
6417     Qualifiers quals = Record.readQualifiers();
6418     return Context.getQualifiedType(baseType, quals);
6419   }
6420 
6421   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6422   if (!maybeClass) {
6423     Error("Unexpected code for type");
6424     return QualType();
6425   }
6426 
6427   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6428   return TypeReader.read(*maybeClass);
6429 }
6430 
6431 namespace clang {
6432 
6433 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6434   ASTRecordReader &Reader;
6435 
6436   SourceLocation readSourceLocation() {
6437     return Reader.readSourceLocation();
6438   }
6439 
6440   TypeSourceInfo *GetTypeSourceInfo() {
6441     return Reader.readTypeSourceInfo();
6442   }
6443 
6444   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6445     return Reader.readNestedNameSpecifierLoc();
6446   }
6447 
6448   Attr *ReadAttr() {
6449     return Reader.readAttr();
6450   }
6451 
6452 public:
6453   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6454 
6455   // We want compile-time assurance that we've enumerated all of
6456   // these, so unfortunately we have to declare them first, then
6457   // define them out-of-line.
6458 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6459 #define TYPELOC(CLASS, PARENT) \
6460   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6461 #include "clang/AST/TypeLocNodes.def"
6462 
6463   void VisitFunctionTypeLoc(FunctionTypeLoc);
6464   void VisitArrayTypeLoc(ArrayTypeLoc);
6465 };
6466 
6467 } // namespace clang
6468 
6469 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6470   // nothing to do
6471 }
6472 
6473 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6474   TL.setBuiltinLoc(readSourceLocation());
6475   if (TL.needsExtraLocalData()) {
6476     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6477     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6478     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6479     TL.setModeAttr(Reader.readInt());
6480   }
6481 }
6482 
6483 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6484   TL.setNameLoc(readSourceLocation());
6485 }
6486 
6487 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6488   TL.setStarLoc(readSourceLocation());
6489 }
6490 
6491 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6492   // nothing to do
6493 }
6494 
6495 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6496   // nothing to do
6497 }
6498 
6499 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6500   TL.setExpansionLoc(readSourceLocation());
6501 }
6502 
6503 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6504   TL.setCaretLoc(readSourceLocation());
6505 }
6506 
6507 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6508   TL.setAmpLoc(readSourceLocation());
6509 }
6510 
6511 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6512   TL.setAmpAmpLoc(readSourceLocation());
6513 }
6514 
6515 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6516   TL.setStarLoc(readSourceLocation());
6517   TL.setClassTInfo(GetTypeSourceInfo());
6518 }
6519 
6520 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6521   TL.setLBracketLoc(readSourceLocation());
6522   TL.setRBracketLoc(readSourceLocation());
6523   if (Reader.readBool())
6524     TL.setSizeExpr(Reader.readExpr());
6525   else
6526     TL.setSizeExpr(nullptr);
6527 }
6528 
6529 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6530   VisitArrayTypeLoc(TL);
6531 }
6532 
6533 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6534   VisitArrayTypeLoc(TL);
6535 }
6536 
6537 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6538   VisitArrayTypeLoc(TL);
6539 }
6540 
6541 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6542                                             DependentSizedArrayTypeLoc TL) {
6543   VisitArrayTypeLoc(TL);
6544 }
6545 
6546 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6547     DependentAddressSpaceTypeLoc TL) {
6548 
6549     TL.setAttrNameLoc(readSourceLocation());
6550     TL.setAttrOperandParensRange(Reader.readSourceRange());
6551     TL.setAttrExprOperand(Reader.readExpr());
6552 }
6553 
6554 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6555                                         DependentSizedExtVectorTypeLoc TL) {
6556   TL.setNameLoc(readSourceLocation());
6557 }
6558 
6559 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6560   TL.setNameLoc(readSourceLocation());
6561 }
6562 
6563 void TypeLocReader::VisitDependentVectorTypeLoc(
6564     DependentVectorTypeLoc TL) {
6565   TL.setNameLoc(readSourceLocation());
6566 }
6567 
6568 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6569   TL.setNameLoc(readSourceLocation());
6570 }
6571 
6572 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6573   TL.setAttrNameLoc(readSourceLocation());
6574   TL.setAttrOperandParensRange(Reader.readSourceRange());
6575   TL.setAttrRowOperand(Reader.readExpr());
6576   TL.setAttrColumnOperand(Reader.readExpr());
6577 }
6578 
6579 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6580     DependentSizedMatrixTypeLoc TL) {
6581   TL.setAttrNameLoc(readSourceLocation());
6582   TL.setAttrOperandParensRange(Reader.readSourceRange());
6583   TL.setAttrRowOperand(Reader.readExpr());
6584   TL.setAttrColumnOperand(Reader.readExpr());
6585 }
6586 
6587 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6588   TL.setLocalRangeBegin(readSourceLocation());
6589   TL.setLParenLoc(readSourceLocation());
6590   TL.setRParenLoc(readSourceLocation());
6591   TL.setExceptionSpecRange(Reader.readSourceRange());
6592   TL.setLocalRangeEnd(readSourceLocation());
6593   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6594     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6595   }
6596 }
6597 
6598 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6599   VisitFunctionTypeLoc(TL);
6600 }
6601 
6602 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6603   VisitFunctionTypeLoc(TL);
6604 }
6605 
6606 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6607   TL.setNameLoc(readSourceLocation());
6608 }
6609 
6610 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6611   TL.setNameLoc(readSourceLocation());
6612 }
6613 
6614 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6615   TL.setTypeofLoc(readSourceLocation());
6616   TL.setLParenLoc(readSourceLocation());
6617   TL.setRParenLoc(readSourceLocation());
6618 }
6619 
6620 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6621   TL.setTypeofLoc(readSourceLocation());
6622   TL.setLParenLoc(readSourceLocation());
6623   TL.setRParenLoc(readSourceLocation());
6624   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6625 }
6626 
6627 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6628   TL.setNameLoc(readSourceLocation());
6629 }
6630 
6631 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6632   TL.setKWLoc(readSourceLocation());
6633   TL.setLParenLoc(readSourceLocation());
6634   TL.setRParenLoc(readSourceLocation());
6635   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6636 }
6637 
6638 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6639   TL.setNameLoc(readSourceLocation());
6640   if (Reader.readBool()) {
6641     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6642     TL.setTemplateKWLoc(readSourceLocation());
6643     TL.setConceptNameLoc(readSourceLocation());
6644     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6645     TL.setLAngleLoc(readSourceLocation());
6646     TL.setRAngleLoc(readSourceLocation());
6647     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6648       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6649                               TL.getTypePtr()->getArg(i).getKind()));
6650   }
6651 }
6652 
6653 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6654     DeducedTemplateSpecializationTypeLoc TL) {
6655   TL.setTemplateNameLoc(readSourceLocation());
6656 }
6657 
6658 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6659   TL.setNameLoc(readSourceLocation());
6660 }
6661 
6662 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6663   TL.setNameLoc(readSourceLocation());
6664 }
6665 
6666 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6667   TL.setAttr(ReadAttr());
6668 }
6669 
6670 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6671   TL.setNameLoc(readSourceLocation());
6672 }
6673 
6674 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6675                                             SubstTemplateTypeParmTypeLoc TL) {
6676   TL.setNameLoc(readSourceLocation());
6677 }
6678 
6679 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6680                                           SubstTemplateTypeParmPackTypeLoc TL) {
6681   TL.setNameLoc(readSourceLocation());
6682 }
6683 
6684 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6685                                            TemplateSpecializationTypeLoc TL) {
6686   TL.setTemplateKeywordLoc(readSourceLocation());
6687   TL.setTemplateNameLoc(readSourceLocation());
6688   TL.setLAngleLoc(readSourceLocation());
6689   TL.setRAngleLoc(readSourceLocation());
6690   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6691     TL.setArgLocInfo(
6692         i,
6693         Reader.readTemplateArgumentLocInfo(
6694           TL.getTypePtr()->getArg(i).getKind()));
6695 }
6696 
6697 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6698   TL.setLParenLoc(readSourceLocation());
6699   TL.setRParenLoc(readSourceLocation());
6700 }
6701 
6702 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6703   TL.setElaboratedKeywordLoc(readSourceLocation());
6704   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6705 }
6706 
6707 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6708   TL.setNameLoc(readSourceLocation());
6709 }
6710 
6711 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6712   TL.setElaboratedKeywordLoc(readSourceLocation());
6713   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6714   TL.setNameLoc(readSourceLocation());
6715 }
6716 
6717 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6718        DependentTemplateSpecializationTypeLoc TL) {
6719   TL.setElaboratedKeywordLoc(readSourceLocation());
6720   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6721   TL.setTemplateKeywordLoc(readSourceLocation());
6722   TL.setTemplateNameLoc(readSourceLocation());
6723   TL.setLAngleLoc(readSourceLocation());
6724   TL.setRAngleLoc(readSourceLocation());
6725   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6726     TL.setArgLocInfo(
6727         I,
6728         Reader.readTemplateArgumentLocInfo(
6729             TL.getTypePtr()->getArg(I).getKind()));
6730 }
6731 
6732 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6733   TL.setEllipsisLoc(readSourceLocation());
6734 }
6735 
6736 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6737   TL.setNameLoc(readSourceLocation());
6738 }
6739 
6740 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6741   if (TL.getNumProtocols()) {
6742     TL.setProtocolLAngleLoc(readSourceLocation());
6743     TL.setProtocolRAngleLoc(readSourceLocation());
6744   }
6745   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6746     TL.setProtocolLoc(i, readSourceLocation());
6747 }
6748 
6749 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6750   TL.setHasBaseTypeAsWritten(Reader.readBool());
6751   TL.setTypeArgsLAngleLoc(readSourceLocation());
6752   TL.setTypeArgsRAngleLoc(readSourceLocation());
6753   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6754     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6755   TL.setProtocolLAngleLoc(readSourceLocation());
6756   TL.setProtocolRAngleLoc(readSourceLocation());
6757   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6758     TL.setProtocolLoc(i, readSourceLocation());
6759 }
6760 
6761 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6762   TL.setStarLoc(readSourceLocation());
6763 }
6764 
6765 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6766   TL.setKWLoc(readSourceLocation());
6767   TL.setLParenLoc(readSourceLocation());
6768   TL.setRParenLoc(readSourceLocation());
6769 }
6770 
6771 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6772   TL.setKWLoc(readSourceLocation());
6773 }
6774 
6775 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6776   TL.setNameLoc(readSourceLocation());
6777 }
6778 void TypeLocReader::VisitDependentExtIntTypeLoc(
6779     clang::DependentExtIntTypeLoc TL) {
6780   TL.setNameLoc(readSourceLocation());
6781 }
6782 
6783 
6784 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6785   TypeLocReader TLR(*this);
6786   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6787     TLR.Visit(TL);
6788 }
6789 
6790 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6791   QualType InfoTy = readType();
6792   if (InfoTy.isNull())
6793     return nullptr;
6794 
6795   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6796   readTypeLoc(TInfo->getTypeLoc());
6797   return TInfo;
6798 }
6799 
6800 QualType ASTReader::GetType(TypeID ID) {
6801   assert(ContextObj && "reading type with no AST context");
6802   ASTContext &Context = *ContextObj;
6803 
6804   unsigned FastQuals = ID & Qualifiers::FastMask;
6805   unsigned Index = ID >> Qualifiers::FastWidth;
6806 
6807   if (Index < NUM_PREDEF_TYPE_IDS) {
6808     QualType T;
6809     switch ((PredefinedTypeIDs)Index) {
6810     case PREDEF_TYPE_NULL_ID:
6811       return QualType();
6812     case PREDEF_TYPE_VOID_ID:
6813       T = Context.VoidTy;
6814       break;
6815     case PREDEF_TYPE_BOOL_ID:
6816       T = Context.BoolTy;
6817       break;
6818     case PREDEF_TYPE_CHAR_U_ID:
6819     case PREDEF_TYPE_CHAR_S_ID:
6820       // FIXME: Check that the signedness of CharTy is correct!
6821       T = Context.CharTy;
6822       break;
6823     case PREDEF_TYPE_UCHAR_ID:
6824       T = Context.UnsignedCharTy;
6825       break;
6826     case PREDEF_TYPE_USHORT_ID:
6827       T = Context.UnsignedShortTy;
6828       break;
6829     case PREDEF_TYPE_UINT_ID:
6830       T = Context.UnsignedIntTy;
6831       break;
6832     case PREDEF_TYPE_ULONG_ID:
6833       T = Context.UnsignedLongTy;
6834       break;
6835     case PREDEF_TYPE_ULONGLONG_ID:
6836       T = Context.UnsignedLongLongTy;
6837       break;
6838     case PREDEF_TYPE_UINT128_ID:
6839       T = Context.UnsignedInt128Ty;
6840       break;
6841     case PREDEF_TYPE_SCHAR_ID:
6842       T = Context.SignedCharTy;
6843       break;
6844     case PREDEF_TYPE_WCHAR_ID:
6845       T = Context.WCharTy;
6846       break;
6847     case PREDEF_TYPE_SHORT_ID:
6848       T = Context.ShortTy;
6849       break;
6850     case PREDEF_TYPE_INT_ID:
6851       T = Context.IntTy;
6852       break;
6853     case PREDEF_TYPE_LONG_ID:
6854       T = Context.LongTy;
6855       break;
6856     case PREDEF_TYPE_LONGLONG_ID:
6857       T = Context.LongLongTy;
6858       break;
6859     case PREDEF_TYPE_INT128_ID:
6860       T = Context.Int128Ty;
6861       break;
6862     case PREDEF_TYPE_BFLOAT16_ID:
6863       T = Context.BFloat16Ty;
6864       break;
6865     case PREDEF_TYPE_HALF_ID:
6866       T = Context.HalfTy;
6867       break;
6868     case PREDEF_TYPE_FLOAT_ID:
6869       T = Context.FloatTy;
6870       break;
6871     case PREDEF_TYPE_DOUBLE_ID:
6872       T = Context.DoubleTy;
6873       break;
6874     case PREDEF_TYPE_LONGDOUBLE_ID:
6875       T = Context.LongDoubleTy;
6876       break;
6877     case PREDEF_TYPE_SHORT_ACCUM_ID:
6878       T = Context.ShortAccumTy;
6879       break;
6880     case PREDEF_TYPE_ACCUM_ID:
6881       T = Context.AccumTy;
6882       break;
6883     case PREDEF_TYPE_LONG_ACCUM_ID:
6884       T = Context.LongAccumTy;
6885       break;
6886     case PREDEF_TYPE_USHORT_ACCUM_ID:
6887       T = Context.UnsignedShortAccumTy;
6888       break;
6889     case PREDEF_TYPE_UACCUM_ID:
6890       T = Context.UnsignedAccumTy;
6891       break;
6892     case PREDEF_TYPE_ULONG_ACCUM_ID:
6893       T = Context.UnsignedLongAccumTy;
6894       break;
6895     case PREDEF_TYPE_SHORT_FRACT_ID:
6896       T = Context.ShortFractTy;
6897       break;
6898     case PREDEF_TYPE_FRACT_ID:
6899       T = Context.FractTy;
6900       break;
6901     case PREDEF_TYPE_LONG_FRACT_ID:
6902       T = Context.LongFractTy;
6903       break;
6904     case PREDEF_TYPE_USHORT_FRACT_ID:
6905       T = Context.UnsignedShortFractTy;
6906       break;
6907     case PREDEF_TYPE_UFRACT_ID:
6908       T = Context.UnsignedFractTy;
6909       break;
6910     case PREDEF_TYPE_ULONG_FRACT_ID:
6911       T = Context.UnsignedLongFractTy;
6912       break;
6913     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6914       T = Context.SatShortAccumTy;
6915       break;
6916     case PREDEF_TYPE_SAT_ACCUM_ID:
6917       T = Context.SatAccumTy;
6918       break;
6919     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6920       T = Context.SatLongAccumTy;
6921       break;
6922     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6923       T = Context.SatUnsignedShortAccumTy;
6924       break;
6925     case PREDEF_TYPE_SAT_UACCUM_ID:
6926       T = Context.SatUnsignedAccumTy;
6927       break;
6928     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6929       T = Context.SatUnsignedLongAccumTy;
6930       break;
6931     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6932       T = Context.SatShortFractTy;
6933       break;
6934     case PREDEF_TYPE_SAT_FRACT_ID:
6935       T = Context.SatFractTy;
6936       break;
6937     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6938       T = Context.SatLongFractTy;
6939       break;
6940     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6941       T = Context.SatUnsignedShortFractTy;
6942       break;
6943     case PREDEF_TYPE_SAT_UFRACT_ID:
6944       T = Context.SatUnsignedFractTy;
6945       break;
6946     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6947       T = Context.SatUnsignedLongFractTy;
6948       break;
6949     case PREDEF_TYPE_FLOAT16_ID:
6950       T = Context.Float16Ty;
6951       break;
6952     case PREDEF_TYPE_FLOAT128_ID:
6953       T = Context.Float128Ty;
6954       break;
6955     case PREDEF_TYPE_IBM128_ID:
6956       T = Context.Ibm128Ty;
6957       break;
6958     case PREDEF_TYPE_OVERLOAD_ID:
6959       T = Context.OverloadTy;
6960       break;
6961     case PREDEF_TYPE_BOUND_MEMBER:
6962       T = Context.BoundMemberTy;
6963       break;
6964     case PREDEF_TYPE_PSEUDO_OBJECT:
6965       T = Context.PseudoObjectTy;
6966       break;
6967     case PREDEF_TYPE_DEPENDENT_ID:
6968       T = Context.DependentTy;
6969       break;
6970     case PREDEF_TYPE_UNKNOWN_ANY:
6971       T = Context.UnknownAnyTy;
6972       break;
6973     case PREDEF_TYPE_NULLPTR_ID:
6974       T = Context.NullPtrTy;
6975       break;
6976     case PREDEF_TYPE_CHAR8_ID:
6977       T = Context.Char8Ty;
6978       break;
6979     case PREDEF_TYPE_CHAR16_ID:
6980       T = Context.Char16Ty;
6981       break;
6982     case PREDEF_TYPE_CHAR32_ID:
6983       T = Context.Char32Ty;
6984       break;
6985     case PREDEF_TYPE_OBJC_ID:
6986       T = Context.ObjCBuiltinIdTy;
6987       break;
6988     case PREDEF_TYPE_OBJC_CLASS:
6989       T = Context.ObjCBuiltinClassTy;
6990       break;
6991     case PREDEF_TYPE_OBJC_SEL:
6992       T = Context.ObjCBuiltinSelTy;
6993       break;
6994 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6995     case PREDEF_TYPE_##Id##_ID: \
6996       T = Context.SingletonId; \
6997       break;
6998 #include "clang/Basic/OpenCLImageTypes.def"
6999 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7000     case PREDEF_TYPE_##Id##_ID: \
7001       T = Context.Id##Ty; \
7002       break;
7003 #include "clang/Basic/OpenCLExtensionTypes.def"
7004     case PREDEF_TYPE_SAMPLER_ID:
7005       T = Context.OCLSamplerTy;
7006       break;
7007     case PREDEF_TYPE_EVENT_ID:
7008       T = Context.OCLEventTy;
7009       break;
7010     case PREDEF_TYPE_CLK_EVENT_ID:
7011       T = Context.OCLClkEventTy;
7012       break;
7013     case PREDEF_TYPE_QUEUE_ID:
7014       T = Context.OCLQueueTy;
7015       break;
7016     case PREDEF_TYPE_RESERVE_ID_ID:
7017       T = Context.OCLReserveIDTy;
7018       break;
7019     case PREDEF_TYPE_AUTO_DEDUCT:
7020       T = Context.getAutoDeductType();
7021       break;
7022     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7023       T = Context.getAutoRRefDeductType();
7024       break;
7025     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7026       T = Context.ARCUnbridgedCastTy;
7027       break;
7028     case PREDEF_TYPE_BUILTIN_FN:
7029       T = Context.BuiltinFnTy;
7030       break;
7031     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7032       T = Context.IncompleteMatrixIdxTy;
7033       break;
7034     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7035       T = Context.OMPArraySectionTy;
7036       break;
7037     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7038       T = Context.OMPArraySectionTy;
7039       break;
7040     case PREDEF_TYPE_OMP_ITERATOR:
7041       T = Context.OMPIteratorTy;
7042       break;
7043 #define SVE_TYPE(Name, Id, SingletonId) \
7044     case PREDEF_TYPE_##Id##_ID: \
7045       T = Context.SingletonId; \
7046       break;
7047 #include "clang/Basic/AArch64SVEACLETypes.def"
7048 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7049     case PREDEF_TYPE_##Id##_ID: \
7050       T = Context.Id##Ty; \
7051       break;
7052 #include "clang/Basic/PPCTypes.def"
7053 #define RVV_TYPE(Name, Id, SingletonId) \
7054     case PREDEF_TYPE_##Id##_ID: \
7055       T = Context.SingletonId; \
7056       break;
7057 #include "clang/Basic/RISCVVTypes.def"
7058     }
7059 
7060     assert(!T.isNull() && "Unknown predefined type");
7061     return T.withFastQualifiers(FastQuals);
7062   }
7063 
7064   Index -= NUM_PREDEF_TYPE_IDS;
7065   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7066   if (TypesLoaded[Index].isNull()) {
7067     TypesLoaded[Index] = readTypeRecord(Index);
7068     if (TypesLoaded[Index].isNull())
7069       return QualType();
7070 
7071     TypesLoaded[Index]->setFromAST();
7072     if (DeserializationListener)
7073       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7074                                         TypesLoaded[Index]);
7075   }
7076 
7077   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7078 }
7079 
7080 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7081   return GetType(getGlobalTypeID(F, LocalID));
7082 }
7083 
7084 serialization::TypeID
7085 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7086   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7087   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7088 
7089   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7090     return LocalID;
7091 
7092   if (!F.ModuleOffsetMap.empty())
7093     ReadModuleOffsetMap(F);
7094 
7095   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7096     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7097   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7098 
7099   unsigned GlobalIndex = LocalIndex + I->second;
7100   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7101 }
7102 
7103 TemplateArgumentLocInfo
7104 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7105   switch (Kind) {
7106   case TemplateArgument::Expression:
7107     return readExpr();
7108   case TemplateArgument::Type:
7109     return readTypeSourceInfo();
7110   case TemplateArgument::Template: {
7111     NestedNameSpecifierLoc QualifierLoc =
7112       readNestedNameSpecifierLoc();
7113     SourceLocation TemplateNameLoc = readSourceLocation();
7114     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7115                                    TemplateNameLoc, SourceLocation());
7116   }
7117   case TemplateArgument::TemplateExpansion: {
7118     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7119     SourceLocation TemplateNameLoc = readSourceLocation();
7120     SourceLocation EllipsisLoc = readSourceLocation();
7121     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7122                                    TemplateNameLoc, EllipsisLoc);
7123   }
7124   case TemplateArgument::Null:
7125   case TemplateArgument::Integral:
7126   case TemplateArgument::Declaration:
7127   case TemplateArgument::NullPtr:
7128   case TemplateArgument::Pack:
7129     // FIXME: Is this right?
7130     return TemplateArgumentLocInfo();
7131   }
7132   llvm_unreachable("unexpected template argument loc");
7133 }
7134 
7135 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7136   TemplateArgument Arg = readTemplateArgument();
7137 
7138   if (Arg.getKind() == TemplateArgument::Expression) {
7139     if (readBool()) // bool InfoHasSameExpr.
7140       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7141   }
7142   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7143 }
7144 
7145 const ASTTemplateArgumentListInfo *
7146 ASTRecordReader::readASTTemplateArgumentListInfo() {
7147   SourceLocation LAngleLoc = readSourceLocation();
7148   SourceLocation RAngleLoc = readSourceLocation();
7149   unsigned NumArgsAsWritten = readInt();
7150   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7151   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7152     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7153   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7154 }
7155 
7156 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7157   return GetDecl(ID);
7158 }
7159 
7160 void ASTReader::CompleteRedeclChain(const Decl *D) {
7161   if (NumCurrentElementsDeserializing) {
7162     // We arrange to not care about the complete redeclaration chain while we're
7163     // deserializing. Just remember that the AST has marked this one as complete
7164     // but that it's not actually complete yet, so we know we still need to
7165     // complete it later.
7166     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7167     return;
7168   }
7169 
7170   if (!D->getDeclContext()) {
7171     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7172     return;
7173   }
7174 
7175   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7176 
7177   // If this is a named declaration, complete it by looking it up
7178   // within its context.
7179   //
7180   // FIXME: Merging a function definition should merge
7181   // all mergeable entities within it.
7182   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7183       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7184     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7185       if (!getContext().getLangOpts().CPlusPlus &&
7186           isa<TranslationUnitDecl>(DC)) {
7187         // Outside of C++, we don't have a lookup table for the TU, so update
7188         // the identifier instead. (For C++ modules, we don't store decls
7189         // in the serialized identifier table, so we do the lookup in the TU.)
7190         auto *II = Name.getAsIdentifierInfo();
7191         assert(II && "non-identifier name in C?");
7192         if (II->isOutOfDate())
7193           updateOutOfDateIdentifier(*II);
7194       } else
7195         DC->lookup(Name);
7196     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7197       // Find all declarations of this kind from the relevant context.
7198       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7199         auto *DC = cast<DeclContext>(DCDecl);
7200         SmallVector<Decl*, 8> Decls;
7201         FindExternalLexicalDecls(
7202             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7203       }
7204     }
7205   }
7206 
7207   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7208     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7209   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7210     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7211   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7212     if (auto *Template = FD->getPrimaryTemplate())
7213       Template->LoadLazySpecializations();
7214   }
7215 }
7216 
7217 CXXCtorInitializer **
7218 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7219   RecordLocation Loc = getLocalBitOffset(Offset);
7220   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7221   SavedStreamPosition SavedPosition(Cursor);
7222   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7223     Error(std::move(Err));
7224     return nullptr;
7225   }
7226   ReadingKindTracker ReadingKind(Read_Decl, *this);
7227 
7228   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7229   if (!MaybeCode) {
7230     Error(MaybeCode.takeError());
7231     return nullptr;
7232   }
7233   unsigned Code = MaybeCode.get();
7234 
7235   ASTRecordReader Record(*this, *Loc.F);
7236   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7237   if (!MaybeRecCode) {
7238     Error(MaybeRecCode.takeError());
7239     return nullptr;
7240   }
7241   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7242     Error("malformed AST file: missing C++ ctor initializers");
7243     return nullptr;
7244   }
7245 
7246   return Record.readCXXCtorInitializers();
7247 }
7248 
7249 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7250   assert(ContextObj && "reading base specifiers with no AST context");
7251   ASTContext &Context = *ContextObj;
7252 
7253   RecordLocation Loc = getLocalBitOffset(Offset);
7254   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7255   SavedStreamPosition SavedPosition(Cursor);
7256   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7257     Error(std::move(Err));
7258     return nullptr;
7259   }
7260   ReadingKindTracker ReadingKind(Read_Decl, *this);
7261 
7262   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7263   if (!MaybeCode) {
7264     Error(MaybeCode.takeError());
7265     return nullptr;
7266   }
7267   unsigned Code = MaybeCode.get();
7268 
7269   ASTRecordReader Record(*this, *Loc.F);
7270   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7271   if (!MaybeRecCode) {
7272     Error(MaybeCode.takeError());
7273     return nullptr;
7274   }
7275   unsigned RecCode = MaybeRecCode.get();
7276 
7277   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7278     Error("malformed AST file: missing C++ base specifiers");
7279     return nullptr;
7280   }
7281 
7282   unsigned NumBases = Record.readInt();
7283   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7284   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7285   for (unsigned I = 0; I != NumBases; ++I)
7286     Bases[I] = Record.readCXXBaseSpecifier();
7287   return Bases;
7288 }
7289 
7290 serialization::DeclID
7291 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7292   if (LocalID < NUM_PREDEF_DECL_IDS)
7293     return LocalID;
7294 
7295   if (!F.ModuleOffsetMap.empty())
7296     ReadModuleOffsetMap(F);
7297 
7298   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7299     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7300   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7301 
7302   return LocalID + I->second;
7303 }
7304 
7305 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7306                                    ModuleFile &M) const {
7307   // Predefined decls aren't from any module.
7308   if (ID < NUM_PREDEF_DECL_IDS)
7309     return false;
7310 
7311   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7312          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7313 }
7314 
7315 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7316   if (!D->isFromASTFile())
7317     return nullptr;
7318   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7319   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7320   return I->second;
7321 }
7322 
7323 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7324   if (ID < NUM_PREDEF_DECL_IDS)
7325     return SourceLocation();
7326 
7327   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7328 
7329   if (Index > DeclsLoaded.size()) {
7330     Error("declaration ID out-of-range for AST file");
7331     return SourceLocation();
7332   }
7333 
7334   if (Decl *D = DeclsLoaded[Index])
7335     return D->getLocation();
7336 
7337   SourceLocation Loc;
7338   DeclCursorForID(ID, Loc);
7339   return Loc;
7340 }
7341 
7342 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7343   switch (ID) {
7344   case PREDEF_DECL_NULL_ID:
7345     return nullptr;
7346 
7347   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7348     return Context.getTranslationUnitDecl();
7349 
7350   case PREDEF_DECL_OBJC_ID_ID:
7351     return Context.getObjCIdDecl();
7352 
7353   case PREDEF_DECL_OBJC_SEL_ID:
7354     return Context.getObjCSelDecl();
7355 
7356   case PREDEF_DECL_OBJC_CLASS_ID:
7357     return Context.getObjCClassDecl();
7358 
7359   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7360     return Context.getObjCProtocolDecl();
7361 
7362   case PREDEF_DECL_INT_128_ID:
7363     return Context.getInt128Decl();
7364 
7365   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7366     return Context.getUInt128Decl();
7367 
7368   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7369     return Context.getObjCInstanceTypeDecl();
7370 
7371   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7372     return Context.getBuiltinVaListDecl();
7373 
7374   case PREDEF_DECL_VA_LIST_TAG:
7375     return Context.getVaListTagDecl();
7376 
7377   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7378     return Context.getBuiltinMSVaListDecl();
7379 
7380   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7381     return Context.getMSGuidTagDecl();
7382 
7383   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7384     return Context.getExternCContextDecl();
7385 
7386   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7387     return Context.getMakeIntegerSeqDecl();
7388 
7389   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7390     return Context.getCFConstantStringDecl();
7391 
7392   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7393     return Context.getCFConstantStringTagDecl();
7394 
7395   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7396     return Context.getTypePackElementDecl();
7397   }
7398   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7399 }
7400 
7401 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7402   assert(ContextObj && "reading decl with no AST context");
7403   if (ID < NUM_PREDEF_DECL_IDS) {
7404     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7405     if (D) {
7406       // Track that we have merged the declaration with ID \p ID into the
7407       // pre-existing predefined declaration \p D.
7408       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7409       if (Merged.empty())
7410         Merged.push_back(ID);
7411     }
7412     return D;
7413   }
7414 
7415   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7416 
7417   if (Index >= DeclsLoaded.size()) {
7418     assert(0 && "declaration ID out-of-range for AST file");
7419     Error("declaration ID out-of-range for AST file");
7420     return nullptr;
7421   }
7422 
7423   return DeclsLoaded[Index];
7424 }
7425 
7426 Decl *ASTReader::GetDecl(DeclID ID) {
7427   if (ID < NUM_PREDEF_DECL_IDS)
7428     return GetExistingDecl(ID);
7429 
7430   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7431 
7432   if (Index >= DeclsLoaded.size()) {
7433     assert(0 && "declaration ID out-of-range for AST file");
7434     Error("declaration ID out-of-range for AST file");
7435     return nullptr;
7436   }
7437 
7438   if (!DeclsLoaded[Index]) {
7439     ReadDeclRecord(ID);
7440     if (DeserializationListener)
7441       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7442   }
7443 
7444   return DeclsLoaded[Index];
7445 }
7446 
7447 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7448                                                   DeclID GlobalID) {
7449   if (GlobalID < NUM_PREDEF_DECL_IDS)
7450     return GlobalID;
7451 
7452   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7453   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7454   ModuleFile *Owner = I->second;
7455 
7456   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7457     = M.GlobalToLocalDeclIDs.find(Owner);
7458   if (Pos == M.GlobalToLocalDeclIDs.end())
7459     return 0;
7460 
7461   return GlobalID - Owner->BaseDeclID + Pos->second;
7462 }
7463 
7464 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7465                                             const RecordData &Record,
7466                                             unsigned &Idx) {
7467   if (Idx >= Record.size()) {
7468     Error("Corrupted AST file");
7469     return 0;
7470   }
7471 
7472   return getGlobalDeclID(F, Record[Idx++]);
7473 }
7474 
7475 /// Resolve the offset of a statement into a statement.
7476 ///
7477 /// This operation will read a new statement from the external
7478 /// source each time it is called, and is meant to be used via a
7479 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7480 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7481   // Switch case IDs are per Decl.
7482   ClearSwitchCaseIDs();
7483 
7484   // Offset here is a global offset across the entire chain.
7485   RecordLocation Loc = getLocalBitOffset(Offset);
7486   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7487     Error(std::move(Err));
7488     return nullptr;
7489   }
7490   assert(NumCurrentElementsDeserializing == 0 &&
7491          "should not be called while already deserializing");
7492   Deserializing D(this);
7493   return ReadStmtFromStream(*Loc.F);
7494 }
7495 
7496 void ASTReader::FindExternalLexicalDecls(
7497     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7498     SmallVectorImpl<Decl *> &Decls) {
7499   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7500 
7501   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7502     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7503     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7504       auto K = (Decl::Kind)+LexicalDecls[I];
7505       if (!IsKindWeWant(K))
7506         continue;
7507 
7508       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7509 
7510       // Don't add predefined declarations to the lexical context more
7511       // than once.
7512       if (ID < NUM_PREDEF_DECL_IDS) {
7513         if (PredefsVisited[ID])
7514           continue;
7515 
7516         PredefsVisited[ID] = true;
7517       }
7518 
7519       if (Decl *D = GetLocalDecl(*M, ID)) {
7520         assert(D->getKind() == K && "wrong kind for lexical decl");
7521         if (!DC->isDeclInLexicalTraversal(D))
7522           Decls.push_back(D);
7523       }
7524     }
7525   };
7526 
7527   if (isa<TranslationUnitDecl>(DC)) {
7528     for (auto Lexical : TULexicalDecls)
7529       Visit(Lexical.first, Lexical.second);
7530   } else {
7531     auto I = LexicalDecls.find(DC);
7532     if (I != LexicalDecls.end())
7533       Visit(I->second.first, I->second.second);
7534   }
7535 
7536   ++NumLexicalDeclContextsRead;
7537 }
7538 
7539 namespace {
7540 
7541 class DeclIDComp {
7542   ASTReader &Reader;
7543   ModuleFile &Mod;
7544 
7545 public:
7546   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7547 
7548   bool operator()(LocalDeclID L, LocalDeclID R) const {
7549     SourceLocation LHS = getLocation(L);
7550     SourceLocation RHS = getLocation(R);
7551     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7552   }
7553 
7554   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7555     SourceLocation RHS = getLocation(R);
7556     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7557   }
7558 
7559   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7560     SourceLocation LHS = getLocation(L);
7561     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7562   }
7563 
7564   SourceLocation getLocation(LocalDeclID ID) const {
7565     return Reader.getSourceManager().getFileLoc(
7566             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7567   }
7568 };
7569 
7570 } // namespace
7571 
7572 void ASTReader::FindFileRegionDecls(FileID File,
7573                                     unsigned Offset, unsigned Length,
7574                                     SmallVectorImpl<Decl *> &Decls) {
7575   SourceManager &SM = getSourceManager();
7576 
7577   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7578   if (I == FileDeclIDs.end())
7579     return;
7580 
7581   FileDeclsInfo &DInfo = I->second;
7582   if (DInfo.Decls.empty())
7583     return;
7584 
7585   SourceLocation
7586     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7587   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7588 
7589   DeclIDComp DIDComp(*this, *DInfo.Mod);
7590   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7591       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7592   if (BeginIt != DInfo.Decls.begin())
7593     --BeginIt;
7594 
7595   // If we are pointing at a top-level decl inside an objc container, we need
7596   // to backtrack until we find it otherwise we will fail to report that the
7597   // region overlaps with an objc container.
7598   while (BeginIt != DInfo.Decls.begin() &&
7599          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7600              ->isTopLevelDeclInObjCContainer())
7601     --BeginIt;
7602 
7603   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7604       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7605   if (EndIt != DInfo.Decls.end())
7606     ++EndIt;
7607 
7608   for (ArrayRef<serialization::LocalDeclID>::iterator
7609          DIt = BeginIt; DIt != EndIt; ++DIt)
7610     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7611 }
7612 
7613 bool
7614 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7615                                           DeclarationName Name) {
7616   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7617          "DeclContext has no visible decls in storage");
7618   if (!Name)
7619     return false;
7620 
7621   auto It = Lookups.find(DC);
7622   if (It == Lookups.end())
7623     return false;
7624 
7625   Deserializing LookupResults(this);
7626 
7627   // Load the list of declarations.
7628   SmallVector<NamedDecl *, 64> Decls;
7629   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7630   for (DeclID ID : It->second.Table.find(Name)) {
7631     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7632     if (ND->getDeclName() == Name && Found.insert(ND).second)
7633       Decls.push_back(ND);
7634   }
7635 
7636   ++NumVisibleDeclContextsRead;
7637   SetExternalVisibleDeclsForName(DC, Name, Decls);
7638   return !Decls.empty();
7639 }
7640 
7641 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7642   if (!DC->hasExternalVisibleStorage())
7643     return;
7644 
7645   auto It = Lookups.find(DC);
7646   assert(It != Lookups.end() &&
7647          "have external visible storage but no lookup tables");
7648 
7649   DeclsMap Decls;
7650 
7651   for (DeclID ID : It->second.Table.findAll()) {
7652     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7653     Decls[ND->getDeclName()].push_back(ND);
7654   }
7655 
7656   ++NumVisibleDeclContextsRead;
7657 
7658   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7659     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7660   }
7661   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7662 }
7663 
7664 const serialization::reader::DeclContextLookupTable *
7665 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7666   auto I = Lookups.find(Primary);
7667   return I == Lookups.end() ? nullptr : &I->second;
7668 }
7669 
7670 /// Under non-PCH compilation the consumer receives the objc methods
7671 /// before receiving the implementation, and codegen depends on this.
7672 /// We simulate this by deserializing and passing to consumer the methods of the
7673 /// implementation before passing the deserialized implementation decl.
7674 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7675                                        ASTConsumer *Consumer) {
7676   assert(ImplD && Consumer);
7677 
7678   for (auto *I : ImplD->methods())
7679     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7680 
7681   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7682 }
7683 
7684 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7685   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7686     PassObjCImplDeclToConsumer(ImplD, Consumer);
7687   else
7688     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7689 }
7690 
7691 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7692   this->Consumer = Consumer;
7693 
7694   if (Consumer)
7695     PassInterestingDeclsToConsumer();
7696 
7697   if (DeserializationListener)
7698     DeserializationListener->ReaderInitialized(this);
7699 }
7700 
7701 void ASTReader::PrintStats() {
7702   std::fprintf(stderr, "*** AST File Statistics:\n");
7703 
7704   unsigned NumTypesLoaded
7705     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7706                                       QualType());
7707   unsigned NumDeclsLoaded
7708     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7709                                       (Decl *)nullptr);
7710   unsigned NumIdentifiersLoaded
7711     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7712                                             IdentifiersLoaded.end(),
7713                                             (IdentifierInfo *)nullptr);
7714   unsigned NumMacrosLoaded
7715     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7716                                        MacrosLoaded.end(),
7717                                        (MacroInfo *)nullptr);
7718   unsigned NumSelectorsLoaded
7719     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7720                                           SelectorsLoaded.end(),
7721                                           Selector());
7722 
7723   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7724     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7725                  NumSLocEntriesRead, TotalNumSLocEntries,
7726                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7727   if (!TypesLoaded.empty())
7728     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7729                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7730                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7731   if (!DeclsLoaded.empty())
7732     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7733                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7734                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7735   if (!IdentifiersLoaded.empty())
7736     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7737                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7738                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7739   if (!MacrosLoaded.empty())
7740     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7741                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7742                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7743   if (!SelectorsLoaded.empty())
7744     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7745                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7746                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7747   if (TotalNumStatements)
7748     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7749                  NumStatementsRead, TotalNumStatements,
7750                  ((float)NumStatementsRead/TotalNumStatements * 100));
7751   if (TotalNumMacros)
7752     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7753                  NumMacrosRead, TotalNumMacros,
7754                  ((float)NumMacrosRead/TotalNumMacros * 100));
7755   if (TotalLexicalDeclContexts)
7756     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7757                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7758                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7759                   * 100));
7760   if (TotalVisibleDeclContexts)
7761     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7762                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7763                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7764                   * 100));
7765   if (TotalNumMethodPoolEntries)
7766     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7767                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7768                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7769                   * 100));
7770   if (NumMethodPoolLookups)
7771     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7772                  NumMethodPoolHits, NumMethodPoolLookups,
7773                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7774   if (NumMethodPoolTableLookups)
7775     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7776                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7777                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7778                   * 100.0));
7779   if (NumIdentifierLookupHits)
7780     std::fprintf(stderr,
7781                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7782                  NumIdentifierLookupHits, NumIdentifierLookups,
7783                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7784 
7785   if (GlobalIndex) {
7786     std::fprintf(stderr, "\n");
7787     GlobalIndex->printStats();
7788   }
7789 
7790   std::fprintf(stderr, "\n");
7791   dump();
7792   std::fprintf(stderr, "\n");
7793 }
7794 
7795 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7796 LLVM_DUMP_METHOD static void
7797 dumpModuleIDMap(StringRef Name,
7798                 const ContinuousRangeMap<Key, ModuleFile *,
7799                                          InitialCapacity> &Map) {
7800   if (Map.begin() == Map.end())
7801     return;
7802 
7803   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7804 
7805   llvm::errs() << Name << ":\n";
7806   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7807        I != IEnd; ++I) {
7808     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7809       << "\n";
7810   }
7811 }
7812 
7813 LLVM_DUMP_METHOD void ASTReader::dump() {
7814   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7815   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7816   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7817   dumpModuleIDMap("Global type map", GlobalTypeMap);
7818   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7819   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7820   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7821   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7822   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7823   dumpModuleIDMap("Global preprocessed entity map",
7824                   GlobalPreprocessedEntityMap);
7825 
7826   llvm::errs() << "\n*** PCH/Modules Loaded:";
7827   for (ModuleFile &M : ModuleMgr)
7828     M.dump();
7829 }
7830 
7831 /// Return the amount of memory used by memory buffers, breaking down
7832 /// by heap-backed versus mmap'ed memory.
7833 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7834   for (ModuleFile &I : ModuleMgr) {
7835     if (llvm::MemoryBuffer *buf = I.Buffer) {
7836       size_t bytes = buf->getBufferSize();
7837       switch (buf->getBufferKind()) {
7838         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7839           sizes.malloc_bytes += bytes;
7840           break;
7841         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7842           sizes.mmap_bytes += bytes;
7843           break;
7844       }
7845     }
7846   }
7847 }
7848 
7849 void ASTReader::InitializeSema(Sema &S) {
7850   SemaObj = &S;
7851   S.addExternalSource(this);
7852 
7853   // Makes sure any declarations that were deserialized "too early"
7854   // still get added to the identifier's declaration chains.
7855   for (uint64_t ID : PreloadedDeclIDs) {
7856     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7857     pushExternalDeclIntoScope(D, D->getDeclName());
7858   }
7859   PreloadedDeclIDs.clear();
7860 
7861   // FIXME: What happens if these are changed by a module import?
7862   if (!FPPragmaOptions.empty()) {
7863     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7864     FPOptionsOverride NewOverrides =
7865         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7866     SemaObj->CurFPFeatures =
7867         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7868   }
7869 
7870   SemaObj->OpenCLFeatures = OpenCLExtensions;
7871 
7872   UpdateSema();
7873 }
7874 
7875 void ASTReader::UpdateSema() {
7876   assert(SemaObj && "no Sema to update");
7877 
7878   // Load the offsets of the declarations that Sema references.
7879   // They will be lazily deserialized when needed.
7880   if (!SemaDeclRefs.empty()) {
7881     assert(SemaDeclRefs.size() % 3 == 0);
7882     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7883       if (!SemaObj->StdNamespace)
7884         SemaObj->StdNamespace = SemaDeclRefs[I];
7885       if (!SemaObj->StdBadAlloc)
7886         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7887       if (!SemaObj->StdAlignValT)
7888         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7889     }
7890     SemaDeclRefs.clear();
7891   }
7892 
7893   // Update the state of pragmas. Use the same API as if we had encountered the
7894   // pragma in the source.
7895   if(OptimizeOffPragmaLocation.isValid())
7896     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7897   if (PragmaMSStructState != -1)
7898     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7899   if (PointersToMembersPragmaLocation.isValid()) {
7900     SemaObj->ActOnPragmaMSPointersToMembers(
7901         (LangOptions::PragmaMSPointersToMembersKind)
7902             PragmaMSPointersToMembersState,
7903         PointersToMembersPragmaLocation);
7904   }
7905   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7906 
7907   if (PragmaAlignPackCurrentValue) {
7908     // The bottom of the stack might have a default value. It must be adjusted
7909     // to the current value to ensure that the packing state is preserved after
7910     // popping entries that were included/imported from a PCH/module.
7911     bool DropFirst = false;
7912     if (!PragmaAlignPackStack.empty() &&
7913         PragmaAlignPackStack.front().Location.isInvalid()) {
7914       assert(PragmaAlignPackStack.front().Value ==
7915                  SemaObj->AlignPackStack.DefaultValue &&
7916              "Expected a default alignment value");
7917       SemaObj->AlignPackStack.Stack.emplace_back(
7918           PragmaAlignPackStack.front().SlotLabel,
7919           SemaObj->AlignPackStack.CurrentValue,
7920           SemaObj->AlignPackStack.CurrentPragmaLocation,
7921           PragmaAlignPackStack.front().PushLocation);
7922       DropFirst = true;
7923     }
7924     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7925                                  .drop_front(DropFirst ? 1 : 0)) {
7926       SemaObj->AlignPackStack.Stack.emplace_back(
7927           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7928     }
7929     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7930       assert(*PragmaAlignPackCurrentValue ==
7931                  SemaObj->AlignPackStack.DefaultValue &&
7932              "Expected a default align and pack value");
7933       // Keep the current values.
7934     } else {
7935       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7936       SemaObj->AlignPackStack.CurrentPragmaLocation =
7937           PragmaAlignPackCurrentLocation;
7938     }
7939   }
7940   if (FpPragmaCurrentValue) {
7941     // The bottom of the stack might have a default value. It must be adjusted
7942     // to the current value to ensure that fp-pragma state is preserved after
7943     // popping entries that were included/imported from a PCH/module.
7944     bool DropFirst = false;
7945     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7946       assert(FpPragmaStack.front().Value ==
7947                  SemaObj->FpPragmaStack.DefaultValue &&
7948              "Expected a default pragma float_control value");
7949       SemaObj->FpPragmaStack.Stack.emplace_back(
7950           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7951           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7952           FpPragmaStack.front().PushLocation);
7953       DropFirst = true;
7954     }
7955     for (const auto &Entry :
7956          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7957       SemaObj->FpPragmaStack.Stack.emplace_back(
7958           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7959     if (FpPragmaCurrentLocation.isInvalid()) {
7960       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7961              "Expected a default pragma float_control value");
7962       // Keep the current values.
7963     } else {
7964       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7965       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7966     }
7967   }
7968 
7969   // For non-modular AST files, restore visiblity of modules.
7970   for (auto &Import : ImportedModules) {
7971     if (Import.ImportLoc.isInvalid())
7972       continue;
7973     if (Module *Imported = getSubmodule(Import.ID)) {
7974       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7975     }
7976   }
7977 }
7978 
7979 IdentifierInfo *ASTReader::get(StringRef Name) {
7980   // Note that we are loading an identifier.
7981   Deserializing AnIdentifier(this);
7982 
7983   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7984                                   NumIdentifierLookups,
7985                                   NumIdentifierLookupHits);
7986 
7987   // We don't need to do identifier table lookups in C++ modules (we preload
7988   // all interesting declarations, and don't need to use the scope for name
7989   // lookups). Perform the lookup in PCH files, though, since we don't build
7990   // a complete initial identifier table if we're carrying on from a PCH.
7991   if (PP.getLangOpts().CPlusPlus) {
7992     for (auto F : ModuleMgr.pch_modules())
7993       if (Visitor(*F))
7994         break;
7995   } else {
7996     // If there is a global index, look there first to determine which modules
7997     // provably do not have any results for this identifier.
7998     GlobalModuleIndex::HitSet Hits;
7999     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8000     if (!loadGlobalIndex()) {
8001       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8002         HitsPtr = &Hits;
8003       }
8004     }
8005 
8006     ModuleMgr.visit(Visitor, HitsPtr);
8007   }
8008 
8009   IdentifierInfo *II = Visitor.getIdentifierInfo();
8010   markIdentifierUpToDate(II);
8011   return II;
8012 }
8013 
8014 namespace clang {
8015 
8016   /// An identifier-lookup iterator that enumerates all of the
8017   /// identifiers stored within a set of AST files.
8018   class ASTIdentifierIterator : public IdentifierIterator {
8019     /// The AST reader whose identifiers are being enumerated.
8020     const ASTReader &Reader;
8021 
8022     /// The current index into the chain of AST files stored in
8023     /// the AST reader.
8024     unsigned Index;
8025 
8026     /// The current position within the identifier lookup table
8027     /// of the current AST file.
8028     ASTIdentifierLookupTable::key_iterator Current;
8029 
8030     /// The end position within the identifier lookup table of
8031     /// the current AST file.
8032     ASTIdentifierLookupTable::key_iterator End;
8033 
8034     /// Whether to skip any modules in the ASTReader.
8035     bool SkipModules;
8036 
8037   public:
8038     explicit ASTIdentifierIterator(const ASTReader &Reader,
8039                                    bool SkipModules = false);
8040 
8041     StringRef Next() override;
8042   };
8043 
8044 } // namespace clang
8045 
8046 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8047                                              bool SkipModules)
8048     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8049 }
8050 
8051 StringRef ASTIdentifierIterator::Next() {
8052   while (Current == End) {
8053     // If we have exhausted all of our AST files, we're done.
8054     if (Index == 0)
8055       return StringRef();
8056 
8057     --Index;
8058     ModuleFile &F = Reader.ModuleMgr[Index];
8059     if (SkipModules && F.isModule())
8060       continue;
8061 
8062     ASTIdentifierLookupTable *IdTable =
8063         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8064     Current = IdTable->key_begin();
8065     End = IdTable->key_end();
8066   }
8067 
8068   // We have any identifiers remaining in the current AST file; return
8069   // the next one.
8070   StringRef Result = *Current;
8071   ++Current;
8072   return Result;
8073 }
8074 
8075 namespace {
8076 
8077 /// A utility for appending two IdentifierIterators.
8078 class ChainedIdentifierIterator : public IdentifierIterator {
8079   std::unique_ptr<IdentifierIterator> Current;
8080   std::unique_ptr<IdentifierIterator> Queued;
8081 
8082 public:
8083   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8084                             std::unique_ptr<IdentifierIterator> Second)
8085       : Current(std::move(First)), Queued(std::move(Second)) {}
8086 
8087   StringRef Next() override {
8088     if (!Current)
8089       return StringRef();
8090 
8091     StringRef result = Current->Next();
8092     if (!result.empty())
8093       return result;
8094 
8095     // Try the queued iterator, which may itself be empty.
8096     Current.reset();
8097     std::swap(Current, Queued);
8098     return Next();
8099   }
8100 };
8101 
8102 } // namespace
8103 
8104 IdentifierIterator *ASTReader::getIdentifiers() {
8105   if (!loadGlobalIndex()) {
8106     std::unique_ptr<IdentifierIterator> ReaderIter(
8107         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8108     std::unique_ptr<IdentifierIterator> ModulesIter(
8109         GlobalIndex->createIdentifierIterator());
8110     return new ChainedIdentifierIterator(std::move(ReaderIter),
8111                                          std::move(ModulesIter));
8112   }
8113 
8114   return new ASTIdentifierIterator(*this);
8115 }
8116 
8117 namespace clang {
8118 namespace serialization {
8119 
8120   class ReadMethodPoolVisitor {
8121     ASTReader &Reader;
8122     Selector Sel;
8123     unsigned PriorGeneration;
8124     unsigned InstanceBits = 0;
8125     unsigned FactoryBits = 0;
8126     bool InstanceHasMoreThanOneDecl = false;
8127     bool FactoryHasMoreThanOneDecl = false;
8128     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8129     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8130 
8131   public:
8132     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8133                           unsigned PriorGeneration)
8134         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8135 
8136     bool operator()(ModuleFile &M) {
8137       if (!M.SelectorLookupTable)
8138         return false;
8139 
8140       // If we've already searched this module file, skip it now.
8141       if (M.Generation <= PriorGeneration)
8142         return true;
8143 
8144       ++Reader.NumMethodPoolTableLookups;
8145       ASTSelectorLookupTable *PoolTable
8146         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8147       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8148       if (Pos == PoolTable->end())
8149         return false;
8150 
8151       ++Reader.NumMethodPoolTableHits;
8152       ++Reader.NumSelectorsRead;
8153       // FIXME: Not quite happy with the statistics here. We probably should
8154       // disable this tracking when called via LoadSelector.
8155       // Also, should entries without methods count as misses?
8156       ++Reader.NumMethodPoolEntriesRead;
8157       ASTSelectorLookupTrait::data_type Data = *Pos;
8158       if (Reader.DeserializationListener)
8159         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8160 
8161       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8162       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8163       InstanceBits = Data.InstanceBits;
8164       FactoryBits = Data.FactoryBits;
8165       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8166       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8167       return true;
8168     }
8169 
8170     /// Retrieve the instance methods found by this visitor.
8171     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8172       return InstanceMethods;
8173     }
8174 
8175     /// Retrieve the instance methods found by this visitor.
8176     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8177       return FactoryMethods;
8178     }
8179 
8180     unsigned getInstanceBits() const { return InstanceBits; }
8181     unsigned getFactoryBits() const { return FactoryBits; }
8182 
8183     bool instanceHasMoreThanOneDecl() const {
8184       return InstanceHasMoreThanOneDecl;
8185     }
8186 
8187     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8188   };
8189 
8190 } // namespace serialization
8191 } // namespace clang
8192 
8193 /// Add the given set of methods to the method list.
8194 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8195                              ObjCMethodList &List) {
8196   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8197     S.addMethodToGlobalList(&List, Methods[I]);
8198   }
8199 }
8200 
8201 void ASTReader::ReadMethodPool(Selector Sel) {
8202   // Get the selector generation and update it to the current generation.
8203   unsigned &Generation = SelectorGeneration[Sel];
8204   unsigned PriorGeneration = Generation;
8205   Generation = getGeneration();
8206   SelectorOutOfDate[Sel] = false;
8207 
8208   // Search for methods defined with this selector.
8209   ++NumMethodPoolLookups;
8210   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8211   ModuleMgr.visit(Visitor);
8212 
8213   if (Visitor.getInstanceMethods().empty() &&
8214       Visitor.getFactoryMethods().empty())
8215     return;
8216 
8217   ++NumMethodPoolHits;
8218 
8219   if (!getSema())
8220     return;
8221 
8222   Sema &S = *getSema();
8223   Sema::GlobalMethodPool::iterator Pos =
8224       S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethodPool::Lists()))
8225           .first;
8226 
8227   Pos->second.first.setBits(Visitor.getInstanceBits());
8228   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8229   Pos->second.second.setBits(Visitor.getFactoryBits());
8230   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8231 
8232   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8233   // when building a module we keep every method individually and may need to
8234   // update hasMoreThanOneDecl as we add the methods.
8235   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8236   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8237 }
8238 
8239 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8240   if (SelectorOutOfDate[Sel])
8241     ReadMethodPool(Sel);
8242 }
8243 
8244 void ASTReader::ReadKnownNamespaces(
8245                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8246   Namespaces.clear();
8247 
8248   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8249     if (NamespaceDecl *Namespace
8250                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8251       Namespaces.push_back(Namespace);
8252   }
8253 }
8254 
8255 void ASTReader::ReadUndefinedButUsed(
8256     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8257   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8258     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8259     SourceLocation Loc =
8260         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8261     Undefined.insert(std::make_pair(D, Loc));
8262   }
8263 }
8264 
8265 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8266     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8267                                                      Exprs) {
8268   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8269     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8270     uint64_t Count = DelayedDeleteExprs[Idx++];
8271     for (uint64_t C = 0; C < Count; ++C) {
8272       SourceLocation DeleteLoc =
8273           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8274       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8275       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8276     }
8277   }
8278 }
8279 
8280 void ASTReader::ReadTentativeDefinitions(
8281                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8282   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8283     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8284     if (Var)
8285       TentativeDefs.push_back(Var);
8286   }
8287   TentativeDefinitions.clear();
8288 }
8289 
8290 void ASTReader::ReadUnusedFileScopedDecls(
8291                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8292   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8293     DeclaratorDecl *D
8294       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8295     if (D)
8296       Decls.push_back(D);
8297   }
8298   UnusedFileScopedDecls.clear();
8299 }
8300 
8301 void ASTReader::ReadDelegatingConstructors(
8302                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8303   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8304     CXXConstructorDecl *D
8305       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8306     if (D)
8307       Decls.push_back(D);
8308   }
8309   DelegatingCtorDecls.clear();
8310 }
8311 
8312 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8313   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8314     TypedefNameDecl *D
8315       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8316     if (D)
8317       Decls.push_back(D);
8318   }
8319   ExtVectorDecls.clear();
8320 }
8321 
8322 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8323     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8324   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8325        ++I) {
8326     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8327         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8328     if (D)
8329       Decls.insert(D);
8330   }
8331   UnusedLocalTypedefNameCandidates.clear();
8332 }
8333 
8334 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8335     llvm::SmallSetVector<Decl *, 4> &Decls) {
8336   for (auto I : DeclsToCheckForDeferredDiags) {
8337     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8338     if (D)
8339       Decls.insert(D);
8340   }
8341   DeclsToCheckForDeferredDiags.clear();
8342 }
8343 
8344 void ASTReader::ReadReferencedSelectors(
8345        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8346   if (ReferencedSelectorsData.empty())
8347     return;
8348 
8349   // If there are @selector references added them to its pool. This is for
8350   // implementation of -Wselector.
8351   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8352   unsigned I = 0;
8353   while (I < DataSize) {
8354     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8355     SourceLocation SelLoc
8356       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8357     Sels.push_back(std::make_pair(Sel, SelLoc));
8358   }
8359   ReferencedSelectorsData.clear();
8360 }
8361 
8362 void ASTReader::ReadWeakUndeclaredIdentifiers(
8363        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8364   if (WeakUndeclaredIdentifiers.empty())
8365     return;
8366 
8367   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8368     IdentifierInfo *WeakId
8369       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8370     IdentifierInfo *AliasId
8371       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8372     SourceLocation Loc
8373       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8374     bool Used = WeakUndeclaredIdentifiers[I++];
8375     WeakInfo WI(AliasId, Loc);
8376     WI.setUsed(Used);
8377     WeakIDs.push_back(std::make_pair(WeakId, WI));
8378   }
8379   WeakUndeclaredIdentifiers.clear();
8380 }
8381 
8382 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8383   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8384     ExternalVTableUse VT;
8385     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8386     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8387     VT.DefinitionRequired = VTableUses[Idx++];
8388     VTables.push_back(VT);
8389   }
8390 
8391   VTableUses.clear();
8392 }
8393 
8394 void ASTReader::ReadPendingInstantiations(
8395        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8396   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8397     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8398     SourceLocation Loc
8399       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8400 
8401     Pending.push_back(std::make_pair(D, Loc));
8402   }
8403   PendingInstantiations.clear();
8404 }
8405 
8406 void ASTReader::ReadLateParsedTemplates(
8407     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8408         &LPTMap) {
8409   for (auto &LPT : LateParsedTemplates) {
8410     ModuleFile *FMod = LPT.first;
8411     RecordDataImpl &LateParsed = LPT.second;
8412     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8413          /* In loop */) {
8414       FunctionDecl *FD =
8415           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8416 
8417       auto LT = std::make_unique<LateParsedTemplate>();
8418       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8419 
8420       ModuleFile *F = getOwningModuleFile(LT->D);
8421       assert(F && "No module");
8422 
8423       unsigned TokN = LateParsed[Idx++];
8424       LT->Toks.reserve(TokN);
8425       for (unsigned T = 0; T < TokN; ++T)
8426         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8427 
8428       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8429     }
8430   }
8431 
8432   LateParsedTemplates.clear();
8433 }
8434 
8435 void ASTReader::LoadSelector(Selector Sel) {
8436   // It would be complicated to avoid reading the methods anyway. So don't.
8437   ReadMethodPool(Sel);
8438 }
8439 
8440 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8441   assert(ID && "Non-zero identifier ID required");
8442   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8443   IdentifiersLoaded[ID - 1] = II;
8444   if (DeserializationListener)
8445     DeserializationListener->IdentifierRead(ID, II);
8446 }
8447 
8448 /// Set the globally-visible declarations associated with the given
8449 /// identifier.
8450 ///
8451 /// If the AST reader is currently in a state where the given declaration IDs
8452 /// cannot safely be resolved, they are queued until it is safe to resolve
8453 /// them.
8454 ///
8455 /// \param II an IdentifierInfo that refers to one or more globally-visible
8456 /// declarations.
8457 ///
8458 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8459 /// visible at global scope.
8460 ///
8461 /// \param Decls if non-null, this vector will be populated with the set of
8462 /// deserialized declarations. These declarations will not be pushed into
8463 /// scope.
8464 void
8465 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8466                               const SmallVectorImpl<uint32_t> &DeclIDs,
8467                                    SmallVectorImpl<Decl *> *Decls) {
8468   if (NumCurrentElementsDeserializing && !Decls) {
8469     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8470     return;
8471   }
8472 
8473   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8474     if (!SemaObj) {
8475       // Queue this declaration so that it will be added to the
8476       // translation unit scope and identifier's declaration chain
8477       // once a Sema object is known.
8478       PreloadedDeclIDs.push_back(DeclIDs[I]);
8479       continue;
8480     }
8481 
8482     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8483 
8484     // If we're simply supposed to record the declarations, do so now.
8485     if (Decls) {
8486       Decls->push_back(D);
8487       continue;
8488     }
8489 
8490     // Introduce this declaration into the translation-unit scope
8491     // and add it to the declaration chain for this identifier, so
8492     // that (unqualified) name lookup will find it.
8493     pushExternalDeclIntoScope(D, II);
8494   }
8495 }
8496 
8497 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8498   if (ID == 0)
8499     return nullptr;
8500 
8501   if (IdentifiersLoaded.empty()) {
8502     Error("no identifier table in AST file");
8503     return nullptr;
8504   }
8505 
8506   ID -= 1;
8507   if (!IdentifiersLoaded[ID]) {
8508     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8509     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8510     ModuleFile *M = I->second;
8511     unsigned Index = ID - M->BaseIdentifierID;
8512     const unsigned char *Data =
8513         M->IdentifierTableData + M->IdentifierOffsets[Index];
8514 
8515     ASTIdentifierLookupTrait Trait(*this, *M);
8516     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8517     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8518     auto &II = PP.getIdentifierTable().get(Key);
8519     IdentifiersLoaded[ID] = &II;
8520     markIdentifierFromAST(*this,  II);
8521     if (DeserializationListener)
8522       DeserializationListener->IdentifierRead(ID + 1, &II);
8523   }
8524 
8525   return IdentifiersLoaded[ID];
8526 }
8527 
8528 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8529   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8530 }
8531 
8532 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8533   if (LocalID < NUM_PREDEF_IDENT_IDS)
8534     return LocalID;
8535 
8536   if (!M.ModuleOffsetMap.empty())
8537     ReadModuleOffsetMap(M);
8538 
8539   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8540     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8541   assert(I != M.IdentifierRemap.end()
8542          && "Invalid index into identifier index remap");
8543 
8544   return LocalID + I->second;
8545 }
8546 
8547 MacroInfo *ASTReader::getMacro(MacroID ID) {
8548   if (ID == 0)
8549     return nullptr;
8550 
8551   if (MacrosLoaded.empty()) {
8552     Error("no macro table in AST file");
8553     return nullptr;
8554   }
8555 
8556   ID -= NUM_PREDEF_MACRO_IDS;
8557   if (!MacrosLoaded[ID]) {
8558     GlobalMacroMapType::iterator I
8559       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8560     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8561     ModuleFile *M = I->second;
8562     unsigned Index = ID - M->BaseMacroID;
8563     MacrosLoaded[ID] =
8564         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8565 
8566     if (DeserializationListener)
8567       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8568                                          MacrosLoaded[ID]);
8569   }
8570 
8571   return MacrosLoaded[ID];
8572 }
8573 
8574 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8575   if (LocalID < NUM_PREDEF_MACRO_IDS)
8576     return LocalID;
8577 
8578   if (!M.ModuleOffsetMap.empty())
8579     ReadModuleOffsetMap(M);
8580 
8581   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8582     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8583   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8584 
8585   return LocalID + I->second;
8586 }
8587 
8588 serialization::SubmoduleID
8589 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8590   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8591     return LocalID;
8592 
8593   if (!M.ModuleOffsetMap.empty())
8594     ReadModuleOffsetMap(M);
8595 
8596   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8597     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8598   assert(I != M.SubmoduleRemap.end()
8599          && "Invalid index into submodule index remap");
8600 
8601   return LocalID + I->second;
8602 }
8603 
8604 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8605   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8606     assert(GlobalID == 0 && "Unhandled global submodule ID");
8607     return nullptr;
8608   }
8609 
8610   if (GlobalID > SubmodulesLoaded.size()) {
8611     Error("submodule ID out of range in AST file");
8612     return nullptr;
8613   }
8614 
8615   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8616 }
8617 
8618 Module *ASTReader::getModule(unsigned ID) {
8619   return getSubmodule(ID);
8620 }
8621 
8622 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8623   if (ID & 1) {
8624     // It's a module, look it up by submodule ID.
8625     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8626     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8627   } else {
8628     // It's a prefix (preamble, PCH, ...). Look it up by index.
8629     unsigned IndexFromEnd = ID >> 1;
8630     assert(IndexFromEnd && "got reference to unknown module file");
8631     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8632   }
8633 }
8634 
8635 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8636   if (!F)
8637     return 1;
8638 
8639   // For a file representing a module, use the submodule ID of the top-level
8640   // module as the file ID. For any other kind of file, the number of such
8641   // files loaded beforehand will be the same on reload.
8642   // FIXME: Is this true even if we have an explicit module file and a PCH?
8643   if (F->isModule())
8644     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8645 
8646   auto PCHModules = getModuleManager().pch_modules();
8647   auto I = llvm::find(PCHModules, F);
8648   assert(I != PCHModules.end() && "emitting reference to unknown file");
8649   return (I - PCHModules.end()) << 1;
8650 }
8651 
8652 llvm::Optional<ASTSourceDescriptor>
8653 ASTReader::getSourceDescriptor(unsigned ID) {
8654   if (Module *M = getSubmodule(ID))
8655     return ASTSourceDescriptor(*M);
8656 
8657   // If there is only a single PCH, return it instead.
8658   // Chained PCH are not supported.
8659   const auto &PCHChain = ModuleMgr.pch_modules();
8660   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8661     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8662     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8663     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8664     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8665                                MF.Signature);
8666   }
8667   return None;
8668 }
8669 
8670 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8671   auto I = DefinitionSource.find(FD);
8672   if (I == DefinitionSource.end())
8673     return EK_ReplyHazy;
8674   return I->second ? EK_Never : EK_Always;
8675 }
8676 
8677 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8678   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8679 }
8680 
8681 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8682   if (ID == 0)
8683     return Selector();
8684 
8685   if (ID > SelectorsLoaded.size()) {
8686     Error("selector ID out of range in AST file");
8687     return Selector();
8688   }
8689 
8690   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8691     // Load this selector from the selector table.
8692     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8693     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8694     ModuleFile &M = *I->second;
8695     ASTSelectorLookupTrait Trait(*this, M);
8696     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8697     SelectorsLoaded[ID - 1] =
8698       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8699     if (DeserializationListener)
8700       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8701   }
8702 
8703   return SelectorsLoaded[ID - 1];
8704 }
8705 
8706 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8707   return DecodeSelector(ID);
8708 }
8709 
8710 uint32_t ASTReader::GetNumExternalSelectors() {
8711   // ID 0 (the null selector) is considered an external selector.
8712   return getTotalNumSelectors() + 1;
8713 }
8714 
8715 serialization::SelectorID
8716 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8717   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8718     return LocalID;
8719 
8720   if (!M.ModuleOffsetMap.empty())
8721     ReadModuleOffsetMap(M);
8722 
8723   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8724     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8725   assert(I != M.SelectorRemap.end()
8726          && "Invalid index into selector index remap");
8727 
8728   return LocalID + I->second;
8729 }
8730 
8731 DeclarationNameLoc
8732 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8733   switch (Name.getNameKind()) {
8734   case DeclarationName::CXXConstructorName:
8735   case DeclarationName::CXXDestructorName:
8736   case DeclarationName::CXXConversionFunctionName:
8737     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8738 
8739   case DeclarationName::CXXOperatorName:
8740     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8741 
8742   case DeclarationName::CXXLiteralOperatorName:
8743     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8744         readSourceLocation());
8745 
8746   case DeclarationName::Identifier:
8747   case DeclarationName::ObjCZeroArgSelector:
8748   case DeclarationName::ObjCOneArgSelector:
8749   case DeclarationName::ObjCMultiArgSelector:
8750   case DeclarationName::CXXUsingDirective:
8751   case DeclarationName::CXXDeductionGuideName:
8752     break;
8753   }
8754   return DeclarationNameLoc();
8755 }
8756 
8757 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8758   DeclarationNameInfo NameInfo;
8759   NameInfo.setName(readDeclarationName());
8760   NameInfo.setLoc(readSourceLocation());
8761   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8762   return NameInfo;
8763 }
8764 
8765 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8766   Info.QualifierLoc = readNestedNameSpecifierLoc();
8767   unsigned NumTPLists = readInt();
8768   Info.NumTemplParamLists = NumTPLists;
8769   if (NumTPLists) {
8770     Info.TemplParamLists =
8771         new (getContext()) TemplateParameterList *[NumTPLists];
8772     for (unsigned i = 0; i != NumTPLists; ++i)
8773       Info.TemplParamLists[i] = readTemplateParameterList();
8774   }
8775 }
8776 
8777 TemplateParameterList *
8778 ASTRecordReader::readTemplateParameterList() {
8779   SourceLocation TemplateLoc = readSourceLocation();
8780   SourceLocation LAngleLoc = readSourceLocation();
8781   SourceLocation RAngleLoc = readSourceLocation();
8782 
8783   unsigned NumParams = readInt();
8784   SmallVector<NamedDecl *, 16> Params;
8785   Params.reserve(NumParams);
8786   while (NumParams--)
8787     Params.push_back(readDeclAs<NamedDecl>());
8788 
8789   bool HasRequiresClause = readBool();
8790   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8791 
8792   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8793       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8794   return TemplateParams;
8795 }
8796 
8797 void ASTRecordReader::readTemplateArgumentList(
8798                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8799                         bool Canonicalize) {
8800   unsigned NumTemplateArgs = readInt();
8801   TemplArgs.reserve(NumTemplateArgs);
8802   while (NumTemplateArgs--)
8803     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8804 }
8805 
8806 /// Read a UnresolvedSet structure.
8807 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8808   unsigned NumDecls = readInt();
8809   Set.reserve(getContext(), NumDecls);
8810   while (NumDecls--) {
8811     DeclID ID = readDeclID();
8812     AccessSpecifier AS = (AccessSpecifier) readInt();
8813     Set.addLazyDecl(getContext(), ID, AS);
8814   }
8815 }
8816 
8817 CXXBaseSpecifier
8818 ASTRecordReader::readCXXBaseSpecifier() {
8819   bool isVirtual = readBool();
8820   bool isBaseOfClass = readBool();
8821   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8822   bool inheritConstructors = readBool();
8823   TypeSourceInfo *TInfo = readTypeSourceInfo();
8824   SourceRange Range = readSourceRange();
8825   SourceLocation EllipsisLoc = readSourceLocation();
8826   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8827                           EllipsisLoc);
8828   Result.setInheritConstructors(inheritConstructors);
8829   return Result;
8830 }
8831 
8832 CXXCtorInitializer **
8833 ASTRecordReader::readCXXCtorInitializers() {
8834   ASTContext &Context = getContext();
8835   unsigned NumInitializers = readInt();
8836   assert(NumInitializers && "wrote ctor initializers but have no inits");
8837   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8838   for (unsigned i = 0; i != NumInitializers; ++i) {
8839     TypeSourceInfo *TInfo = nullptr;
8840     bool IsBaseVirtual = false;
8841     FieldDecl *Member = nullptr;
8842     IndirectFieldDecl *IndirectMember = nullptr;
8843 
8844     CtorInitializerType Type = (CtorInitializerType) readInt();
8845     switch (Type) {
8846     case CTOR_INITIALIZER_BASE:
8847       TInfo = readTypeSourceInfo();
8848       IsBaseVirtual = readBool();
8849       break;
8850 
8851     case CTOR_INITIALIZER_DELEGATING:
8852       TInfo = readTypeSourceInfo();
8853       break;
8854 
8855      case CTOR_INITIALIZER_MEMBER:
8856       Member = readDeclAs<FieldDecl>();
8857       break;
8858 
8859      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8860       IndirectMember = readDeclAs<IndirectFieldDecl>();
8861       break;
8862     }
8863 
8864     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8865     Expr *Init = readExpr();
8866     SourceLocation LParenLoc = readSourceLocation();
8867     SourceLocation RParenLoc = readSourceLocation();
8868 
8869     CXXCtorInitializer *BOMInit;
8870     if (Type == CTOR_INITIALIZER_BASE)
8871       BOMInit = new (Context)
8872           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8873                              RParenLoc, MemberOrEllipsisLoc);
8874     else if (Type == CTOR_INITIALIZER_DELEGATING)
8875       BOMInit = new (Context)
8876           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8877     else if (Member)
8878       BOMInit = new (Context)
8879           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8880                              Init, RParenLoc);
8881     else
8882       BOMInit = new (Context)
8883           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8884                              LParenLoc, Init, RParenLoc);
8885 
8886     if (/*IsWritten*/readBool()) {
8887       unsigned SourceOrder = readInt();
8888       BOMInit->setSourceOrder(SourceOrder);
8889     }
8890 
8891     CtorInitializers[i] = BOMInit;
8892   }
8893 
8894   return CtorInitializers;
8895 }
8896 
8897 NestedNameSpecifierLoc
8898 ASTRecordReader::readNestedNameSpecifierLoc() {
8899   ASTContext &Context = getContext();
8900   unsigned N = readInt();
8901   NestedNameSpecifierLocBuilder Builder;
8902   for (unsigned I = 0; I != N; ++I) {
8903     auto Kind = readNestedNameSpecifierKind();
8904     switch (Kind) {
8905     case NestedNameSpecifier::Identifier: {
8906       IdentifierInfo *II = readIdentifier();
8907       SourceRange Range = readSourceRange();
8908       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8909       break;
8910     }
8911 
8912     case NestedNameSpecifier::Namespace: {
8913       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8914       SourceRange Range = readSourceRange();
8915       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8916       break;
8917     }
8918 
8919     case NestedNameSpecifier::NamespaceAlias: {
8920       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8921       SourceRange Range = readSourceRange();
8922       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8923       break;
8924     }
8925 
8926     case NestedNameSpecifier::TypeSpec:
8927     case NestedNameSpecifier::TypeSpecWithTemplate: {
8928       bool Template = readBool();
8929       TypeSourceInfo *T = readTypeSourceInfo();
8930       if (!T)
8931         return NestedNameSpecifierLoc();
8932       SourceLocation ColonColonLoc = readSourceLocation();
8933 
8934       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8935       Builder.Extend(Context,
8936                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8937                      T->getTypeLoc(), ColonColonLoc);
8938       break;
8939     }
8940 
8941     case NestedNameSpecifier::Global: {
8942       SourceLocation ColonColonLoc = readSourceLocation();
8943       Builder.MakeGlobal(Context, ColonColonLoc);
8944       break;
8945     }
8946 
8947     case NestedNameSpecifier::Super: {
8948       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8949       SourceRange Range = readSourceRange();
8950       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8951       break;
8952     }
8953     }
8954   }
8955 
8956   return Builder.getWithLocInContext(Context);
8957 }
8958 
8959 SourceRange
8960 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8961                            unsigned &Idx) {
8962   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8963   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8964   return SourceRange(beg, end);
8965 }
8966 
8967 /// Read a floating-point value
8968 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8969   return llvm::APFloat(Sem, readAPInt());
8970 }
8971 
8972 // Read a string
8973 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8974   unsigned Len = Record[Idx++];
8975   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8976   Idx += Len;
8977   return Result;
8978 }
8979 
8980 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8981                                 unsigned &Idx) {
8982   std::string Filename = ReadString(Record, Idx);
8983   ResolveImportedPath(F, Filename);
8984   return Filename;
8985 }
8986 
8987 std::string ASTReader::ReadPath(StringRef BaseDirectory,
8988                                 const RecordData &Record, unsigned &Idx) {
8989   std::string Filename = ReadString(Record, Idx);
8990   if (!BaseDirectory.empty())
8991     ResolveImportedPath(Filename, BaseDirectory);
8992   return Filename;
8993 }
8994 
8995 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8996                                          unsigned &Idx) {
8997   unsigned Major = Record[Idx++];
8998   unsigned Minor = Record[Idx++];
8999   unsigned Subminor = Record[Idx++];
9000   if (Minor == 0)
9001     return VersionTuple(Major);
9002   if (Subminor == 0)
9003     return VersionTuple(Major, Minor - 1);
9004   return VersionTuple(Major, Minor - 1, Subminor - 1);
9005 }
9006 
9007 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9008                                           const RecordData &Record,
9009                                           unsigned &Idx) {
9010   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9011   return CXXTemporary::Create(getContext(), Decl);
9012 }
9013 
9014 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9015   return Diag(CurrentImportLoc, DiagID);
9016 }
9017 
9018 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9019   return Diags.Report(Loc, DiagID);
9020 }
9021 
9022 /// Retrieve the identifier table associated with the
9023 /// preprocessor.
9024 IdentifierTable &ASTReader::getIdentifierTable() {
9025   return PP.getIdentifierTable();
9026 }
9027 
9028 /// Record that the given ID maps to the given switch-case
9029 /// statement.
9030 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9031   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9032          "Already have a SwitchCase with this ID");
9033   (*CurrSwitchCaseStmts)[ID] = SC;
9034 }
9035 
9036 /// Retrieve the switch-case statement with the given ID.
9037 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9038   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9039   return (*CurrSwitchCaseStmts)[ID];
9040 }
9041 
9042 void ASTReader::ClearSwitchCaseIDs() {
9043   CurrSwitchCaseStmts->clear();
9044 }
9045 
9046 void ASTReader::ReadComments() {
9047   ASTContext &Context = getContext();
9048   std::vector<RawComment *> Comments;
9049   for (SmallVectorImpl<std::pair<BitstreamCursor,
9050                                  serialization::ModuleFile *>>::iterator
9051        I = CommentsCursors.begin(),
9052        E = CommentsCursors.end();
9053        I != E; ++I) {
9054     Comments.clear();
9055     BitstreamCursor &Cursor = I->first;
9056     serialization::ModuleFile &F = *I->second;
9057     SavedStreamPosition SavedPosition(Cursor);
9058 
9059     RecordData Record;
9060     while (true) {
9061       Expected<llvm::BitstreamEntry> MaybeEntry =
9062           Cursor.advanceSkippingSubblocks(
9063               BitstreamCursor::AF_DontPopBlockAtEnd);
9064       if (!MaybeEntry) {
9065         Error(MaybeEntry.takeError());
9066         return;
9067       }
9068       llvm::BitstreamEntry Entry = MaybeEntry.get();
9069 
9070       switch (Entry.Kind) {
9071       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9072       case llvm::BitstreamEntry::Error:
9073         Error("malformed block record in AST file");
9074         return;
9075       case llvm::BitstreamEntry::EndBlock:
9076         goto NextCursor;
9077       case llvm::BitstreamEntry::Record:
9078         // The interesting case.
9079         break;
9080       }
9081 
9082       // Read a record.
9083       Record.clear();
9084       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9085       if (!MaybeComment) {
9086         Error(MaybeComment.takeError());
9087         return;
9088       }
9089       switch ((CommentRecordTypes)MaybeComment.get()) {
9090       case COMMENTS_RAW_COMMENT: {
9091         unsigned Idx = 0;
9092         SourceRange SR = ReadSourceRange(F, Record, Idx);
9093         RawComment::CommentKind Kind =
9094             (RawComment::CommentKind) Record[Idx++];
9095         bool IsTrailingComment = Record[Idx++];
9096         bool IsAlmostTrailingComment = Record[Idx++];
9097         Comments.push_back(new (Context) RawComment(
9098             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9099         break;
9100       }
9101       }
9102     }
9103   NextCursor:
9104     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9105         FileToOffsetToComment;
9106     for (RawComment *C : Comments) {
9107       SourceLocation CommentLoc = C->getBeginLoc();
9108       if (CommentLoc.isValid()) {
9109         std::pair<FileID, unsigned> Loc =
9110             SourceMgr.getDecomposedLoc(CommentLoc);
9111         if (Loc.first.isValid())
9112           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9113       }
9114     }
9115   }
9116 }
9117 
9118 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9119                                 bool IncludeSystem, bool Complain,
9120                     llvm::function_ref<void(const serialization::InputFile &IF,
9121                                             bool isSystem)> Visitor) {
9122   unsigned NumUserInputs = MF.NumUserInputFiles;
9123   unsigned NumInputs = MF.InputFilesLoaded.size();
9124   assert(NumUserInputs <= NumInputs);
9125   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9126   for (unsigned I = 0; I < N; ++I) {
9127     bool IsSystem = I >= NumUserInputs;
9128     InputFile IF = getInputFile(MF, I+1, Complain);
9129     Visitor(IF, IsSystem);
9130   }
9131 }
9132 
9133 void ASTReader::visitTopLevelModuleMaps(
9134     serialization::ModuleFile &MF,
9135     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9136   unsigned NumInputs = MF.InputFilesLoaded.size();
9137   for (unsigned I = 0; I < NumInputs; ++I) {
9138     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9139     if (IFI.TopLevelModuleMap)
9140       // FIXME: This unnecessarily re-reads the InputFileInfo.
9141       if (auto FE = getInputFile(MF, I + 1).getFile())
9142         Visitor(FE);
9143   }
9144 }
9145 
9146 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9147   // If we know the owning module, use it.
9148   if (Module *M = D->getImportedOwningModule())
9149     return M->getFullModuleName();
9150 
9151   // Otherwise, use the name of the top-level module the decl is within.
9152   if (ModuleFile *M = getOwningModuleFile(D))
9153     return M->ModuleName;
9154 
9155   // Not from a module.
9156   return {};
9157 }
9158 
9159 void ASTReader::finishPendingActions() {
9160   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9161          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9162          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9163          !PendingUpdateRecords.empty()) {
9164     // If any identifiers with corresponding top-level declarations have
9165     // been loaded, load those declarations now.
9166     using TopLevelDeclsMap =
9167         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9168     TopLevelDeclsMap TopLevelDecls;
9169 
9170     while (!PendingIdentifierInfos.empty()) {
9171       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9172       SmallVector<uint32_t, 4> DeclIDs =
9173           std::move(PendingIdentifierInfos.back().second);
9174       PendingIdentifierInfos.pop_back();
9175 
9176       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9177     }
9178 
9179     // Load each function type that we deferred loading because it was a
9180     // deduced type that might refer to a local type declared within itself.
9181     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9182       auto *FD = PendingFunctionTypes[I].first;
9183       FD->setType(GetType(PendingFunctionTypes[I].second));
9184 
9185       // If we gave a function a deduced return type, remember that we need to
9186       // propagate that along the redeclaration chain.
9187       auto *DT = FD->getReturnType()->getContainedDeducedType();
9188       if (DT && DT->isDeduced())
9189         PendingDeducedTypeUpdates.insert(
9190             {FD->getCanonicalDecl(), FD->getReturnType()});
9191     }
9192     PendingFunctionTypes.clear();
9193 
9194     // For each decl chain that we wanted to complete while deserializing, mark
9195     // it as "still needs to be completed".
9196     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9197       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9198     }
9199     PendingIncompleteDeclChains.clear();
9200 
9201     // Load pending declaration chains.
9202     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9203       loadPendingDeclChain(PendingDeclChains[I].first,
9204                            PendingDeclChains[I].second);
9205     PendingDeclChains.clear();
9206 
9207     // Make the most recent of the top-level declarations visible.
9208     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9209            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9210       IdentifierInfo *II = TLD->first;
9211       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9212         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9213       }
9214     }
9215 
9216     // Load any pending macro definitions.
9217     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9218       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9219       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9220       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9221       // Initialize the macro history from chained-PCHs ahead of module imports.
9222       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9223            ++IDIdx) {
9224         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9225         if (!Info.M->isModule())
9226           resolvePendingMacro(II, Info);
9227       }
9228       // Handle module imports.
9229       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9230            ++IDIdx) {
9231         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9232         if (Info.M->isModule())
9233           resolvePendingMacro(II, Info);
9234       }
9235     }
9236     PendingMacroIDs.clear();
9237 
9238     // Wire up the DeclContexts for Decls that we delayed setting until
9239     // recursive loading is completed.
9240     while (!PendingDeclContextInfos.empty()) {
9241       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9242       PendingDeclContextInfos.pop_front();
9243       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9244       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9245       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9246     }
9247 
9248     // Perform any pending declaration updates.
9249     while (!PendingUpdateRecords.empty()) {
9250       auto Update = PendingUpdateRecords.pop_back_val();
9251       ReadingKindTracker ReadingKind(Read_Decl, *this);
9252       loadDeclUpdateRecords(Update);
9253     }
9254   }
9255 
9256   // At this point, all update records for loaded decls are in place, so any
9257   // fake class definitions should have become real.
9258   assert(PendingFakeDefinitionData.empty() &&
9259          "faked up a class definition but never saw the real one");
9260 
9261   // If we deserialized any C++ or Objective-C class definitions, any
9262   // Objective-C protocol definitions, or any redeclarable templates, make sure
9263   // that all redeclarations point to the definitions. Note that this can only
9264   // happen now, after the redeclaration chains have been fully wired.
9265   for (Decl *D : PendingDefinitions) {
9266     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9267       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9268         // Make sure that the TagType points at the definition.
9269         const_cast<TagType*>(TagT)->decl = TD;
9270       }
9271 
9272       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9273         for (auto *R = getMostRecentExistingDecl(RD); R;
9274              R = R->getPreviousDecl()) {
9275           assert((R == D) ==
9276                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9277                  "declaration thinks it's the definition but it isn't");
9278           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9279         }
9280       }
9281 
9282       continue;
9283     }
9284 
9285     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9286       // Make sure that the ObjCInterfaceType points at the definition.
9287       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9288         ->Decl = ID;
9289 
9290       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9291         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9292 
9293       continue;
9294     }
9295 
9296     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9297       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9298         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9299 
9300       continue;
9301     }
9302 
9303     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9304     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9305       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9306   }
9307   PendingDefinitions.clear();
9308 
9309   // Load the bodies of any functions or methods we've encountered. We do
9310   // this now (delayed) so that we can be sure that the declaration chains
9311   // have been fully wired up (hasBody relies on this).
9312   // FIXME: We shouldn't require complete redeclaration chains here.
9313   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9314                                PBEnd = PendingBodies.end();
9315        PB != PBEnd; ++PB) {
9316     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9317       // For a function defined inline within a class template, force the
9318       // canonical definition to be the one inside the canonical definition of
9319       // the template. This ensures that we instantiate from a correct view
9320       // of the template.
9321       //
9322       // Sadly we can't do this more generally: we can't be sure that all
9323       // copies of an arbitrary class definition will have the same members
9324       // defined (eg, some member functions may not be instantiated, and some
9325       // special members may or may not have been implicitly defined).
9326       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9327         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9328           continue;
9329 
9330       // FIXME: Check for =delete/=default?
9331       // FIXME: Complain about ODR violations here?
9332       const FunctionDecl *Defn = nullptr;
9333       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9334         FD->setLazyBody(PB->second);
9335       } else {
9336         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9337         mergeDefinitionVisibility(NonConstDefn, FD);
9338 
9339         if (!FD->isLateTemplateParsed() &&
9340             !NonConstDefn->isLateTemplateParsed() &&
9341             FD->getODRHash() != NonConstDefn->getODRHash()) {
9342           if (!isa<CXXMethodDecl>(FD)) {
9343             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9344           } else if (FD->getLexicalParent()->isFileContext() &&
9345                      NonConstDefn->getLexicalParent()->isFileContext()) {
9346             // Only diagnose out-of-line method definitions.  If they are
9347             // in class definitions, then an error will be generated when
9348             // processing the class bodies.
9349             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9350           }
9351         }
9352       }
9353       continue;
9354     }
9355 
9356     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9357     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9358       MD->setLazyBody(PB->second);
9359   }
9360   PendingBodies.clear();
9361 
9362   // Do some cleanup.
9363   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9364     getContext().deduplicateMergedDefinitonsFor(ND);
9365   PendingMergedDefinitionsToDeduplicate.clear();
9366 }
9367 
9368 void ASTReader::diagnoseOdrViolations() {
9369   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9370       PendingFunctionOdrMergeFailures.empty() &&
9371       PendingEnumOdrMergeFailures.empty())
9372     return;
9373 
9374   // Trigger the import of the full definition of each class that had any
9375   // odr-merging problems, so we can produce better diagnostics for them.
9376   // These updates may in turn find and diagnose some ODR failures, so take
9377   // ownership of the set first.
9378   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9379   PendingOdrMergeFailures.clear();
9380   for (auto &Merge : OdrMergeFailures) {
9381     Merge.first->buildLookup();
9382     Merge.first->decls_begin();
9383     Merge.first->bases_begin();
9384     Merge.first->vbases_begin();
9385     for (auto &RecordPair : Merge.second) {
9386       auto *RD = RecordPair.first;
9387       RD->decls_begin();
9388       RD->bases_begin();
9389       RD->vbases_begin();
9390     }
9391   }
9392 
9393   // Trigger the import of functions.
9394   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9395   PendingFunctionOdrMergeFailures.clear();
9396   for (auto &Merge : FunctionOdrMergeFailures) {
9397     Merge.first->buildLookup();
9398     Merge.first->decls_begin();
9399     Merge.first->getBody();
9400     for (auto &FD : Merge.second) {
9401       FD->buildLookup();
9402       FD->decls_begin();
9403       FD->getBody();
9404     }
9405   }
9406 
9407   // Trigger the import of enums.
9408   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9409   PendingEnumOdrMergeFailures.clear();
9410   for (auto &Merge : EnumOdrMergeFailures) {
9411     Merge.first->decls_begin();
9412     for (auto &Enum : Merge.second) {
9413       Enum->decls_begin();
9414     }
9415   }
9416 
9417   // For each declaration from a merged context, check that the canonical
9418   // definition of that context also contains a declaration of the same
9419   // entity.
9420   //
9421   // Caution: this loop does things that might invalidate iterators into
9422   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9423   while (!PendingOdrMergeChecks.empty()) {
9424     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9425 
9426     // FIXME: Skip over implicit declarations for now. This matters for things
9427     // like implicitly-declared special member functions. This isn't entirely
9428     // correct; we can end up with multiple unmerged declarations of the same
9429     // implicit entity.
9430     if (D->isImplicit())
9431       continue;
9432 
9433     DeclContext *CanonDef = D->getDeclContext();
9434 
9435     bool Found = false;
9436     const Decl *DCanon = D->getCanonicalDecl();
9437 
9438     for (auto RI : D->redecls()) {
9439       if (RI->getLexicalDeclContext() == CanonDef) {
9440         Found = true;
9441         break;
9442       }
9443     }
9444     if (Found)
9445       continue;
9446 
9447     // Quick check failed, time to do the slow thing. Note, we can't just
9448     // look up the name of D in CanonDef here, because the member that is
9449     // in CanonDef might not be found by name lookup (it might have been
9450     // replaced by a more recent declaration in the lookup table), and we
9451     // can't necessarily find it in the redeclaration chain because it might
9452     // be merely mergeable, not redeclarable.
9453     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9454     for (auto *CanonMember : CanonDef->decls()) {
9455       if (CanonMember->getCanonicalDecl() == DCanon) {
9456         // This can happen if the declaration is merely mergeable and not
9457         // actually redeclarable (we looked for redeclarations earlier).
9458         //
9459         // FIXME: We should be able to detect this more efficiently, without
9460         // pulling in all of the members of CanonDef.
9461         Found = true;
9462         break;
9463       }
9464       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9465         if (ND->getDeclName() == D->getDeclName())
9466           Candidates.push_back(ND);
9467     }
9468 
9469     if (!Found) {
9470       // The AST doesn't like TagDecls becoming invalid after they've been
9471       // completed. We only really need to mark FieldDecls as invalid here.
9472       if (!isa<TagDecl>(D))
9473         D->setInvalidDecl();
9474 
9475       // Ensure we don't accidentally recursively enter deserialization while
9476       // we're producing our diagnostic.
9477       Deserializing RecursionGuard(this);
9478 
9479       std::string CanonDefModule =
9480           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9481       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9482         << D << getOwningModuleNameForDiagnostic(D)
9483         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9484 
9485       if (Candidates.empty())
9486         Diag(cast<Decl>(CanonDef)->getLocation(),
9487              diag::note_module_odr_violation_no_possible_decls) << D;
9488       else {
9489         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9490           Diag(Candidates[I]->getLocation(),
9491                diag::note_module_odr_violation_possible_decl)
9492             << Candidates[I];
9493       }
9494 
9495       DiagnosedOdrMergeFailures.insert(CanonDef);
9496     }
9497   }
9498 
9499   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9500       EnumOdrMergeFailures.empty())
9501     return;
9502 
9503   // Ensure we don't accidentally recursively enter deserialization while
9504   // we're producing our diagnostics.
9505   Deserializing RecursionGuard(this);
9506 
9507   // Common code for hashing helpers.
9508   ODRHash Hash;
9509   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9510     Hash.clear();
9511     Hash.AddQualType(Ty);
9512     return Hash.CalculateHash();
9513   };
9514 
9515   auto ComputeODRHash = [&Hash](const Stmt *S) {
9516     assert(S);
9517     Hash.clear();
9518     Hash.AddStmt(S);
9519     return Hash.CalculateHash();
9520   };
9521 
9522   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9523     assert(D);
9524     Hash.clear();
9525     Hash.AddSubDecl(D);
9526     return Hash.CalculateHash();
9527   };
9528 
9529   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9530     Hash.clear();
9531     Hash.AddTemplateArgument(TA);
9532     return Hash.CalculateHash();
9533   };
9534 
9535   auto ComputeTemplateParameterListODRHash =
9536       [&Hash](const TemplateParameterList *TPL) {
9537         assert(TPL);
9538         Hash.clear();
9539         Hash.AddTemplateParameterList(TPL);
9540         return Hash.CalculateHash();
9541       };
9542 
9543   // Used with err_module_odr_violation_mismatch_decl and
9544   // note_module_odr_violation_mismatch_decl
9545   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9546   enum ODRMismatchDecl {
9547     EndOfClass,
9548     PublicSpecifer,
9549     PrivateSpecifer,
9550     ProtectedSpecifer,
9551     StaticAssert,
9552     Field,
9553     CXXMethod,
9554     TypeAlias,
9555     TypeDef,
9556     Var,
9557     Friend,
9558     FunctionTemplate,
9559     Other
9560   };
9561 
9562   // Used with err_module_odr_violation_mismatch_decl_diff and
9563   // note_module_odr_violation_mismatch_decl_diff
9564   enum ODRMismatchDeclDifference {
9565     StaticAssertCondition,
9566     StaticAssertMessage,
9567     StaticAssertOnlyMessage,
9568     FieldName,
9569     FieldTypeName,
9570     FieldSingleBitField,
9571     FieldDifferentWidthBitField,
9572     FieldSingleMutable,
9573     FieldSingleInitializer,
9574     FieldDifferentInitializers,
9575     MethodName,
9576     MethodDeleted,
9577     MethodDefaulted,
9578     MethodVirtual,
9579     MethodStatic,
9580     MethodVolatile,
9581     MethodConst,
9582     MethodInline,
9583     MethodNumberParameters,
9584     MethodParameterType,
9585     MethodParameterName,
9586     MethodParameterSingleDefaultArgument,
9587     MethodParameterDifferentDefaultArgument,
9588     MethodNoTemplateArguments,
9589     MethodDifferentNumberTemplateArguments,
9590     MethodDifferentTemplateArgument,
9591     MethodSingleBody,
9592     MethodDifferentBody,
9593     TypedefName,
9594     TypedefType,
9595     VarName,
9596     VarType,
9597     VarSingleInitializer,
9598     VarDifferentInitializer,
9599     VarConstexpr,
9600     FriendTypeFunction,
9601     FriendType,
9602     FriendFunction,
9603     FunctionTemplateDifferentNumberParameters,
9604     FunctionTemplateParameterDifferentKind,
9605     FunctionTemplateParameterName,
9606     FunctionTemplateParameterSingleDefaultArgument,
9607     FunctionTemplateParameterDifferentDefaultArgument,
9608     FunctionTemplateParameterDifferentType,
9609     FunctionTemplatePackParameter,
9610   };
9611 
9612   // These lambdas have the common portions of the ODR diagnostics.  This
9613   // has the same return as Diag(), so addition parameters can be passed
9614   // in with operator<<
9615   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9616                                  SourceLocation Loc, SourceRange Range,
9617                                  ODRMismatchDeclDifference DiffType) {
9618     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9619            << FirstRecord << FirstModule.empty() << FirstModule << Range
9620            << DiffType;
9621   };
9622   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9623                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9624     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9625            << SecondModule << Range << DiffType;
9626   };
9627 
9628   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9629                        &ComputeQualTypeODRHash, &ComputeODRHash](
9630                           NamedDecl *FirstRecord, StringRef FirstModule,
9631                           StringRef SecondModule, FieldDecl *FirstField,
9632                           FieldDecl *SecondField) {
9633     IdentifierInfo *FirstII = FirstField->getIdentifier();
9634     IdentifierInfo *SecondII = SecondField->getIdentifier();
9635     if (FirstII->getName() != SecondII->getName()) {
9636       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9637                        FirstField->getSourceRange(), FieldName)
9638           << FirstII;
9639       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9640                       SecondField->getSourceRange(), FieldName)
9641           << SecondII;
9642 
9643       return true;
9644     }
9645 
9646     assert(getContext().hasSameType(FirstField->getType(),
9647                                     SecondField->getType()));
9648 
9649     QualType FirstType = FirstField->getType();
9650     QualType SecondType = SecondField->getType();
9651     if (ComputeQualTypeODRHash(FirstType) !=
9652         ComputeQualTypeODRHash(SecondType)) {
9653       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9654                        FirstField->getSourceRange(), FieldTypeName)
9655           << FirstII << FirstType;
9656       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9657                       SecondField->getSourceRange(), FieldTypeName)
9658           << SecondII << SecondType;
9659 
9660       return true;
9661     }
9662 
9663     const bool IsFirstBitField = FirstField->isBitField();
9664     const bool IsSecondBitField = SecondField->isBitField();
9665     if (IsFirstBitField != IsSecondBitField) {
9666       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9667                        FirstField->getSourceRange(), FieldSingleBitField)
9668           << FirstII << IsFirstBitField;
9669       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9670                       SecondField->getSourceRange(), FieldSingleBitField)
9671           << SecondII << IsSecondBitField;
9672       return true;
9673     }
9674 
9675     if (IsFirstBitField && IsSecondBitField) {
9676       unsigned FirstBitWidthHash =
9677           ComputeODRHash(FirstField->getBitWidth());
9678       unsigned SecondBitWidthHash =
9679           ComputeODRHash(SecondField->getBitWidth());
9680       if (FirstBitWidthHash != SecondBitWidthHash) {
9681         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9682                          FirstField->getSourceRange(),
9683                          FieldDifferentWidthBitField)
9684             << FirstII << FirstField->getBitWidth()->getSourceRange();
9685         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9686                         SecondField->getSourceRange(),
9687                         FieldDifferentWidthBitField)
9688             << SecondII << SecondField->getBitWidth()->getSourceRange();
9689         return true;
9690       }
9691     }
9692 
9693     if (!PP.getLangOpts().CPlusPlus)
9694       return false;
9695 
9696     const bool IsFirstMutable = FirstField->isMutable();
9697     const bool IsSecondMutable = SecondField->isMutable();
9698     if (IsFirstMutable != IsSecondMutable) {
9699       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9700                        FirstField->getSourceRange(), FieldSingleMutable)
9701           << FirstII << IsFirstMutable;
9702       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9703                       SecondField->getSourceRange(), FieldSingleMutable)
9704           << SecondII << IsSecondMutable;
9705       return true;
9706     }
9707 
9708     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9709     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9710     if ((!FirstInitializer && SecondInitializer) ||
9711         (FirstInitializer && !SecondInitializer)) {
9712       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9713                        FirstField->getSourceRange(), FieldSingleInitializer)
9714           << FirstII << (FirstInitializer != nullptr);
9715       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9716                       SecondField->getSourceRange(), FieldSingleInitializer)
9717           << SecondII << (SecondInitializer != nullptr);
9718       return true;
9719     }
9720 
9721     if (FirstInitializer && SecondInitializer) {
9722       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9723       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9724       if (FirstInitHash != SecondInitHash) {
9725         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9726                          FirstField->getSourceRange(),
9727                          FieldDifferentInitializers)
9728             << FirstII << FirstInitializer->getSourceRange();
9729         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9730                         SecondField->getSourceRange(),
9731                         FieldDifferentInitializers)
9732             << SecondII << SecondInitializer->getSourceRange();
9733         return true;
9734       }
9735     }
9736 
9737     return false;
9738   };
9739 
9740   auto ODRDiagTypeDefOrAlias =
9741       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9742           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9743           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9744           bool IsTypeAlias) {
9745         auto FirstName = FirstTD->getDeclName();
9746         auto SecondName = SecondTD->getDeclName();
9747         if (FirstName != SecondName) {
9748           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9749                            FirstTD->getSourceRange(), TypedefName)
9750               << IsTypeAlias << FirstName;
9751           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9752                           SecondTD->getSourceRange(), TypedefName)
9753               << IsTypeAlias << SecondName;
9754           return true;
9755         }
9756 
9757         QualType FirstType = FirstTD->getUnderlyingType();
9758         QualType SecondType = SecondTD->getUnderlyingType();
9759         if (ComputeQualTypeODRHash(FirstType) !=
9760             ComputeQualTypeODRHash(SecondType)) {
9761           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9762                            FirstTD->getSourceRange(), TypedefType)
9763               << IsTypeAlias << FirstName << FirstType;
9764           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9765                           SecondTD->getSourceRange(), TypedefType)
9766               << IsTypeAlias << SecondName << SecondType;
9767           return true;
9768         }
9769 
9770         return false;
9771   };
9772 
9773   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9774                      &ComputeQualTypeODRHash, &ComputeODRHash,
9775                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9776                            StringRef SecondModule, VarDecl *FirstVD,
9777                            VarDecl *SecondVD) {
9778     auto FirstName = FirstVD->getDeclName();
9779     auto SecondName = SecondVD->getDeclName();
9780     if (FirstName != SecondName) {
9781       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9782                        FirstVD->getSourceRange(), VarName)
9783           << FirstName;
9784       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9785                       SecondVD->getSourceRange(), VarName)
9786           << SecondName;
9787       return true;
9788     }
9789 
9790     QualType FirstType = FirstVD->getType();
9791     QualType SecondType = SecondVD->getType();
9792     if (ComputeQualTypeODRHash(FirstType) !=
9793         ComputeQualTypeODRHash(SecondType)) {
9794       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9795                        FirstVD->getSourceRange(), VarType)
9796           << FirstName << FirstType;
9797       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9798                       SecondVD->getSourceRange(), VarType)
9799           << SecondName << SecondType;
9800       return true;
9801     }
9802 
9803     if (!PP.getLangOpts().CPlusPlus)
9804       return false;
9805 
9806     const Expr *FirstInit = FirstVD->getInit();
9807     const Expr *SecondInit = SecondVD->getInit();
9808     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9809       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9810                        FirstVD->getSourceRange(), VarSingleInitializer)
9811           << FirstName << (FirstInit == nullptr)
9812           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9813       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9814                       SecondVD->getSourceRange(), VarSingleInitializer)
9815           << SecondName << (SecondInit == nullptr)
9816           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9817       return true;
9818     }
9819 
9820     if (FirstInit && SecondInit &&
9821         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9822       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9823                        FirstVD->getSourceRange(), VarDifferentInitializer)
9824           << FirstName << FirstInit->getSourceRange();
9825       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9826                       SecondVD->getSourceRange(), VarDifferentInitializer)
9827           << SecondName << SecondInit->getSourceRange();
9828       return true;
9829     }
9830 
9831     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9832     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9833     if (FirstIsConstexpr != SecondIsConstexpr) {
9834       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9835                        FirstVD->getSourceRange(), VarConstexpr)
9836           << FirstName << FirstIsConstexpr;
9837       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9838                       SecondVD->getSourceRange(), VarConstexpr)
9839           << SecondName << SecondIsConstexpr;
9840       return true;
9841     }
9842     return false;
9843   };
9844 
9845   auto DifferenceSelector = [](Decl *D) {
9846     assert(D && "valid Decl required");
9847     switch (D->getKind()) {
9848     default:
9849       return Other;
9850     case Decl::AccessSpec:
9851       switch (D->getAccess()) {
9852       case AS_public:
9853         return PublicSpecifer;
9854       case AS_private:
9855         return PrivateSpecifer;
9856       case AS_protected:
9857         return ProtectedSpecifer;
9858       case AS_none:
9859         break;
9860       }
9861       llvm_unreachable("Invalid access specifier");
9862     case Decl::StaticAssert:
9863       return StaticAssert;
9864     case Decl::Field:
9865       return Field;
9866     case Decl::CXXMethod:
9867     case Decl::CXXConstructor:
9868     case Decl::CXXDestructor:
9869       return CXXMethod;
9870     case Decl::TypeAlias:
9871       return TypeAlias;
9872     case Decl::Typedef:
9873       return TypeDef;
9874     case Decl::Var:
9875       return Var;
9876     case Decl::Friend:
9877       return Friend;
9878     case Decl::FunctionTemplate:
9879       return FunctionTemplate;
9880     }
9881   };
9882 
9883   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9884   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9885                                                  RecordDecl *Record,
9886                                                  const DeclContext *DC) {
9887     for (auto *D : Record->decls()) {
9888       if (!ODRHash::isDeclToBeProcessed(D, DC))
9889         continue;
9890       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9891     }
9892   };
9893 
9894   struct DiffResult {
9895     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9896     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9897   };
9898 
9899   // If there is a diagnoseable difference, FirstDiffType and
9900   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9901   // filled in if not EndOfClass.
9902   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9903                                              DeclHashes &SecondHashes) {
9904     DiffResult DR;
9905     auto FirstIt = FirstHashes.begin();
9906     auto SecondIt = SecondHashes.begin();
9907     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9908       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9909           FirstIt->second == SecondIt->second) {
9910         ++FirstIt;
9911         ++SecondIt;
9912         continue;
9913       }
9914 
9915       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9916       DR.SecondDecl =
9917           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9918 
9919       DR.FirstDiffType =
9920           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9921       DR.SecondDiffType =
9922           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9923       return DR;
9924     }
9925     return DR;
9926   };
9927 
9928   // Use this to diagnose that an unexpected Decl was encountered
9929   // or no difference was detected. This causes a generic error
9930   // message to be emitted.
9931   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9932                                       StringRef FirstModule,
9933                                       NamedDecl *SecondRecord,
9934                                       StringRef SecondModule) {
9935     Diag(FirstRecord->getLocation(),
9936          diag::err_module_odr_violation_different_definitions)
9937         << FirstRecord << FirstModule.empty() << FirstModule;
9938 
9939     if (DR.FirstDecl) {
9940       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9941           << FirstRecord << DR.FirstDecl->getSourceRange();
9942     }
9943 
9944     Diag(SecondRecord->getLocation(),
9945          diag::note_module_odr_violation_different_definitions)
9946         << SecondModule;
9947 
9948     if (DR.SecondDecl) {
9949       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9950           << DR.SecondDecl->getSourceRange();
9951     }
9952   };
9953 
9954   auto DiagnoseODRMismatch =
9955       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9956              NamedDecl *SecondRecord, StringRef SecondModule) {
9957         SourceLocation FirstLoc;
9958         SourceRange FirstRange;
9959         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9960         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9961           FirstLoc = FirstTag->getBraceRange().getEnd();
9962         } else {
9963           FirstLoc = DR.FirstDecl->getLocation();
9964           FirstRange = DR.FirstDecl->getSourceRange();
9965         }
9966         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9967             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9968             << DR.FirstDiffType;
9969 
9970         SourceLocation SecondLoc;
9971         SourceRange SecondRange;
9972         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9973         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9974           SecondLoc = SecondTag->getBraceRange().getEnd();
9975         } else {
9976           SecondLoc = DR.SecondDecl->getLocation();
9977           SecondRange = DR.SecondDecl->getSourceRange();
9978         }
9979         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9980             << SecondModule << SecondRange << DR.SecondDiffType;
9981       };
9982 
9983   // Issue any pending ODR-failure diagnostics.
9984   for (auto &Merge : OdrMergeFailures) {
9985     // If we've already pointed out a specific problem with this class, don't
9986     // bother issuing a general "something's different" diagnostic.
9987     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9988       continue;
9989 
9990     bool Diagnosed = false;
9991     CXXRecordDecl *FirstRecord = Merge.first;
9992     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9993     for (auto &RecordPair : Merge.second) {
9994       CXXRecordDecl *SecondRecord = RecordPair.first;
9995       // Multiple different declarations got merged together; tell the user
9996       // where they came from.
9997       if (FirstRecord == SecondRecord)
9998         continue;
9999 
10000       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10001 
10002       auto *FirstDD = FirstRecord->DefinitionData;
10003       auto *SecondDD = RecordPair.second;
10004 
10005       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10006 
10007       // Diagnostics from DefinitionData are emitted here.
10008       if (FirstDD != SecondDD) {
10009         enum ODRDefinitionDataDifference {
10010           NumBases,
10011           NumVBases,
10012           BaseType,
10013           BaseVirtual,
10014           BaseAccess,
10015         };
10016         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10017                                  this](SourceLocation Loc, SourceRange Range,
10018                                        ODRDefinitionDataDifference DiffType) {
10019           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10020                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10021                  << DiffType;
10022         };
10023         auto ODRDiagBaseNote = [&SecondModule,
10024                                 this](SourceLocation Loc, SourceRange Range,
10025                                       ODRDefinitionDataDifference DiffType) {
10026           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10027                  << SecondModule << Range << DiffType;
10028         };
10029 
10030         unsigned FirstNumBases = FirstDD->NumBases;
10031         unsigned FirstNumVBases = FirstDD->NumVBases;
10032         unsigned SecondNumBases = SecondDD->NumBases;
10033         unsigned SecondNumVBases = SecondDD->NumVBases;
10034 
10035         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10036           unsigned NumBases = DD->NumBases;
10037           if (NumBases == 0) return SourceRange();
10038           auto bases = DD->bases();
10039           return SourceRange(bases[0].getBeginLoc(),
10040                              bases[NumBases - 1].getEndLoc());
10041         };
10042 
10043         if (FirstNumBases != SecondNumBases) {
10044           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10045                            NumBases)
10046               << FirstNumBases;
10047           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10048                           NumBases)
10049               << SecondNumBases;
10050           Diagnosed = true;
10051           break;
10052         }
10053 
10054         if (FirstNumVBases != SecondNumVBases) {
10055           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10056                            NumVBases)
10057               << FirstNumVBases;
10058           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10059                           NumVBases)
10060               << SecondNumVBases;
10061           Diagnosed = true;
10062           break;
10063         }
10064 
10065         auto FirstBases = FirstDD->bases();
10066         auto SecondBases = SecondDD->bases();
10067         unsigned i = 0;
10068         for (i = 0; i < FirstNumBases; ++i) {
10069           auto FirstBase = FirstBases[i];
10070           auto SecondBase = SecondBases[i];
10071           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10072               ComputeQualTypeODRHash(SecondBase.getType())) {
10073             ODRDiagBaseError(FirstRecord->getLocation(),
10074                              FirstBase.getSourceRange(), BaseType)
10075                 << (i + 1) << FirstBase.getType();
10076             ODRDiagBaseNote(SecondRecord->getLocation(),
10077                             SecondBase.getSourceRange(), BaseType)
10078                 << (i + 1) << SecondBase.getType();
10079             break;
10080           }
10081 
10082           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10083             ODRDiagBaseError(FirstRecord->getLocation(),
10084                              FirstBase.getSourceRange(), BaseVirtual)
10085                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10086             ODRDiagBaseNote(SecondRecord->getLocation(),
10087                             SecondBase.getSourceRange(), BaseVirtual)
10088                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10089             break;
10090           }
10091 
10092           if (FirstBase.getAccessSpecifierAsWritten() !=
10093               SecondBase.getAccessSpecifierAsWritten()) {
10094             ODRDiagBaseError(FirstRecord->getLocation(),
10095                              FirstBase.getSourceRange(), BaseAccess)
10096                 << (i + 1) << FirstBase.getType()
10097                 << (int)FirstBase.getAccessSpecifierAsWritten();
10098             ODRDiagBaseNote(SecondRecord->getLocation(),
10099                             SecondBase.getSourceRange(), BaseAccess)
10100                 << (i + 1) << SecondBase.getType()
10101                 << (int)SecondBase.getAccessSpecifierAsWritten();
10102             break;
10103           }
10104         }
10105 
10106         if (i != FirstNumBases) {
10107           Diagnosed = true;
10108           break;
10109         }
10110       }
10111 
10112       const ClassTemplateDecl *FirstTemplate =
10113           FirstRecord->getDescribedClassTemplate();
10114       const ClassTemplateDecl *SecondTemplate =
10115           SecondRecord->getDescribedClassTemplate();
10116 
10117       assert(!FirstTemplate == !SecondTemplate &&
10118              "Both pointers should be null or non-null");
10119 
10120       enum ODRTemplateDifference {
10121         ParamEmptyName,
10122         ParamName,
10123         ParamSingleDefaultArgument,
10124         ParamDifferentDefaultArgument,
10125       };
10126 
10127       if (FirstTemplate && SecondTemplate) {
10128         DeclHashes FirstTemplateHashes;
10129         DeclHashes SecondTemplateHashes;
10130 
10131         auto PopulateTemplateParameterHashs =
10132             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10133                                      const ClassTemplateDecl *TD) {
10134               for (auto *D : TD->getTemplateParameters()->asArray()) {
10135                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10136               }
10137             };
10138 
10139         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10140         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10141 
10142         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10143                "Number of template parameters should be equal.");
10144 
10145         auto FirstIt = FirstTemplateHashes.begin();
10146         auto FirstEnd = FirstTemplateHashes.end();
10147         auto SecondIt = SecondTemplateHashes.begin();
10148         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10149           if (FirstIt->second == SecondIt->second)
10150             continue;
10151 
10152           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10153                                           SourceLocation Loc, SourceRange Range,
10154                                           ODRTemplateDifference DiffType) {
10155             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10156                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10157                    << DiffType;
10158           };
10159           auto ODRDiagTemplateNote = [&SecondModule, this](
10160                                          SourceLocation Loc, SourceRange Range,
10161                                          ODRTemplateDifference DiffType) {
10162             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10163                    << SecondModule << Range << DiffType;
10164           };
10165 
10166           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10167           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10168 
10169           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10170                  "Parameter Decl's should be the same kind.");
10171 
10172           DeclarationName FirstName = FirstDecl->getDeclName();
10173           DeclarationName SecondName = SecondDecl->getDeclName();
10174 
10175           if (FirstName != SecondName) {
10176             const bool FirstNameEmpty =
10177                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10178             const bool SecondNameEmpty =
10179                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10180             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10181                    "Both template parameters cannot be unnamed.");
10182             ODRDiagTemplateError(FirstDecl->getLocation(),
10183                                  FirstDecl->getSourceRange(),
10184                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10185                 << FirstName;
10186             ODRDiagTemplateNote(SecondDecl->getLocation(),
10187                                 SecondDecl->getSourceRange(),
10188                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10189                 << SecondName;
10190             break;
10191           }
10192 
10193           switch (FirstDecl->getKind()) {
10194           default:
10195             llvm_unreachable("Invalid template parameter type.");
10196           case Decl::TemplateTypeParm: {
10197             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10198             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10199             const bool HasFirstDefaultArgument =
10200                 FirstParam->hasDefaultArgument() &&
10201                 !FirstParam->defaultArgumentWasInherited();
10202             const bool HasSecondDefaultArgument =
10203                 SecondParam->hasDefaultArgument() &&
10204                 !SecondParam->defaultArgumentWasInherited();
10205 
10206             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10207               ODRDiagTemplateError(FirstDecl->getLocation(),
10208                                    FirstDecl->getSourceRange(),
10209                                    ParamSingleDefaultArgument)
10210                   << HasFirstDefaultArgument;
10211               ODRDiagTemplateNote(SecondDecl->getLocation(),
10212                                   SecondDecl->getSourceRange(),
10213                                   ParamSingleDefaultArgument)
10214                   << HasSecondDefaultArgument;
10215               break;
10216             }
10217 
10218             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10219                    "Expecting default arguments.");
10220 
10221             ODRDiagTemplateError(FirstDecl->getLocation(),
10222                                  FirstDecl->getSourceRange(),
10223                                  ParamDifferentDefaultArgument);
10224             ODRDiagTemplateNote(SecondDecl->getLocation(),
10225                                 SecondDecl->getSourceRange(),
10226                                 ParamDifferentDefaultArgument);
10227 
10228             break;
10229           }
10230           case Decl::NonTypeTemplateParm: {
10231             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10232             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10233             const bool HasFirstDefaultArgument =
10234                 FirstParam->hasDefaultArgument() &&
10235                 !FirstParam->defaultArgumentWasInherited();
10236             const bool HasSecondDefaultArgument =
10237                 SecondParam->hasDefaultArgument() &&
10238                 !SecondParam->defaultArgumentWasInherited();
10239 
10240             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10241               ODRDiagTemplateError(FirstDecl->getLocation(),
10242                                    FirstDecl->getSourceRange(),
10243                                    ParamSingleDefaultArgument)
10244                   << HasFirstDefaultArgument;
10245               ODRDiagTemplateNote(SecondDecl->getLocation(),
10246                                   SecondDecl->getSourceRange(),
10247                                   ParamSingleDefaultArgument)
10248                   << HasSecondDefaultArgument;
10249               break;
10250             }
10251 
10252             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10253                    "Expecting default arguments.");
10254 
10255             ODRDiagTemplateError(FirstDecl->getLocation(),
10256                                  FirstDecl->getSourceRange(),
10257                                  ParamDifferentDefaultArgument);
10258             ODRDiagTemplateNote(SecondDecl->getLocation(),
10259                                 SecondDecl->getSourceRange(),
10260                                 ParamDifferentDefaultArgument);
10261 
10262             break;
10263           }
10264           case Decl::TemplateTemplateParm: {
10265             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10266             const auto *SecondParam =
10267                 cast<TemplateTemplateParmDecl>(SecondDecl);
10268             const bool HasFirstDefaultArgument =
10269                 FirstParam->hasDefaultArgument() &&
10270                 !FirstParam->defaultArgumentWasInherited();
10271             const bool HasSecondDefaultArgument =
10272                 SecondParam->hasDefaultArgument() &&
10273                 !SecondParam->defaultArgumentWasInherited();
10274 
10275             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10276               ODRDiagTemplateError(FirstDecl->getLocation(),
10277                                    FirstDecl->getSourceRange(),
10278                                    ParamSingleDefaultArgument)
10279                   << HasFirstDefaultArgument;
10280               ODRDiagTemplateNote(SecondDecl->getLocation(),
10281                                   SecondDecl->getSourceRange(),
10282                                   ParamSingleDefaultArgument)
10283                   << HasSecondDefaultArgument;
10284               break;
10285             }
10286 
10287             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10288                    "Expecting default arguments.");
10289 
10290             ODRDiagTemplateError(FirstDecl->getLocation(),
10291                                  FirstDecl->getSourceRange(),
10292                                  ParamDifferentDefaultArgument);
10293             ODRDiagTemplateNote(SecondDecl->getLocation(),
10294                                 SecondDecl->getSourceRange(),
10295                                 ParamDifferentDefaultArgument);
10296 
10297             break;
10298           }
10299           }
10300 
10301           break;
10302         }
10303 
10304         if (FirstIt != FirstEnd) {
10305           Diagnosed = true;
10306           break;
10307         }
10308       }
10309 
10310       DeclHashes FirstHashes;
10311       DeclHashes SecondHashes;
10312       const DeclContext *DC = FirstRecord;
10313       PopulateHashes(FirstHashes, FirstRecord, DC);
10314       PopulateHashes(SecondHashes, SecondRecord, DC);
10315 
10316       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10317       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10318       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10319       Decl *FirstDecl = DR.FirstDecl;
10320       Decl *SecondDecl = DR.SecondDecl;
10321 
10322       if (FirstDiffType == Other || SecondDiffType == Other) {
10323         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10324                               SecondModule);
10325         Diagnosed = true;
10326         break;
10327       }
10328 
10329       if (FirstDiffType != SecondDiffType) {
10330         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10331                             SecondModule);
10332         Diagnosed = true;
10333         break;
10334       }
10335 
10336       assert(FirstDiffType == SecondDiffType);
10337 
10338       switch (FirstDiffType) {
10339       case Other:
10340       case EndOfClass:
10341       case PublicSpecifer:
10342       case PrivateSpecifer:
10343       case ProtectedSpecifer:
10344         llvm_unreachable("Invalid diff type");
10345 
10346       case StaticAssert: {
10347         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10348         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10349 
10350         Expr *FirstExpr = FirstSA->getAssertExpr();
10351         Expr *SecondExpr = SecondSA->getAssertExpr();
10352         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10353         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10354         if (FirstODRHash != SecondODRHash) {
10355           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10356                            FirstExpr->getSourceRange(), StaticAssertCondition);
10357           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10358                           SecondExpr->getSourceRange(), StaticAssertCondition);
10359           Diagnosed = true;
10360           break;
10361         }
10362 
10363         StringLiteral *FirstStr = FirstSA->getMessage();
10364         StringLiteral *SecondStr = SecondSA->getMessage();
10365         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10366         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10367           SourceLocation FirstLoc, SecondLoc;
10368           SourceRange FirstRange, SecondRange;
10369           if (FirstStr) {
10370             FirstLoc = FirstStr->getBeginLoc();
10371             FirstRange = FirstStr->getSourceRange();
10372           } else {
10373             FirstLoc = FirstSA->getBeginLoc();
10374             FirstRange = FirstSA->getSourceRange();
10375           }
10376           if (SecondStr) {
10377             SecondLoc = SecondStr->getBeginLoc();
10378             SecondRange = SecondStr->getSourceRange();
10379           } else {
10380             SecondLoc = SecondSA->getBeginLoc();
10381             SecondRange = SecondSA->getSourceRange();
10382           }
10383           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10384                            StaticAssertOnlyMessage)
10385               << (FirstStr == nullptr);
10386           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10387                           StaticAssertOnlyMessage)
10388               << (SecondStr == nullptr);
10389           Diagnosed = true;
10390           break;
10391         }
10392 
10393         if (FirstStr && SecondStr &&
10394             FirstStr->getString() != SecondStr->getString()) {
10395           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10396                            FirstStr->getSourceRange(), StaticAssertMessage);
10397           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10398                           SecondStr->getSourceRange(), StaticAssertMessage);
10399           Diagnosed = true;
10400           break;
10401         }
10402         break;
10403       }
10404       case Field: {
10405         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10406                                  cast<FieldDecl>(FirstDecl),
10407                                  cast<FieldDecl>(SecondDecl));
10408         break;
10409       }
10410       case CXXMethod: {
10411         enum {
10412           DiagMethod,
10413           DiagConstructor,
10414           DiagDestructor,
10415         } FirstMethodType,
10416             SecondMethodType;
10417         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10418           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10419           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10420           return DiagMethod;
10421         };
10422         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10423         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10424         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10425         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10426         auto FirstName = FirstMethod->getDeclName();
10427         auto SecondName = SecondMethod->getDeclName();
10428         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10429           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10430                            FirstMethod->getSourceRange(), MethodName)
10431               << FirstMethodType << FirstName;
10432           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10433                           SecondMethod->getSourceRange(), MethodName)
10434               << SecondMethodType << SecondName;
10435 
10436           Diagnosed = true;
10437           break;
10438         }
10439 
10440         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10441         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10442         if (FirstDeleted != SecondDeleted) {
10443           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10444                            FirstMethod->getSourceRange(), MethodDeleted)
10445               << FirstMethodType << FirstName << FirstDeleted;
10446 
10447           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10448                           SecondMethod->getSourceRange(), MethodDeleted)
10449               << SecondMethodType << SecondName << SecondDeleted;
10450           Diagnosed = true;
10451           break;
10452         }
10453 
10454         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10455         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10456         if (FirstDefaulted != SecondDefaulted) {
10457           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10458                            FirstMethod->getSourceRange(), MethodDefaulted)
10459               << FirstMethodType << FirstName << FirstDefaulted;
10460 
10461           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10462                           SecondMethod->getSourceRange(), MethodDefaulted)
10463               << SecondMethodType << SecondName << SecondDefaulted;
10464           Diagnosed = true;
10465           break;
10466         }
10467 
10468         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10469         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10470         const bool FirstPure = FirstMethod->isPure();
10471         const bool SecondPure = SecondMethod->isPure();
10472         if ((FirstVirtual || SecondVirtual) &&
10473             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10474           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10475                            FirstMethod->getSourceRange(), MethodVirtual)
10476               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10477           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10478                           SecondMethod->getSourceRange(), MethodVirtual)
10479               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10480           Diagnosed = true;
10481           break;
10482         }
10483 
10484         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10485         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10486         // class needs to be checked instead.
10487         const auto FirstStorage = FirstMethod->getStorageClass();
10488         const auto SecondStorage = SecondMethod->getStorageClass();
10489         const bool FirstStatic = FirstStorage == SC_Static;
10490         const bool SecondStatic = SecondStorage == SC_Static;
10491         if (FirstStatic != SecondStatic) {
10492           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10493                            FirstMethod->getSourceRange(), MethodStatic)
10494               << FirstMethodType << FirstName << FirstStatic;
10495           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10496                           SecondMethod->getSourceRange(), MethodStatic)
10497               << SecondMethodType << SecondName << SecondStatic;
10498           Diagnosed = true;
10499           break;
10500         }
10501 
10502         const bool FirstVolatile = FirstMethod->isVolatile();
10503         const bool SecondVolatile = SecondMethod->isVolatile();
10504         if (FirstVolatile != SecondVolatile) {
10505           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10506                            FirstMethod->getSourceRange(), MethodVolatile)
10507               << FirstMethodType << FirstName << FirstVolatile;
10508           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10509                           SecondMethod->getSourceRange(), MethodVolatile)
10510               << SecondMethodType << SecondName << SecondVolatile;
10511           Diagnosed = true;
10512           break;
10513         }
10514 
10515         const bool FirstConst = FirstMethod->isConst();
10516         const bool SecondConst = SecondMethod->isConst();
10517         if (FirstConst != SecondConst) {
10518           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10519                            FirstMethod->getSourceRange(), MethodConst)
10520               << FirstMethodType << FirstName << FirstConst;
10521           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10522                           SecondMethod->getSourceRange(), MethodConst)
10523               << SecondMethodType << SecondName << SecondConst;
10524           Diagnosed = true;
10525           break;
10526         }
10527 
10528         const bool FirstInline = FirstMethod->isInlineSpecified();
10529         const bool SecondInline = SecondMethod->isInlineSpecified();
10530         if (FirstInline != SecondInline) {
10531           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10532                            FirstMethod->getSourceRange(), MethodInline)
10533               << FirstMethodType << FirstName << FirstInline;
10534           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10535                           SecondMethod->getSourceRange(), MethodInline)
10536               << SecondMethodType << SecondName << SecondInline;
10537           Diagnosed = true;
10538           break;
10539         }
10540 
10541         const unsigned FirstNumParameters = FirstMethod->param_size();
10542         const unsigned SecondNumParameters = SecondMethod->param_size();
10543         if (FirstNumParameters != SecondNumParameters) {
10544           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10545                            FirstMethod->getSourceRange(),
10546                            MethodNumberParameters)
10547               << FirstMethodType << FirstName << FirstNumParameters;
10548           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10549                           SecondMethod->getSourceRange(),
10550                           MethodNumberParameters)
10551               << SecondMethodType << SecondName << SecondNumParameters;
10552           Diagnosed = true;
10553           break;
10554         }
10555 
10556         // Need this status boolean to know when break out of the switch.
10557         bool ParameterMismatch = false;
10558         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10559           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10560           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10561 
10562           QualType FirstParamType = FirstParam->getType();
10563           QualType SecondParamType = SecondParam->getType();
10564           if (FirstParamType != SecondParamType &&
10565               ComputeQualTypeODRHash(FirstParamType) !=
10566                   ComputeQualTypeODRHash(SecondParamType)) {
10567             if (const DecayedType *ParamDecayedType =
10568                     FirstParamType->getAs<DecayedType>()) {
10569               ODRDiagDeclError(
10570                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10571                   FirstMethod->getSourceRange(), MethodParameterType)
10572                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10573                   << true << ParamDecayedType->getOriginalType();
10574             } else {
10575               ODRDiagDeclError(
10576                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10577                   FirstMethod->getSourceRange(), MethodParameterType)
10578                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10579                   << false;
10580             }
10581 
10582             if (const DecayedType *ParamDecayedType =
10583                     SecondParamType->getAs<DecayedType>()) {
10584               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10585                               SecondMethod->getSourceRange(),
10586                               MethodParameterType)
10587                   << SecondMethodType << SecondName << (I + 1)
10588                   << SecondParamType << true
10589                   << ParamDecayedType->getOriginalType();
10590             } else {
10591               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10592                               SecondMethod->getSourceRange(),
10593                               MethodParameterType)
10594                   << SecondMethodType << SecondName << (I + 1)
10595                   << SecondParamType << false;
10596             }
10597             ParameterMismatch = true;
10598             break;
10599           }
10600 
10601           DeclarationName FirstParamName = FirstParam->getDeclName();
10602           DeclarationName SecondParamName = SecondParam->getDeclName();
10603           if (FirstParamName != SecondParamName) {
10604             ODRDiagDeclError(FirstRecord, FirstModule,
10605                              FirstMethod->getLocation(),
10606                              FirstMethod->getSourceRange(), MethodParameterName)
10607                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10608             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10609                             SecondMethod->getSourceRange(), MethodParameterName)
10610                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10611             ParameterMismatch = true;
10612             break;
10613           }
10614 
10615           const Expr *FirstInit = FirstParam->getInit();
10616           const Expr *SecondInit = SecondParam->getInit();
10617           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10618             ODRDiagDeclError(FirstRecord, FirstModule,
10619                              FirstMethod->getLocation(),
10620                              FirstMethod->getSourceRange(),
10621                              MethodParameterSingleDefaultArgument)
10622                 << FirstMethodType << FirstName << (I + 1)
10623                 << (FirstInit == nullptr)
10624                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10625             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10626                             SecondMethod->getSourceRange(),
10627                             MethodParameterSingleDefaultArgument)
10628                 << SecondMethodType << SecondName << (I + 1)
10629                 << (SecondInit == nullptr)
10630                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10631             ParameterMismatch = true;
10632             break;
10633           }
10634 
10635           if (FirstInit && SecondInit &&
10636               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10637             ODRDiagDeclError(FirstRecord, FirstModule,
10638                              FirstMethod->getLocation(),
10639                              FirstMethod->getSourceRange(),
10640                              MethodParameterDifferentDefaultArgument)
10641                 << FirstMethodType << FirstName << (I + 1)
10642                 << FirstInit->getSourceRange();
10643             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10644                             SecondMethod->getSourceRange(),
10645                             MethodParameterDifferentDefaultArgument)
10646                 << SecondMethodType << SecondName << (I + 1)
10647                 << SecondInit->getSourceRange();
10648             ParameterMismatch = true;
10649             break;
10650 
10651           }
10652         }
10653 
10654         if (ParameterMismatch) {
10655           Diagnosed = true;
10656           break;
10657         }
10658 
10659         const auto *FirstTemplateArgs =
10660             FirstMethod->getTemplateSpecializationArgs();
10661         const auto *SecondTemplateArgs =
10662             SecondMethod->getTemplateSpecializationArgs();
10663 
10664         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10665             (!FirstTemplateArgs && SecondTemplateArgs)) {
10666           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10667                            FirstMethod->getSourceRange(),
10668                            MethodNoTemplateArguments)
10669               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10670           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10671                           SecondMethod->getSourceRange(),
10672                           MethodNoTemplateArguments)
10673               << SecondMethodType << SecondName
10674               << (SecondTemplateArgs != nullptr);
10675 
10676           Diagnosed = true;
10677           break;
10678         }
10679 
10680         if (FirstTemplateArgs && SecondTemplateArgs) {
10681           // Remove pack expansions from argument list.
10682           auto ExpandTemplateArgumentList =
10683               [](const TemplateArgumentList *TAL) {
10684                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10685                 for (const TemplateArgument &TA : TAL->asArray()) {
10686                   if (TA.getKind() != TemplateArgument::Pack) {
10687                     ExpandedList.push_back(&TA);
10688                     continue;
10689                   }
10690                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10691                     ExpandedList.push_back(&PackTA);
10692                   }
10693                 }
10694                 return ExpandedList;
10695               };
10696           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10697               ExpandTemplateArgumentList(FirstTemplateArgs);
10698           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10699               ExpandTemplateArgumentList(SecondTemplateArgs);
10700 
10701           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10702             ODRDiagDeclError(FirstRecord, FirstModule,
10703                              FirstMethod->getLocation(),
10704                              FirstMethod->getSourceRange(),
10705                              MethodDifferentNumberTemplateArguments)
10706                 << FirstMethodType << FirstName
10707                 << (unsigned)FirstExpandedList.size();
10708             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10709                             SecondMethod->getSourceRange(),
10710                             MethodDifferentNumberTemplateArguments)
10711                 << SecondMethodType << SecondName
10712                 << (unsigned)SecondExpandedList.size();
10713 
10714             Diagnosed = true;
10715             break;
10716           }
10717 
10718           bool TemplateArgumentMismatch = false;
10719           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10720             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10721                                    &SecondTA = *SecondExpandedList[i];
10722             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10723                 ComputeTemplateArgumentODRHash(SecondTA)) {
10724               continue;
10725             }
10726 
10727             ODRDiagDeclError(
10728                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10729                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10730                 << FirstMethodType << FirstName << FirstTA << i + 1;
10731             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10732                             SecondMethod->getSourceRange(),
10733                             MethodDifferentTemplateArgument)
10734                 << SecondMethodType << SecondName << SecondTA << i + 1;
10735 
10736             TemplateArgumentMismatch = true;
10737             break;
10738           }
10739 
10740           if (TemplateArgumentMismatch) {
10741             Diagnosed = true;
10742             break;
10743           }
10744         }
10745 
10746         // Compute the hash of the method as if it has no body.
10747         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10748           Hash.clear();
10749           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10750           return Hash.CalculateHash();
10751         };
10752 
10753         // Compare the hash generated to the hash stored.  A difference means
10754         // that a body was present in the original source.  Due to merging,
10755         // the stardard way of detecting a body will not work.
10756         const bool HasFirstBody =
10757             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10758         const bool HasSecondBody =
10759             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10760 
10761         if (HasFirstBody != HasSecondBody) {
10762           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10763                            FirstMethod->getSourceRange(), MethodSingleBody)
10764               << FirstMethodType << FirstName << HasFirstBody;
10765           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10766                           SecondMethod->getSourceRange(), MethodSingleBody)
10767               << SecondMethodType << SecondName << HasSecondBody;
10768           Diagnosed = true;
10769           break;
10770         }
10771 
10772         if (HasFirstBody && HasSecondBody) {
10773           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10774                            FirstMethod->getSourceRange(), MethodDifferentBody)
10775               << FirstMethodType << FirstName;
10776           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10777                           SecondMethod->getSourceRange(), MethodDifferentBody)
10778               << SecondMethodType << SecondName;
10779           Diagnosed = true;
10780           break;
10781         }
10782 
10783         break;
10784       }
10785       case TypeAlias:
10786       case TypeDef: {
10787         Diagnosed = ODRDiagTypeDefOrAlias(
10788             FirstRecord, FirstModule, SecondModule,
10789             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10790             FirstDiffType == TypeAlias);
10791         break;
10792       }
10793       case Var: {
10794         Diagnosed =
10795             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10796                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10797         break;
10798       }
10799       case Friend: {
10800         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10801         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10802 
10803         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10804         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10805 
10806         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10807         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10808 
10809         if (FirstND && SecondND) {
10810           ODRDiagDeclError(FirstRecord, FirstModule,
10811                            FirstFriend->getFriendLoc(),
10812                            FirstFriend->getSourceRange(), FriendFunction)
10813               << FirstND;
10814           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10815                           SecondFriend->getSourceRange(), FriendFunction)
10816               << SecondND;
10817 
10818           Diagnosed = true;
10819           break;
10820         }
10821 
10822         if (FirstTSI && SecondTSI) {
10823           QualType FirstFriendType = FirstTSI->getType();
10824           QualType SecondFriendType = SecondTSI->getType();
10825           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10826                  ComputeQualTypeODRHash(SecondFriendType));
10827           ODRDiagDeclError(FirstRecord, FirstModule,
10828                            FirstFriend->getFriendLoc(),
10829                            FirstFriend->getSourceRange(), FriendType)
10830               << FirstFriendType;
10831           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10832                           SecondFriend->getSourceRange(), FriendType)
10833               << SecondFriendType;
10834           Diagnosed = true;
10835           break;
10836         }
10837 
10838         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10839                          FirstFriend->getSourceRange(), FriendTypeFunction)
10840             << (FirstTSI == nullptr);
10841         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10842                         SecondFriend->getSourceRange(), FriendTypeFunction)
10843             << (SecondTSI == nullptr);
10844 
10845         Diagnosed = true;
10846         break;
10847       }
10848       case FunctionTemplate: {
10849         FunctionTemplateDecl *FirstTemplate =
10850             cast<FunctionTemplateDecl>(FirstDecl);
10851         FunctionTemplateDecl *SecondTemplate =
10852             cast<FunctionTemplateDecl>(SecondDecl);
10853 
10854         TemplateParameterList *FirstTPL =
10855             FirstTemplate->getTemplateParameters();
10856         TemplateParameterList *SecondTPL =
10857             SecondTemplate->getTemplateParameters();
10858 
10859         if (FirstTPL->size() != SecondTPL->size()) {
10860           ODRDiagDeclError(FirstRecord, FirstModule,
10861                            FirstTemplate->getLocation(),
10862                            FirstTemplate->getSourceRange(),
10863                            FunctionTemplateDifferentNumberParameters)
10864               << FirstTemplate << FirstTPL->size();
10865           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10866                           SecondTemplate->getSourceRange(),
10867                           FunctionTemplateDifferentNumberParameters)
10868               << SecondTemplate << SecondTPL->size();
10869 
10870           Diagnosed = true;
10871           break;
10872         }
10873 
10874         bool ParameterMismatch = false;
10875         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10876           NamedDecl *FirstParam = FirstTPL->getParam(i);
10877           NamedDecl *SecondParam = SecondTPL->getParam(i);
10878 
10879           if (FirstParam->getKind() != SecondParam->getKind()) {
10880             enum {
10881               TemplateTypeParameter,
10882               NonTypeTemplateParameter,
10883               TemplateTemplateParameter,
10884             };
10885             auto GetParamType = [](NamedDecl *D) {
10886               switch (D->getKind()) {
10887                 default:
10888                   llvm_unreachable("Unexpected template parameter type");
10889                 case Decl::TemplateTypeParm:
10890                   return TemplateTypeParameter;
10891                 case Decl::NonTypeTemplateParm:
10892                   return NonTypeTemplateParameter;
10893                 case Decl::TemplateTemplateParm:
10894                   return TemplateTemplateParameter;
10895               }
10896             };
10897 
10898             ODRDiagDeclError(FirstRecord, FirstModule,
10899                              FirstTemplate->getLocation(),
10900                              FirstTemplate->getSourceRange(),
10901                              FunctionTemplateParameterDifferentKind)
10902                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10903             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10904                             SecondTemplate->getSourceRange(),
10905                             FunctionTemplateParameterDifferentKind)
10906                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10907 
10908             ParameterMismatch = true;
10909             break;
10910           }
10911 
10912           if (FirstParam->getName() != SecondParam->getName()) {
10913             ODRDiagDeclError(
10914                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10915                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10916                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10917                 << FirstParam;
10918             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10919                             SecondTemplate->getSourceRange(),
10920                             FunctionTemplateParameterName)
10921                 << SecondTemplate << (i + 1)
10922                 << (bool)SecondParam->getIdentifier() << SecondParam;
10923             ParameterMismatch = true;
10924             break;
10925           }
10926 
10927           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10928               isa<TemplateTypeParmDecl>(SecondParam)) {
10929             TemplateTypeParmDecl *FirstTTPD =
10930                 cast<TemplateTypeParmDecl>(FirstParam);
10931             TemplateTypeParmDecl *SecondTTPD =
10932                 cast<TemplateTypeParmDecl>(SecondParam);
10933             bool HasFirstDefaultArgument =
10934                 FirstTTPD->hasDefaultArgument() &&
10935                 !FirstTTPD->defaultArgumentWasInherited();
10936             bool HasSecondDefaultArgument =
10937                 SecondTTPD->hasDefaultArgument() &&
10938                 !SecondTTPD->defaultArgumentWasInherited();
10939             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10940               ODRDiagDeclError(FirstRecord, FirstModule,
10941                                FirstTemplate->getLocation(),
10942                                FirstTemplate->getSourceRange(),
10943                                FunctionTemplateParameterSingleDefaultArgument)
10944                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10945               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10946                               SecondTemplate->getSourceRange(),
10947                               FunctionTemplateParameterSingleDefaultArgument)
10948                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10949               ParameterMismatch = true;
10950               break;
10951             }
10952 
10953             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10954               QualType FirstType = FirstTTPD->getDefaultArgument();
10955               QualType SecondType = SecondTTPD->getDefaultArgument();
10956               if (ComputeQualTypeODRHash(FirstType) !=
10957                   ComputeQualTypeODRHash(SecondType)) {
10958                 ODRDiagDeclError(
10959                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10960                     FirstTemplate->getSourceRange(),
10961                     FunctionTemplateParameterDifferentDefaultArgument)
10962                     << FirstTemplate << (i + 1) << FirstType;
10963                 ODRDiagDeclNote(
10964                     SecondModule, SecondTemplate->getLocation(),
10965                     SecondTemplate->getSourceRange(),
10966                     FunctionTemplateParameterDifferentDefaultArgument)
10967                     << SecondTemplate << (i + 1) << SecondType;
10968                 ParameterMismatch = true;
10969                 break;
10970               }
10971             }
10972 
10973             if (FirstTTPD->isParameterPack() !=
10974                 SecondTTPD->isParameterPack()) {
10975               ODRDiagDeclError(FirstRecord, FirstModule,
10976                                FirstTemplate->getLocation(),
10977                                FirstTemplate->getSourceRange(),
10978                                FunctionTemplatePackParameter)
10979                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10980               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10981                               SecondTemplate->getSourceRange(),
10982                               FunctionTemplatePackParameter)
10983                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10984               ParameterMismatch = true;
10985               break;
10986             }
10987           }
10988 
10989           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10990               isa<TemplateTemplateParmDecl>(SecondParam)) {
10991             TemplateTemplateParmDecl *FirstTTPD =
10992                 cast<TemplateTemplateParmDecl>(FirstParam);
10993             TemplateTemplateParmDecl *SecondTTPD =
10994                 cast<TemplateTemplateParmDecl>(SecondParam);
10995 
10996             TemplateParameterList *FirstTPL =
10997                 FirstTTPD->getTemplateParameters();
10998             TemplateParameterList *SecondTPL =
10999                 SecondTTPD->getTemplateParameters();
11000 
11001             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11002                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11003               ODRDiagDeclError(FirstRecord, FirstModule,
11004                                FirstTemplate->getLocation(),
11005                                FirstTemplate->getSourceRange(),
11006                                FunctionTemplateParameterDifferentType)
11007                   << FirstTemplate << (i + 1);
11008               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11009                               SecondTemplate->getSourceRange(),
11010                               FunctionTemplateParameterDifferentType)
11011                   << SecondTemplate << (i + 1);
11012               ParameterMismatch = true;
11013               break;
11014             }
11015 
11016             bool HasFirstDefaultArgument =
11017                 FirstTTPD->hasDefaultArgument() &&
11018                 !FirstTTPD->defaultArgumentWasInherited();
11019             bool HasSecondDefaultArgument =
11020                 SecondTTPD->hasDefaultArgument() &&
11021                 !SecondTTPD->defaultArgumentWasInherited();
11022             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11023               ODRDiagDeclError(FirstRecord, FirstModule,
11024                                FirstTemplate->getLocation(),
11025                                FirstTemplate->getSourceRange(),
11026                                FunctionTemplateParameterSingleDefaultArgument)
11027                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11028               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11029                               SecondTemplate->getSourceRange(),
11030                               FunctionTemplateParameterSingleDefaultArgument)
11031                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11032               ParameterMismatch = true;
11033               break;
11034             }
11035 
11036             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11037               TemplateArgument FirstTA =
11038                   FirstTTPD->getDefaultArgument().getArgument();
11039               TemplateArgument SecondTA =
11040                   SecondTTPD->getDefaultArgument().getArgument();
11041               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11042                   ComputeTemplateArgumentODRHash(SecondTA)) {
11043                 ODRDiagDeclError(
11044                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11045                     FirstTemplate->getSourceRange(),
11046                     FunctionTemplateParameterDifferentDefaultArgument)
11047                     << FirstTemplate << (i + 1) << FirstTA;
11048                 ODRDiagDeclNote(
11049                     SecondModule, SecondTemplate->getLocation(),
11050                     SecondTemplate->getSourceRange(),
11051                     FunctionTemplateParameterDifferentDefaultArgument)
11052                     << SecondTemplate << (i + 1) << SecondTA;
11053                 ParameterMismatch = true;
11054                 break;
11055               }
11056             }
11057 
11058             if (FirstTTPD->isParameterPack() !=
11059                 SecondTTPD->isParameterPack()) {
11060               ODRDiagDeclError(FirstRecord, FirstModule,
11061                                FirstTemplate->getLocation(),
11062                                FirstTemplate->getSourceRange(),
11063                                FunctionTemplatePackParameter)
11064                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11065               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11066                               SecondTemplate->getSourceRange(),
11067                               FunctionTemplatePackParameter)
11068                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11069               ParameterMismatch = true;
11070               break;
11071             }
11072           }
11073 
11074           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11075               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11076             NonTypeTemplateParmDecl *FirstNTTPD =
11077                 cast<NonTypeTemplateParmDecl>(FirstParam);
11078             NonTypeTemplateParmDecl *SecondNTTPD =
11079                 cast<NonTypeTemplateParmDecl>(SecondParam);
11080 
11081             QualType FirstType = FirstNTTPD->getType();
11082             QualType SecondType = SecondNTTPD->getType();
11083             if (ComputeQualTypeODRHash(FirstType) !=
11084                 ComputeQualTypeODRHash(SecondType)) {
11085               ODRDiagDeclError(FirstRecord, FirstModule,
11086                                FirstTemplate->getLocation(),
11087                                FirstTemplate->getSourceRange(),
11088                                FunctionTemplateParameterDifferentType)
11089                   << FirstTemplate << (i + 1);
11090               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11091                               SecondTemplate->getSourceRange(),
11092                               FunctionTemplateParameterDifferentType)
11093                   << SecondTemplate << (i + 1);
11094               ParameterMismatch = true;
11095               break;
11096             }
11097 
11098             bool HasFirstDefaultArgument =
11099                 FirstNTTPD->hasDefaultArgument() &&
11100                 !FirstNTTPD->defaultArgumentWasInherited();
11101             bool HasSecondDefaultArgument =
11102                 SecondNTTPD->hasDefaultArgument() &&
11103                 !SecondNTTPD->defaultArgumentWasInherited();
11104             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11105               ODRDiagDeclError(FirstRecord, FirstModule,
11106                                FirstTemplate->getLocation(),
11107                                FirstTemplate->getSourceRange(),
11108                                FunctionTemplateParameterSingleDefaultArgument)
11109                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11110               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11111                               SecondTemplate->getSourceRange(),
11112                               FunctionTemplateParameterSingleDefaultArgument)
11113                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11114               ParameterMismatch = true;
11115               break;
11116             }
11117 
11118             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11119               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11120               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11121               if (ComputeODRHash(FirstDefaultArgument) !=
11122                   ComputeODRHash(SecondDefaultArgument)) {
11123                 ODRDiagDeclError(
11124                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11125                     FirstTemplate->getSourceRange(),
11126                     FunctionTemplateParameterDifferentDefaultArgument)
11127                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11128                 ODRDiagDeclNote(
11129                     SecondModule, SecondTemplate->getLocation(),
11130                     SecondTemplate->getSourceRange(),
11131                     FunctionTemplateParameterDifferentDefaultArgument)
11132                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11133                 ParameterMismatch = true;
11134                 break;
11135               }
11136             }
11137 
11138             if (FirstNTTPD->isParameterPack() !=
11139                 SecondNTTPD->isParameterPack()) {
11140               ODRDiagDeclError(FirstRecord, FirstModule,
11141                                FirstTemplate->getLocation(),
11142                                FirstTemplate->getSourceRange(),
11143                                FunctionTemplatePackParameter)
11144                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11145               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11146                               SecondTemplate->getSourceRange(),
11147                               FunctionTemplatePackParameter)
11148                   << SecondTemplate << (i + 1)
11149                   << SecondNTTPD->isParameterPack();
11150               ParameterMismatch = true;
11151               break;
11152             }
11153           }
11154         }
11155 
11156         if (ParameterMismatch) {
11157           Diagnosed = true;
11158           break;
11159         }
11160 
11161         break;
11162       }
11163       }
11164 
11165       if (Diagnosed)
11166         continue;
11167 
11168       Diag(FirstDecl->getLocation(),
11169            diag::err_module_odr_violation_mismatch_decl_unknown)
11170           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11171           << FirstDecl->getSourceRange();
11172       Diag(SecondDecl->getLocation(),
11173            diag::note_module_odr_violation_mismatch_decl_unknown)
11174           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11175       Diagnosed = true;
11176     }
11177 
11178     if (!Diagnosed) {
11179       // All definitions are updates to the same declaration. This happens if a
11180       // module instantiates the declaration of a class template specialization
11181       // and two or more other modules instantiate its definition.
11182       //
11183       // FIXME: Indicate which modules had instantiations of this definition.
11184       // FIXME: How can this even happen?
11185       Diag(Merge.first->getLocation(),
11186            diag::err_module_odr_violation_different_instantiations)
11187         << Merge.first;
11188     }
11189   }
11190 
11191   // Issue ODR failures diagnostics for functions.
11192   for (auto &Merge : FunctionOdrMergeFailures) {
11193     enum ODRFunctionDifference {
11194       ReturnType,
11195       ParameterName,
11196       ParameterType,
11197       ParameterSingleDefaultArgument,
11198       ParameterDifferentDefaultArgument,
11199       FunctionBody,
11200     };
11201 
11202     FunctionDecl *FirstFunction = Merge.first;
11203     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11204 
11205     bool Diagnosed = false;
11206     for (auto &SecondFunction : Merge.second) {
11207 
11208       if (FirstFunction == SecondFunction)
11209         continue;
11210 
11211       std::string SecondModule =
11212           getOwningModuleNameForDiagnostic(SecondFunction);
11213 
11214       auto ODRDiagError = [FirstFunction, &FirstModule,
11215                            this](SourceLocation Loc, SourceRange Range,
11216                                  ODRFunctionDifference DiffType) {
11217         return Diag(Loc, diag::err_module_odr_violation_function)
11218                << FirstFunction << FirstModule.empty() << FirstModule << Range
11219                << DiffType;
11220       };
11221       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11222                                                SourceRange Range,
11223                                                ODRFunctionDifference DiffType) {
11224         return Diag(Loc, diag::note_module_odr_violation_function)
11225                << SecondModule << Range << DiffType;
11226       };
11227 
11228       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11229           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11230         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11231                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11232             << FirstFunction->getReturnType();
11233         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11234                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11235             << SecondFunction->getReturnType();
11236         Diagnosed = true;
11237         break;
11238       }
11239 
11240       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11241              "Merged functions with different number of parameters");
11242 
11243       auto ParamSize = FirstFunction->param_size();
11244       bool ParameterMismatch = false;
11245       for (unsigned I = 0; I < ParamSize; ++I) {
11246         auto *FirstParam = FirstFunction->getParamDecl(I);
11247         auto *SecondParam = SecondFunction->getParamDecl(I);
11248 
11249         assert(getContext().hasSameType(FirstParam->getType(),
11250                                       SecondParam->getType()) &&
11251                "Merged function has different parameter types.");
11252 
11253         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11254           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11255                        ParameterName)
11256               << I + 1 << FirstParam->getDeclName();
11257           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11258                       ParameterName)
11259               << I + 1 << SecondParam->getDeclName();
11260           ParameterMismatch = true;
11261           break;
11262         };
11263 
11264         QualType FirstParamType = FirstParam->getType();
11265         QualType SecondParamType = SecondParam->getType();
11266         if (FirstParamType != SecondParamType &&
11267             ComputeQualTypeODRHash(FirstParamType) !=
11268                 ComputeQualTypeODRHash(SecondParamType)) {
11269           if (const DecayedType *ParamDecayedType =
11270                   FirstParamType->getAs<DecayedType>()) {
11271             ODRDiagError(FirstParam->getLocation(),
11272                          FirstParam->getSourceRange(), ParameterType)
11273                 << (I + 1) << FirstParamType << true
11274                 << ParamDecayedType->getOriginalType();
11275           } else {
11276             ODRDiagError(FirstParam->getLocation(),
11277                          FirstParam->getSourceRange(), ParameterType)
11278                 << (I + 1) << FirstParamType << false;
11279           }
11280 
11281           if (const DecayedType *ParamDecayedType =
11282                   SecondParamType->getAs<DecayedType>()) {
11283             ODRDiagNote(SecondParam->getLocation(),
11284                         SecondParam->getSourceRange(), ParameterType)
11285                 << (I + 1) << SecondParamType << true
11286                 << ParamDecayedType->getOriginalType();
11287           } else {
11288             ODRDiagNote(SecondParam->getLocation(),
11289                         SecondParam->getSourceRange(), ParameterType)
11290                 << (I + 1) << SecondParamType << false;
11291           }
11292           ParameterMismatch = true;
11293           break;
11294         }
11295 
11296         const Expr *FirstInit = FirstParam->getInit();
11297         const Expr *SecondInit = SecondParam->getInit();
11298         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11299           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11300                        ParameterSingleDefaultArgument)
11301               << (I + 1) << (FirstInit == nullptr)
11302               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11303           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11304                       ParameterSingleDefaultArgument)
11305               << (I + 1) << (SecondInit == nullptr)
11306               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11307           ParameterMismatch = true;
11308           break;
11309         }
11310 
11311         if (FirstInit && SecondInit &&
11312             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11313           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11314                        ParameterDifferentDefaultArgument)
11315               << (I + 1) << FirstInit->getSourceRange();
11316           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11317                       ParameterDifferentDefaultArgument)
11318               << (I + 1) << SecondInit->getSourceRange();
11319           ParameterMismatch = true;
11320           break;
11321         }
11322 
11323         assert(ComputeSubDeclODRHash(FirstParam) ==
11324                    ComputeSubDeclODRHash(SecondParam) &&
11325                "Undiagnosed parameter difference.");
11326       }
11327 
11328       if (ParameterMismatch) {
11329         Diagnosed = true;
11330         break;
11331       }
11332 
11333       // If no error has been generated before now, assume the problem is in
11334       // the body and generate a message.
11335       ODRDiagError(FirstFunction->getLocation(),
11336                    FirstFunction->getSourceRange(), FunctionBody);
11337       ODRDiagNote(SecondFunction->getLocation(),
11338                   SecondFunction->getSourceRange(), FunctionBody);
11339       Diagnosed = true;
11340       break;
11341     }
11342     (void)Diagnosed;
11343     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11344   }
11345 
11346   // Issue ODR failures diagnostics for enums.
11347   for (auto &Merge : EnumOdrMergeFailures) {
11348     enum ODREnumDifference {
11349       SingleScopedEnum,
11350       EnumTagKeywordMismatch,
11351       SingleSpecifiedType,
11352       DifferentSpecifiedTypes,
11353       DifferentNumberEnumConstants,
11354       EnumConstantName,
11355       EnumConstantSingleInitilizer,
11356       EnumConstantDifferentInitilizer,
11357     };
11358 
11359     // If we've already pointed out a specific problem with this enum, don't
11360     // bother issuing a general "something's different" diagnostic.
11361     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11362       continue;
11363 
11364     EnumDecl *FirstEnum = Merge.first;
11365     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11366 
11367     using DeclHashes =
11368         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11369     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11370                               DeclHashes &Hashes, EnumDecl *Enum) {
11371       for (auto *D : Enum->decls()) {
11372         // Due to decl merging, the first EnumDecl is the parent of
11373         // Decls in both records.
11374         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11375           continue;
11376         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11377         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11378                             ComputeSubDeclODRHash(D));
11379       }
11380     };
11381     DeclHashes FirstHashes;
11382     PopulateHashes(FirstHashes, FirstEnum);
11383     bool Diagnosed = false;
11384     for (auto &SecondEnum : Merge.second) {
11385 
11386       if (FirstEnum == SecondEnum)
11387         continue;
11388 
11389       std::string SecondModule =
11390           getOwningModuleNameForDiagnostic(SecondEnum);
11391 
11392       auto ODRDiagError = [FirstEnum, &FirstModule,
11393                            this](SourceLocation Loc, SourceRange Range,
11394                                  ODREnumDifference DiffType) {
11395         return Diag(Loc, diag::err_module_odr_violation_enum)
11396                << FirstEnum << FirstModule.empty() << FirstModule << Range
11397                << DiffType;
11398       };
11399       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11400                                                SourceRange Range,
11401                                                ODREnumDifference DiffType) {
11402         return Diag(Loc, diag::note_module_odr_violation_enum)
11403                << SecondModule << Range << DiffType;
11404       };
11405 
11406       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11407         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11408                      SingleScopedEnum)
11409             << FirstEnum->isScoped();
11410         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11411                     SingleScopedEnum)
11412             << SecondEnum->isScoped();
11413         Diagnosed = true;
11414         continue;
11415       }
11416 
11417       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11418         if (FirstEnum->isScopedUsingClassTag() !=
11419             SecondEnum->isScopedUsingClassTag()) {
11420           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11421                        EnumTagKeywordMismatch)
11422               << FirstEnum->isScopedUsingClassTag();
11423           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11424                       EnumTagKeywordMismatch)
11425               << SecondEnum->isScopedUsingClassTag();
11426           Diagnosed = true;
11427           continue;
11428         }
11429       }
11430 
11431       QualType FirstUnderlyingType =
11432           FirstEnum->getIntegerTypeSourceInfo()
11433               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11434               : QualType();
11435       QualType SecondUnderlyingType =
11436           SecondEnum->getIntegerTypeSourceInfo()
11437               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11438               : QualType();
11439       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11440           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11441                        SingleSpecifiedType)
11442               << !FirstUnderlyingType.isNull();
11443           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11444                       SingleSpecifiedType)
11445               << !SecondUnderlyingType.isNull();
11446           Diagnosed = true;
11447           continue;
11448       }
11449 
11450       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11451         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11452             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11453           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11454                        DifferentSpecifiedTypes)
11455               << FirstUnderlyingType;
11456           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11457                       DifferentSpecifiedTypes)
11458               << SecondUnderlyingType;
11459           Diagnosed = true;
11460           continue;
11461         }
11462       }
11463 
11464       DeclHashes SecondHashes;
11465       PopulateHashes(SecondHashes, SecondEnum);
11466 
11467       if (FirstHashes.size() != SecondHashes.size()) {
11468         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11469                      DifferentNumberEnumConstants)
11470             << (int)FirstHashes.size();
11471         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11472                     DifferentNumberEnumConstants)
11473             << (int)SecondHashes.size();
11474         Diagnosed = true;
11475         continue;
11476       }
11477 
11478       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11479         if (FirstHashes[I].second == SecondHashes[I].second)
11480           continue;
11481         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11482         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11483 
11484         if (FirstEnumConstant->getDeclName() !=
11485             SecondEnumConstant->getDeclName()) {
11486 
11487           ODRDiagError(FirstEnumConstant->getLocation(),
11488                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11489               << I + 1 << FirstEnumConstant;
11490           ODRDiagNote(SecondEnumConstant->getLocation(),
11491                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11492               << I + 1 << SecondEnumConstant;
11493           Diagnosed = true;
11494           break;
11495         }
11496 
11497         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11498         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11499         if (!FirstInit && !SecondInit)
11500           continue;
11501 
11502         if (!FirstInit || !SecondInit) {
11503           ODRDiagError(FirstEnumConstant->getLocation(),
11504                        FirstEnumConstant->getSourceRange(),
11505                        EnumConstantSingleInitilizer)
11506               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11507           ODRDiagNote(SecondEnumConstant->getLocation(),
11508                       SecondEnumConstant->getSourceRange(),
11509                       EnumConstantSingleInitilizer)
11510               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11511           Diagnosed = true;
11512           break;
11513         }
11514 
11515         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11516           ODRDiagError(FirstEnumConstant->getLocation(),
11517                        FirstEnumConstant->getSourceRange(),
11518                        EnumConstantDifferentInitilizer)
11519               << I + 1 << FirstEnumConstant;
11520           ODRDiagNote(SecondEnumConstant->getLocation(),
11521                       SecondEnumConstant->getSourceRange(),
11522                       EnumConstantDifferentInitilizer)
11523               << I + 1 << SecondEnumConstant;
11524           Diagnosed = true;
11525           break;
11526         }
11527       }
11528     }
11529 
11530     (void)Diagnosed;
11531     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11532   }
11533 }
11534 
11535 void ASTReader::StartedDeserializing() {
11536   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11537     ReadTimer->startTimer();
11538 }
11539 
11540 void ASTReader::FinishedDeserializing() {
11541   assert(NumCurrentElementsDeserializing &&
11542          "FinishedDeserializing not paired with StartedDeserializing");
11543   if (NumCurrentElementsDeserializing == 1) {
11544     // We decrease NumCurrentElementsDeserializing only after pending actions
11545     // are finished, to avoid recursively re-calling finishPendingActions().
11546     finishPendingActions();
11547   }
11548   --NumCurrentElementsDeserializing;
11549 
11550   if (NumCurrentElementsDeserializing == 0) {
11551     // Propagate exception specification and deduced type updates along
11552     // redeclaration chains.
11553     //
11554     // We do this now rather than in finishPendingActions because we want to
11555     // be able to walk the complete redeclaration chains of the updated decls.
11556     while (!PendingExceptionSpecUpdates.empty() ||
11557            !PendingDeducedTypeUpdates.empty()) {
11558       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11559       PendingExceptionSpecUpdates.clear();
11560       for (auto Update : ESUpdates) {
11561         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11562         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11563         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11564         if (auto *Listener = getContext().getASTMutationListener())
11565           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11566         for (auto *Redecl : Update.second->redecls())
11567           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11568       }
11569 
11570       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11571       PendingDeducedTypeUpdates.clear();
11572       for (auto Update : DTUpdates) {
11573         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11574         // FIXME: If the return type is already deduced, check that it matches.
11575         getContext().adjustDeducedFunctionResultType(Update.first,
11576                                                      Update.second);
11577       }
11578     }
11579 
11580     if (ReadTimer)
11581       ReadTimer->stopTimer();
11582 
11583     diagnoseOdrViolations();
11584 
11585     // We are not in recursive loading, so it's safe to pass the "interesting"
11586     // decls to the consumer.
11587     if (Consumer)
11588       PassInterestingDeclsToConsumer();
11589   }
11590 }
11591 
11592 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11593   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11594     // Remove any fake results before adding any real ones.
11595     auto It = PendingFakeLookupResults.find(II);
11596     if (It != PendingFakeLookupResults.end()) {
11597       for (auto *ND : It->second)
11598         SemaObj->IdResolver.RemoveDecl(ND);
11599       // FIXME: this works around module+PCH performance issue.
11600       // Rather than erase the result from the map, which is O(n), just clear
11601       // the vector of NamedDecls.
11602       It->second.clear();
11603     }
11604   }
11605 
11606   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11607     SemaObj->TUScope->AddDecl(D);
11608   } else if (SemaObj->TUScope) {
11609     // Adding the decl to IdResolver may have failed because it was already in
11610     // (even though it was not added in scope). If it is already in, make sure
11611     // it gets in the scope as well.
11612     if (std::find(SemaObj->IdResolver.begin(Name),
11613                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11614       SemaObj->TUScope->AddDecl(D);
11615   }
11616 }
11617 
11618 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11619                      ASTContext *Context,
11620                      const PCHContainerReader &PCHContainerRdr,
11621                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11622                      StringRef isysroot,
11623                      DisableValidationForModuleKind DisableValidationKind,
11624                      bool AllowASTWithCompilerErrors,
11625                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11626                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11627                      std::unique_ptr<llvm::Timer> ReadTimer)
11628     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11629                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11630                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11631       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11632       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11633       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11634                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11635       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11636       DisableValidationKind(DisableValidationKind),
11637       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11638       AllowConfigurationMismatch(AllowConfigurationMismatch),
11639       ValidateSystemInputs(ValidateSystemInputs),
11640       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11641       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11642   SourceMgr.setExternalSLocEntrySource(this);
11643 
11644   for (const auto &Ext : Extensions) {
11645     auto BlockName = Ext->getExtensionMetadata().BlockName;
11646     auto Known = ModuleFileExtensions.find(BlockName);
11647     if (Known != ModuleFileExtensions.end()) {
11648       Diags.Report(diag::warn_duplicate_module_file_extension)
11649         << BlockName;
11650       continue;
11651     }
11652 
11653     ModuleFileExtensions.insert({BlockName, Ext});
11654   }
11655 }
11656 
11657 ASTReader::~ASTReader() {
11658   if (OwnsDeserializationListener)
11659     delete DeserializationListener;
11660 }
11661 
11662 IdentifierResolver &ASTReader::getIdResolver() {
11663   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11664 }
11665 
11666 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11667                                                unsigned AbbrevID) {
11668   Idx = 0;
11669   Record.clear();
11670   return Cursor.readRecord(AbbrevID, Record);
11671 }
11672 //===----------------------------------------------------------------------===//
11673 //// OMPClauseReader implementation
11674 ////===----------------------------------------------------------------------===//
11675 
11676 // This has to be in namespace clang because it's friended by all
11677 // of the OMP clauses.
11678 namespace clang {
11679 
11680 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11681   ASTRecordReader &Record;
11682   ASTContext &Context;
11683 
11684 public:
11685   OMPClauseReader(ASTRecordReader &Record)
11686       : Record(Record), Context(Record.getContext()) {}
11687 #define GEN_CLANG_CLAUSE_CLASS
11688 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11689 #include "llvm/Frontend/OpenMP/OMP.inc"
11690   OMPClause *readClause();
11691   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11692   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11693 };
11694 
11695 } // end namespace clang
11696 
11697 OMPClause *ASTRecordReader::readOMPClause() {
11698   return OMPClauseReader(*this).readClause();
11699 }
11700 
11701 OMPClause *OMPClauseReader::readClause() {
11702   OMPClause *C = nullptr;
11703   switch (llvm::omp::Clause(Record.readInt())) {
11704   case llvm::omp::OMPC_if:
11705     C = new (Context) OMPIfClause();
11706     break;
11707   case llvm::omp::OMPC_final:
11708     C = new (Context) OMPFinalClause();
11709     break;
11710   case llvm::omp::OMPC_num_threads:
11711     C = new (Context) OMPNumThreadsClause();
11712     break;
11713   case llvm::omp::OMPC_safelen:
11714     C = new (Context) OMPSafelenClause();
11715     break;
11716   case llvm::omp::OMPC_simdlen:
11717     C = new (Context) OMPSimdlenClause();
11718     break;
11719   case llvm::omp::OMPC_sizes: {
11720     unsigned NumSizes = Record.readInt();
11721     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11722     break;
11723   }
11724   case llvm::omp::OMPC_full:
11725     C = OMPFullClause::CreateEmpty(Context);
11726     break;
11727   case llvm::omp::OMPC_partial:
11728     C = OMPPartialClause::CreateEmpty(Context);
11729     break;
11730   case llvm::omp::OMPC_allocator:
11731     C = new (Context) OMPAllocatorClause();
11732     break;
11733   case llvm::omp::OMPC_collapse:
11734     C = new (Context) OMPCollapseClause();
11735     break;
11736   case llvm::omp::OMPC_default:
11737     C = new (Context) OMPDefaultClause();
11738     break;
11739   case llvm::omp::OMPC_proc_bind:
11740     C = new (Context) OMPProcBindClause();
11741     break;
11742   case llvm::omp::OMPC_schedule:
11743     C = new (Context) OMPScheduleClause();
11744     break;
11745   case llvm::omp::OMPC_ordered:
11746     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11747     break;
11748   case llvm::omp::OMPC_nowait:
11749     C = new (Context) OMPNowaitClause();
11750     break;
11751   case llvm::omp::OMPC_untied:
11752     C = new (Context) OMPUntiedClause();
11753     break;
11754   case llvm::omp::OMPC_mergeable:
11755     C = new (Context) OMPMergeableClause();
11756     break;
11757   case llvm::omp::OMPC_read:
11758     C = new (Context) OMPReadClause();
11759     break;
11760   case llvm::omp::OMPC_write:
11761     C = new (Context) OMPWriteClause();
11762     break;
11763   case llvm::omp::OMPC_update:
11764     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11765     break;
11766   case llvm::omp::OMPC_capture:
11767     C = new (Context) OMPCaptureClause();
11768     break;
11769   case llvm::omp::OMPC_seq_cst:
11770     C = new (Context) OMPSeqCstClause();
11771     break;
11772   case llvm::omp::OMPC_acq_rel:
11773     C = new (Context) OMPAcqRelClause();
11774     break;
11775   case llvm::omp::OMPC_acquire:
11776     C = new (Context) OMPAcquireClause();
11777     break;
11778   case llvm::omp::OMPC_release:
11779     C = new (Context) OMPReleaseClause();
11780     break;
11781   case llvm::omp::OMPC_relaxed:
11782     C = new (Context) OMPRelaxedClause();
11783     break;
11784   case llvm::omp::OMPC_threads:
11785     C = new (Context) OMPThreadsClause();
11786     break;
11787   case llvm::omp::OMPC_simd:
11788     C = new (Context) OMPSIMDClause();
11789     break;
11790   case llvm::omp::OMPC_nogroup:
11791     C = new (Context) OMPNogroupClause();
11792     break;
11793   case llvm::omp::OMPC_unified_address:
11794     C = new (Context) OMPUnifiedAddressClause();
11795     break;
11796   case llvm::omp::OMPC_unified_shared_memory:
11797     C = new (Context) OMPUnifiedSharedMemoryClause();
11798     break;
11799   case llvm::omp::OMPC_reverse_offload:
11800     C = new (Context) OMPReverseOffloadClause();
11801     break;
11802   case llvm::omp::OMPC_dynamic_allocators:
11803     C = new (Context) OMPDynamicAllocatorsClause();
11804     break;
11805   case llvm::omp::OMPC_atomic_default_mem_order:
11806     C = new (Context) OMPAtomicDefaultMemOrderClause();
11807     break;
11808  case llvm::omp::OMPC_private:
11809     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11810     break;
11811   case llvm::omp::OMPC_firstprivate:
11812     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11813     break;
11814   case llvm::omp::OMPC_lastprivate:
11815     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11816     break;
11817   case llvm::omp::OMPC_shared:
11818     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11819     break;
11820   case llvm::omp::OMPC_reduction: {
11821     unsigned N = Record.readInt();
11822     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11823     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11824     break;
11825   }
11826   case llvm::omp::OMPC_task_reduction:
11827     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11828     break;
11829   case llvm::omp::OMPC_in_reduction:
11830     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11831     break;
11832   case llvm::omp::OMPC_linear:
11833     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11834     break;
11835   case llvm::omp::OMPC_aligned:
11836     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11837     break;
11838   case llvm::omp::OMPC_copyin:
11839     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11840     break;
11841   case llvm::omp::OMPC_copyprivate:
11842     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11843     break;
11844   case llvm::omp::OMPC_flush:
11845     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11846     break;
11847   case llvm::omp::OMPC_depobj:
11848     C = OMPDepobjClause::CreateEmpty(Context);
11849     break;
11850   case llvm::omp::OMPC_depend: {
11851     unsigned NumVars = Record.readInt();
11852     unsigned NumLoops = Record.readInt();
11853     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11854     break;
11855   }
11856   case llvm::omp::OMPC_device:
11857     C = new (Context) OMPDeviceClause();
11858     break;
11859   case llvm::omp::OMPC_map: {
11860     OMPMappableExprListSizeTy Sizes;
11861     Sizes.NumVars = Record.readInt();
11862     Sizes.NumUniqueDeclarations = Record.readInt();
11863     Sizes.NumComponentLists = Record.readInt();
11864     Sizes.NumComponents = Record.readInt();
11865     C = OMPMapClause::CreateEmpty(Context, Sizes);
11866     break;
11867   }
11868   case llvm::omp::OMPC_num_teams:
11869     C = new (Context) OMPNumTeamsClause();
11870     break;
11871   case llvm::omp::OMPC_thread_limit:
11872     C = new (Context) OMPThreadLimitClause();
11873     break;
11874   case llvm::omp::OMPC_priority:
11875     C = new (Context) OMPPriorityClause();
11876     break;
11877   case llvm::omp::OMPC_grainsize:
11878     C = new (Context) OMPGrainsizeClause();
11879     break;
11880   case llvm::omp::OMPC_num_tasks:
11881     C = new (Context) OMPNumTasksClause();
11882     break;
11883   case llvm::omp::OMPC_hint:
11884     C = new (Context) OMPHintClause();
11885     break;
11886   case llvm::omp::OMPC_dist_schedule:
11887     C = new (Context) OMPDistScheduleClause();
11888     break;
11889   case llvm::omp::OMPC_defaultmap:
11890     C = new (Context) OMPDefaultmapClause();
11891     break;
11892   case llvm::omp::OMPC_to: {
11893     OMPMappableExprListSizeTy Sizes;
11894     Sizes.NumVars = Record.readInt();
11895     Sizes.NumUniqueDeclarations = Record.readInt();
11896     Sizes.NumComponentLists = Record.readInt();
11897     Sizes.NumComponents = Record.readInt();
11898     C = OMPToClause::CreateEmpty(Context, Sizes);
11899     break;
11900   }
11901   case llvm::omp::OMPC_from: {
11902     OMPMappableExprListSizeTy Sizes;
11903     Sizes.NumVars = Record.readInt();
11904     Sizes.NumUniqueDeclarations = Record.readInt();
11905     Sizes.NumComponentLists = Record.readInt();
11906     Sizes.NumComponents = Record.readInt();
11907     C = OMPFromClause::CreateEmpty(Context, Sizes);
11908     break;
11909   }
11910   case llvm::omp::OMPC_use_device_ptr: {
11911     OMPMappableExprListSizeTy Sizes;
11912     Sizes.NumVars = Record.readInt();
11913     Sizes.NumUniqueDeclarations = Record.readInt();
11914     Sizes.NumComponentLists = Record.readInt();
11915     Sizes.NumComponents = Record.readInt();
11916     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11917     break;
11918   }
11919   case llvm::omp::OMPC_use_device_addr: {
11920     OMPMappableExprListSizeTy Sizes;
11921     Sizes.NumVars = Record.readInt();
11922     Sizes.NumUniqueDeclarations = Record.readInt();
11923     Sizes.NumComponentLists = Record.readInt();
11924     Sizes.NumComponents = Record.readInt();
11925     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11926     break;
11927   }
11928   case llvm::omp::OMPC_is_device_ptr: {
11929     OMPMappableExprListSizeTy Sizes;
11930     Sizes.NumVars = Record.readInt();
11931     Sizes.NumUniqueDeclarations = Record.readInt();
11932     Sizes.NumComponentLists = Record.readInt();
11933     Sizes.NumComponents = Record.readInt();
11934     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11935     break;
11936   }
11937   case llvm::omp::OMPC_allocate:
11938     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11939     break;
11940   case llvm::omp::OMPC_nontemporal:
11941     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11942     break;
11943   case llvm::omp::OMPC_inclusive:
11944     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11945     break;
11946   case llvm::omp::OMPC_exclusive:
11947     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11948     break;
11949   case llvm::omp::OMPC_order:
11950     C = new (Context) OMPOrderClause();
11951     break;
11952   case llvm::omp::OMPC_init:
11953     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11954     break;
11955   case llvm::omp::OMPC_use:
11956     C = new (Context) OMPUseClause();
11957     break;
11958   case llvm::omp::OMPC_destroy:
11959     C = new (Context) OMPDestroyClause();
11960     break;
11961   case llvm::omp::OMPC_novariants:
11962     C = new (Context) OMPNovariantsClause();
11963     break;
11964   case llvm::omp::OMPC_nocontext:
11965     C = new (Context) OMPNocontextClause();
11966     break;
11967   case llvm::omp::OMPC_detach:
11968     C = new (Context) OMPDetachClause();
11969     break;
11970   case llvm::omp::OMPC_uses_allocators:
11971     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11972     break;
11973   case llvm::omp::OMPC_affinity:
11974     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11975     break;
11976   case llvm::omp::OMPC_filter:
11977     C = new (Context) OMPFilterClause();
11978     break;
11979 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11980   case llvm::omp::Enum:                                                        \
11981     break;
11982 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11983   default:
11984     break;
11985   }
11986   assert(C && "Unknown OMPClause type");
11987 
11988   Visit(C);
11989   C->setLocStart(Record.readSourceLocation());
11990   C->setLocEnd(Record.readSourceLocation());
11991 
11992   return C;
11993 }
11994 
11995 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
11996   C->setPreInitStmt(Record.readSubStmt(),
11997                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
11998 }
11999 
12000 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12001   VisitOMPClauseWithPreInit(C);
12002   C->setPostUpdateExpr(Record.readSubExpr());
12003 }
12004 
12005 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12006   VisitOMPClauseWithPreInit(C);
12007   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12008   C->setNameModifierLoc(Record.readSourceLocation());
12009   C->setColonLoc(Record.readSourceLocation());
12010   C->setCondition(Record.readSubExpr());
12011   C->setLParenLoc(Record.readSourceLocation());
12012 }
12013 
12014 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12015   VisitOMPClauseWithPreInit(C);
12016   C->setCondition(Record.readSubExpr());
12017   C->setLParenLoc(Record.readSourceLocation());
12018 }
12019 
12020 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12021   VisitOMPClauseWithPreInit(C);
12022   C->setNumThreads(Record.readSubExpr());
12023   C->setLParenLoc(Record.readSourceLocation());
12024 }
12025 
12026 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12027   C->setSafelen(Record.readSubExpr());
12028   C->setLParenLoc(Record.readSourceLocation());
12029 }
12030 
12031 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12032   C->setSimdlen(Record.readSubExpr());
12033   C->setLParenLoc(Record.readSourceLocation());
12034 }
12035 
12036 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12037   for (Expr *&E : C->getSizesRefs())
12038     E = Record.readSubExpr();
12039   C->setLParenLoc(Record.readSourceLocation());
12040 }
12041 
12042 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12043 
12044 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12045   C->setFactor(Record.readSubExpr());
12046   C->setLParenLoc(Record.readSourceLocation());
12047 }
12048 
12049 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12050   C->setAllocator(Record.readExpr());
12051   C->setLParenLoc(Record.readSourceLocation());
12052 }
12053 
12054 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12055   C->setNumForLoops(Record.readSubExpr());
12056   C->setLParenLoc(Record.readSourceLocation());
12057 }
12058 
12059 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12060   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12061   C->setLParenLoc(Record.readSourceLocation());
12062   C->setDefaultKindKwLoc(Record.readSourceLocation());
12063 }
12064 
12065 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12066   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12067   C->setLParenLoc(Record.readSourceLocation());
12068   C->setProcBindKindKwLoc(Record.readSourceLocation());
12069 }
12070 
12071 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12072   VisitOMPClauseWithPreInit(C);
12073   C->setScheduleKind(
12074        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12075   C->setFirstScheduleModifier(
12076       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12077   C->setSecondScheduleModifier(
12078       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12079   C->setChunkSize(Record.readSubExpr());
12080   C->setLParenLoc(Record.readSourceLocation());
12081   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12082   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12083   C->setScheduleKindLoc(Record.readSourceLocation());
12084   C->setCommaLoc(Record.readSourceLocation());
12085 }
12086 
12087 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12088   C->setNumForLoops(Record.readSubExpr());
12089   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12090     C->setLoopNumIterations(I, Record.readSubExpr());
12091   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12092     C->setLoopCounter(I, Record.readSubExpr());
12093   C->setLParenLoc(Record.readSourceLocation());
12094 }
12095 
12096 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12097   C->setEventHandler(Record.readSubExpr());
12098   C->setLParenLoc(Record.readSourceLocation());
12099 }
12100 
12101 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12102 
12103 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12104 
12105 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12106 
12107 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12108 
12109 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12110 
12111 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12112   if (C->isExtended()) {
12113     C->setLParenLoc(Record.readSourceLocation());
12114     C->setArgumentLoc(Record.readSourceLocation());
12115     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12116   }
12117 }
12118 
12119 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12120 
12121 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12122 
12123 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12124 
12125 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12126 
12127 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12128 
12129 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12130 
12131 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12132 
12133 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12134 
12135 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12136 
12137 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12138   unsigned NumVars = C->varlist_size();
12139   SmallVector<Expr *, 16> Vars;
12140   Vars.reserve(NumVars);
12141   for (unsigned I = 0; I != NumVars; ++I)
12142     Vars.push_back(Record.readSubExpr());
12143   C->setVarRefs(Vars);
12144   C->setIsTarget(Record.readBool());
12145   C->setIsTargetSync(Record.readBool());
12146   C->setLParenLoc(Record.readSourceLocation());
12147   C->setVarLoc(Record.readSourceLocation());
12148 }
12149 
12150 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12151   C->setInteropVar(Record.readSubExpr());
12152   C->setLParenLoc(Record.readSourceLocation());
12153   C->setVarLoc(Record.readSourceLocation());
12154 }
12155 
12156 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12157   C->setInteropVar(Record.readSubExpr());
12158   C->setLParenLoc(Record.readSourceLocation());
12159   C->setVarLoc(Record.readSourceLocation());
12160 }
12161 
12162 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12163   VisitOMPClauseWithPreInit(C);
12164   C->setCondition(Record.readSubExpr());
12165   C->setLParenLoc(Record.readSourceLocation());
12166 }
12167 
12168 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12169   VisitOMPClauseWithPreInit(C);
12170   C->setCondition(Record.readSubExpr());
12171   C->setLParenLoc(Record.readSourceLocation());
12172 }
12173 
12174 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12175 
12176 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12177     OMPUnifiedSharedMemoryClause *) {}
12178 
12179 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12180 
12181 void
12182 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12183 }
12184 
12185 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12186     OMPAtomicDefaultMemOrderClause *C) {
12187   C->setAtomicDefaultMemOrderKind(
12188       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12189   C->setLParenLoc(Record.readSourceLocation());
12190   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12191 }
12192 
12193 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12194   C->setLParenLoc(Record.readSourceLocation());
12195   unsigned NumVars = C->varlist_size();
12196   SmallVector<Expr *, 16> Vars;
12197   Vars.reserve(NumVars);
12198   for (unsigned i = 0; i != NumVars; ++i)
12199     Vars.push_back(Record.readSubExpr());
12200   C->setVarRefs(Vars);
12201   Vars.clear();
12202   for (unsigned i = 0; i != NumVars; ++i)
12203     Vars.push_back(Record.readSubExpr());
12204   C->setPrivateCopies(Vars);
12205 }
12206 
12207 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12208   VisitOMPClauseWithPreInit(C);
12209   C->setLParenLoc(Record.readSourceLocation());
12210   unsigned NumVars = C->varlist_size();
12211   SmallVector<Expr *, 16> Vars;
12212   Vars.reserve(NumVars);
12213   for (unsigned i = 0; i != NumVars; ++i)
12214     Vars.push_back(Record.readSubExpr());
12215   C->setVarRefs(Vars);
12216   Vars.clear();
12217   for (unsigned i = 0; i != NumVars; ++i)
12218     Vars.push_back(Record.readSubExpr());
12219   C->setPrivateCopies(Vars);
12220   Vars.clear();
12221   for (unsigned i = 0; i != NumVars; ++i)
12222     Vars.push_back(Record.readSubExpr());
12223   C->setInits(Vars);
12224 }
12225 
12226 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12227   VisitOMPClauseWithPostUpdate(C);
12228   C->setLParenLoc(Record.readSourceLocation());
12229   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12230   C->setKindLoc(Record.readSourceLocation());
12231   C->setColonLoc(Record.readSourceLocation());
12232   unsigned NumVars = C->varlist_size();
12233   SmallVector<Expr *, 16> Vars;
12234   Vars.reserve(NumVars);
12235   for (unsigned i = 0; i != NumVars; ++i)
12236     Vars.push_back(Record.readSubExpr());
12237   C->setVarRefs(Vars);
12238   Vars.clear();
12239   for (unsigned i = 0; i != NumVars; ++i)
12240     Vars.push_back(Record.readSubExpr());
12241   C->setPrivateCopies(Vars);
12242   Vars.clear();
12243   for (unsigned i = 0; i != NumVars; ++i)
12244     Vars.push_back(Record.readSubExpr());
12245   C->setSourceExprs(Vars);
12246   Vars.clear();
12247   for (unsigned i = 0; i != NumVars; ++i)
12248     Vars.push_back(Record.readSubExpr());
12249   C->setDestinationExprs(Vars);
12250   Vars.clear();
12251   for (unsigned i = 0; i != NumVars; ++i)
12252     Vars.push_back(Record.readSubExpr());
12253   C->setAssignmentOps(Vars);
12254 }
12255 
12256 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12257   C->setLParenLoc(Record.readSourceLocation());
12258   unsigned NumVars = C->varlist_size();
12259   SmallVector<Expr *, 16> Vars;
12260   Vars.reserve(NumVars);
12261   for (unsigned i = 0; i != NumVars; ++i)
12262     Vars.push_back(Record.readSubExpr());
12263   C->setVarRefs(Vars);
12264 }
12265 
12266 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12267   VisitOMPClauseWithPostUpdate(C);
12268   C->setLParenLoc(Record.readSourceLocation());
12269   C->setModifierLoc(Record.readSourceLocation());
12270   C->setColonLoc(Record.readSourceLocation());
12271   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12272   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12273   C->setQualifierLoc(NNSL);
12274   C->setNameInfo(DNI);
12275 
12276   unsigned NumVars = C->varlist_size();
12277   SmallVector<Expr *, 16> Vars;
12278   Vars.reserve(NumVars);
12279   for (unsigned i = 0; i != NumVars; ++i)
12280     Vars.push_back(Record.readSubExpr());
12281   C->setVarRefs(Vars);
12282   Vars.clear();
12283   for (unsigned i = 0; i != NumVars; ++i)
12284     Vars.push_back(Record.readSubExpr());
12285   C->setPrivates(Vars);
12286   Vars.clear();
12287   for (unsigned i = 0; i != NumVars; ++i)
12288     Vars.push_back(Record.readSubExpr());
12289   C->setLHSExprs(Vars);
12290   Vars.clear();
12291   for (unsigned i = 0; i != NumVars; ++i)
12292     Vars.push_back(Record.readSubExpr());
12293   C->setRHSExprs(Vars);
12294   Vars.clear();
12295   for (unsigned i = 0; i != NumVars; ++i)
12296     Vars.push_back(Record.readSubExpr());
12297   C->setReductionOps(Vars);
12298   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12299     Vars.clear();
12300     for (unsigned i = 0; i != NumVars; ++i)
12301       Vars.push_back(Record.readSubExpr());
12302     C->setInscanCopyOps(Vars);
12303     Vars.clear();
12304     for (unsigned i = 0; i != NumVars; ++i)
12305       Vars.push_back(Record.readSubExpr());
12306     C->setInscanCopyArrayTemps(Vars);
12307     Vars.clear();
12308     for (unsigned i = 0; i != NumVars; ++i)
12309       Vars.push_back(Record.readSubExpr());
12310     C->setInscanCopyArrayElems(Vars);
12311   }
12312 }
12313 
12314 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12315   VisitOMPClauseWithPostUpdate(C);
12316   C->setLParenLoc(Record.readSourceLocation());
12317   C->setColonLoc(Record.readSourceLocation());
12318   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12319   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12320   C->setQualifierLoc(NNSL);
12321   C->setNameInfo(DNI);
12322 
12323   unsigned NumVars = C->varlist_size();
12324   SmallVector<Expr *, 16> Vars;
12325   Vars.reserve(NumVars);
12326   for (unsigned I = 0; I != NumVars; ++I)
12327     Vars.push_back(Record.readSubExpr());
12328   C->setVarRefs(Vars);
12329   Vars.clear();
12330   for (unsigned I = 0; I != NumVars; ++I)
12331     Vars.push_back(Record.readSubExpr());
12332   C->setPrivates(Vars);
12333   Vars.clear();
12334   for (unsigned I = 0; I != NumVars; ++I)
12335     Vars.push_back(Record.readSubExpr());
12336   C->setLHSExprs(Vars);
12337   Vars.clear();
12338   for (unsigned I = 0; I != NumVars; ++I)
12339     Vars.push_back(Record.readSubExpr());
12340   C->setRHSExprs(Vars);
12341   Vars.clear();
12342   for (unsigned I = 0; I != NumVars; ++I)
12343     Vars.push_back(Record.readSubExpr());
12344   C->setReductionOps(Vars);
12345 }
12346 
12347 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12348   VisitOMPClauseWithPostUpdate(C);
12349   C->setLParenLoc(Record.readSourceLocation());
12350   C->setColonLoc(Record.readSourceLocation());
12351   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12352   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12353   C->setQualifierLoc(NNSL);
12354   C->setNameInfo(DNI);
12355 
12356   unsigned NumVars = C->varlist_size();
12357   SmallVector<Expr *, 16> Vars;
12358   Vars.reserve(NumVars);
12359   for (unsigned I = 0; I != NumVars; ++I)
12360     Vars.push_back(Record.readSubExpr());
12361   C->setVarRefs(Vars);
12362   Vars.clear();
12363   for (unsigned I = 0; I != NumVars; ++I)
12364     Vars.push_back(Record.readSubExpr());
12365   C->setPrivates(Vars);
12366   Vars.clear();
12367   for (unsigned I = 0; I != NumVars; ++I)
12368     Vars.push_back(Record.readSubExpr());
12369   C->setLHSExprs(Vars);
12370   Vars.clear();
12371   for (unsigned I = 0; I != NumVars; ++I)
12372     Vars.push_back(Record.readSubExpr());
12373   C->setRHSExprs(Vars);
12374   Vars.clear();
12375   for (unsigned I = 0; I != NumVars; ++I)
12376     Vars.push_back(Record.readSubExpr());
12377   C->setReductionOps(Vars);
12378   Vars.clear();
12379   for (unsigned I = 0; I != NumVars; ++I)
12380     Vars.push_back(Record.readSubExpr());
12381   C->setTaskgroupDescriptors(Vars);
12382 }
12383 
12384 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12385   VisitOMPClauseWithPostUpdate(C);
12386   C->setLParenLoc(Record.readSourceLocation());
12387   C->setColonLoc(Record.readSourceLocation());
12388   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12389   C->setModifierLoc(Record.readSourceLocation());
12390   unsigned NumVars = C->varlist_size();
12391   SmallVector<Expr *, 16> Vars;
12392   Vars.reserve(NumVars);
12393   for (unsigned i = 0; i != NumVars; ++i)
12394     Vars.push_back(Record.readSubExpr());
12395   C->setVarRefs(Vars);
12396   Vars.clear();
12397   for (unsigned i = 0; i != NumVars; ++i)
12398     Vars.push_back(Record.readSubExpr());
12399   C->setPrivates(Vars);
12400   Vars.clear();
12401   for (unsigned i = 0; i != NumVars; ++i)
12402     Vars.push_back(Record.readSubExpr());
12403   C->setInits(Vars);
12404   Vars.clear();
12405   for (unsigned i = 0; i != NumVars; ++i)
12406     Vars.push_back(Record.readSubExpr());
12407   C->setUpdates(Vars);
12408   Vars.clear();
12409   for (unsigned i = 0; i != NumVars; ++i)
12410     Vars.push_back(Record.readSubExpr());
12411   C->setFinals(Vars);
12412   C->setStep(Record.readSubExpr());
12413   C->setCalcStep(Record.readSubExpr());
12414   Vars.clear();
12415   for (unsigned I = 0; I != NumVars + 1; ++I)
12416     Vars.push_back(Record.readSubExpr());
12417   C->setUsedExprs(Vars);
12418 }
12419 
12420 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12421   C->setLParenLoc(Record.readSourceLocation());
12422   C->setColonLoc(Record.readSourceLocation());
12423   unsigned NumVars = C->varlist_size();
12424   SmallVector<Expr *, 16> Vars;
12425   Vars.reserve(NumVars);
12426   for (unsigned i = 0; i != NumVars; ++i)
12427     Vars.push_back(Record.readSubExpr());
12428   C->setVarRefs(Vars);
12429   C->setAlignment(Record.readSubExpr());
12430 }
12431 
12432 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12433   C->setLParenLoc(Record.readSourceLocation());
12434   unsigned NumVars = C->varlist_size();
12435   SmallVector<Expr *, 16> Exprs;
12436   Exprs.reserve(NumVars);
12437   for (unsigned i = 0; i != NumVars; ++i)
12438     Exprs.push_back(Record.readSubExpr());
12439   C->setVarRefs(Exprs);
12440   Exprs.clear();
12441   for (unsigned i = 0; i != NumVars; ++i)
12442     Exprs.push_back(Record.readSubExpr());
12443   C->setSourceExprs(Exprs);
12444   Exprs.clear();
12445   for (unsigned i = 0; i != NumVars; ++i)
12446     Exprs.push_back(Record.readSubExpr());
12447   C->setDestinationExprs(Exprs);
12448   Exprs.clear();
12449   for (unsigned i = 0; i != NumVars; ++i)
12450     Exprs.push_back(Record.readSubExpr());
12451   C->setAssignmentOps(Exprs);
12452 }
12453 
12454 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12455   C->setLParenLoc(Record.readSourceLocation());
12456   unsigned NumVars = C->varlist_size();
12457   SmallVector<Expr *, 16> Exprs;
12458   Exprs.reserve(NumVars);
12459   for (unsigned i = 0; i != NumVars; ++i)
12460     Exprs.push_back(Record.readSubExpr());
12461   C->setVarRefs(Exprs);
12462   Exprs.clear();
12463   for (unsigned i = 0; i != NumVars; ++i)
12464     Exprs.push_back(Record.readSubExpr());
12465   C->setSourceExprs(Exprs);
12466   Exprs.clear();
12467   for (unsigned i = 0; i != NumVars; ++i)
12468     Exprs.push_back(Record.readSubExpr());
12469   C->setDestinationExprs(Exprs);
12470   Exprs.clear();
12471   for (unsigned i = 0; i != NumVars; ++i)
12472     Exprs.push_back(Record.readSubExpr());
12473   C->setAssignmentOps(Exprs);
12474 }
12475 
12476 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12477   C->setLParenLoc(Record.readSourceLocation());
12478   unsigned NumVars = C->varlist_size();
12479   SmallVector<Expr *, 16> Vars;
12480   Vars.reserve(NumVars);
12481   for (unsigned i = 0; i != NumVars; ++i)
12482     Vars.push_back(Record.readSubExpr());
12483   C->setVarRefs(Vars);
12484 }
12485 
12486 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12487   C->setDepobj(Record.readSubExpr());
12488   C->setLParenLoc(Record.readSourceLocation());
12489 }
12490 
12491 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12492   C->setLParenLoc(Record.readSourceLocation());
12493   C->setModifier(Record.readSubExpr());
12494   C->setDependencyKind(
12495       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12496   C->setDependencyLoc(Record.readSourceLocation());
12497   C->setColonLoc(Record.readSourceLocation());
12498   unsigned NumVars = C->varlist_size();
12499   SmallVector<Expr *, 16> Vars;
12500   Vars.reserve(NumVars);
12501   for (unsigned I = 0; I != NumVars; ++I)
12502     Vars.push_back(Record.readSubExpr());
12503   C->setVarRefs(Vars);
12504   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12505     C->setLoopData(I, Record.readSubExpr());
12506 }
12507 
12508 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12509   VisitOMPClauseWithPreInit(C);
12510   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12511   C->setDevice(Record.readSubExpr());
12512   C->setModifierLoc(Record.readSourceLocation());
12513   C->setLParenLoc(Record.readSourceLocation());
12514 }
12515 
12516 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12517   C->setLParenLoc(Record.readSourceLocation());
12518   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12519     C->setMapTypeModifier(
12520         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12521     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12522   }
12523   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12524   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12525   C->setMapType(
12526      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12527   C->setMapLoc(Record.readSourceLocation());
12528   C->setColonLoc(Record.readSourceLocation());
12529   auto NumVars = C->varlist_size();
12530   auto UniqueDecls = C->getUniqueDeclarationsNum();
12531   auto TotalLists = C->getTotalComponentListNum();
12532   auto TotalComponents = C->getTotalComponentsNum();
12533 
12534   SmallVector<Expr *, 16> Vars;
12535   Vars.reserve(NumVars);
12536   for (unsigned i = 0; i != NumVars; ++i)
12537     Vars.push_back(Record.readExpr());
12538   C->setVarRefs(Vars);
12539 
12540   SmallVector<Expr *, 16> UDMappers;
12541   UDMappers.reserve(NumVars);
12542   for (unsigned I = 0; I < NumVars; ++I)
12543     UDMappers.push_back(Record.readExpr());
12544   C->setUDMapperRefs(UDMappers);
12545 
12546   SmallVector<ValueDecl *, 16> Decls;
12547   Decls.reserve(UniqueDecls);
12548   for (unsigned i = 0; i < UniqueDecls; ++i)
12549     Decls.push_back(Record.readDeclAs<ValueDecl>());
12550   C->setUniqueDecls(Decls);
12551 
12552   SmallVector<unsigned, 16> ListsPerDecl;
12553   ListsPerDecl.reserve(UniqueDecls);
12554   for (unsigned i = 0; i < UniqueDecls; ++i)
12555     ListsPerDecl.push_back(Record.readInt());
12556   C->setDeclNumLists(ListsPerDecl);
12557 
12558   SmallVector<unsigned, 32> ListSizes;
12559   ListSizes.reserve(TotalLists);
12560   for (unsigned i = 0; i < TotalLists; ++i)
12561     ListSizes.push_back(Record.readInt());
12562   C->setComponentListSizes(ListSizes);
12563 
12564   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12565   Components.reserve(TotalComponents);
12566   for (unsigned i = 0; i < TotalComponents; ++i) {
12567     Expr *AssociatedExprPr = Record.readExpr();
12568     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12569     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12570                             /*IsNonContiguous=*/false);
12571   }
12572   C->setComponents(Components, ListSizes);
12573 }
12574 
12575 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12576   C->setLParenLoc(Record.readSourceLocation());
12577   C->setColonLoc(Record.readSourceLocation());
12578   C->setAllocator(Record.readSubExpr());
12579   unsigned NumVars = C->varlist_size();
12580   SmallVector<Expr *, 16> Vars;
12581   Vars.reserve(NumVars);
12582   for (unsigned i = 0; i != NumVars; ++i)
12583     Vars.push_back(Record.readSubExpr());
12584   C->setVarRefs(Vars);
12585 }
12586 
12587 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12588   VisitOMPClauseWithPreInit(C);
12589   C->setNumTeams(Record.readSubExpr());
12590   C->setLParenLoc(Record.readSourceLocation());
12591 }
12592 
12593 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12594   VisitOMPClauseWithPreInit(C);
12595   C->setThreadLimit(Record.readSubExpr());
12596   C->setLParenLoc(Record.readSourceLocation());
12597 }
12598 
12599 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12600   VisitOMPClauseWithPreInit(C);
12601   C->setPriority(Record.readSubExpr());
12602   C->setLParenLoc(Record.readSourceLocation());
12603 }
12604 
12605 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12606   VisitOMPClauseWithPreInit(C);
12607   C->setGrainsize(Record.readSubExpr());
12608   C->setLParenLoc(Record.readSourceLocation());
12609 }
12610 
12611 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12612   VisitOMPClauseWithPreInit(C);
12613   C->setNumTasks(Record.readSubExpr());
12614   C->setLParenLoc(Record.readSourceLocation());
12615 }
12616 
12617 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12618   C->setHint(Record.readSubExpr());
12619   C->setLParenLoc(Record.readSourceLocation());
12620 }
12621 
12622 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12623   VisitOMPClauseWithPreInit(C);
12624   C->setDistScheduleKind(
12625       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12626   C->setChunkSize(Record.readSubExpr());
12627   C->setLParenLoc(Record.readSourceLocation());
12628   C->setDistScheduleKindLoc(Record.readSourceLocation());
12629   C->setCommaLoc(Record.readSourceLocation());
12630 }
12631 
12632 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12633   C->setDefaultmapKind(
12634        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12635   C->setDefaultmapModifier(
12636       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12637   C->setLParenLoc(Record.readSourceLocation());
12638   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12639   C->setDefaultmapKindLoc(Record.readSourceLocation());
12640 }
12641 
12642 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12643   C->setLParenLoc(Record.readSourceLocation());
12644   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12645     C->setMotionModifier(
12646         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12647     C->setMotionModifierLoc(I, Record.readSourceLocation());
12648   }
12649   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12650   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12651   C->setColonLoc(Record.readSourceLocation());
12652   auto NumVars = C->varlist_size();
12653   auto UniqueDecls = C->getUniqueDeclarationsNum();
12654   auto TotalLists = C->getTotalComponentListNum();
12655   auto TotalComponents = C->getTotalComponentsNum();
12656 
12657   SmallVector<Expr *, 16> Vars;
12658   Vars.reserve(NumVars);
12659   for (unsigned i = 0; i != NumVars; ++i)
12660     Vars.push_back(Record.readSubExpr());
12661   C->setVarRefs(Vars);
12662 
12663   SmallVector<Expr *, 16> UDMappers;
12664   UDMappers.reserve(NumVars);
12665   for (unsigned I = 0; I < NumVars; ++I)
12666     UDMappers.push_back(Record.readSubExpr());
12667   C->setUDMapperRefs(UDMappers);
12668 
12669   SmallVector<ValueDecl *, 16> Decls;
12670   Decls.reserve(UniqueDecls);
12671   for (unsigned i = 0; i < UniqueDecls; ++i)
12672     Decls.push_back(Record.readDeclAs<ValueDecl>());
12673   C->setUniqueDecls(Decls);
12674 
12675   SmallVector<unsigned, 16> ListsPerDecl;
12676   ListsPerDecl.reserve(UniqueDecls);
12677   for (unsigned i = 0; i < UniqueDecls; ++i)
12678     ListsPerDecl.push_back(Record.readInt());
12679   C->setDeclNumLists(ListsPerDecl);
12680 
12681   SmallVector<unsigned, 32> ListSizes;
12682   ListSizes.reserve(TotalLists);
12683   for (unsigned i = 0; i < TotalLists; ++i)
12684     ListSizes.push_back(Record.readInt());
12685   C->setComponentListSizes(ListSizes);
12686 
12687   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12688   Components.reserve(TotalComponents);
12689   for (unsigned i = 0; i < TotalComponents; ++i) {
12690     Expr *AssociatedExprPr = Record.readSubExpr();
12691     bool IsNonContiguous = Record.readBool();
12692     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12693     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12694   }
12695   C->setComponents(Components, ListSizes);
12696 }
12697 
12698 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12699   C->setLParenLoc(Record.readSourceLocation());
12700   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12701     C->setMotionModifier(
12702         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12703     C->setMotionModifierLoc(I, Record.readSourceLocation());
12704   }
12705   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12706   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12707   C->setColonLoc(Record.readSourceLocation());
12708   auto NumVars = C->varlist_size();
12709   auto UniqueDecls = C->getUniqueDeclarationsNum();
12710   auto TotalLists = C->getTotalComponentListNum();
12711   auto TotalComponents = C->getTotalComponentsNum();
12712 
12713   SmallVector<Expr *, 16> Vars;
12714   Vars.reserve(NumVars);
12715   for (unsigned i = 0; i != NumVars; ++i)
12716     Vars.push_back(Record.readSubExpr());
12717   C->setVarRefs(Vars);
12718 
12719   SmallVector<Expr *, 16> UDMappers;
12720   UDMappers.reserve(NumVars);
12721   for (unsigned I = 0; I < NumVars; ++I)
12722     UDMappers.push_back(Record.readSubExpr());
12723   C->setUDMapperRefs(UDMappers);
12724 
12725   SmallVector<ValueDecl *, 16> Decls;
12726   Decls.reserve(UniqueDecls);
12727   for (unsigned i = 0; i < UniqueDecls; ++i)
12728     Decls.push_back(Record.readDeclAs<ValueDecl>());
12729   C->setUniqueDecls(Decls);
12730 
12731   SmallVector<unsigned, 16> ListsPerDecl;
12732   ListsPerDecl.reserve(UniqueDecls);
12733   for (unsigned i = 0; i < UniqueDecls; ++i)
12734     ListsPerDecl.push_back(Record.readInt());
12735   C->setDeclNumLists(ListsPerDecl);
12736 
12737   SmallVector<unsigned, 32> ListSizes;
12738   ListSizes.reserve(TotalLists);
12739   for (unsigned i = 0; i < TotalLists; ++i)
12740     ListSizes.push_back(Record.readInt());
12741   C->setComponentListSizes(ListSizes);
12742 
12743   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12744   Components.reserve(TotalComponents);
12745   for (unsigned i = 0; i < TotalComponents; ++i) {
12746     Expr *AssociatedExprPr = Record.readSubExpr();
12747     bool IsNonContiguous = Record.readBool();
12748     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12749     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12750   }
12751   C->setComponents(Components, ListSizes);
12752 }
12753 
12754 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12755   C->setLParenLoc(Record.readSourceLocation());
12756   auto NumVars = C->varlist_size();
12757   auto UniqueDecls = C->getUniqueDeclarationsNum();
12758   auto TotalLists = C->getTotalComponentListNum();
12759   auto TotalComponents = C->getTotalComponentsNum();
12760 
12761   SmallVector<Expr *, 16> Vars;
12762   Vars.reserve(NumVars);
12763   for (unsigned i = 0; i != NumVars; ++i)
12764     Vars.push_back(Record.readSubExpr());
12765   C->setVarRefs(Vars);
12766   Vars.clear();
12767   for (unsigned i = 0; i != NumVars; ++i)
12768     Vars.push_back(Record.readSubExpr());
12769   C->setPrivateCopies(Vars);
12770   Vars.clear();
12771   for (unsigned i = 0; i != NumVars; ++i)
12772     Vars.push_back(Record.readSubExpr());
12773   C->setInits(Vars);
12774 
12775   SmallVector<ValueDecl *, 16> Decls;
12776   Decls.reserve(UniqueDecls);
12777   for (unsigned i = 0; i < UniqueDecls; ++i)
12778     Decls.push_back(Record.readDeclAs<ValueDecl>());
12779   C->setUniqueDecls(Decls);
12780 
12781   SmallVector<unsigned, 16> ListsPerDecl;
12782   ListsPerDecl.reserve(UniqueDecls);
12783   for (unsigned i = 0; i < UniqueDecls; ++i)
12784     ListsPerDecl.push_back(Record.readInt());
12785   C->setDeclNumLists(ListsPerDecl);
12786 
12787   SmallVector<unsigned, 32> ListSizes;
12788   ListSizes.reserve(TotalLists);
12789   for (unsigned i = 0; i < TotalLists; ++i)
12790     ListSizes.push_back(Record.readInt());
12791   C->setComponentListSizes(ListSizes);
12792 
12793   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12794   Components.reserve(TotalComponents);
12795   for (unsigned i = 0; i < TotalComponents; ++i) {
12796     auto *AssociatedExprPr = Record.readSubExpr();
12797     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12798     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12799                             /*IsNonContiguous=*/false);
12800   }
12801   C->setComponents(Components, ListSizes);
12802 }
12803 
12804 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12805   C->setLParenLoc(Record.readSourceLocation());
12806   auto NumVars = C->varlist_size();
12807   auto UniqueDecls = C->getUniqueDeclarationsNum();
12808   auto TotalLists = C->getTotalComponentListNum();
12809   auto TotalComponents = C->getTotalComponentsNum();
12810 
12811   SmallVector<Expr *, 16> Vars;
12812   Vars.reserve(NumVars);
12813   for (unsigned i = 0; i != NumVars; ++i)
12814     Vars.push_back(Record.readSubExpr());
12815   C->setVarRefs(Vars);
12816 
12817   SmallVector<ValueDecl *, 16> Decls;
12818   Decls.reserve(UniqueDecls);
12819   for (unsigned i = 0; i < UniqueDecls; ++i)
12820     Decls.push_back(Record.readDeclAs<ValueDecl>());
12821   C->setUniqueDecls(Decls);
12822 
12823   SmallVector<unsigned, 16> ListsPerDecl;
12824   ListsPerDecl.reserve(UniqueDecls);
12825   for (unsigned i = 0; i < UniqueDecls; ++i)
12826     ListsPerDecl.push_back(Record.readInt());
12827   C->setDeclNumLists(ListsPerDecl);
12828 
12829   SmallVector<unsigned, 32> ListSizes;
12830   ListSizes.reserve(TotalLists);
12831   for (unsigned i = 0; i < TotalLists; ++i)
12832     ListSizes.push_back(Record.readInt());
12833   C->setComponentListSizes(ListSizes);
12834 
12835   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12836   Components.reserve(TotalComponents);
12837   for (unsigned i = 0; i < TotalComponents; ++i) {
12838     Expr *AssociatedExpr = Record.readSubExpr();
12839     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12840     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12841                             /*IsNonContiguous*/ false);
12842   }
12843   C->setComponents(Components, ListSizes);
12844 }
12845 
12846 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12847   C->setLParenLoc(Record.readSourceLocation());
12848   auto NumVars = C->varlist_size();
12849   auto UniqueDecls = C->getUniqueDeclarationsNum();
12850   auto TotalLists = C->getTotalComponentListNum();
12851   auto TotalComponents = C->getTotalComponentsNum();
12852 
12853   SmallVector<Expr *, 16> Vars;
12854   Vars.reserve(NumVars);
12855   for (unsigned i = 0; i != NumVars; ++i)
12856     Vars.push_back(Record.readSubExpr());
12857   C->setVarRefs(Vars);
12858   Vars.clear();
12859 
12860   SmallVector<ValueDecl *, 16> Decls;
12861   Decls.reserve(UniqueDecls);
12862   for (unsigned i = 0; i < UniqueDecls; ++i)
12863     Decls.push_back(Record.readDeclAs<ValueDecl>());
12864   C->setUniqueDecls(Decls);
12865 
12866   SmallVector<unsigned, 16> ListsPerDecl;
12867   ListsPerDecl.reserve(UniqueDecls);
12868   for (unsigned i = 0; i < UniqueDecls; ++i)
12869     ListsPerDecl.push_back(Record.readInt());
12870   C->setDeclNumLists(ListsPerDecl);
12871 
12872   SmallVector<unsigned, 32> ListSizes;
12873   ListSizes.reserve(TotalLists);
12874   for (unsigned i = 0; i < TotalLists; ++i)
12875     ListSizes.push_back(Record.readInt());
12876   C->setComponentListSizes(ListSizes);
12877 
12878   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12879   Components.reserve(TotalComponents);
12880   for (unsigned i = 0; i < TotalComponents; ++i) {
12881     Expr *AssociatedExpr = Record.readSubExpr();
12882     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12883     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12884                             /*IsNonContiguous=*/false);
12885   }
12886   C->setComponents(Components, ListSizes);
12887 }
12888 
12889 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12890   C->setLParenLoc(Record.readSourceLocation());
12891   unsigned NumVars = C->varlist_size();
12892   SmallVector<Expr *, 16> Vars;
12893   Vars.reserve(NumVars);
12894   for (unsigned i = 0; i != NumVars; ++i)
12895     Vars.push_back(Record.readSubExpr());
12896   C->setVarRefs(Vars);
12897   Vars.clear();
12898   Vars.reserve(NumVars);
12899   for (unsigned i = 0; i != NumVars; ++i)
12900     Vars.push_back(Record.readSubExpr());
12901   C->setPrivateRefs(Vars);
12902 }
12903 
12904 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12905   C->setLParenLoc(Record.readSourceLocation());
12906   unsigned NumVars = C->varlist_size();
12907   SmallVector<Expr *, 16> Vars;
12908   Vars.reserve(NumVars);
12909   for (unsigned i = 0; i != NumVars; ++i)
12910     Vars.push_back(Record.readSubExpr());
12911   C->setVarRefs(Vars);
12912 }
12913 
12914 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12915   C->setLParenLoc(Record.readSourceLocation());
12916   unsigned NumVars = C->varlist_size();
12917   SmallVector<Expr *, 16> Vars;
12918   Vars.reserve(NumVars);
12919   for (unsigned i = 0; i != NumVars; ++i)
12920     Vars.push_back(Record.readSubExpr());
12921   C->setVarRefs(Vars);
12922 }
12923 
12924 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12925   C->setLParenLoc(Record.readSourceLocation());
12926   unsigned NumOfAllocators = C->getNumberOfAllocators();
12927   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12928   Data.reserve(NumOfAllocators);
12929   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12930     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12931     D.Allocator = Record.readSubExpr();
12932     D.AllocatorTraits = Record.readSubExpr();
12933     D.LParenLoc = Record.readSourceLocation();
12934     D.RParenLoc = Record.readSourceLocation();
12935   }
12936   C->setAllocatorsData(Data);
12937 }
12938 
12939 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12940   C->setLParenLoc(Record.readSourceLocation());
12941   C->setModifier(Record.readSubExpr());
12942   C->setColonLoc(Record.readSourceLocation());
12943   unsigned NumOfLocators = C->varlist_size();
12944   SmallVector<Expr *, 4> Locators;
12945   Locators.reserve(NumOfLocators);
12946   for (unsigned I = 0; I != NumOfLocators; ++I)
12947     Locators.push_back(Record.readSubExpr());
12948   C->setVarRefs(Locators);
12949 }
12950 
12951 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12952   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12953   C->setLParenLoc(Record.readSourceLocation());
12954   C->setKindKwLoc(Record.readSourceLocation());
12955 }
12956 
12957 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12958   VisitOMPClauseWithPreInit(C);
12959   C->setThreadID(Record.readSubExpr());
12960   C->setLParenLoc(Record.readSourceLocation());
12961 }
12962 
12963 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12964   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12965   TI.Sets.resize(readUInt32());
12966   for (auto &Set : TI.Sets) {
12967     Set.Kind = readEnum<llvm::omp::TraitSet>();
12968     Set.Selectors.resize(readUInt32());
12969     for (auto &Selector : Set.Selectors) {
12970       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12971       Selector.ScoreOrCondition = nullptr;
12972       if (readBool())
12973         Selector.ScoreOrCondition = readExprRef();
12974       Selector.Properties.resize(readUInt32());
12975       for (auto &Property : Selector.Properties)
12976         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12977     }
12978   }
12979   return &TI;
12980 }
12981 
12982 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
12983   if (!Data)
12984     return;
12985   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
12986     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
12987     skipInts(3);
12988   }
12989   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
12990   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
12991     Clauses[I] = readOMPClause();
12992   Data->setClauses(Clauses);
12993   if (Data->hasAssociatedStmt())
12994     Data->setAssociatedStmt(readStmt());
12995   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
12996     Data->getChildren()[I] = readStmt();
12997 }
12998