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 = PP.getHeaderSearchInfo().lookupModule(ModuleName);
560   assert(M && "missing module");
561   return M;
562 }
563 
564 bool PCHValidator::ReadDiagnosticOptions(
565     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
566   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
567   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
568   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
569       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
570   // This should never fail, because we would have processed these options
571   // before writing them to an ASTFile.
572   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
573 
574   ModuleManager &ModuleMgr = Reader.getModuleManager();
575   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
576 
577   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
578   if (!TopM)
579     return false;
580 
581   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
582   // contains the union of their flags.
583   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
584                                  Complain);
585 }
586 
587 /// Collect the macro definitions provided by the given preprocessor
588 /// options.
589 static void
590 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
591                         MacroDefinitionsMap &Macros,
592                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
593   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
594     StringRef Macro = PPOpts.Macros[I].first;
595     bool IsUndef = PPOpts.Macros[I].second;
596 
597     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
598     StringRef MacroName = MacroPair.first;
599     StringRef MacroBody = MacroPair.second;
600 
601     // For an #undef'd macro, we only care about the name.
602     if (IsUndef) {
603       if (MacroNames && !Macros.count(MacroName))
604         MacroNames->push_back(MacroName);
605 
606       Macros[MacroName] = std::make_pair("", true);
607       continue;
608     }
609 
610     // For a #define'd macro, figure out the actual definition.
611     if (MacroName.size() == Macro.size())
612       MacroBody = "1";
613     else {
614       // Note: GCC drops anything following an end-of-line character.
615       StringRef::size_type End = MacroBody.find_first_of("\n\r");
616       MacroBody = MacroBody.substr(0, End);
617     }
618 
619     if (MacroNames && !Macros.count(MacroName))
620       MacroNames->push_back(MacroName);
621     Macros[MacroName] = std::make_pair(MacroBody, false);
622   }
623 }
624 
625 /// Check the preprocessor options deserialized from the control block
626 /// against the preprocessor options in an existing preprocessor.
627 ///
628 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
629 /// \param Validate If true, validate preprocessor options. If false, allow
630 ///        macros defined by \p ExistingPPOpts to override those defined by
631 ///        \p PPOpts in SuggestedPredefines.
632 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
633                                      const PreprocessorOptions &ExistingPPOpts,
634                                      DiagnosticsEngine *Diags,
635                                      FileManager &FileMgr,
636                                      std::string &SuggestedPredefines,
637                                      const LangOptions &LangOpts,
638                                      bool Validate = true) {
639   // Check macro definitions.
640   MacroDefinitionsMap ASTFileMacros;
641   collectMacroDefinitions(PPOpts, ASTFileMacros);
642   MacroDefinitionsMap ExistingMacros;
643   SmallVector<StringRef, 4> ExistingMacroNames;
644   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
645 
646   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
647     // Dig out the macro definition in the existing preprocessor options.
648     StringRef MacroName = ExistingMacroNames[I];
649     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
650 
651     // Check whether we know anything about this macro name or not.
652     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
653         ASTFileMacros.find(MacroName);
654     if (!Validate || Known == ASTFileMacros.end()) {
655       // FIXME: Check whether this identifier was referenced anywhere in the
656       // AST file. If so, we should reject the AST file. Unfortunately, this
657       // information isn't in the control block. What shall we do about it?
658 
659       if (Existing.second) {
660         SuggestedPredefines += "#undef ";
661         SuggestedPredefines += MacroName.str();
662         SuggestedPredefines += '\n';
663       } else {
664         SuggestedPredefines += "#define ";
665         SuggestedPredefines += MacroName.str();
666         SuggestedPredefines += ' ';
667         SuggestedPredefines += Existing.first.str();
668         SuggestedPredefines += '\n';
669       }
670       continue;
671     }
672 
673     // If the macro was defined in one but undef'd in the other, we have a
674     // conflict.
675     if (Existing.second != Known->second.second) {
676       if (Diags) {
677         Diags->Report(diag::err_pch_macro_def_undef)
678           << MacroName << Known->second.second;
679       }
680       return true;
681     }
682 
683     // If the macro was #undef'd in both, or if the macro bodies are identical,
684     // it's fine.
685     if (Existing.second || Existing.first == Known->second.first)
686       continue;
687 
688     // The macro bodies differ; complain.
689     if (Diags) {
690       Diags->Report(diag::err_pch_macro_def_conflict)
691         << MacroName << Known->second.first << Existing.first;
692     }
693     return true;
694   }
695 
696   // Check whether we're using predefines.
697   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
698     if (Diags) {
699       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
700     }
701     return true;
702   }
703 
704   // Detailed record is important since it is used for the module cache hash.
705   if (LangOpts.Modules &&
706       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
707     if (Diags) {
708       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
709     }
710     return true;
711   }
712 
713   // Compute the #include and #include_macros lines we need.
714   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
715     StringRef File = ExistingPPOpts.Includes[I];
716 
717     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
718         !ExistingPPOpts.PCHThroughHeader.empty()) {
719       // In case the through header is an include, we must add all the includes
720       // to the predefines so the start point can be determined.
721       SuggestedPredefines += "#include \"";
722       SuggestedPredefines += File;
723       SuggestedPredefines += "\"\n";
724       continue;
725     }
726 
727     if (File == ExistingPPOpts.ImplicitPCHInclude)
728       continue;
729 
730     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
731           != PPOpts.Includes.end())
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 (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
742                   File)
743         != PPOpts.MacroIncludes.end())
744       continue;
745 
746     SuggestedPredefines += "#__include_macros \"";
747     SuggestedPredefines += File;
748     SuggestedPredefines += "\"\n##\n";
749   }
750 
751   return false;
752 }
753 
754 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
755                                            bool Complain,
756                                            std::string &SuggestedPredefines) {
757   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
758 
759   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
760                                   Complain? &Reader.Diags : nullptr,
761                                   PP.getFileManager(),
762                                   SuggestedPredefines,
763                                   PP.getLangOpts());
764 }
765 
766 bool SimpleASTReaderListener::ReadPreprocessorOptions(
767                                   const PreprocessorOptions &PPOpts,
768                                   bool Complain,
769                                   std::string &SuggestedPredefines) {
770   return checkPreprocessorOptions(PPOpts,
771                                   PP.getPreprocessorOpts(),
772                                   nullptr,
773                                   PP.getFileManager(),
774                                   SuggestedPredefines,
775                                   PP.getLangOpts(),
776                                   false);
777 }
778 
779 /// Check the header search options deserialized from the control block
780 /// against the header search options in an existing preprocessor.
781 ///
782 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
783 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
784                                      StringRef SpecificModuleCachePath,
785                                      StringRef ExistingModuleCachePath,
786                                      DiagnosticsEngine *Diags,
787                                      const LangOptions &LangOpts,
788                                      const PreprocessorOptions &PPOpts) {
789   if (LangOpts.Modules) {
790     if (SpecificModuleCachePath != ExistingModuleCachePath &&
791         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
792       if (Diags)
793         Diags->Report(diag::err_pch_modulecache_mismatch)
794           << SpecificModuleCachePath << ExistingModuleCachePath;
795       return true;
796     }
797   }
798 
799   return false;
800 }
801 
802 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
803                                            StringRef SpecificModuleCachePath,
804                                            bool Complain) {
805   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
806                                   PP.getHeaderSearchInfo().getModuleCachePath(),
807                                   Complain ? &Reader.Diags : nullptr,
808                                   PP.getLangOpts(), PP.getPreprocessorOpts());
809 }
810 
811 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
812   PP.setCounterValue(Value);
813 }
814 
815 //===----------------------------------------------------------------------===//
816 // AST reader implementation
817 //===----------------------------------------------------------------------===//
818 
819 static uint64_t readULEB(const unsigned char *&P) {
820   unsigned Length = 0;
821   const char *Error = nullptr;
822 
823   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
824   if (Error)
825     llvm::report_fatal_error(Error);
826   P += Length;
827   return Val;
828 }
829 
830 /// Read ULEB-encoded key length and data length.
831 static std::pair<unsigned, unsigned>
832 readULEBKeyDataLength(const unsigned char *&P) {
833   unsigned KeyLen = readULEB(P);
834   if ((unsigned)KeyLen != KeyLen)
835     llvm::report_fatal_error("key too large");
836 
837   unsigned DataLen = readULEB(P);
838   if ((unsigned)DataLen != DataLen)
839     llvm::report_fatal_error("data too large");
840 
841   return std::make_pair(KeyLen, DataLen);
842 }
843 
844 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
845                                            bool TakeOwnership) {
846   DeserializationListener = Listener;
847   OwnsDeserializationListener = TakeOwnership;
848 }
849 
850 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
851   return serialization::ComputeHash(Sel);
852 }
853 
854 std::pair<unsigned, unsigned>
855 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
856   return readULEBKeyDataLength(d);
857 }
858 
859 ASTSelectorLookupTrait::internal_key_type
860 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
861   using namespace llvm::support;
862 
863   SelectorTable &SelTable = Reader.getContext().Selectors;
864   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
865   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
866       F, endian::readNext<uint32_t, little, unaligned>(d));
867   if (N == 0)
868     return SelTable.getNullarySelector(FirstII);
869   else if (N == 1)
870     return SelTable.getUnarySelector(FirstII);
871 
872   SmallVector<IdentifierInfo *, 16> Args;
873   Args.push_back(FirstII);
874   for (unsigned I = 1; I != N; ++I)
875     Args.push_back(Reader.getLocalIdentifier(
876         F, endian::readNext<uint32_t, little, unaligned>(d)));
877 
878   return SelTable.getSelector(N, Args.data());
879 }
880 
881 ASTSelectorLookupTrait::data_type
882 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
883                                  unsigned DataLen) {
884   using namespace llvm::support;
885 
886   data_type Result;
887 
888   Result.ID = Reader.getGlobalSelectorID(
889       F, endian::readNext<uint32_t, little, unaligned>(d));
890   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
891   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
892   Result.InstanceBits = FullInstanceBits & 0x3;
893   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
894   Result.FactoryBits = FullFactoryBits & 0x3;
895   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
896   unsigned NumInstanceMethods = FullInstanceBits >> 3;
897   unsigned NumFactoryMethods = FullFactoryBits >> 3;
898 
899   // Load instance methods
900   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
901     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
902             F, endian::readNext<uint32_t, little, unaligned>(d)))
903       Result.Instance.push_back(Method);
904   }
905 
906   // Load factory methods
907   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
908     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
909             F, endian::readNext<uint32_t, little, unaligned>(d)))
910       Result.Factory.push_back(Method);
911   }
912 
913   return Result;
914 }
915 
916 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
917   return llvm::djbHash(a);
918 }
919 
920 std::pair<unsigned, unsigned>
921 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
922   return readULEBKeyDataLength(d);
923 }
924 
925 ASTIdentifierLookupTraitBase::internal_key_type
926 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
927   assert(n >= 2 && d[n-1] == '\0');
928   return StringRef((const char*) d, n-1);
929 }
930 
931 /// Whether the given identifier is "interesting".
932 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
933                                     bool IsModule) {
934   return II.hadMacroDefinition() || II.isPoisoned() ||
935          (!IsModule && II.getObjCOrBuiltinID()) ||
936          II.hasRevertedTokenIDToIdentifier() ||
937          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
938           II.getFETokenInfo());
939 }
940 
941 static bool readBit(unsigned &Bits) {
942   bool Value = Bits & 0x1;
943   Bits >>= 1;
944   return Value;
945 }
946 
947 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
948   using namespace llvm::support;
949 
950   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
951   return Reader.getGlobalIdentifierID(F, RawID >> 1);
952 }
953 
954 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
955   if (!II.isFromAST()) {
956     II.setIsFromAST();
957     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
958     if (isInterestingIdentifier(Reader, II, IsModule))
959       II.setChangedSinceDeserialization();
960   }
961 }
962 
963 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
964                                                    const unsigned char* d,
965                                                    unsigned DataLen) {
966   using namespace llvm::support;
967 
968   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
969   bool IsInteresting = RawID & 0x01;
970 
971   // Wipe out the "is interesting" bit.
972   RawID = RawID >> 1;
973 
974   // Build the IdentifierInfo and link the identifier ID with it.
975   IdentifierInfo *II = KnownII;
976   if (!II) {
977     II = &Reader.getIdentifierTable().getOwn(k);
978     KnownII = II;
979   }
980   markIdentifierFromAST(Reader, *II);
981   Reader.markIdentifierUpToDate(II);
982 
983   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
984   if (!IsInteresting) {
985     // For uninteresting identifiers, there's nothing else to do. Just notify
986     // the reader that we've finished loading this identifier.
987     Reader.SetIdentifierInfo(ID, II);
988     return II;
989   }
990 
991   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
992   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
993   bool CPlusPlusOperatorKeyword = readBit(Bits);
994   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
995   bool Poisoned = readBit(Bits);
996   bool ExtensionToken = readBit(Bits);
997   bool HadMacroDefinition = readBit(Bits);
998 
999   assert(Bits == 0 && "Extra bits in the identifier?");
1000   DataLen -= 8;
1001 
1002   // Set or check the various bits in the IdentifierInfo structure.
1003   // Token IDs are read-only.
1004   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1005     II->revertTokenIDToIdentifier();
1006   if (!F.isModule())
1007     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1008   assert(II->isExtensionToken() == ExtensionToken &&
1009          "Incorrect extension token flag");
1010   (void)ExtensionToken;
1011   if (Poisoned)
1012     II->setIsPoisoned(true);
1013   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1014          "Incorrect C++ operator keyword flag");
1015   (void)CPlusPlusOperatorKeyword;
1016 
1017   // If this identifier is a macro, deserialize the macro
1018   // definition.
1019   if (HadMacroDefinition) {
1020     uint32_t MacroDirectivesOffset =
1021         endian::readNext<uint32_t, little, unaligned>(d);
1022     DataLen -= 4;
1023 
1024     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1025   }
1026 
1027   Reader.SetIdentifierInfo(ID, II);
1028 
1029   // Read all of the declarations visible at global scope with this
1030   // name.
1031   if (DataLen > 0) {
1032     SmallVector<uint32_t, 4> DeclIDs;
1033     for (; DataLen > 0; DataLen -= 4)
1034       DeclIDs.push_back(Reader.getGlobalDeclID(
1035           F, endian::readNext<uint32_t, little, unaligned>(d)));
1036     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1037   }
1038 
1039   return II;
1040 }
1041 
1042 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1043     : Kind(Name.getNameKind()) {
1044   switch (Kind) {
1045   case DeclarationName::Identifier:
1046     Data = (uint64_t)Name.getAsIdentifierInfo();
1047     break;
1048   case DeclarationName::ObjCZeroArgSelector:
1049   case DeclarationName::ObjCOneArgSelector:
1050   case DeclarationName::ObjCMultiArgSelector:
1051     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1052     break;
1053   case DeclarationName::CXXOperatorName:
1054     Data = Name.getCXXOverloadedOperator();
1055     break;
1056   case DeclarationName::CXXLiteralOperatorName:
1057     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1058     break;
1059   case DeclarationName::CXXDeductionGuideName:
1060     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1061                ->getDeclName().getAsIdentifierInfo();
1062     break;
1063   case DeclarationName::CXXConstructorName:
1064   case DeclarationName::CXXDestructorName:
1065   case DeclarationName::CXXConversionFunctionName:
1066   case DeclarationName::CXXUsingDirective:
1067     Data = 0;
1068     break;
1069   }
1070 }
1071 
1072 unsigned DeclarationNameKey::getHash() const {
1073   llvm::FoldingSetNodeID ID;
1074   ID.AddInteger(Kind);
1075 
1076   switch (Kind) {
1077   case DeclarationName::Identifier:
1078   case DeclarationName::CXXLiteralOperatorName:
1079   case DeclarationName::CXXDeductionGuideName:
1080     ID.AddString(((IdentifierInfo*)Data)->getName());
1081     break;
1082   case DeclarationName::ObjCZeroArgSelector:
1083   case DeclarationName::ObjCOneArgSelector:
1084   case DeclarationName::ObjCMultiArgSelector:
1085     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1086     break;
1087   case DeclarationName::CXXOperatorName:
1088     ID.AddInteger((OverloadedOperatorKind)Data);
1089     break;
1090   case DeclarationName::CXXConstructorName:
1091   case DeclarationName::CXXDestructorName:
1092   case DeclarationName::CXXConversionFunctionName:
1093   case DeclarationName::CXXUsingDirective:
1094     break;
1095   }
1096 
1097   return ID.ComputeHash();
1098 }
1099 
1100 ModuleFile *
1101 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1102   using namespace llvm::support;
1103 
1104   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1105   return Reader.getLocalModuleFile(F, ModuleFileID);
1106 }
1107 
1108 std::pair<unsigned, unsigned>
1109 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1110   return readULEBKeyDataLength(d);
1111 }
1112 
1113 ASTDeclContextNameLookupTrait::internal_key_type
1114 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1115   using namespace llvm::support;
1116 
1117   auto Kind = (DeclarationName::NameKind)*d++;
1118   uint64_t Data;
1119   switch (Kind) {
1120   case DeclarationName::Identifier:
1121   case DeclarationName::CXXLiteralOperatorName:
1122   case DeclarationName::CXXDeductionGuideName:
1123     Data = (uint64_t)Reader.getLocalIdentifier(
1124         F, endian::readNext<uint32_t, little, unaligned>(d));
1125     break;
1126   case DeclarationName::ObjCZeroArgSelector:
1127   case DeclarationName::ObjCOneArgSelector:
1128   case DeclarationName::ObjCMultiArgSelector:
1129     Data =
1130         (uint64_t)Reader.getLocalSelector(
1131                              F, endian::readNext<uint32_t, little, unaligned>(
1132                                     d)).getAsOpaquePtr();
1133     break;
1134   case DeclarationName::CXXOperatorName:
1135     Data = *d++; // OverloadedOperatorKind
1136     break;
1137   case DeclarationName::CXXConstructorName:
1138   case DeclarationName::CXXDestructorName:
1139   case DeclarationName::CXXConversionFunctionName:
1140   case DeclarationName::CXXUsingDirective:
1141     Data = 0;
1142     break;
1143   }
1144 
1145   return DeclarationNameKey(Kind, Data);
1146 }
1147 
1148 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1149                                                  const unsigned char *d,
1150                                                  unsigned DataLen,
1151                                                  data_type_builder &Val) {
1152   using namespace llvm::support;
1153 
1154   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1155     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1156     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1157   }
1158 }
1159 
1160 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1161                                               BitstreamCursor &Cursor,
1162                                               uint64_t Offset,
1163                                               DeclContext *DC) {
1164   assert(Offset != 0);
1165 
1166   SavedStreamPosition SavedPosition(Cursor);
1167   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1168     Error(std::move(Err));
1169     return true;
1170   }
1171 
1172   RecordData Record;
1173   StringRef Blob;
1174   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1175   if (!MaybeCode) {
1176     Error(MaybeCode.takeError());
1177     return true;
1178   }
1179   unsigned Code = MaybeCode.get();
1180 
1181   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1182   if (!MaybeRecCode) {
1183     Error(MaybeRecCode.takeError());
1184     return true;
1185   }
1186   unsigned RecCode = MaybeRecCode.get();
1187   if (RecCode != DECL_CONTEXT_LEXICAL) {
1188     Error("Expected lexical block");
1189     return true;
1190   }
1191 
1192   assert(!isa<TranslationUnitDecl>(DC) &&
1193          "expected a TU_UPDATE_LEXICAL record for TU");
1194   // If we are handling a C++ class template instantiation, we can see multiple
1195   // lexical updates for the same record. It's important that we select only one
1196   // of them, so that field numbering works properly. Just pick the first one we
1197   // see.
1198   auto &Lex = LexicalDecls[DC];
1199   if (!Lex.first) {
1200     Lex = std::make_pair(
1201         &M, llvm::makeArrayRef(
1202                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1203                     Blob.data()),
1204                 Blob.size() / 4));
1205   }
1206   DC->setHasExternalLexicalStorage(true);
1207   return false;
1208 }
1209 
1210 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1211                                               BitstreamCursor &Cursor,
1212                                               uint64_t Offset,
1213                                               DeclID ID) {
1214   assert(Offset != 0);
1215 
1216   SavedStreamPosition SavedPosition(Cursor);
1217   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1218     Error(std::move(Err));
1219     return true;
1220   }
1221 
1222   RecordData Record;
1223   StringRef Blob;
1224   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1225   if (!MaybeCode) {
1226     Error(MaybeCode.takeError());
1227     return true;
1228   }
1229   unsigned Code = MaybeCode.get();
1230 
1231   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1232   if (!MaybeRecCode) {
1233     Error(MaybeRecCode.takeError());
1234     return true;
1235   }
1236   unsigned RecCode = MaybeRecCode.get();
1237   if (RecCode != DECL_CONTEXT_VISIBLE) {
1238     Error("Expected visible lookup table block");
1239     return true;
1240   }
1241 
1242   // We can't safely determine the primary context yet, so delay attaching the
1243   // lookup table until we're done with recursive deserialization.
1244   auto *Data = (const unsigned char*)Blob.data();
1245   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1246   return false;
1247 }
1248 
1249 void ASTReader::Error(StringRef Msg) const {
1250   Error(diag::err_fe_pch_malformed, Msg);
1251   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1252       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1253     Diag(diag::note_module_cache_path)
1254       << PP.getHeaderSearchInfo().getModuleCachePath();
1255   }
1256 }
1257 
1258 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1259                       StringRef Arg3) const {
1260   if (Diags.isDiagnosticInFlight())
1261     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1262   else
1263     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1264 }
1265 
1266 void ASTReader::Error(llvm::Error &&Err) const {
1267   llvm::Error RemainingErr =
1268       handleErrors(std::move(Err), [this](const DiagnosticError &E) {
1269         auto Diag = E.getDiagnostic().second;
1270 
1271         // Ideally we'd just emit it, but have to handle a possible in-flight
1272         // diagnostic. Note that the location is currently ignored as well.
1273         auto NumArgs = Diag.getStorage()->NumDiagArgs;
1274         assert(NumArgs <= 3 && "Can only have up to 3 arguments");
1275         StringRef Arg1, Arg2, Arg3;
1276         switch (NumArgs) {
1277         case 3:
1278           Arg3 = Diag.getStringArg(2);
1279           LLVM_FALLTHROUGH;
1280         case 2:
1281           Arg2 = Diag.getStringArg(1);
1282           LLVM_FALLTHROUGH;
1283         case 1:
1284           Arg1 = Diag.getStringArg(0);
1285         }
1286         Error(Diag.getDiagID(), Arg1, Arg2, Arg3);
1287       });
1288   if (RemainingErr)
1289     Error(toString(std::move(RemainingErr)));
1290 }
1291 
1292 //===----------------------------------------------------------------------===//
1293 // Source Manager Deserialization
1294 //===----------------------------------------------------------------------===//
1295 
1296 /// Read the line table in the source manager block.
1297 void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
1298   unsigned Idx = 0;
1299   LineTableInfo &LineTable = SourceMgr.getLineTable();
1300 
1301   // Parse the file names
1302   std::map<int, int> FileIDs;
1303   FileIDs[-1] = -1; // For unspecified filenames.
1304   for (unsigned I = 0; Record[Idx]; ++I) {
1305     // Extract the file name
1306     auto Filename = ReadPath(F, Record, Idx);
1307     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1308   }
1309   ++Idx;
1310 
1311   // Parse the line entries
1312   std::vector<LineEntry> Entries;
1313   while (Idx < Record.size()) {
1314     int FID = Record[Idx++];
1315     assert(FID >= 0 && "Serialized line entries for non-local file.");
1316     // Remap FileID from 1-based old view.
1317     FID += F.SLocEntryBaseID - 1;
1318 
1319     // Extract the line entries
1320     unsigned NumEntries = Record[Idx++];
1321     assert(NumEntries && "no line entries for file ID");
1322     Entries.clear();
1323     Entries.reserve(NumEntries);
1324     for (unsigned I = 0; I != NumEntries; ++I) {
1325       unsigned FileOffset = Record[Idx++];
1326       unsigned LineNo = Record[Idx++];
1327       int FilenameID = FileIDs[Record[Idx++]];
1328       SrcMgr::CharacteristicKind FileKind
1329         = (SrcMgr::CharacteristicKind)Record[Idx++];
1330       unsigned IncludeOffset = Record[Idx++];
1331       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1332                                        FileKind, IncludeOffset));
1333     }
1334     LineTable.AddEntry(FileID::get(FID), Entries);
1335   }
1336 }
1337 
1338 /// Read a source manager block
1339 llvm::Error ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1340   using namespace SrcMgr;
1341 
1342   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1343 
1344   // Set the source-location entry cursor to the current position in
1345   // the stream. This cursor will be used to read the contents of the
1346   // source manager block initially, and then lazily read
1347   // source-location entries as needed.
1348   SLocEntryCursor = F.Stream;
1349 
1350   // The stream itself is going to skip over the source manager block.
1351   if (llvm::Error Err = F.Stream.SkipBlock())
1352     return Err;
1353 
1354   // Enter the source manager block.
1355   if (llvm::Error Err = SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID))
1356     return Err;
1357   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1358 
1359   RecordData Record;
1360   while (true) {
1361     Expected<llvm::BitstreamEntry> MaybeE =
1362         SLocEntryCursor.advanceSkippingSubblocks();
1363     if (!MaybeE)
1364       return MaybeE.takeError();
1365     llvm::BitstreamEntry E = MaybeE.get();
1366 
1367     switch (E.Kind) {
1368     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1369     case llvm::BitstreamEntry::Error:
1370       return llvm::createStringError(std::errc::illegal_byte_sequence,
1371                                      "malformed block record in AST file");
1372     case llvm::BitstreamEntry::EndBlock:
1373       return llvm::Error::success();
1374     case llvm::BitstreamEntry::Record:
1375       // The interesting case.
1376       break;
1377     }
1378 
1379     // Read a record.
1380     Record.clear();
1381     StringRef Blob;
1382     Expected<unsigned> MaybeRecord =
1383         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1384     if (!MaybeRecord)
1385       return MaybeRecord.takeError();
1386     switch (MaybeRecord.get()) {
1387     default:  // Default behavior: ignore.
1388       break;
1389 
1390     case SM_SLOC_FILE_ENTRY:
1391     case SM_SLOC_BUFFER_ENTRY:
1392     case SM_SLOC_EXPANSION_ENTRY:
1393       // Once we hit one of the source location entries, we're done.
1394       return llvm::Error::success();
1395     }
1396   }
1397 }
1398 
1399 /// If a header file is not found at the path that we expect it to be
1400 /// and the PCH file was moved from its original location, try to resolve the
1401 /// file by assuming that header+PCH were moved together and the header is in
1402 /// the same place relative to the PCH.
1403 static std::string
1404 resolveFileRelativeToOriginalDir(const std::string &Filename,
1405                                  const std::string &OriginalDir,
1406                                  const std::string &CurrDir) {
1407   assert(OriginalDir != CurrDir &&
1408          "No point trying to resolve the file if the PCH dir didn't change");
1409 
1410   using namespace llvm::sys;
1411 
1412   SmallString<128> filePath(Filename);
1413   fs::make_absolute(filePath);
1414   assert(path::is_absolute(OriginalDir));
1415   SmallString<128> currPCHPath(CurrDir);
1416 
1417   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1418                        fileDirE = path::end(path::parent_path(filePath));
1419   path::const_iterator origDirI = path::begin(OriginalDir),
1420                        origDirE = path::end(OriginalDir);
1421   // Skip the common path components from filePath and OriginalDir.
1422   while (fileDirI != fileDirE && origDirI != origDirE &&
1423          *fileDirI == *origDirI) {
1424     ++fileDirI;
1425     ++origDirI;
1426   }
1427   for (; origDirI != origDirE; ++origDirI)
1428     path::append(currPCHPath, "..");
1429   path::append(currPCHPath, fileDirI, fileDirE);
1430   path::append(currPCHPath, path::filename(Filename));
1431   return std::string(currPCHPath.str());
1432 }
1433 
1434 bool ASTReader::ReadSLocEntry(int ID) {
1435   if (ID == 0)
1436     return false;
1437 
1438   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1439     Error("source location entry ID out-of-range for AST file");
1440     return true;
1441   }
1442 
1443   // Local helper to read the (possibly-compressed) buffer data following the
1444   // entry record.
1445   auto ReadBuffer = [this](
1446       BitstreamCursor &SLocEntryCursor,
1447       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1448     RecordData Record;
1449     StringRef Blob;
1450     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1451     if (!MaybeCode) {
1452       Error(MaybeCode.takeError());
1453       return nullptr;
1454     }
1455     unsigned Code = MaybeCode.get();
1456 
1457     Expected<unsigned> MaybeRecCode =
1458         SLocEntryCursor.readRecord(Code, Record, &Blob);
1459     if (!MaybeRecCode) {
1460       Error(MaybeRecCode.takeError());
1461       return nullptr;
1462     }
1463     unsigned RecCode = MaybeRecCode.get();
1464 
1465     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1466       if (!llvm::zlib::isAvailable()) {
1467         Error("zlib is not available");
1468         return nullptr;
1469       }
1470       SmallString<0> Uncompressed;
1471       if (llvm::Error E =
1472               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1473         Error("could not decompress embedded file contents: " +
1474               llvm::toString(std::move(E)));
1475         return nullptr;
1476       }
1477       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1478     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1479       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1480     } else {
1481       Error("AST record has invalid code");
1482       return nullptr;
1483     }
1484   };
1485 
1486   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1487   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1488           F->SLocEntryOffsetsBase +
1489           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1490     Error(std::move(Err));
1491     return true;
1492   }
1493 
1494   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1495   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1496 
1497   ++NumSLocEntriesRead;
1498   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1499   if (!MaybeEntry) {
1500     Error(MaybeEntry.takeError());
1501     return true;
1502   }
1503   llvm::BitstreamEntry Entry = MaybeEntry.get();
1504 
1505   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1506     Error("incorrectly-formatted source location entry in AST file");
1507     return true;
1508   }
1509 
1510   RecordData Record;
1511   StringRef Blob;
1512   Expected<unsigned> MaybeSLOC =
1513       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1514   if (!MaybeSLOC) {
1515     Error(MaybeSLOC.takeError());
1516     return true;
1517   }
1518   switch (MaybeSLOC.get()) {
1519   default:
1520     Error("incorrectly-formatted source location entry in AST file");
1521     return true;
1522 
1523   case SM_SLOC_FILE_ENTRY: {
1524     // We will detect whether a file changed and return 'Failure' for it, but
1525     // we will also try to fail gracefully by setting up the SLocEntry.
1526     unsigned InputID = Record[4];
1527     InputFile IF = getInputFile(*F, InputID);
1528     Optional<FileEntryRef> File = IF.getFile();
1529     bool OverriddenBuffer = IF.isOverridden();
1530 
1531     // Note that we only check if a File was returned. If it was out-of-date
1532     // we have complained but we will continue creating a FileID to recover
1533     // gracefully.
1534     if (!File)
1535       return true;
1536 
1537     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1538     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1539       // This is the module's main file.
1540       IncludeLoc = getImportLocation(F);
1541     }
1542     SrcMgr::CharacteristicKind
1543       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1544     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1545                                         BaseOffset + Record[0]);
1546     SrcMgr::FileInfo &FileInfo =
1547           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1548     FileInfo.NumCreatedFIDs = Record[5];
1549     if (Record[3])
1550       FileInfo.setHasLineDirectives();
1551 
1552     unsigned NumFileDecls = Record[7];
1553     if (NumFileDecls && ContextObj) {
1554       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1555       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1556       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1557                                                              NumFileDecls));
1558     }
1559 
1560     const SrcMgr::ContentCache &ContentCache =
1561         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1562     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1563         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1564         !ContentCache.getBufferIfLoaded()) {
1565       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1566       if (!Buffer)
1567         return true;
1568       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1569     }
1570 
1571     break;
1572   }
1573 
1574   case SM_SLOC_BUFFER_ENTRY: {
1575     const char *Name = Blob.data();
1576     unsigned Offset = Record[0];
1577     SrcMgr::CharacteristicKind
1578       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1579     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1580     if (IncludeLoc.isInvalid() && F->isModule()) {
1581       IncludeLoc = getImportLocation(F);
1582     }
1583 
1584     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1585     if (!Buffer)
1586       return true;
1587     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1588                            BaseOffset + Offset, IncludeLoc);
1589     break;
1590   }
1591 
1592   case SM_SLOC_EXPANSION_ENTRY: {
1593     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1594     SourceMgr.createExpansionLoc(SpellingLoc,
1595                                      ReadSourceLocation(*F, Record[2]),
1596                                      ReadSourceLocation(*F, Record[3]),
1597                                      Record[5],
1598                                      Record[4],
1599                                      ID,
1600                                      BaseOffset + Record[0]);
1601     break;
1602   }
1603   }
1604 
1605   return false;
1606 }
1607 
1608 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1609   if (ID == 0)
1610     return std::make_pair(SourceLocation(), "");
1611 
1612   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1613     Error("source location entry ID out-of-range for AST file");
1614     return std::make_pair(SourceLocation(), "");
1615   }
1616 
1617   // Find which module file this entry lands in.
1618   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1619   if (!M->isModule())
1620     return std::make_pair(SourceLocation(), "");
1621 
1622   // FIXME: Can we map this down to a particular submodule? That would be
1623   // ideal.
1624   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1625 }
1626 
1627 /// Find the location where the module F is imported.
1628 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1629   if (F->ImportLoc.isValid())
1630     return F->ImportLoc;
1631 
1632   // Otherwise we have a PCH. It's considered to be "imported" at the first
1633   // location of its includer.
1634   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1635     // Main file is the importer.
1636     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1637     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1638   }
1639   return F->ImportedBy[0]->FirstLoc;
1640 }
1641 
1642 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1643 /// the abbreviations that are at the top of the block and then leave the cursor
1644 /// pointing into the block.
1645 llvm::Error ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor,
1646                                         unsigned BlockID,
1647                                         uint64_t *StartOfBlockOffset) {
1648   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID))
1649     return Err;
1650 
1651   if (StartOfBlockOffset)
1652     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1653 
1654   while (true) {
1655     uint64_t Offset = Cursor.GetCurrentBitNo();
1656     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1657     if (!MaybeCode)
1658       return MaybeCode.takeError();
1659     unsigned Code = MaybeCode.get();
1660 
1661     // We expect all abbrevs to be at the start of the block.
1662     if (Code != llvm::bitc::DEFINE_ABBREV) {
1663       if (llvm::Error Err = Cursor.JumpToBit(Offset))
1664         return Err;
1665       return llvm::Error::success();
1666     }
1667     if (llvm::Error Err = Cursor.ReadAbbrevRecord())
1668       return Err;
1669   }
1670 }
1671 
1672 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1673                            unsigned &Idx) {
1674   Token Tok;
1675   Tok.startToken();
1676   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1677   Tok.setLength(Record[Idx++]);
1678   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1679     Tok.setIdentifierInfo(II);
1680   Tok.setKind((tok::TokenKind)Record[Idx++]);
1681   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1682   return Tok;
1683 }
1684 
1685 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1686   BitstreamCursor &Stream = F.MacroCursor;
1687 
1688   // Keep track of where we are in the stream, then jump back there
1689   // after reading this macro.
1690   SavedStreamPosition SavedPosition(Stream);
1691 
1692   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1693     // FIXME this drops errors on the floor.
1694     consumeError(std::move(Err));
1695     return nullptr;
1696   }
1697   RecordData Record;
1698   SmallVector<IdentifierInfo*, 16> MacroParams;
1699   MacroInfo *Macro = nullptr;
1700 
1701   while (true) {
1702     // Advance to the next record, but if we get to the end of the block, don't
1703     // pop it (removing all the abbreviations from the cursor) since we want to
1704     // be able to reseek within the block and read entries.
1705     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1706     Expected<llvm::BitstreamEntry> MaybeEntry =
1707         Stream.advanceSkippingSubblocks(Flags);
1708     if (!MaybeEntry) {
1709       Error(MaybeEntry.takeError());
1710       return Macro;
1711     }
1712     llvm::BitstreamEntry Entry = MaybeEntry.get();
1713 
1714     switch (Entry.Kind) {
1715     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1716     case llvm::BitstreamEntry::Error:
1717       Error("malformed block record in AST file");
1718       return Macro;
1719     case llvm::BitstreamEntry::EndBlock:
1720       return Macro;
1721     case llvm::BitstreamEntry::Record:
1722       // The interesting case.
1723       break;
1724     }
1725 
1726     // Read a record.
1727     Record.clear();
1728     PreprocessorRecordTypes RecType;
1729     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1730       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1731     else {
1732       Error(MaybeRecType.takeError());
1733       return Macro;
1734     }
1735     switch (RecType) {
1736     case PP_MODULE_MACRO:
1737     case PP_MACRO_DIRECTIVE_HISTORY:
1738       return Macro;
1739 
1740     case PP_MACRO_OBJECT_LIKE:
1741     case PP_MACRO_FUNCTION_LIKE: {
1742       // If we already have a macro, that means that we've hit the end
1743       // of the definition of the macro we were looking for. We're
1744       // done.
1745       if (Macro)
1746         return Macro;
1747 
1748       unsigned NextIndex = 1; // Skip identifier ID.
1749       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1750       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1751       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1752       MI->setIsUsed(Record[NextIndex++]);
1753       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1754 
1755       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1756         // Decode function-like macro info.
1757         bool isC99VarArgs = Record[NextIndex++];
1758         bool isGNUVarArgs = Record[NextIndex++];
1759         bool hasCommaPasting = Record[NextIndex++];
1760         MacroParams.clear();
1761         unsigned NumArgs = Record[NextIndex++];
1762         for (unsigned i = 0; i != NumArgs; ++i)
1763           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1764 
1765         // Install function-like macro info.
1766         MI->setIsFunctionLike();
1767         if (isC99VarArgs) MI->setIsC99Varargs();
1768         if (isGNUVarArgs) MI->setIsGNUVarargs();
1769         if (hasCommaPasting) MI->setHasCommaPasting();
1770         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1771       }
1772 
1773       // Remember that we saw this macro last so that we add the tokens that
1774       // form its body to it.
1775       Macro = MI;
1776 
1777       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1778           Record[NextIndex]) {
1779         // We have a macro definition. Register the association
1780         PreprocessedEntityID
1781             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1782         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1783         PreprocessingRecord::PPEntityID PPID =
1784             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1785         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1786             PPRec.getPreprocessedEntity(PPID));
1787         if (PPDef)
1788           PPRec.RegisterMacroDefinition(Macro, PPDef);
1789       }
1790 
1791       ++NumMacrosRead;
1792       break;
1793     }
1794 
1795     case PP_TOKEN: {
1796       // If we see a TOKEN before a PP_MACRO_*, then the file is
1797       // erroneous, just pretend we didn't see this.
1798       if (!Macro) break;
1799 
1800       unsigned Idx = 0;
1801       Token Tok = ReadToken(F, Record, Idx);
1802       Macro->AddTokenToBody(Tok);
1803       break;
1804     }
1805     }
1806   }
1807 }
1808 
1809 PreprocessedEntityID
1810 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1811                                          unsigned LocalID) const {
1812   if (!M.ModuleOffsetMap.empty())
1813     ReadModuleOffsetMap(M);
1814 
1815   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1816     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1817   assert(I != M.PreprocessedEntityRemap.end()
1818          && "Invalid index into preprocessed entity index remap");
1819 
1820   return LocalID + I->second;
1821 }
1822 
1823 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1824   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1825 }
1826 
1827 HeaderFileInfoTrait::internal_key_type
1828 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1829   internal_key_type ikey = {FE->getSize(),
1830                             M.HasTimestamps ? FE->getModificationTime() : 0,
1831                             FE->getName(), /*Imported*/ false};
1832   return ikey;
1833 }
1834 
1835 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1836   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1837     return false;
1838 
1839   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1840     return true;
1841 
1842   // Determine whether the actual files are equivalent.
1843   FileManager &FileMgr = Reader.getFileManager();
1844   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1845     if (!Key.Imported) {
1846       if (auto File = FileMgr.getFile(Key.Filename))
1847         return *File;
1848       return nullptr;
1849     }
1850 
1851     std::string Resolved = std::string(Key.Filename);
1852     Reader.ResolveImportedPath(M, Resolved);
1853     if (auto File = FileMgr.getFile(Resolved))
1854       return *File;
1855     return nullptr;
1856   };
1857 
1858   const FileEntry *FEA = GetFile(a);
1859   const FileEntry *FEB = GetFile(b);
1860   return FEA && FEA == FEB;
1861 }
1862 
1863 std::pair<unsigned, unsigned>
1864 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1865   return readULEBKeyDataLength(d);
1866 }
1867 
1868 HeaderFileInfoTrait::internal_key_type
1869 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1870   using namespace llvm::support;
1871 
1872   internal_key_type ikey;
1873   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1874   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1875   ikey.Filename = (const char *)d;
1876   ikey.Imported = true;
1877   return ikey;
1878 }
1879 
1880 HeaderFileInfoTrait::data_type
1881 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1882                               unsigned DataLen) {
1883   using namespace llvm::support;
1884 
1885   const unsigned char *End = d + DataLen;
1886   HeaderFileInfo HFI;
1887   unsigned Flags = *d++;
1888   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1889   HFI.isImport |= (Flags >> 5) & 0x01;
1890   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1891   HFI.DirInfo = (Flags >> 1) & 0x07;
1892   HFI.IndexHeaderMapHeader = Flags & 0x01;
1893   // FIXME: Find a better way to handle this. Maybe just store a
1894   // "has been included" flag?
1895   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1896                              HFI.NumIncludes);
1897   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1898       M, endian::readNext<uint32_t, little, unaligned>(d));
1899   if (unsigned FrameworkOffset =
1900           endian::readNext<uint32_t, little, unaligned>(d)) {
1901     // The framework offset is 1 greater than the actual offset,
1902     // since 0 is used as an indicator for "no framework name".
1903     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1904     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1905   }
1906 
1907   assert((End - d) % 4 == 0 &&
1908          "Wrong data length in HeaderFileInfo deserialization");
1909   while (d != End) {
1910     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1911     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1912     LocalSMID >>= 2;
1913 
1914     // This header is part of a module. Associate it with the module to enable
1915     // implicit module import.
1916     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1917     Module *Mod = Reader.getSubmodule(GlobalSMID);
1918     FileManager &FileMgr = Reader.getFileManager();
1919     ModuleMap &ModMap =
1920         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1921 
1922     std::string Filename = std::string(key.Filename);
1923     if (key.Imported)
1924       Reader.ResolveImportedPath(M, Filename);
1925     // FIXME: NameAsWritten
1926     Module::Header H = {std::string(key.Filename), "",
1927                         *FileMgr.getFile(Filename)};
1928     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1929     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1930   }
1931 
1932   // This HeaderFileInfo was externally loaded.
1933   HFI.External = true;
1934   HFI.IsValid = true;
1935   return HFI;
1936 }
1937 
1938 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1939                                 uint32_t MacroDirectivesOffset) {
1940   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1941   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1942 }
1943 
1944 void ASTReader::ReadDefinedMacros() {
1945   // Note that we are loading defined macros.
1946   Deserializing Macros(this);
1947 
1948   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1949     BitstreamCursor &MacroCursor = I.MacroCursor;
1950 
1951     // If there was no preprocessor block, skip this file.
1952     if (MacroCursor.getBitcodeBytes().empty())
1953       continue;
1954 
1955     BitstreamCursor Cursor = MacroCursor;
1956     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1957       Error(std::move(Err));
1958       return;
1959     }
1960 
1961     RecordData Record;
1962     while (true) {
1963       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1964       if (!MaybeE) {
1965         Error(MaybeE.takeError());
1966         return;
1967       }
1968       llvm::BitstreamEntry E = MaybeE.get();
1969 
1970       switch (E.Kind) {
1971       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1972       case llvm::BitstreamEntry::Error:
1973         Error("malformed block record in AST file");
1974         return;
1975       case llvm::BitstreamEntry::EndBlock:
1976         goto NextCursor;
1977 
1978       case llvm::BitstreamEntry::Record: {
1979         Record.clear();
1980         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1981         if (!MaybeRecord) {
1982           Error(MaybeRecord.takeError());
1983           return;
1984         }
1985         switch (MaybeRecord.get()) {
1986         default:  // Default behavior: ignore.
1987           break;
1988 
1989         case PP_MACRO_OBJECT_LIKE:
1990         case PP_MACRO_FUNCTION_LIKE: {
1991           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1992           if (II->isOutOfDate())
1993             updateOutOfDateIdentifier(*II);
1994           break;
1995         }
1996 
1997         case PP_TOKEN:
1998           // Ignore tokens.
1999           break;
2000         }
2001         break;
2002       }
2003       }
2004     }
2005     NextCursor:  ;
2006   }
2007 }
2008 
2009 namespace {
2010 
2011   /// Visitor class used to look up identifirs in an AST file.
2012   class IdentifierLookupVisitor {
2013     StringRef Name;
2014     unsigned NameHash;
2015     unsigned PriorGeneration;
2016     unsigned &NumIdentifierLookups;
2017     unsigned &NumIdentifierLookupHits;
2018     IdentifierInfo *Found = nullptr;
2019 
2020   public:
2021     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2022                             unsigned &NumIdentifierLookups,
2023                             unsigned &NumIdentifierLookupHits)
2024       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2025         PriorGeneration(PriorGeneration),
2026         NumIdentifierLookups(NumIdentifierLookups),
2027         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2028 
2029     bool operator()(ModuleFile &M) {
2030       // If we've already searched this module file, skip it now.
2031       if (M.Generation <= PriorGeneration)
2032         return true;
2033 
2034       ASTIdentifierLookupTable *IdTable
2035         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2036       if (!IdTable)
2037         return false;
2038 
2039       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2040                                      Found);
2041       ++NumIdentifierLookups;
2042       ASTIdentifierLookupTable::iterator Pos =
2043           IdTable->find_hashed(Name, NameHash, &Trait);
2044       if (Pos == IdTable->end())
2045         return false;
2046 
2047       // Dereferencing the iterator has the effect of building the
2048       // IdentifierInfo node and populating it with the various
2049       // declarations it needs.
2050       ++NumIdentifierLookupHits;
2051       Found = *Pos;
2052       return true;
2053     }
2054 
2055     // Retrieve the identifier info found within the module
2056     // files.
2057     IdentifierInfo *getIdentifierInfo() const { return Found; }
2058   };
2059 
2060 } // namespace
2061 
2062 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2063   // Note that we are loading an identifier.
2064   Deserializing AnIdentifier(this);
2065 
2066   unsigned PriorGeneration = 0;
2067   if (getContext().getLangOpts().Modules)
2068     PriorGeneration = IdentifierGeneration[&II];
2069 
2070   // If there is a global index, look there first to determine which modules
2071   // provably do not have any results for this identifier.
2072   GlobalModuleIndex::HitSet Hits;
2073   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2074   if (!loadGlobalIndex()) {
2075     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2076       HitsPtr = &Hits;
2077     }
2078   }
2079 
2080   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2081                                   NumIdentifierLookups,
2082                                   NumIdentifierLookupHits);
2083   ModuleMgr.visit(Visitor, HitsPtr);
2084   markIdentifierUpToDate(&II);
2085 }
2086 
2087 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2088   if (!II)
2089     return;
2090 
2091   II->setOutOfDate(false);
2092 
2093   // Update the generation for this identifier.
2094   if (getContext().getLangOpts().Modules)
2095     IdentifierGeneration[II] = getGeneration();
2096 }
2097 
2098 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2099                                     const PendingMacroInfo &PMInfo) {
2100   ModuleFile &M = *PMInfo.M;
2101 
2102   BitstreamCursor &Cursor = M.MacroCursor;
2103   SavedStreamPosition SavedPosition(Cursor);
2104   if (llvm::Error Err =
2105           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2106     Error(std::move(Err));
2107     return;
2108   }
2109 
2110   struct ModuleMacroRecord {
2111     SubmoduleID SubModID;
2112     MacroInfo *MI;
2113     SmallVector<SubmoduleID, 8> Overrides;
2114   };
2115   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2116 
2117   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2118   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2119   // macro histroy.
2120   RecordData Record;
2121   while (true) {
2122     Expected<llvm::BitstreamEntry> MaybeEntry =
2123         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2124     if (!MaybeEntry) {
2125       Error(MaybeEntry.takeError());
2126       return;
2127     }
2128     llvm::BitstreamEntry Entry = MaybeEntry.get();
2129 
2130     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2131       Error("malformed block record in AST file");
2132       return;
2133     }
2134 
2135     Record.clear();
2136     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2137     if (!MaybePP) {
2138       Error(MaybePP.takeError());
2139       return;
2140     }
2141     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2142     case PP_MACRO_DIRECTIVE_HISTORY:
2143       break;
2144 
2145     case PP_MODULE_MACRO: {
2146       ModuleMacros.push_back(ModuleMacroRecord());
2147       auto &Info = ModuleMacros.back();
2148       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2149       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2150       for (int I = 2, N = Record.size(); I != N; ++I)
2151         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2152       continue;
2153     }
2154 
2155     default:
2156       Error("malformed block record in AST file");
2157       return;
2158     }
2159 
2160     // We found the macro directive history; that's the last record
2161     // for this macro.
2162     break;
2163   }
2164 
2165   // Module macros are listed in reverse dependency order.
2166   {
2167     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2168     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2169     for (auto &MMR : ModuleMacros) {
2170       Overrides.clear();
2171       for (unsigned ModID : MMR.Overrides) {
2172         Module *Mod = getSubmodule(ModID);
2173         auto *Macro = PP.getModuleMacro(Mod, II);
2174         assert(Macro && "missing definition for overridden macro");
2175         Overrides.push_back(Macro);
2176       }
2177 
2178       bool Inserted = false;
2179       Module *Owner = getSubmodule(MMR.SubModID);
2180       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2181     }
2182   }
2183 
2184   // Don't read the directive history for a module; we don't have anywhere
2185   // to put it.
2186   if (M.isModule())
2187     return;
2188 
2189   // Deserialize the macro directives history in reverse source-order.
2190   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2191   unsigned Idx = 0, N = Record.size();
2192   while (Idx < N) {
2193     MacroDirective *MD = nullptr;
2194     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2195     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2196     switch (K) {
2197     case MacroDirective::MD_Define: {
2198       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2199       MD = PP.AllocateDefMacroDirective(MI, Loc);
2200       break;
2201     }
2202     case MacroDirective::MD_Undefine:
2203       MD = PP.AllocateUndefMacroDirective(Loc);
2204       break;
2205     case MacroDirective::MD_Visibility:
2206       bool isPublic = Record[Idx++];
2207       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2208       break;
2209     }
2210 
2211     if (!Latest)
2212       Latest = MD;
2213     if (Earliest)
2214       Earliest->setPrevious(MD);
2215     Earliest = MD;
2216   }
2217 
2218   if (Latest)
2219     PP.setLoadedMacroDirective(II, Earliest, Latest);
2220 }
2221 
2222 bool ASTReader::shouldDisableValidationForFile(
2223     const serialization::ModuleFile &M) const {
2224   if (DisableValidationKind == DisableValidationForModuleKind::None)
2225     return false;
2226 
2227   // If a PCH is loaded and validation is disabled for PCH then disable
2228   // validation for the PCH and the modules it loads.
2229   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2230 
2231   switch (K) {
2232   case MK_MainFile:
2233   case MK_Preamble:
2234   case MK_PCH:
2235     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2236   case MK_ImplicitModule:
2237   case MK_ExplicitModule:
2238   case MK_PrebuiltModule:
2239     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2240   }
2241 
2242   return false;
2243 }
2244 
2245 ASTReader::InputFileInfo
2246 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2247   // Go find this input file.
2248   BitstreamCursor &Cursor = F.InputFilesCursor;
2249   SavedStreamPosition SavedPosition(Cursor);
2250   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2251     // FIXME this drops errors on the floor.
2252     consumeError(std::move(Err));
2253   }
2254 
2255   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2256   if (!MaybeCode) {
2257     // FIXME this drops errors on the floor.
2258     consumeError(MaybeCode.takeError());
2259   }
2260   unsigned Code = MaybeCode.get();
2261   RecordData Record;
2262   StringRef Blob;
2263 
2264   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2265     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2266            "invalid record type for input file");
2267   else {
2268     // FIXME this drops errors on the floor.
2269     consumeError(Maybe.takeError());
2270   }
2271 
2272   assert(Record[0] == ID && "Bogus stored ID or offset");
2273   InputFileInfo R;
2274   R.StoredSize = static_cast<off_t>(Record[1]);
2275   R.StoredTime = static_cast<time_t>(Record[2]);
2276   R.Overridden = static_cast<bool>(Record[3]);
2277   R.Transient = static_cast<bool>(Record[4]);
2278   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2279   R.Filename = std::string(Blob);
2280   ResolveImportedPath(F, R.Filename);
2281 
2282   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2283   if (!MaybeEntry) // FIXME this drops errors on the floor.
2284     consumeError(MaybeEntry.takeError());
2285   llvm::BitstreamEntry Entry = MaybeEntry.get();
2286   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2287          "expected record type for input file hash");
2288 
2289   Record.clear();
2290   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2291     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2292            "invalid record type for input file hash");
2293   else {
2294     // FIXME this drops errors on the floor.
2295     consumeError(Maybe.takeError());
2296   }
2297   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2298                   static_cast<uint64_t>(Record[0]);
2299   return R;
2300 }
2301 
2302 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2303 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2304   // If this ID is bogus, just return an empty input file.
2305   if (ID == 0 || ID > F.InputFilesLoaded.size())
2306     return InputFile();
2307 
2308   // If we've already loaded this input file, return it.
2309   if (F.InputFilesLoaded[ID-1].getFile())
2310     return F.InputFilesLoaded[ID-1];
2311 
2312   if (F.InputFilesLoaded[ID-1].isNotFound())
2313     return InputFile();
2314 
2315   // Go find this input file.
2316   BitstreamCursor &Cursor = F.InputFilesCursor;
2317   SavedStreamPosition SavedPosition(Cursor);
2318   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2319     // FIXME this drops errors on the floor.
2320     consumeError(std::move(Err));
2321   }
2322 
2323   InputFileInfo FI = readInputFileInfo(F, ID);
2324   off_t StoredSize = FI.StoredSize;
2325   time_t StoredTime = FI.StoredTime;
2326   bool Overridden = FI.Overridden;
2327   bool Transient = FI.Transient;
2328   StringRef Filename = FI.Filename;
2329   uint64_t StoredContentHash = FI.ContentHash;
2330 
2331   OptionalFileEntryRefDegradesToFileEntryPtr File =
2332       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2333 
2334   // If we didn't find the file, resolve it relative to the
2335   // original directory from which this AST file was created.
2336   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2337       F.OriginalDir != F.BaseDirectory) {
2338     std::string Resolved = resolveFileRelativeToOriginalDir(
2339         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2340     if (!Resolved.empty())
2341       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2342   }
2343 
2344   // For an overridden file, create a virtual file with the stored
2345   // size/timestamp.
2346   if ((Overridden || Transient) && !File)
2347     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2348 
2349   if (!File) {
2350     if (Complain) {
2351       std::string ErrorStr = "could not find file '";
2352       ErrorStr += Filename;
2353       ErrorStr += "' referenced by AST file '";
2354       ErrorStr += F.FileName;
2355       ErrorStr += "'";
2356       Error(ErrorStr);
2357     }
2358     // Record that we didn't find the file.
2359     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2360     return InputFile();
2361   }
2362 
2363   // Check if there was a request to override the contents of the file
2364   // that was part of the precompiled header. Overriding such a file
2365   // can lead to problems when lexing using the source locations from the
2366   // PCH.
2367   SourceManager &SM = getSourceManager();
2368   // FIXME: Reject if the overrides are different.
2369   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2370     if (Complain)
2371       Error(diag::err_fe_pch_file_overridden, Filename);
2372 
2373     // After emitting the diagnostic, bypass the overriding file to recover
2374     // (this creates a separate FileEntry).
2375     File = SM.bypassFileContentsOverride(*File);
2376     if (!File) {
2377       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2378       return InputFile();
2379     }
2380   }
2381 
2382   struct Change {
2383     enum ModificationKind {
2384       Size,
2385       ModTime,
2386       Content,
2387       None,
2388     } Kind;
2389     llvm::Optional<int64_t> Old = llvm::None;
2390     llvm::Optional<int64_t> New = llvm::None;
2391   };
2392   auto HasInputFileChanged = [&]() {
2393     if (StoredSize != File->getSize())
2394       return Change{Change::Size, StoredSize, File->getSize()};
2395     if (!shouldDisableValidationForFile(F) && StoredTime &&
2396         StoredTime != File->getModificationTime()) {
2397       Change MTimeChange = {Change::ModTime, StoredTime,
2398                             File->getModificationTime()};
2399 
2400       // In case the modification time changes but not the content,
2401       // accept the cached file as legit.
2402       if (ValidateASTInputFilesContent &&
2403           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2404         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2405         if (!MemBuffOrError) {
2406           if (!Complain)
2407             return MTimeChange;
2408           std::string ErrorStr = "could not get buffer for file '";
2409           ErrorStr += File->getName();
2410           ErrorStr += "'";
2411           Error(ErrorStr);
2412           return MTimeChange;
2413         }
2414 
2415         // FIXME: hash_value is not guaranteed to be stable!
2416         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2417         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2418           return Change{Change::None};
2419 
2420         return Change{Change::Content};
2421       }
2422       return MTimeChange;
2423     }
2424     return Change{Change::None};
2425   };
2426 
2427   bool IsOutOfDate = false;
2428   auto FileChange = HasInputFileChanged();
2429   // For an overridden file, there is nothing to validate.
2430   if (!Overridden && FileChange.Kind != Change::None) {
2431     if (Complain && !Diags.isDiagnosticInFlight()) {
2432       // Build a list of the PCH imports that got us here (in reverse).
2433       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2434       while (!ImportStack.back()->ImportedBy.empty())
2435         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2436 
2437       // The top-level PCH is stale.
2438       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2439       Diag(diag::err_fe_ast_file_modified)
2440           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2441           << TopLevelPCHName << FileChange.Kind
2442           << (FileChange.Old && FileChange.New)
2443           << llvm::itostr(FileChange.Old.getValueOr(0))
2444           << llvm::itostr(FileChange.New.getValueOr(0));
2445 
2446       // Print the import stack.
2447       if (ImportStack.size() > 1) {
2448         Diag(diag::note_pch_required_by)
2449           << Filename << ImportStack[0]->FileName;
2450         for (unsigned I = 1; I < ImportStack.size(); ++I)
2451           Diag(diag::note_pch_required_by)
2452             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2453       }
2454 
2455       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2456     }
2457 
2458     IsOutOfDate = true;
2459   }
2460   // FIXME: If the file is overridden and we've already opened it,
2461   // issue an error (or split it into a separate FileEntry).
2462 
2463   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2464 
2465   // Note that we've loaded this input file.
2466   F.InputFilesLoaded[ID-1] = IF;
2467   return IF;
2468 }
2469 
2470 /// If we are loading a relocatable PCH or module file, and the filename
2471 /// is not an absolute path, add the system or module root to the beginning of
2472 /// the file name.
2473 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2474   // Resolve relative to the base directory, if we have one.
2475   if (!M.BaseDirectory.empty())
2476     return ResolveImportedPath(Filename, M.BaseDirectory);
2477 }
2478 
2479 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2480   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2481     return;
2482 
2483   SmallString<128> Buffer;
2484   llvm::sys::path::append(Buffer, Prefix, Filename);
2485   Filename.assign(Buffer.begin(), Buffer.end());
2486 }
2487 
2488 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2489   switch (ARR) {
2490   case ASTReader::Failure: return true;
2491   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2492   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2493   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2494   case ASTReader::ConfigurationMismatch:
2495     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2496   case ASTReader::HadErrors: return true;
2497   case ASTReader::Success: return false;
2498   }
2499 
2500   llvm_unreachable("unknown ASTReadResult");
2501 }
2502 
2503 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2504     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2505     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2506     std::string &SuggestedPredefines) {
2507   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2508     // FIXME this drops errors on the floor.
2509     consumeError(std::move(Err));
2510     return Failure;
2511   }
2512 
2513   // Read all of the records in the options block.
2514   RecordData Record;
2515   ASTReadResult Result = Success;
2516   while (true) {
2517     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2518     if (!MaybeEntry) {
2519       // FIXME this drops errors on the floor.
2520       consumeError(MaybeEntry.takeError());
2521       return Failure;
2522     }
2523     llvm::BitstreamEntry Entry = MaybeEntry.get();
2524 
2525     switch (Entry.Kind) {
2526     case llvm::BitstreamEntry::Error:
2527     case llvm::BitstreamEntry::SubBlock:
2528       return Failure;
2529 
2530     case llvm::BitstreamEntry::EndBlock:
2531       return Result;
2532 
2533     case llvm::BitstreamEntry::Record:
2534       // The interesting case.
2535       break;
2536     }
2537 
2538     // Read and process a record.
2539     Record.clear();
2540     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2541     if (!MaybeRecordType) {
2542       // FIXME this drops errors on the floor.
2543       consumeError(MaybeRecordType.takeError());
2544       return Failure;
2545     }
2546     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2547     case LANGUAGE_OPTIONS: {
2548       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2549       if (ParseLanguageOptions(Record, Complain, Listener,
2550                                AllowCompatibleConfigurationMismatch))
2551         Result = ConfigurationMismatch;
2552       break;
2553     }
2554 
2555     case TARGET_OPTIONS: {
2556       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2557       if (ParseTargetOptions(Record, Complain, Listener,
2558                              AllowCompatibleConfigurationMismatch))
2559         Result = ConfigurationMismatch;
2560       break;
2561     }
2562 
2563     case FILE_SYSTEM_OPTIONS: {
2564       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2565       if (!AllowCompatibleConfigurationMismatch &&
2566           ParseFileSystemOptions(Record, Complain, Listener))
2567         Result = ConfigurationMismatch;
2568       break;
2569     }
2570 
2571     case HEADER_SEARCH_OPTIONS: {
2572       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2573       if (!AllowCompatibleConfigurationMismatch &&
2574           ParseHeaderSearchOptions(Record, Complain, Listener))
2575         Result = ConfigurationMismatch;
2576       break;
2577     }
2578 
2579     case PREPROCESSOR_OPTIONS:
2580       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2581       if (!AllowCompatibleConfigurationMismatch &&
2582           ParsePreprocessorOptions(Record, Complain, Listener,
2583                                    SuggestedPredefines))
2584         Result = ConfigurationMismatch;
2585       break;
2586     }
2587   }
2588 }
2589 
2590 ASTReader::ASTReadResult
2591 ASTReader::ReadControlBlock(ModuleFile &F,
2592                             SmallVectorImpl<ImportedModule> &Loaded,
2593                             const ModuleFile *ImportedBy,
2594                             unsigned ClientLoadCapabilities) {
2595   BitstreamCursor &Stream = F.Stream;
2596 
2597   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2598     Error(std::move(Err));
2599     return Failure;
2600   }
2601 
2602   // Lambda to read the unhashed control block the first time it's called.
2603   //
2604   // For PCM files, the unhashed control block cannot be read until after the
2605   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2606   // need to look ahead before reading the IMPORTS record.  For consistency,
2607   // this block is always read somehow (see BitstreamEntry::EndBlock).
2608   bool HasReadUnhashedControlBlock = false;
2609   auto readUnhashedControlBlockOnce = [&]() {
2610     if (!HasReadUnhashedControlBlock) {
2611       HasReadUnhashedControlBlock = true;
2612       if (ASTReadResult Result =
2613               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2614         return Result;
2615     }
2616     return Success;
2617   };
2618 
2619   bool DisableValidation = shouldDisableValidationForFile(F);
2620 
2621   // Read all of the records and blocks in the control block.
2622   RecordData Record;
2623   unsigned NumInputs = 0;
2624   unsigned NumUserInputs = 0;
2625   StringRef BaseDirectoryAsWritten;
2626   while (true) {
2627     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2628     if (!MaybeEntry) {
2629       Error(MaybeEntry.takeError());
2630       return Failure;
2631     }
2632     llvm::BitstreamEntry Entry = MaybeEntry.get();
2633 
2634     switch (Entry.Kind) {
2635     case llvm::BitstreamEntry::Error:
2636       Error("malformed block record in AST file");
2637       return Failure;
2638     case llvm::BitstreamEntry::EndBlock: {
2639       // Validate the module before returning.  This call catches an AST with
2640       // no module name and no imports.
2641       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2642         return Result;
2643 
2644       // Validate input files.
2645       const HeaderSearchOptions &HSOpts =
2646           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2647 
2648       // All user input files reside at the index range [0, NumUserInputs), and
2649       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2650       // loaded module files, ignore missing inputs.
2651       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2652           F.Kind != MK_PrebuiltModule) {
2653         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2654 
2655         // If we are reading a module, we will create a verification timestamp,
2656         // so we verify all input files.  Otherwise, verify only user input
2657         // files.
2658 
2659         unsigned N = NumUserInputs;
2660         if (ValidateSystemInputs ||
2661             (HSOpts.ModulesValidateOncePerBuildSession &&
2662              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2663              F.Kind == MK_ImplicitModule))
2664           N = NumInputs;
2665 
2666         for (unsigned I = 0; I < N; ++I) {
2667           InputFile IF = getInputFile(F, I+1, Complain);
2668           if (!IF.getFile() || IF.isOutOfDate())
2669             return OutOfDate;
2670         }
2671       }
2672 
2673       if (Listener)
2674         Listener->visitModuleFile(F.FileName, F.Kind);
2675 
2676       if (Listener && Listener->needsInputFileVisitation()) {
2677         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2678                                                                 : NumUserInputs;
2679         for (unsigned I = 0; I < N; ++I) {
2680           bool IsSystem = I >= NumUserInputs;
2681           InputFileInfo FI = readInputFileInfo(F, I+1);
2682           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2683                                    F.Kind == MK_ExplicitModule ||
2684                                    F.Kind == MK_PrebuiltModule);
2685         }
2686       }
2687 
2688       return Success;
2689     }
2690 
2691     case llvm::BitstreamEntry::SubBlock:
2692       switch (Entry.ID) {
2693       case INPUT_FILES_BLOCK_ID:
2694         F.InputFilesCursor = Stream;
2695         if (llvm::Error Err = Stream.SkipBlock()) {
2696           Error(std::move(Err));
2697           return Failure;
2698         }
2699         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2700           Error("malformed block record in AST file");
2701           return Failure;
2702         }
2703         continue;
2704 
2705       case OPTIONS_BLOCK_ID:
2706         // If we're reading the first module for this group, check its options
2707         // are compatible with ours. For modules it imports, no further checking
2708         // is required, because we checked them when we built it.
2709         if (Listener && !ImportedBy) {
2710           // Should we allow the configuration of the module file to differ from
2711           // the configuration of the current translation unit in a compatible
2712           // way?
2713           //
2714           // FIXME: Allow this for files explicitly specified with -include-pch.
2715           bool AllowCompatibleConfigurationMismatch =
2716               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2717 
2718           ASTReadResult Result =
2719               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2720                                AllowCompatibleConfigurationMismatch, *Listener,
2721                                SuggestedPredefines);
2722           if (Result == Failure) {
2723             Error("malformed block record in AST file");
2724             return Result;
2725           }
2726 
2727           if (DisableValidation ||
2728               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2729             Result = Success;
2730 
2731           // If we can't load the module, exit early since we likely
2732           // will rebuild the module anyway. The stream may be in the
2733           // middle of a block.
2734           if (Result != Success)
2735             return Result;
2736         } else if (llvm::Error Err = Stream.SkipBlock()) {
2737           Error(std::move(Err));
2738           return Failure;
2739         }
2740         continue;
2741 
2742       default:
2743         if (llvm::Error Err = Stream.SkipBlock()) {
2744           Error(std::move(Err));
2745           return Failure;
2746         }
2747         continue;
2748       }
2749 
2750     case llvm::BitstreamEntry::Record:
2751       // The interesting case.
2752       break;
2753     }
2754 
2755     // Read and process a record.
2756     Record.clear();
2757     StringRef Blob;
2758     Expected<unsigned> MaybeRecordType =
2759         Stream.readRecord(Entry.ID, Record, &Blob);
2760     if (!MaybeRecordType) {
2761       Error(MaybeRecordType.takeError());
2762       return Failure;
2763     }
2764     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2765     case METADATA: {
2766       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2767         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2768           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2769                                         : diag::err_pch_version_too_new);
2770         return VersionMismatch;
2771       }
2772 
2773       bool hasErrors = Record[6];
2774       if (hasErrors && !DisableValidation) {
2775         // If requested by the caller and the module hasn't already been read
2776         // or compiled, mark modules on error as out-of-date.
2777         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2778             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2779           return OutOfDate;
2780 
2781         if (!AllowASTWithCompilerErrors) {
2782           Diag(diag::err_pch_with_compiler_errors);
2783           return HadErrors;
2784         }
2785       }
2786       if (hasErrors) {
2787         Diags.ErrorOccurred = true;
2788         Diags.UncompilableErrorOccurred = true;
2789         Diags.UnrecoverableErrorOccurred = true;
2790       }
2791 
2792       F.RelocatablePCH = Record[4];
2793       // Relative paths in a relocatable PCH are relative to our sysroot.
2794       if (F.RelocatablePCH)
2795         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2796 
2797       F.HasTimestamps = Record[5];
2798 
2799       const std::string &CurBranch = getClangFullRepositoryVersion();
2800       StringRef ASTBranch = Blob;
2801       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2802         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2803           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2804         return VersionMismatch;
2805       }
2806       break;
2807     }
2808 
2809     case IMPORTS: {
2810       // Validate the AST before processing any imports (otherwise, untangling
2811       // them can be error-prone and expensive).  A module will have a name and
2812       // will already have been validated, but this catches the PCH case.
2813       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2814         return Result;
2815 
2816       // Load each of the imported PCH files.
2817       unsigned Idx = 0, N = Record.size();
2818       while (Idx < N) {
2819         // Read information about the AST file.
2820         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2821         // The import location will be the local one for now; we will adjust
2822         // all import locations of module imports after the global source
2823         // location info are setup, in ReadAST.
2824         SourceLocation ImportLoc =
2825             ReadUntranslatedSourceLocation(Record[Idx++]);
2826         off_t StoredSize = (off_t)Record[Idx++];
2827         time_t StoredModTime = (time_t)Record[Idx++];
2828         auto FirstSignatureByte = Record.begin() + Idx;
2829         ASTFileSignature StoredSignature = ASTFileSignature::create(
2830             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2831         Idx += ASTFileSignature::size;
2832 
2833         std::string ImportedName = ReadString(Record, Idx);
2834         std::string ImportedFile;
2835 
2836         // For prebuilt and explicit modules first consult the file map for
2837         // an override. Note that here we don't search prebuilt module
2838         // directories, only the explicit name to file mappings. Also, we will
2839         // still verify the size/signature making sure it is essentially the
2840         // same file but perhaps in a different location.
2841         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2842           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2843             ImportedName, /*FileMapOnly*/ true);
2844 
2845         if (ImportedFile.empty())
2846           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2847           // ModuleCache as when writing.
2848           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2849         else
2850           SkipPath(Record, Idx);
2851 
2852         // If our client can't cope with us being out of date, we can't cope with
2853         // our dependency being missing.
2854         unsigned Capabilities = ClientLoadCapabilities;
2855         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2856           Capabilities &= ~ARR_Missing;
2857 
2858         // Load the AST file.
2859         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2860                                   Loaded, StoredSize, StoredModTime,
2861                                   StoredSignature, Capabilities);
2862 
2863         // If we diagnosed a problem, produce a backtrace.
2864         bool recompilingFinalized =
2865             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2866             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2867         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2868           Diag(diag::note_module_file_imported_by)
2869               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2870         if (recompilingFinalized)
2871           Diag(diag::note_module_file_conflict);
2872 
2873         switch (Result) {
2874         case Failure: return Failure;
2875           // If we have to ignore the dependency, we'll have to ignore this too.
2876         case Missing:
2877         case OutOfDate: return OutOfDate;
2878         case VersionMismatch: return VersionMismatch;
2879         case ConfigurationMismatch: return ConfigurationMismatch;
2880         case HadErrors: return HadErrors;
2881         case Success: break;
2882         }
2883       }
2884       break;
2885     }
2886 
2887     case ORIGINAL_FILE:
2888       F.OriginalSourceFileID = FileID::get(Record[0]);
2889       F.ActualOriginalSourceFileName = std::string(Blob);
2890       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2891       ResolveImportedPath(F, F.OriginalSourceFileName);
2892       break;
2893 
2894     case ORIGINAL_FILE_ID:
2895       F.OriginalSourceFileID = FileID::get(Record[0]);
2896       break;
2897 
2898     case ORIGINAL_PCH_DIR:
2899       F.OriginalDir = std::string(Blob);
2900       break;
2901 
2902     case MODULE_NAME:
2903       F.ModuleName = std::string(Blob);
2904       Diag(diag::remark_module_import)
2905           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2906           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2907       if (Listener)
2908         Listener->ReadModuleName(F.ModuleName);
2909 
2910       // Validate the AST as soon as we have a name so we can exit early on
2911       // failure.
2912       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2913         return Result;
2914 
2915       break;
2916 
2917     case MODULE_DIRECTORY: {
2918       // Save the BaseDirectory as written in the PCM for computing the module
2919       // filename for the ModuleCache.
2920       BaseDirectoryAsWritten = Blob;
2921       assert(!F.ModuleName.empty() &&
2922              "MODULE_DIRECTORY found before MODULE_NAME");
2923       // If we've already loaded a module map file covering this module, we may
2924       // have a better path for it (relative to the current build).
2925       Module *M = PP.getHeaderSearchInfo().lookupModule(
2926           F.ModuleName, /*AllowSearch*/ true,
2927           /*AllowExtraModuleMapSearch*/ true);
2928       if (M && M->Directory) {
2929         // If we're implicitly loading a module, the base directory can't
2930         // change between the build and use.
2931         // Don't emit module relocation error if we have -fno-validate-pch
2932         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2933                   DisableValidationForModuleKind::Module) &&
2934             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2935           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2936           if (!BuildDir || *BuildDir != M->Directory) {
2937             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2938               Diag(diag::err_imported_module_relocated)
2939                   << F.ModuleName << Blob << M->Directory->getName();
2940             return OutOfDate;
2941           }
2942         }
2943         F.BaseDirectory = std::string(M->Directory->getName());
2944       } else {
2945         F.BaseDirectory = std::string(Blob);
2946       }
2947       break;
2948     }
2949 
2950     case MODULE_MAP_FILE:
2951       if (ASTReadResult Result =
2952               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2953         return Result;
2954       break;
2955 
2956     case INPUT_FILE_OFFSETS:
2957       NumInputs = Record[0];
2958       NumUserInputs = Record[1];
2959       F.InputFileOffsets =
2960           (const llvm::support::unaligned_uint64_t *)Blob.data();
2961       F.InputFilesLoaded.resize(NumInputs);
2962       F.NumUserInputFiles = NumUserInputs;
2963       break;
2964     }
2965   }
2966 }
2967 
2968 llvm::Error ASTReader::ReadASTBlock(ModuleFile &F,
2969                                     unsigned ClientLoadCapabilities) {
2970   BitstreamCursor &Stream = F.Stream;
2971 
2972   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID))
2973     return Err;
2974   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2975 
2976   // Read all of the records and blocks for the AST file.
2977   RecordData Record;
2978   while (true) {
2979     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2980     if (!MaybeEntry)
2981       return MaybeEntry.takeError();
2982     llvm::BitstreamEntry Entry = MaybeEntry.get();
2983 
2984     switch (Entry.Kind) {
2985     case llvm::BitstreamEntry::Error:
2986       return llvm::createStringError(
2987           std::errc::illegal_byte_sequence,
2988           "error at end of module block in AST file");
2989     case llvm::BitstreamEntry::EndBlock:
2990       // Outside of C++, we do not store a lookup map for the translation unit.
2991       // Instead, mark it as needing a lookup map to be built if this module
2992       // contains any declarations lexically within it (which it always does!).
2993       // This usually has no cost, since we very rarely need the lookup map for
2994       // the translation unit outside C++.
2995       if (ASTContext *Ctx = ContextObj) {
2996         DeclContext *DC = Ctx->getTranslationUnitDecl();
2997         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2998           DC->setMustBuildLookupTable();
2999       }
3000 
3001       return llvm::Error::success();
3002     case llvm::BitstreamEntry::SubBlock:
3003       switch (Entry.ID) {
3004       case DECLTYPES_BLOCK_ID:
3005         // We lazily load the decls block, but we want to set up the
3006         // DeclsCursor cursor to point into it.  Clone our current bitcode
3007         // cursor to it, enter the block and read the abbrevs in that block.
3008         // With the main cursor, we just skip over it.
3009         F.DeclsCursor = Stream;
3010         if (llvm::Error Err = Stream.SkipBlock())
3011           return Err;
3012         if (llvm::Error Err = ReadBlockAbbrevs(
3013                 F.DeclsCursor, DECLTYPES_BLOCK_ID, &F.DeclsBlockStartOffset))
3014           return Err;
3015         break;
3016 
3017       case PREPROCESSOR_BLOCK_ID:
3018         F.MacroCursor = Stream;
3019         if (!PP.getExternalSource())
3020           PP.setExternalSource(this);
3021 
3022         if (llvm::Error Err = Stream.SkipBlock())
3023           return Err;
3024         if (llvm::Error Err =
3025                 ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID))
3026           return Err;
3027         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3028         break;
3029 
3030       case PREPROCESSOR_DETAIL_BLOCK_ID:
3031         F.PreprocessorDetailCursor = Stream;
3032 
3033         if (llvm::Error Err = Stream.SkipBlock()) {
3034           return Err;
3035         }
3036         if (llvm::Error Err = ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3037                                                PREPROCESSOR_DETAIL_BLOCK_ID))
3038           return Err;
3039         F.PreprocessorDetailStartOffset
3040         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3041 
3042         if (!PP.getPreprocessingRecord())
3043           PP.createPreprocessingRecord();
3044         if (!PP.getPreprocessingRecord()->getExternalSource())
3045           PP.getPreprocessingRecord()->SetExternalSource(*this);
3046         break;
3047 
3048       case SOURCE_MANAGER_BLOCK_ID:
3049         if (llvm::Error Err = ReadSourceManagerBlock(F))
3050           return Err;
3051         break;
3052 
3053       case SUBMODULE_BLOCK_ID:
3054         if (llvm::Error Err = ReadSubmoduleBlock(F, ClientLoadCapabilities))
3055           return Err;
3056         break;
3057 
3058       case COMMENTS_BLOCK_ID: {
3059         BitstreamCursor C = Stream;
3060 
3061         if (llvm::Error Err = Stream.SkipBlock())
3062           return Err;
3063         if (llvm::Error Err = ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID))
3064           return Err;
3065         CommentsCursors.push_back(std::make_pair(C, &F));
3066         break;
3067       }
3068 
3069       default:
3070         if (llvm::Error Err = Stream.SkipBlock())
3071           return Err;
3072         break;
3073       }
3074       continue;
3075 
3076     case llvm::BitstreamEntry::Record:
3077       // The interesting case.
3078       break;
3079     }
3080 
3081     // Read and process a record.
3082     Record.clear();
3083     StringRef Blob;
3084     Expected<unsigned> MaybeRecordType =
3085         Stream.readRecord(Entry.ID, Record, &Blob);
3086     if (!MaybeRecordType)
3087       return MaybeRecordType.takeError();
3088     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3089 
3090     // If we're not loading an AST context, we don't care about most records.
3091     if (!ContextObj) {
3092       switch (RecordType) {
3093       case IDENTIFIER_TABLE:
3094       case IDENTIFIER_OFFSET:
3095       case INTERESTING_IDENTIFIERS:
3096       case STATISTICS:
3097       case PP_CONDITIONAL_STACK:
3098       case PP_COUNTER_VALUE:
3099       case SOURCE_LOCATION_OFFSETS:
3100       case MODULE_OFFSET_MAP:
3101       case SOURCE_MANAGER_LINE_TABLE:
3102       case SOURCE_LOCATION_PRELOADS:
3103       case PPD_ENTITIES_OFFSETS:
3104       case HEADER_SEARCH_TABLE:
3105       case IMPORTED_MODULES:
3106       case MACRO_OFFSET:
3107         break;
3108       default:
3109         continue;
3110       }
3111     }
3112 
3113     switch (RecordType) {
3114     default:  // Default behavior: ignore.
3115       break;
3116 
3117     case TYPE_OFFSET: {
3118       if (F.LocalNumTypes != 0)
3119         return llvm::createStringError(
3120             std::errc::illegal_byte_sequence,
3121             "duplicate TYPE_OFFSET record in AST file");
3122       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3123       F.LocalNumTypes = Record[0];
3124       unsigned LocalBaseTypeIndex = Record[1];
3125       F.BaseTypeIndex = getTotalNumTypes();
3126 
3127       if (F.LocalNumTypes > 0) {
3128         // Introduce the global -> local mapping for types within this module.
3129         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3130 
3131         // Introduce the local -> global mapping for types within this module.
3132         F.TypeRemap.insertOrReplace(
3133           std::make_pair(LocalBaseTypeIndex,
3134                          F.BaseTypeIndex - LocalBaseTypeIndex));
3135 
3136         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3137       }
3138       break;
3139     }
3140 
3141     case DECL_OFFSET: {
3142       if (F.LocalNumDecls != 0)
3143         return llvm::createStringError(
3144             std::errc::illegal_byte_sequence,
3145             "duplicate DECL_OFFSET record in AST file");
3146       F.DeclOffsets = (const DeclOffset *)Blob.data();
3147       F.LocalNumDecls = Record[0];
3148       unsigned LocalBaseDeclID = Record[1];
3149       F.BaseDeclID = getTotalNumDecls();
3150 
3151       if (F.LocalNumDecls > 0) {
3152         // Introduce the global -> local mapping for declarations within this
3153         // module.
3154         GlobalDeclMap.insert(
3155           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3156 
3157         // Introduce the local -> global mapping for declarations within this
3158         // module.
3159         F.DeclRemap.insertOrReplace(
3160           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3161 
3162         // Introduce the global -> local mapping for declarations within this
3163         // module.
3164         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3165 
3166         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3167       }
3168       break;
3169     }
3170 
3171     case TU_UPDATE_LEXICAL: {
3172       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3173       LexicalContents Contents(
3174           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3175               Blob.data()),
3176           static_cast<unsigned int>(Blob.size() / 4));
3177       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3178       TU->setHasExternalLexicalStorage(true);
3179       break;
3180     }
3181 
3182     case UPDATE_VISIBLE: {
3183       unsigned Idx = 0;
3184       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3185       auto *Data = (const unsigned char*)Blob.data();
3186       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3187       // If we've already loaded the decl, perform the updates when we finish
3188       // loading this block.
3189       if (Decl *D = GetExistingDecl(ID))
3190         PendingUpdateRecords.push_back(
3191             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3192       break;
3193     }
3194 
3195     case IDENTIFIER_TABLE:
3196       F.IdentifierTableData =
3197           reinterpret_cast<const unsigned char *>(Blob.data());
3198       if (Record[0]) {
3199         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3200             F.IdentifierTableData + Record[0],
3201             F.IdentifierTableData + sizeof(uint32_t),
3202             F.IdentifierTableData,
3203             ASTIdentifierLookupTrait(*this, F));
3204 
3205         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3206       }
3207       break;
3208 
3209     case IDENTIFIER_OFFSET: {
3210       if (F.LocalNumIdentifiers != 0)
3211         return llvm::createStringError(
3212             std::errc::illegal_byte_sequence,
3213             "duplicate IDENTIFIER_OFFSET record in AST file");
3214       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3215       F.LocalNumIdentifiers = Record[0];
3216       unsigned LocalBaseIdentifierID = Record[1];
3217       F.BaseIdentifierID = getTotalNumIdentifiers();
3218 
3219       if (F.LocalNumIdentifiers > 0) {
3220         // Introduce the global -> local mapping for identifiers within this
3221         // module.
3222         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3223                                                   &F));
3224 
3225         // Introduce the local -> global mapping for identifiers within this
3226         // module.
3227         F.IdentifierRemap.insertOrReplace(
3228           std::make_pair(LocalBaseIdentifierID,
3229                          F.BaseIdentifierID - LocalBaseIdentifierID));
3230 
3231         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3232                                  + F.LocalNumIdentifiers);
3233       }
3234       break;
3235     }
3236 
3237     case INTERESTING_IDENTIFIERS:
3238       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3239       break;
3240 
3241     case EAGERLY_DESERIALIZED_DECLS:
3242       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3243       // about "interesting" decls (for instance, if we're building a module).
3244       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3245         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3246       break;
3247 
3248     case MODULAR_CODEGEN_DECLS:
3249       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3250       // them (ie: if we're not codegenerating this module).
3251       if (F.Kind == MK_MainFile ||
3252           getContext().getLangOpts().BuildingPCHWithObjectFile)
3253         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3254           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3255       break;
3256 
3257     case SPECIAL_TYPES:
3258       if (SpecialTypes.empty()) {
3259         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3260           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3261         break;
3262       }
3263 
3264       if (SpecialTypes.size() != Record.size())
3265         return llvm::createStringError(std::errc::illegal_byte_sequence,
3266                                        "invalid special-types record");
3267 
3268       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3269         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3270         if (!SpecialTypes[I])
3271           SpecialTypes[I] = ID;
3272         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3273         // merge step?
3274       }
3275       break;
3276 
3277     case STATISTICS:
3278       TotalNumStatements += Record[0];
3279       TotalNumMacros += Record[1];
3280       TotalLexicalDeclContexts += Record[2];
3281       TotalVisibleDeclContexts += Record[3];
3282       break;
3283 
3284     case UNUSED_FILESCOPED_DECLS:
3285       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3286         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3287       break;
3288 
3289     case DELEGATING_CTORS:
3290       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3291         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3292       break;
3293 
3294     case WEAK_UNDECLARED_IDENTIFIERS:
3295       if (Record.size() % 4 != 0)
3296         return llvm::createStringError(std::errc::illegal_byte_sequence,
3297                                        "invalid weak identifiers record");
3298 
3299       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3300       // files. This isn't the way to do it :)
3301       WeakUndeclaredIdentifiers.clear();
3302 
3303       // Translate the weak, undeclared identifiers into global IDs.
3304       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3305         WeakUndeclaredIdentifiers.push_back(
3306           getGlobalIdentifierID(F, Record[I++]));
3307         WeakUndeclaredIdentifiers.push_back(
3308           getGlobalIdentifierID(F, Record[I++]));
3309         WeakUndeclaredIdentifiers.push_back(
3310           ReadSourceLocation(F, Record, I).getRawEncoding());
3311         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3312       }
3313       break;
3314 
3315     case SELECTOR_OFFSETS: {
3316       F.SelectorOffsets = (const uint32_t *)Blob.data();
3317       F.LocalNumSelectors = Record[0];
3318       unsigned LocalBaseSelectorID = Record[1];
3319       F.BaseSelectorID = getTotalNumSelectors();
3320 
3321       if (F.LocalNumSelectors > 0) {
3322         // Introduce the global -> local mapping for selectors within this
3323         // module.
3324         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3325 
3326         // Introduce the local -> global mapping for selectors within this
3327         // module.
3328         F.SelectorRemap.insertOrReplace(
3329           std::make_pair(LocalBaseSelectorID,
3330                          F.BaseSelectorID - LocalBaseSelectorID));
3331 
3332         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3333       }
3334       break;
3335     }
3336 
3337     case METHOD_POOL:
3338       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3339       if (Record[0])
3340         F.SelectorLookupTable
3341           = ASTSelectorLookupTable::Create(
3342                         F.SelectorLookupTableData + Record[0],
3343                         F.SelectorLookupTableData,
3344                         ASTSelectorLookupTrait(*this, F));
3345       TotalNumMethodPoolEntries += Record[1];
3346       break;
3347 
3348     case REFERENCED_SELECTOR_POOL:
3349       if (!Record.empty()) {
3350         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3351           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3352                                                                 Record[Idx++]));
3353           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3354                                               getRawEncoding());
3355         }
3356       }
3357       break;
3358 
3359     case PP_CONDITIONAL_STACK:
3360       if (!Record.empty()) {
3361         unsigned Idx = 0, End = Record.size() - 1;
3362         bool ReachedEOFWhileSkipping = Record[Idx++];
3363         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3364         if (ReachedEOFWhileSkipping) {
3365           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3366           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3367           bool FoundNonSkipPortion = Record[Idx++];
3368           bool FoundElse = Record[Idx++];
3369           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3370           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3371                            FoundElse, ElseLoc);
3372         }
3373         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3374         while (Idx < End) {
3375           auto Loc = ReadSourceLocation(F, Record, Idx);
3376           bool WasSkipping = Record[Idx++];
3377           bool FoundNonSkip = Record[Idx++];
3378           bool FoundElse = Record[Idx++];
3379           ConditionalStack.push_back(
3380               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3381         }
3382         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3383       }
3384       break;
3385 
3386     case PP_COUNTER_VALUE:
3387       if (!Record.empty() && Listener)
3388         Listener->ReadCounter(F, Record[0]);
3389       break;
3390 
3391     case FILE_SORTED_DECLS:
3392       F.FileSortedDecls = (const DeclID *)Blob.data();
3393       F.NumFileSortedDecls = Record[0];
3394       break;
3395 
3396     case SOURCE_LOCATION_OFFSETS: {
3397       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3398       F.LocalNumSLocEntries = Record[0];
3399       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3400       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3401       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3402           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3403                                               SLocSpaceSize);
3404       if (!F.SLocEntryBaseID)
3405         return llvm::createStringError(std::errc::invalid_argument,
3406                                        "ran out of source locations");
3407       // Make our entry in the range map. BaseID is negative and growing, so
3408       // we invert it. Because we invert it, though, we need the other end of
3409       // the range.
3410       unsigned RangeStart =
3411           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3412       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3413       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3414 
3415       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3416       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3417       GlobalSLocOffsetMap.insert(
3418           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3419                            - SLocSpaceSize,&F));
3420 
3421       // Initialize the remapping table.
3422       // Invalid stays invalid.
3423       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3424       // This module. Base was 2 when being compiled.
3425       F.SLocRemap.insertOrReplace(std::make_pair(
3426           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3427 
3428       TotalNumSLocEntries += F.LocalNumSLocEntries;
3429       break;
3430     }
3431 
3432     case MODULE_OFFSET_MAP:
3433       F.ModuleOffsetMap = Blob;
3434       break;
3435 
3436     case SOURCE_MANAGER_LINE_TABLE:
3437       ParseLineTable(F, Record);
3438       break;
3439 
3440     case SOURCE_LOCATION_PRELOADS: {
3441       // Need to transform from the local view (1-based IDs) to the global view,
3442       // which is based off F.SLocEntryBaseID.
3443       if (!F.PreloadSLocEntries.empty())
3444         return llvm::createStringError(
3445             std::errc::illegal_byte_sequence,
3446             "Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3447 
3448       F.PreloadSLocEntries.swap(Record);
3449       break;
3450     }
3451 
3452     case EXT_VECTOR_DECLS:
3453       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3454         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3455       break;
3456 
3457     case VTABLE_USES:
3458       if (Record.size() % 3 != 0)
3459         return llvm::createStringError(std::errc::illegal_byte_sequence,
3460                                        "Invalid VTABLE_USES record");
3461 
3462       // Later tables overwrite earlier ones.
3463       // FIXME: Modules will have some trouble with this. This is clearly not
3464       // the right way to do this.
3465       VTableUses.clear();
3466 
3467       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3468         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3469         VTableUses.push_back(
3470           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3471         VTableUses.push_back(Record[Idx++]);
3472       }
3473       break;
3474 
3475     case PENDING_IMPLICIT_INSTANTIATIONS:
3476       if (PendingInstantiations.size() % 2 != 0)
3477         return llvm::createStringError(
3478             std::errc::illegal_byte_sequence,
3479             "Invalid existing PendingInstantiations");
3480 
3481       if (Record.size() % 2 != 0)
3482         return llvm::createStringError(
3483             std::errc::illegal_byte_sequence,
3484             "Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3485 
3486       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3487         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3488         PendingInstantiations.push_back(
3489           ReadSourceLocation(F, Record, I).getRawEncoding());
3490       }
3491       break;
3492 
3493     case SEMA_DECL_REFS:
3494       if (Record.size() != 3)
3495         return llvm::createStringError(std::errc::illegal_byte_sequence,
3496                                        "Invalid SEMA_DECL_REFS block");
3497       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3498         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3499       break;
3500 
3501     case PPD_ENTITIES_OFFSETS: {
3502       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3503       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3504       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3505 
3506       unsigned LocalBasePreprocessedEntityID = Record[0];
3507 
3508       unsigned StartingID;
3509       if (!PP.getPreprocessingRecord())
3510         PP.createPreprocessingRecord();
3511       if (!PP.getPreprocessingRecord()->getExternalSource())
3512         PP.getPreprocessingRecord()->SetExternalSource(*this);
3513       StartingID
3514         = PP.getPreprocessingRecord()
3515             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3516       F.BasePreprocessedEntityID = StartingID;
3517 
3518       if (F.NumPreprocessedEntities > 0) {
3519         // Introduce the global -> local mapping for preprocessed entities in
3520         // this module.
3521         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3522 
3523         // Introduce the local -> global mapping for preprocessed entities in
3524         // this module.
3525         F.PreprocessedEntityRemap.insertOrReplace(
3526           std::make_pair(LocalBasePreprocessedEntityID,
3527             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3528       }
3529 
3530       break;
3531     }
3532 
3533     case PPD_SKIPPED_RANGES: {
3534       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3535       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3536       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3537 
3538       if (!PP.getPreprocessingRecord())
3539         PP.createPreprocessingRecord();
3540       if (!PP.getPreprocessingRecord()->getExternalSource())
3541         PP.getPreprocessingRecord()->SetExternalSource(*this);
3542       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3543           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3544 
3545       if (F.NumPreprocessedSkippedRanges > 0)
3546         GlobalSkippedRangeMap.insert(
3547             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3548       break;
3549     }
3550 
3551     case DECL_UPDATE_OFFSETS:
3552       if (Record.size() % 2 != 0)
3553         return llvm::createStringError(
3554             std::errc::illegal_byte_sequence,
3555             "invalid DECL_UPDATE_OFFSETS block in AST file");
3556       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3557         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3558         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3559 
3560         // If we've already loaded the decl, perform the updates when we finish
3561         // loading this block.
3562         if (Decl *D = GetExistingDecl(ID))
3563           PendingUpdateRecords.push_back(
3564               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3565       }
3566       break;
3567 
3568     case OBJC_CATEGORIES_MAP:
3569       if (F.LocalNumObjCCategoriesInMap != 0)
3570         return llvm::createStringError(
3571             std::errc::illegal_byte_sequence,
3572             "duplicate OBJC_CATEGORIES_MAP record in AST file");
3573 
3574       F.LocalNumObjCCategoriesInMap = Record[0];
3575       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3576       break;
3577 
3578     case OBJC_CATEGORIES:
3579       F.ObjCCategories.swap(Record);
3580       break;
3581 
3582     case CUDA_SPECIAL_DECL_REFS:
3583       // Later tables overwrite earlier ones.
3584       // FIXME: Modules will have trouble with this.
3585       CUDASpecialDeclRefs.clear();
3586       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3587         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3588       break;
3589 
3590     case HEADER_SEARCH_TABLE:
3591       F.HeaderFileInfoTableData = Blob.data();
3592       F.LocalNumHeaderFileInfos = Record[1];
3593       if (Record[0]) {
3594         F.HeaderFileInfoTable
3595           = HeaderFileInfoLookupTable::Create(
3596                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3597                    (const unsigned char *)F.HeaderFileInfoTableData,
3598                    HeaderFileInfoTrait(*this, F,
3599                                        &PP.getHeaderSearchInfo(),
3600                                        Blob.data() + Record[2]));
3601 
3602         PP.getHeaderSearchInfo().SetExternalSource(this);
3603         if (!PP.getHeaderSearchInfo().getExternalLookup())
3604           PP.getHeaderSearchInfo().SetExternalLookup(this);
3605       }
3606       break;
3607 
3608     case FP_PRAGMA_OPTIONS:
3609       // Later tables overwrite earlier ones.
3610       FPPragmaOptions.swap(Record);
3611       break;
3612 
3613     case OPENCL_EXTENSIONS:
3614       for (unsigned I = 0, E = Record.size(); I != E; ) {
3615         auto Name = ReadString(Record, I);
3616         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3617         OptInfo.Supported = Record[I++] != 0;
3618         OptInfo.Enabled = Record[I++] != 0;
3619         OptInfo.WithPragma = Record[I++] != 0;
3620         OptInfo.Avail = Record[I++];
3621         OptInfo.Core = Record[I++];
3622         OptInfo.Opt = Record[I++];
3623       }
3624       break;
3625 
3626     case TENTATIVE_DEFINITIONS:
3627       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3628         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3629       break;
3630 
3631     case KNOWN_NAMESPACES:
3632       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3633         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3634       break;
3635 
3636     case UNDEFINED_BUT_USED:
3637       if (UndefinedButUsed.size() % 2 != 0)
3638         return llvm::createStringError(std::errc::illegal_byte_sequence,
3639                                        "Invalid existing UndefinedButUsed");
3640 
3641       if (Record.size() % 2 != 0)
3642         return llvm::createStringError(std::errc::illegal_byte_sequence,
3643                                        "invalid undefined-but-used record");
3644       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3645         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3646         UndefinedButUsed.push_back(
3647             ReadSourceLocation(F, Record, I).getRawEncoding());
3648       }
3649       break;
3650 
3651     case DELETE_EXPRS_TO_ANALYZE:
3652       for (unsigned I = 0, N = Record.size(); I != N;) {
3653         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3654         const uint64_t Count = Record[I++];
3655         DelayedDeleteExprs.push_back(Count);
3656         for (uint64_t C = 0; C < Count; ++C) {
3657           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3658           bool IsArrayForm = Record[I++] == 1;
3659           DelayedDeleteExprs.push_back(IsArrayForm);
3660         }
3661       }
3662       break;
3663 
3664     case IMPORTED_MODULES:
3665       if (!F.isModule()) {
3666         // If we aren't loading a module (which has its own exports), make
3667         // all of the imported modules visible.
3668         // FIXME: Deal with macros-only imports.
3669         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3670           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3671           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3672           if (GlobalID) {
3673             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3674             if (DeserializationListener)
3675               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3676           }
3677         }
3678       }
3679       break;
3680 
3681     case MACRO_OFFSET: {
3682       if (F.LocalNumMacros != 0)
3683         return llvm::createStringError(
3684             std::errc::illegal_byte_sequence,
3685             "duplicate MACRO_OFFSET record in AST file");
3686       F.MacroOffsets = (const uint32_t *)Blob.data();
3687       F.LocalNumMacros = Record[0];
3688       unsigned LocalBaseMacroID = Record[1];
3689       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3690       F.BaseMacroID = getTotalNumMacros();
3691 
3692       if (F.LocalNumMacros > 0) {
3693         // Introduce the global -> local mapping for macros within this module.
3694         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3695 
3696         // Introduce the local -> global mapping for macros within this module.
3697         F.MacroRemap.insertOrReplace(
3698           std::make_pair(LocalBaseMacroID,
3699                          F.BaseMacroID - LocalBaseMacroID));
3700 
3701         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3702       }
3703       break;
3704     }
3705 
3706     case LATE_PARSED_TEMPLATE:
3707       LateParsedTemplates.emplace_back(
3708           std::piecewise_construct, std::forward_as_tuple(&F),
3709           std::forward_as_tuple(Record.begin(), Record.end()));
3710       break;
3711 
3712     case OPTIMIZE_PRAGMA_OPTIONS:
3713       if (Record.size() != 1)
3714         return llvm::createStringError(std::errc::illegal_byte_sequence,
3715                                        "invalid pragma optimize record");
3716       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3717       break;
3718 
3719     case MSSTRUCT_PRAGMA_OPTIONS:
3720       if (Record.size() != 1)
3721         return llvm::createStringError(std::errc::illegal_byte_sequence,
3722                                        "invalid pragma ms_struct record");
3723       PragmaMSStructState = Record[0];
3724       break;
3725 
3726     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3727       if (Record.size() != 2)
3728         return llvm::createStringError(
3729             std::errc::illegal_byte_sequence,
3730             "invalid pragma pointers to members record");
3731       PragmaMSPointersToMembersState = Record[0];
3732       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3733       break;
3734 
3735     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3736       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3737         UnusedLocalTypedefNameCandidates.push_back(
3738             getGlobalDeclID(F, Record[I]));
3739       break;
3740 
3741     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3742       if (Record.size() != 1)
3743         return llvm::createStringError(std::errc::illegal_byte_sequence,
3744                                        "invalid cuda pragma options record");
3745       ForceCUDAHostDeviceDepth = Record[0];
3746       break;
3747 
3748     case ALIGN_PACK_PRAGMA_OPTIONS: {
3749       if (Record.size() < 3)
3750         return llvm::createStringError(std::errc::illegal_byte_sequence,
3751                                        "invalid pragma pack record");
3752       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3753       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3754       unsigned NumStackEntries = Record[2];
3755       unsigned Idx = 3;
3756       // Reset the stack when importing a new module.
3757       PragmaAlignPackStack.clear();
3758       for (unsigned I = 0; I < NumStackEntries; ++I) {
3759         PragmaAlignPackStackEntry Entry;
3760         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3761         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3762         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3763         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3764         Entry.SlotLabel = PragmaAlignPackStrings.back();
3765         PragmaAlignPackStack.push_back(Entry);
3766       }
3767       break;
3768     }
3769 
3770     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3771       if (Record.size() < 3)
3772         return llvm::createStringError(std::errc::illegal_byte_sequence,
3773                                        "invalid pragma float control record");
3774       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3775       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3776       unsigned NumStackEntries = Record[2];
3777       unsigned Idx = 3;
3778       // Reset the stack when importing a new module.
3779       FpPragmaStack.clear();
3780       for (unsigned I = 0; I < NumStackEntries; ++I) {
3781         FpPragmaStackEntry Entry;
3782         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3783         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3784         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3785         FpPragmaStrings.push_back(ReadString(Record, Idx));
3786         Entry.SlotLabel = FpPragmaStrings.back();
3787         FpPragmaStack.push_back(Entry);
3788       }
3789       break;
3790     }
3791 
3792     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3793       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3794         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3795       break;
3796     }
3797   }
3798 }
3799 
3800 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3801   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3802 
3803   // Additional remapping information.
3804   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3805   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3806   F.ModuleOffsetMap = StringRef();
3807 
3808   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3809   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3810     F.SLocRemap.insert(std::make_pair(0U, 0));
3811     F.SLocRemap.insert(std::make_pair(2U, 1));
3812   }
3813 
3814   // Continuous range maps we may be updating in our module.
3815   using SLocRemapBuilder =
3816       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3817                          2>::Builder;
3818   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3819   SLocRemapBuilder SLocRemap(F.SLocRemap);
3820   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3821   RemapBuilder MacroRemap(F.MacroRemap);
3822   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3823   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3824   RemapBuilder SelectorRemap(F.SelectorRemap);
3825   RemapBuilder DeclRemap(F.DeclRemap);
3826   RemapBuilder TypeRemap(F.TypeRemap);
3827 
3828   while (Data < DataEnd) {
3829     // FIXME: Looking up dependency modules by filename is horrible. Let's
3830     // start fixing this with prebuilt, explicit and implicit modules and see
3831     // how it goes...
3832     using namespace llvm::support;
3833     ModuleKind Kind = static_cast<ModuleKind>(
3834       endian::readNext<uint8_t, little, unaligned>(Data));
3835     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3836     StringRef Name = StringRef((const char*)Data, Len);
3837     Data += Len;
3838     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3839                               Kind == MK_ImplicitModule
3840                           ? ModuleMgr.lookupByModuleName(Name)
3841                           : ModuleMgr.lookupByFileName(Name));
3842     if (!OM) {
3843       std::string Msg =
3844           "SourceLocation remap refers to unknown module, cannot find ";
3845       Msg.append(std::string(Name));
3846       Error(Msg);
3847       return;
3848     }
3849 
3850     SourceLocation::UIntTy SLocOffset =
3851         endian::readNext<uint32_t, little, unaligned>(Data);
3852     uint32_t IdentifierIDOffset =
3853         endian::readNext<uint32_t, little, unaligned>(Data);
3854     uint32_t MacroIDOffset =
3855         endian::readNext<uint32_t, little, unaligned>(Data);
3856     uint32_t PreprocessedEntityIDOffset =
3857         endian::readNext<uint32_t, little, unaligned>(Data);
3858     uint32_t SubmoduleIDOffset =
3859         endian::readNext<uint32_t, little, unaligned>(Data);
3860     uint32_t SelectorIDOffset =
3861         endian::readNext<uint32_t, little, unaligned>(Data);
3862     uint32_t DeclIDOffset =
3863         endian::readNext<uint32_t, little, unaligned>(Data);
3864     uint32_t TypeIndexOffset =
3865         endian::readNext<uint32_t, little, unaligned>(Data);
3866 
3867     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3868                          RemapBuilder &Remap) {
3869       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3870       if (Offset != None)
3871         Remap.insert(std::make_pair(Offset,
3872                                     static_cast<int>(BaseOffset - Offset)));
3873     };
3874 
3875     constexpr SourceLocation::UIntTy SLocNone =
3876         std::numeric_limits<SourceLocation::UIntTy>::max();
3877     if (SLocOffset != SLocNone)
3878       SLocRemap.insert(std::make_pair(
3879           SLocOffset, static_cast<SourceLocation::IntTy>(
3880                           OM->SLocEntryBaseOffset - SLocOffset)));
3881 
3882     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3883     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3884     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3885               PreprocessedEntityRemap);
3886     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3887     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3888     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3889     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3890 
3891     // Global -> local mappings.
3892     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3893   }
3894 }
3895 
3896 ASTReader::ASTReadResult
3897 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3898                                   const ModuleFile *ImportedBy,
3899                                   unsigned ClientLoadCapabilities) {
3900   unsigned Idx = 0;
3901   F.ModuleMapPath = ReadPath(F, Record, Idx);
3902 
3903   // Try to resolve ModuleName in the current header search context and
3904   // verify that it is found in the same module map file as we saved. If the
3905   // top-level AST file is a main file, skip this check because there is no
3906   // usable header search context.
3907   assert(!F.ModuleName.empty() &&
3908          "MODULE_NAME should come before MODULE_MAP_FILE");
3909   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3910     // An implicitly-loaded module file should have its module listed in some
3911     // module map file that we've already loaded.
3912     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3913     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3914     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3915     // Don't emit module relocation error if we have -fno-validate-pch
3916     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3917               DisableValidationForModuleKind::Module) &&
3918         !ModMap) {
3919       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3920         if (auto ASTFE = M ? M->getASTFile() : None) {
3921           // This module was defined by an imported (explicit) module.
3922           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3923                                                << ASTFE->getName();
3924         } else {
3925           // This module was built with a different module map.
3926           Diag(diag::err_imported_module_not_found)
3927               << F.ModuleName << F.FileName
3928               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3929               << !ImportedBy;
3930           // In case it was imported by a PCH, there's a chance the user is
3931           // just missing to include the search path to the directory containing
3932           // the modulemap.
3933           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3934             Diag(diag::note_imported_by_pch_module_not_found)
3935                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3936         }
3937       }
3938       return OutOfDate;
3939     }
3940 
3941     assert(M && M->Name == F.ModuleName && "found module with different name");
3942 
3943     // Check the primary module map file.
3944     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3945     if (!StoredModMap || *StoredModMap != ModMap) {
3946       assert(ModMap && "found module is missing module map file");
3947       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3948              "top-level import should be verified");
3949       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3950       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3951         Diag(diag::err_imported_module_modmap_changed)
3952             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3953             << ModMap->getName() << F.ModuleMapPath << NotImported;
3954       return OutOfDate;
3955     }
3956 
3957     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3958     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3959       // FIXME: we should use input files rather than storing names.
3960       std::string Filename = ReadPath(F, Record, Idx);
3961       auto SF = FileMgr.getFile(Filename, false, false);
3962       if (!SF) {
3963         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3964           Error("could not find file '" + Filename +"' referenced by AST file");
3965         return OutOfDate;
3966       }
3967       AdditionalStoredMaps.insert(*SF);
3968     }
3969 
3970     // Check any additional module map files (e.g. module.private.modulemap)
3971     // that are not in the pcm.
3972     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3973       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3974         // Remove files that match
3975         // Note: SmallPtrSet::erase is really remove
3976         if (!AdditionalStoredMaps.erase(ModMap)) {
3977           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3978             Diag(diag::err_module_different_modmap)
3979               << F.ModuleName << /*new*/0 << ModMap->getName();
3980           return OutOfDate;
3981         }
3982       }
3983     }
3984 
3985     // Check any additional module map files that are in the pcm, but not
3986     // found in header search. Cases that match are already removed.
3987     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3988       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3989         Diag(diag::err_module_different_modmap)
3990           << F.ModuleName << /*not new*/1 << ModMap->getName();
3991       return OutOfDate;
3992     }
3993   }
3994 
3995   if (Listener)
3996     Listener->ReadModuleMapFile(F.ModuleMapPath);
3997   return Success;
3998 }
3999 
4000 /// Move the given method to the back of the global list of methods.
4001 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4002   // Find the entry for this selector in the method pool.
4003   Sema::GlobalMethodPool::iterator Known
4004     = S.MethodPool.find(Method->getSelector());
4005   if (Known == S.MethodPool.end())
4006     return;
4007 
4008   // Retrieve the appropriate method list.
4009   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4010                                                     : Known->second.second;
4011   bool Found = false;
4012   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4013     if (!Found) {
4014       if (List->getMethod() == Method) {
4015         Found = true;
4016       } else {
4017         // Keep searching.
4018         continue;
4019       }
4020     }
4021 
4022     if (List->getNext())
4023       List->setMethod(List->getNext()->getMethod());
4024     else
4025       List->setMethod(Method);
4026   }
4027 }
4028 
4029 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4030   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4031   for (Decl *D : Names) {
4032     bool wasHidden = !D->isUnconditionallyVisible();
4033     D->setVisibleDespiteOwningModule();
4034 
4035     if (wasHidden && SemaObj) {
4036       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4037         moveMethodToBackOfGlobalList(*SemaObj, Method);
4038       }
4039     }
4040   }
4041 }
4042 
4043 void ASTReader::makeModuleVisible(Module *Mod,
4044                                   Module::NameVisibilityKind NameVisibility,
4045                                   SourceLocation ImportLoc) {
4046   llvm::SmallPtrSet<Module *, 4> Visited;
4047   SmallVector<Module *, 4> Stack;
4048   Stack.push_back(Mod);
4049   while (!Stack.empty()) {
4050     Mod = Stack.pop_back_val();
4051 
4052     if (NameVisibility <= Mod->NameVisibility) {
4053       // This module already has this level of visibility (or greater), so
4054       // there is nothing more to do.
4055       continue;
4056     }
4057 
4058     if (Mod->isUnimportable()) {
4059       // Modules that aren't importable cannot be made visible.
4060       continue;
4061     }
4062 
4063     // Update the module's name visibility.
4064     Mod->NameVisibility = NameVisibility;
4065 
4066     // If we've already deserialized any names from this module,
4067     // mark them as visible.
4068     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4069     if (Hidden != HiddenNamesMap.end()) {
4070       auto HiddenNames = std::move(*Hidden);
4071       HiddenNamesMap.erase(Hidden);
4072       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4073       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4074              "making names visible added hidden names");
4075     }
4076 
4077     // Push any exported modules onto the stack to be marked as visible.
4078     SmallVector<Module *, 16> Exports;
4079     Mod->getExportedModules(Exports);
4080     for (SmallVectorImpl<Module *>::iterator
4081            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4082       Module *Exported = *I;
4083       if (Visited.insert(Exported).second)
4084         Stack.push_back(Exported);
4085     }
4086   }
4087 }
4088 
4089 /// We've merged the definition \p MergedDef into the existing definition
4090 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4091 /// visible.
4092 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4093                                           NamedDecl *MergedDef) {
4094   if (!Def->isUnconditionallyVisible()) {
4095     // If MergedDef is visible or becomes visible, make the definition visible.
4096     if (MergedDef->isUnconditionallyVisible())
4097       Def->setVisibleDespiteOwningModule();
4098     else {
4099       getContext().mergeDefinitionIntoModule(
4100           Def, MergedDef->getImportedOwningModule(),
4101           /*NotifyListeners*/ false);
4102       PendingMergedDefinitionsToDeduplicate.insert(Def);
4103     }
4104   }
4105 }
4106 
4107 bool ASTReader::loadGlobalIndex() {
4108   if (GlobalIndex)
4109     return false;
4110 
4111   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4112       !PP.getLangOpts().Modules)
4113     return true;
4114 
4115   // Try to load the global index.
4116   TriedLoadingGlobalIndex = true;
4117   StringRef ModuleCachePath
4118     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4119   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4120       GlobalModuleIndex::readIndex(ModuleCachePath);
4121   if (llvm::Error Err = std::move(Result.second)) {
4122     assert(!Result.first);
4123     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4124     return true;
4125   }
4126 
4127   GlobalIndex.reset(Result.first);
4128   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4129   return false;
4130 }
4131 
4132 bool ASTReader::isGlobalIndexUnavailable() const {
4133   return PP.getLangOpts().Modules && UseGlobalIndex &&
4134          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4135 }
4136 
4137 static void updateModuleTimestamp(ModuleFile &MF) {
4138   // Overwrite the timestamp file contents so that file's mtime changes.
4139   std::string TimestampFilename = MF.getTimestampFilename();
4140   std::error_code EC;
4141   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4142                           llvm::sys::fs::OF_TextWithCRLF);
4143   if (EC)
4144     return;
4145   OS << "Timestamp file\n";
4146   OS.close();
4147   OS.clear_error(); // Avoid triggering a fatal error.
4148 }
4149 
4150 /// Given a cursor at the start of an AST file, scan ahead and drop the
4151 /// cursor into the start of the given block ID, returning false on success and
4152 /// true on failure.
4153 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4154   while (true) {
4155     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4156     if (!MaybeEntry) {
4157       // FIXME this drops errors on the floor.
4158       consumeError(MaybeEntry.takeError());
4159       return true;
4160     }
4161     llvm::BitstreamEntry Entry = MaybeEntry.get();
4162 
4163     switch (Entry.Kind) {
4164     case llvm::BitstreamEntry::Error:
4165     case llvm::BitstreamEntry::EndBlock:
4166       return true;
4167 
4168     case llvm::BitstreamEntry::Record:
4169       // Ignore top-level records.
4170       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4171         break;
4172       else {
4173         // FIXME this drops errors on the floor.
4174         consumeError(Skipped.takeError());
4175         return true;
4176       }
4177 
4178     case llvm::BitstreamEntry::SubBlock:
4179       if (Entry.ID == BlockID) {
4180         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4181           // FIXME this drops the error on the floor.
4182           consumeError(std::move(Err));
4183           return true;
4184         }
4185         // Found it!
4186         return false;
4187       }
4188 
4189       if (llvm::Error Err = Cursor.SkipBlock()) {
4190         // FIXME this drops the error on the floor.
4191         consumeError(std::move(Err));
4192         return true;
4193       }
4194     }
4195   }
4196 }
4197 
4198 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4199                                             ModuleKind Type,
4200                                             SourceLocation ImportLoc,
4201                                             unsigned ClientLoadCapabilities,
4202                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4203   llvm::SaveAndRestore<SourceLocation>
4204     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4205   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4206       CurrentDeserializingModuleKind, Type);
4207 
4208   // Defer any pending actions until we get to the end of reading the AST file.
4209   Deserializing AnASTFile(this);
4210 
4211   // Bump the generation number.
4212   unsigned PreviousGeneration = 0;
4213   if (ContextObj)
4214     PreviousGeneration = incrementGeneration(*ContextObj);
4215 
4216   unsigned NumModules = ModuleMgr.size();
4217   SmallVector<ImportedModule, 4> Loaded;
4218   if (ASTReadResult ReadResult =
4219           ReadASTCore(FileName, Type, ImportLoc,
4220                       /*ImportedBy=*/nullptr, Loaded, 0, 0, ASTFileSignature(),
4221                       ClientLoadCapabilities)) {
4222     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4223                             PP.getLangOpts().Modules
4224                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4225                                 : nullptr);
4226 
4227     // If we find that any modules are unusable, the global index is going
4228     // to be out-of-date. Just remove it.
4229     GlobalIndex.reset();
4230     ModuleMgr.setGlobalIndex(nullptr);
4231     return ReadResult;
4232   }
4233 
4234   // Here comes stuff that we only do once the entire chain is loaded. Do *not*
4235   // remove modules from this point. Various fields are updated during reading
4236   // the AST block and removing the modules would result in dangling pointers.
4237   // They are generally only incidentally dereferenced, ie. a binary search
4238   // runs over `GlobalSLocEntryMap`, which could cause an invalid module to
4239   // be dereferenced but it wouldn't actually be used.
4240 
4241   // Load the AST blocks of all of the modules that we loaded. We can still
4242   // hit errors parsing the ASTs at this point.
4243   for (ImportedModule &M : Loaded) {
4244     ModuleFile &F = *M.Mod;
4245 
4246     // Read the AST block.
4247     if (llvm::Error Err = ReadASTBlock(F, ClientLoadCapabilities)) {
4248       Error(std::move(Err));
4249       return Failure;
4250     }
4251 
4252     // The AST block should always have a definition for the main module.
4253     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4254       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4255       return Failure;
4256     }
4257 
4258     // Read the extension blocks.
4259     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4260       if (llvm::Error Err = ReadExtensionBlock(F)) {
4261         Error(std::move(Err));
4262         return Failure;
4263       }
4264     }
4265 
4266     // Once read, set the ModuleFile bit base offset and update the size in
4267     // bits of all files we've seen.
4268     F.GlobalBitOffset = TotalModulesSizeInBits;
4269     TotalModulesSizeInBits += F.SizeInBits;
4270     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4271   }
4272 
4273   // Preload source locations and interesting indentifiers.
4274   for (ImportedModule &M : Loaded) {
4275     ModuleFile &F = *M.Mod;
4276 
4277     // Preload SLocEntries.
4278     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4279       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4280       // Load it through the SourceManager and don't call ReadSLocEntry()
4281       // directly because the entry may have already been loaded in which case
4282       // calling ReadSLocEntry() directly would trigger an assertion in
4283       // SourceManager.
4284       SourceMgr.getLoadedSLocEntryByID(Index);
4285     }
4286 
4287     // Map the original source file ID into the ID space of the current
4288     // compilation.
4289     if (F.OriginalSourceFileID.isValid()) {
4290       F.OriginalSourceFileID = FileID::get(
4291           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4292     }
4293 
4294     // Preload all the pending interesting identifiers by marking them out of
4295     // date.
4296     for (auto Offset : F.PreloadIdentifierOffsets) {
4297       const unsigned char *Data = F.IdentifierTableData + Offset;
4298 
4299       ASTIdentifierLookupTrait Trait(*this, F);
4300       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4301       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4302       auto &II = PP.getIdentifierTable().getOwn(Key);
4303       II.setOutOfDate(true);
4304 
4305       // Mark this identifier as being from an AST file so that we can track
4306       // whether we need to serialize it.
4307       markIdentifierFromAST(*this, II);
4308 
4309       // Associate the ID with the identifier so that the writer can reuse it.
4310       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4311       SetIdentifierInfo(ID, &II);
4312     }
4313   }
4314 
4315   // Setup the import locations and notify the module manager that we've
4316   // committed to these module files.
4317   for (ImportedModule &M : Loaded) {
4318     ModuleFile &F = *M.Mod;
4319 
4320     ModuleMgr.moduleFileAccepted(&F);
4321 
4322     // Set the import location.
4323     F.DirectImportLoc = ImportLoc;
4324     // FIXME: We assume that locations from PCH / preamble do not need
4325     // any translation.
4326     if (!M.ImportedBy)
4327       F.ImportLoc = M.ImportLoc;
4328     else
4329       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4330   }
4331 
4332   if (!PP.getLangOpts().CPlusPlus ||
4333       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4334        Type != MK_PrebuiltModule)) {
4335     // Mark all of the identifiers in the identifier table as being out of date,
4336     // so that various accessors know to check the loaded modules when the
4337     // identifier is used.
4338     //
4339     // For C++ modules, we don't need information on many identifiers (just
4340     // those that provide macros or are poisoned), so we mark all of
4341     // the interesting ones via PreloadIdentifierOffsets.
4342     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4343                                 IdEnd = PP.getIdentifierTable().end();
4344          Id != IdEnd; ++Id)
4345       Id->second->setOutOfDate(true);
4346   }
4347   // Mark selectors as out of date.
4348   for (auto Sel : SelectorGeneration)
4349     SelectorOutOfDate[Sel.first] = true;
4350 
4351   // Resolve any unresolved module exports.
4352   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4353     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4354     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4355     Module *ResolvedMod = getSubmodule(GlobalID);
4356 
4357     switch (Unresolved.Kind) {
4358     case UnresolvedModuleRef::Conflict:
4359       if (ResolvedMod) {
4360         Module::Conflict Conflict;
4361         Conflict.Other = ResolvedMod;
4362         Conflict.Message = Unresolved.String.str();
4363         Unresolved.Mod->Conflicts.push_back(Conflict);
4364       }
4365       continue;
4366 
4367     case UnresolvedModuleRef::Import:
4368       if (ResolvedMod)
4369         Unresolved.Mod->Imports.insert(ResolvedMod);
4370       continue;
4371 
4372     case UnresolvedModuleRef::Export:
4373       if (ResolvedMod || Unresolved.IsWildcard)
4374         Unresolved.Mod->Exports.push_back(
4375           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4376       continue;
4377     }
4378   }
4379   UnresolvedModuleRefs.clear();
4380 
4381   if (Imported)
4382     Imported->append(ImportedModules.begin(),
4383                      ImportedModules.end());
4384 
4385   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4386   // Might be unnecessary as use declarations are only used to build the
4387   // module itself.
4388 
4389   if (ContextObj)
4390     InitializeContext();
4391 
4392   if (SemaObj)
4393     UpdateSema();
4394 
4395   if (DeserializationListener)
4396     DeserializationListener->ReaderInitialized(this);
4397 
4398   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4399   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4400     // If this AST file is a precompiled preamble, then set the
4401     // preamble file ID of the source manager to the file source file
4402     // from which the preamble was built.
4403     if (Type == MK_Preamble) {
4404       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4405     } else if (Type == MK_MainFile) {
4406       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4407     }
4408   }
4409 
4410   // For any Objective-C class definitions we have already loaded, make sure
4411   // that we load any additional categories.
4412   if (ContextObj) {
4413     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4414       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4415                          ObjCClassesLoaded[I],
4416                          PreviousGeneration);
4417     }
4418   }
4419 
4420   if (PP.getHeaderSearchInfo()
4421           .getHeaderSearchOpts()
4422           .ModulesValidateOncePerBuildSession) {
4423     // Now we are certain that the module and all modules it depends on are
4424     // up to date.  Create or update timestamp files for modules that are
4425     // located in the module cache (not for PCH files that could be anywhere
4426     // in the filesystem).
4427     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4428       ImportedModule &M = Loaded[I];
4429       if (M.Mod->Kind == MK_ImplicitModule) {
4430         updateModuleTimestamp(*M.Mod);
4431       }
4432     }
4433   }
4434 
4435   return Success;
4436 }
4437 
4438 static ASTFileSignature readASTFileSignature(StringRef PCH);
4439 
4440 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4441 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4442   // FIXME checking magic headers is done in other places such as
4443   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4444   // always done the same. Unify it all with a helper.
4445   if (!Stream.canSkipToPos(4))
4446     return llvm::createStringError(std::errc::illegal_byte_sequence,
4447                                    "file too small to contain AST file magic");
4448   for (unsigned C : {'C', 'P', 'C', 'H'})
4449     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4450       if (Res.get() != C)
4451         return llvm::createStringError(
4452             std::errc::illegal_byte_sequence,
4453             "file doesn't start with AST file magic");
4454     } else
4455       return Res.takeError();
4456   return llvm::Error::success();
4457 }
4458 
4459 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4460   switch (Kind) {
4461   case MK_PCH:
4462     return 0; // PCH
4463   case MK_ImplicitModule:
4464   case MK_ExplicitModule:
4465   case MK_PrebuiltModule:
4466     return 1; // module
4467   case MK_MainFile:
4468   case MK_Preamble:
4469     return 2; // main source file
4470   }
4471   llvm_unreachable("unknown module kind");
4472 }
4473 
4474 ASTReader::ASTReadResult
4475 ASTReader::ReadASTCore(StringRef FileName,
4476                        ModuleKind Type,
4477                        SourceLocation ImportLoc,
4478                        ModuleFile *ImportedBy,
4479                        SmallVectorImpl<ImportedModule> &Loaded,
4480                        off_t ExpectedSize, time_t ExpectedModTime,
4481                        ASTFileSignature ExpectedSignature,
4482                        unsigned ClientLoadCapabilities) {
4483   ModuleFile *M;
4484   std::string ErrorStr;
4485   ModuleManager::AddModuleResult AddResult
4486     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4487                           getGeneration(), ExpectedSize, ExpectedModTime,
4488                           ExpectedSignature, readASTFileSignature,
4489                           M, ErrorStr);
4490 
4491   switch (AddResult) {
4492   case ModuleManager::AlreadyLoaded:
4493     Diag(diag::remark_module_import)
4494         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4495         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4496     return Success;
4497 
4498   case ModuleManager::NewlyLoaded:
4499     // Load module file below.
4500     break;
4501 
4502   case ModuleManager::Missing:
4503     // The module file was missing; if the client can handle that, return
4504     // it.
4505     if (ClientLoadCapabilities & ARR_Missing)
4506       return Missing;
4507 
4508     // Otherwise, return an error.
4509     Diag(diag::err_ast_file_not_found)
4510         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4511         << ErrorStr;
4512     return Failure;
4513 
4514   case ModuleManager::OutOfDate:
4515     // We couldn't load the module file because it is out-of-date. If the
4516     // client can handle out-of-date, return it.
4517     if (ClientLoadCapabilities & ARR_OutOfDate)
4518       return OutOfDate;
4519 
4520     // Otherwise, return an error.
4521     Diag(diag::err_ast_file_out_of_date)
4522         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4523         << ErrorStr;
4524     return Failure;
4525   }
4526 
4527   assert(M && "Missing module file");
4528 
4529   bool ShouldFinalizePCM = false;
4530   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4531     auto &MC = getModuleManager().getModuleCache();
4532     if (ShouldFinalizePCM)
4533       MC.finalizePCM(FileName);
4534     else
4535       MC.tryToDropPCM(FileName);
4536   });
4537   ModuleFile &F = *M;
4538   BitstreamCursor &Stream = F.Stream;
4539   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4540   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4541 
4542   // Sniff for the signature.
4543   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4544     Diag(diag::err_ast_file_invalid)
4545         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4546     return Failure;
4547   }
4548 
4549   // This is used for compatibility with older PCH formats.
4550   bool HaveReadControlBlock = false;
4551   while (true) {
4552     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4553     if (!MaybeEntry) {
4554       Error(MaybeEntry.takeError());
4555       return Failure;
4556     }
4557     llvm::BitstreamEntry Entry = MaybeEntry.get();
4558 
4559     switch (Entry.Kind) {
4560     case llvm::BitstreamEntry::Error:
4561     case llvm::BitstreamEntry::Record:
4562     case llvm::BitstreamEntry::EndBlock:
4563       Error("invalid record at top-level of AST file");
4564       return Failure;
4565 
4566     case llvm::BitstreamEntry::SubBlock:
4567       break;
4568     }
4569 
4570     switch (Entry.ID) {
4571     case CONTROL_BLOCK_ID:
4572       HaveReadControlBlock = true;
4573       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4574       case Success:
4575         // Check that we didn't try to load a non-module AST file as a module.
4576         //
4577         // FIXME: Should we also perform the converse check? Loading a module as
4578         // a PCH file sort of works, but it's a bit wonky.
4579         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4580              Type == MK_PrebuiltModule) &&
4581             F.ModuleName.empty()) {
4582           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4583           if (Result != OutOfDate ||
4584               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4585             Diag(diag::err_module_file_not_module) << FileName;
4586           return Result;
4587         }
4588         break;
4589 
4590       case Failure: return Failure;
4591       case Missing: return Missing;
4592       case OutOfDate: return OutOfDate;
4593       case VersionMismatch: return VersionMismatch;
4594       case ConfigurationMismatch: return ConfigurationMismatch;
4595       case HadErrors: return HadErrors;
4596       }
4597       break;
4598 
4599     case AST_BLOCK_ID:
4600       if (!HaveReadControlBlock) {
4601         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4602           Diag(diag::err_pch_version_too_old);
4603         return VersionMismatch;
4604       }
4605 
4606       // Record that we've loaded this module.
4607       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4608       ShouldFinalizePCM = true;
4609       return Success;
4610 
4611     case UNHASHED_CONTROL_BLOCK_ID:
4612       // This block is handled using look-ahead during ReadControlBlock.  We
4613       // shouldn't get here!
4614       Error("malformed block record in AST file");
4615       return Failure;
4616 
4617     default:
4618       if (llvm::Error Err = Stream.SkipBlock()) {
4619         Error(std::move(Err));
4620         return Failure;
4621       }
4622       break;
4623     }
4624   }
4625 
4626   llvm_unreachable("unexpected break; expected return");
4627 }
4628 
4629 ASTReader::ASTReadResult
4630 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4631                                     unsigned ClientLoadCapabilities) {
4632   const HeaderSearchOptions &HSOpts =
4633       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4634   bool AllowCompatibleConfigurationMismatch =
4635       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4636   bool DisableValidation = shouldDisableValidationForFile(F);
4637 
4638   ASTReadResult Result = readUnhashedControlBlockImpl(
4639       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4640       Listener.get(),
4641       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4642 
4643   // If F was directly imported by another module, it's implicitly validated by
4644   // the importing module.
4645   if (DisableValidation || WasImportedBy ||
4646       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4647     return Success;
4648 
4649   if (Result == Failure) {
4650     Error("malformed block record in AST file");
4651     return Failure;
4652   }
4653 
4654   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4655     // If this module has already been finalized in the ModuleCache, we're stuck
4656     // with it; we can only load a single version of each module.
4657     //
4658     // This can happen when a module is imported in two contexts: in one, as a
4659     // user module; in another, as a system module (due to an import from
4660     // another module marked with the [system] flag).  It usually indicates a
4661     // bug in the module map: this module should also be marked with [system].
4662     //
4663     // If -Wno-system-headers (the default), and the first import is as a
4664     // system module, then validation will fail during the as-user import,
4665     // since -Werror flags won't have been validated.  However, it's reasonable
4666     // to treat this consistently as a system module.
4667     //
4668     // If -Wsystem-headers, the PCM on disk was built with
4669     // -Wno-system-headers, and the first import is as a user module, then
4670     // validation will fail during the as-system import since the PCM on disk
4671     // doesn't guarantee that -Werror was respected.  However, the -Werror
4672     // flags were checked during the initial as-user import.
4673     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4674       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4675       return Success;
4676     }
4677   }
4678 
4679   return Result;
4680 }
4681 
4682 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4683     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4684     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4685     bool ValidateDiagnosticOptions) {
4686   // Initialize a stream.
4687   BitstreamCursor Stream(StreamData);
4688 
4689   // Sniff for the signature.
4690   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4691     // FIXME this drops the error on the floor.
4692     consumeError(std::move(Err));
4693     return Failure;
4694   }
4695 
4696   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4697   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4698     return Failure;
4699 
4700   // Read all of the records in the options block.
4701   RecordData Record;
4702   ASTReadResult Result = Success;
4703   while (true) {
4704     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4705     if (!MaybeEntry) {
4706       // FIXME this drops the error on the floor.
4707       consumeError(MaybeEntry.takeError());
4708       return Failure;
4709     }
4710     llvm::BitstreamEntry Entry = MaybeEntry.get();
4711 
4712     switch (Entry.Kind) {
4713     case llvm::BitstreamEntry::Error:
4714     case llvm::BitstreamEntry::SubBlock:
4715       return Failure;
4716 
4717     case llvm::BitstreamEntry::EndBlock:
4718       return Result;
4719 
4720     case llvm::BitstreamEntry::Record:
4721       // The interesting case.
4722       break;
4723     }
4724 
4725     // Read and process a record.
4726     Record.clear();
4727     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4728     if (!MaybeRecordType) {
4729       // FIXME this drops the error.
4730       return Failure;
4731     }
4732     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4733     case SIGNATURE:
4734       if (F)
4735         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4736       break;
4737     case AST_BLOCK_HASH:
4738       if (F)
4739         F->ASTBlockHash =
4740             ASTFileSignature::create(Record.begin(), Record.end());
4741       break;
4742     case DIAGNOSTIC_OPTIONS: {
4743       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4744       if (Listener && ValidateDiagnosticOptions &&
4745           !AllowCompatibleConfigurationMismatch &&
4746           ParseDiagnosticOptions(Record, Complain, *Listener))
4747         Result = OutOfDate; // Don't return early.  Read the signature.
4748       break;
4749     }
4750     case DIAG_PRAGMA_MAPPINGS:
4751       if (!F)
4752         break;
4753       if (F->PragmaDiagMappings.empty())
4754         F->PragmaDiagMappings.swap(Record);
4755       else
4756         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4757                                      Record.begin(), Record.end());
4758       break;
4759     }
4760   }
4761 }
4762 
4763 /// Parse a record and blob containing module file extension metadata.
4764 static bool parseModuleFileExtensionMetadata(
4765               const SmallVectorImpl<uint64_t> &Record,
4766               StringRef Blob,
4767               ModuleFileExtensionMetadata &Metadata) {
4768   if (Record.size() < 4) return true;
4769 
4770   Metadata.MajorVersion = Record[0];
4771   Metadata.MinorVersion = Record[1];
4772 
4773   unsigned BlockNameLen = Record[2];
4774   unsigned UserInfoLen = Record[3];
4775 
4776   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4777 
4778   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4779   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4780                                   Blob.data() + BlockNameLen + UserInfoLen);
4781   return false;
4782 }
4783 
4784 llvm::Error ASTReader::ReadExtensionBlock(ModuleFile &F) {
4785   BitstreamCursor &Stream = F.Stream;
4786 
4787   RecordData Record;
4788   while (true) {
4789     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4790     if (!MaybeEntry)
4791       return MaybeEntry.takeError();
4792     llvm::BitstreamEntry Entry = MaybeEntry.get();
4793 
4794     switch (Entry.Kind) {
4795     case llvm::BitstreamEntry::SubBlock:
4796       if (llvm::Error Err = Stream.SkipBlock())
4797         return Err;
4798       continue;
4799     case llvm::BitstreamEntry::EndBlock:
4800       return llvm::Error::success();
4801     case llvm::BitstreamEntry::Error:
4802       return llvm::createStringError(std::errc::illegal_byte_sequence,
4803                                      "malformed block record in AST file");
4804     case llvm::BitstreamEntry::Record:
4805       break;
4806     }
4807 
4808     Record.clear();
4809     StringRef Blob;
4810     Expected<unsigned> MaybeRecCode =
4811         Stream.readRecord(Entry.ID, Record, &Blob);
4812     if (!MaybeRecCode)
4813       return MaybeRecCode.takeError();
4814     switch (MaybeRecCode.get()) {
4815     case EXTENSION_METADATA: {
4816       ModuleFileExtensionMetadata Metadata;
4817       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4818         return llvm::createStringError(
4819             std::errc::illegal_byte_sequence,
4820             "malformed EXTENSION_METADATA in AST file");
4821 
4822       // Find a module file extension with this block name.
4823       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4824       if (Known == ModuleFileExtensions.end()) break;
4825 
4826       // Form a reader.
4827       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4828                                                              F, Stream)) {
4829         F.ExtensionReaders.push_back(std::move(Reader));
4830       }
4831 
4832       break;
4833     }
4834     }
4835   }
4836 
4837   return llvm::Error::success();
4838 }
4839 
4840 void ASTReader::InitializeContext() {
4841   assert(ContextObj && "no context to initialize");
4842   ASTContext &Context = *ContextObj;
4843 
4844   // If there's a listener, notify them that we "read" the translation unit.
4845   if (DeserializationListener)
4846     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4847                                       Context.getTranslationUnitDecl());
4848 
4849   // FIXME: Find a better way to deal with collisions between these
4850   // built-in types. Right now, we just ignore the problem.
4851 
4852   // Load the special types.
4853   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4854     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4855       if (!Context.CFConstantStringTypeDecl)
4856         Context.setCFConstantStringType(GetType(String));
4857     }
4858 
4859     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4860       QualType FileType = GetType(File);
4861       if (FileType.isNull()) {
4862         Error("FILE type is NULL");
4863         return;
4864       }
4865 
4866       if (!Context.FILEDecl) {
4867         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4868           Context.setFILEDecl(Typedef->getDecl());
4869         else {
4870           const TagType *Tag = FileType->getAs<TagType>();
4871           if (!Tag) {
4872             Error("Invalid FILE type in AST file");
4873             return;
4874           }
4875           Context.setFILEDecl(Tag->getDecl());
4876         }
4877       }
4878     }
4879 
4880     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4881       QualType Jmp_bufType = GetType(Jmp_buf);
4882       if (Jmp_bufType.isNull()) {
4883         Error("jmp_buf type is NULL");
4884         return;
4885       }
4886 
4887       if (!Context.jmp_bufDecl) {
4888         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4889           Context.setjmp_bufDecl(Typedef->getDecl());
4890         else {
4891           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4892           if (!Tag) {
4893             Error("Invalid jmp_buf type in AST file");
4894             return;
4895           }
4896           Context.setjmp_bufDecl(Tag->getDecl());
4897         }
4898       }
4899     }
4900 
4901     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4902       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4903       if (Sigjmp_bufType.isNull()) {
4904         Error("sigjmp_buf type is NULL");
4905         return;
4906       }
4907 
4908       if (!Context.sigjmp_bufDecl) {
4909         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4910           Context.setsigjmp_bufDecl(Typedef->getDecl());
4911         else {
4912           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4913           assert(Tag && "Invalid sigjmp_buf type in AST file");
4914           Context.setsigjmp_bufDecl(Tag->getDecl());
4915         }
4916       }
4917     }
4918 
4919     if (unsigned ObjCIdRedef
4920           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4921       if (Context.ObjCIdRedefinitionType.isNull())
4922         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4923     }
4924 
4925     if (unsigned ObjCClassRedef
4926           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4927       if (Context.ObjCClassRedefinitionType.isNull())
4928         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4929     }
4930 
4931     if (unsigned ObjCSelRedef
4932           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4933       if (Context.ObjCSelRedefinitionType.isNull())
4934         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4935     }
4936 
4937     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4938       QualType Ucontext_tType = GetType(Ucontext_t);
4939       if (Ucontext_tType.isNull()) {
4940         Error("ucontext_t type is NULL");
4941         return;
4942       }
4943 
4944       if (!Context.ucontext_tDecl) {
4945         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4946           Context.setucontext_tDecl(Typedef->getDecl());
4947         else {
4948           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4949           assert(Tag && "Invalid ucontext_t type in AST file");
4950           Context.setucontext_tDecl(Tag->getDecl());
4951         }
4952       }
4953     }
4954   }
4955 
4956   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4957 
4958   // If there were any CUDA special declarations, deserialize them.
4959   if (!CUDASpecialDeclRefs.empty()) {
4960     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4961     Context.setcudaConfigureCallDecl(
4962                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4963   }
4964 
4965   // Re-export any modules that were imported by a non-module AST file.
4966   // FIXME: This does not make macro-only imports visible again.
4967   for (auto &Import : ImportedModules) {
4968     if (Module *Imported = getSubmodule(Import.ID)) {
4969       makeModuleVisible(Imported, Module::AllVisible,
4970                         /*ImportLoc=*/Import.ImportLoc);
4971       if (Import.ImportLoc.isValid())
4972         PP.makeModuleVisible(Imported, Import.ImportLoc);
4973       // This updates visibility for Preprocessor only. For Sema, which can be
4974       // nullptr here, we do the same later, in UpdateSema().
4975     }
4976   }
4977 }
4978 
4979 void ASTReader::finalizeForWriting() {
4980   // Nothing to do for now.
4981 }
4982 
4983 /// Reads and return the signature record from \p PCH's control block, or
4984 /// else returns 0.
4985 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4986   BitstreamCursor Stream(PCH);
4987   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4988     // FIXME this drops the error on the floor.
4989     consumeError(std::move(Err));
4990     return ASTFileSignature();
4991   }
4992 
4993   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4994   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4995     return ASTFileSignature();
4996 
4997   // Scan for SIGNATURE inside the diagnostic options block.
4998   ASTReader::RecordData Record;
4999   while (true) {
5000     Expected<llvm::BitstreamEntry> MaybeEntry =
5001         Stream.advanceSkippingSubblocks();
5002     if (!MaybeEntry) {
5003       // FIXME this drops the error on the floor.
5004       consumeError(MaybeEntry.takeError());
5005       return ASTFileSignature();
5006     }
5007     llvm::BitstreamEntry Entry = MaybeEntry.get();
5008 
5009     if (Entry.Kind != llvm::BitstreamEntry::Record)
5010       return ASTFileSignature();
5011 
5012     Record.clear();
5013     StringRef Blob;
5014     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5015     if (!MaybeRecord) {
5016       // FIXME this drops the error on the floor.
5017       consumeError(MaybeRecord.takeError());
5018       return ASTFileSignature();
5019     }
5020     if (SIGNATURE == MaybeRecord.get())
5021       return ASTFileSignature::create(Record.begin(),
5022                                       Record.begin() + ASTFileSignature::size);
5023   }
5024 }
5025 
5026 /// Retrieve the name of the original source file name
5027 /// directly from the AST file, without actually loading the AST
5028 /// file.
5029 std::string ASTReader::getOriginalSourceFile(
5030     const std::string &ASTFileName, FileManager &FileMgr,
5031     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5032   // Open the AST file.
5033   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5034   if (!Buffer) {
5035     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5036         << ASTFileName << Buffer.getError().message();
5037     return std::string();
5038   }
5039 
5040   // Initialize the stream
5041   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5042 
5043   // Sniff for the signature.
5044   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5045     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5046     return std::string();
5047   }
5048 
5049   // Scan for the CONTROL_BLOCK_ID block.
5050   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5051     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5052     return std::string();
5053   }
5054 
5055   // Scan for ORIGINAL_FILE inside the control block.
5056   RecordData Record;
5057   while (true) {
5058     Expected<llvm::BitstreamEntry> MaybeEntry =
5059         Stream.advanceSkippingSubblocks();
5060     if (!MaybeEntry) {
5061       // FIXME this drops errors on the floor.
5062       consumeError(MaybeEntry.takeError());
5063       return std::string();
5064     }
5065     llvm::BitstreamEntry Entry = MaybeEntry.get();
5066 
5067     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5068       return std::string();
5069 
5070     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5071       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5072       return std::string();
5073     }
5074 
5075     Record.clear();
5076     StringRef Blob;
5077     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5078     if (!MaybeRecord) {
5079       // FIXME this drops the errors on the floor.
5080       consumeError(MaybeRecord.takeError());
5081       return std::string();
5082     }
5083     if (ORIGINAL_FILE == MaybeRecord.get())
5084       return Blob.str();
5085   }
5086 }
5087 
5088 namespace {
5089 
5090   class SimplePCHValidator : public ASTReaderListener {
5091     const LangOptions &ExistingLangOpts;
5092     const TargetOptions &ExistingTargetOpts;
5093     const PreprocessorOptions &ExistingPPOpts;
5094     std::string ExistingModuleCachePath;
5095     FileManager &FileMgr;
5096 
5097   public:
5098     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5099                        const TargetOptions &ExistingTargetOpts,
5100                        const PreprocessorOptions &ExistingPPOpts,
5101                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5102         : ExistingLangOpts(ExistingLangOpts),
5103           ExistingTargetOpts(ExistingTargetOpts),
5104           ExistingPPOpts(ExistingPPOpts),
5105           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5106 
5107     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5108                              bool AllowCompatibleDifferences) override {
5109       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5110                                   AllowCompatibleDifferences);
5111     }
5112 
5113     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5114                            bool AllowCompatibleDifferences) override {
5115       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5116                                 AllowCompatibleDifferences);
5117     }
5118 
5119     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5120                                  StringRef SpecificModuleCachePath,
5121                                  bool Complain) override {
5122       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5123                                       ExistingModuleCachePath, nullptr,
5124                                       ExistingLangOpts, ExistingPPOpts);
5125     }
5126 
5127     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5128                                  bool Complain,
5129                                  std::string &SuggestedPredefines) override {
5130       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5131                                       SuggestedPredefines, ExistingLangOpts);
5132     }
5133   };
5134 
5135 } // namespace
5136 
5137 bool ASTReader::readASTFileControlBlock(
5138     StringRef Filename, FileManager &FileMgr,
5139     const PCHContainerReader &PCHContainerRdr,
5140     bool FindModuleFileExtensions,
5141     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5142   // Open the AST file.
5143   // FIXME: This allows use of the VFS; we do not allow use of the
5144   // VFS when actually loading a module.
5145   auto Buffer = FileMgr.getBufferForFile(Filename);
5146   if (!Buffer) {
5147     return true;
5148   }
5149 
5150   // Initialize the stream
5151   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5152   BitstreamCursor Stream(Bytes);
5153 
5154   // Sniff for the signature.
5155   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5156     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5157     return true;
5158   }
5159 
5160   // Scan for the CONTROL_BLOCK_ID block.
5161   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5162     return true;
5163 
5164   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5165   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5166   bool NeedsImports = Listener.needsImportVisitation();
5167   BitstreamCursor InputFilesCursor;
5168 
5169   RecordData Record;
5170   std::string ModuleDir;
5171   bool DoneWithControlBlock = false;
5172   while (!DoneWithControlBlock) {
5173     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5174     if (!MaybeEntry) {
5175       // FIXME this drops the error on the floor.
5176       consumeError(MaybeEntry.takeError());
5177       return true;
5178     }
5179     llvm::BitstreamEntry Entry = MaybeEntry.get();
5180 
5181     switch (Entry.Kind) {
5182     case llvm::BitstreamEntry::SubBlock: {
5183       switch (Entry.ID) {
5184       case OPTIONS_BLOCK_ID: {
5185         std::string IgnoredSuggestedPredefines;
5186         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5187                              /*AllowCompatibleConfigurationMismatch*/ false,
5188                              Listener, IgnoredSuggestedPredefines) != Success)
5189           return true;
5190         break;
5191       }
5192 
5193       case INPUT_FILES_BLOCK_ID:
5194         InputFilesCursor = Stream;
5195         if (llvm::Error Err = Stream.SkipBlock()) {
5196           // FIXME this drops the error on the floor.
5197           consumeError(std::move(Err));
5198           return true;
5199         }
5200         if (NeedsInputFiles &&
5201             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5202           return true;
5203         break;
5204 
5205       default:
5206         if (llvm::Error Err = Stream.SkipBlock()) {
5207           // FIXME this drops the error on the floor.
5208           consumeError(std::move(Err));
5209           return true;
5210         }
5211         break;
5212       }
5213 
5214       continue;
5215     }
5216 
5217     case llvm::BitstreamEntry::EndBlock:
5218       DoneWithControlBlock = true;
5219       break;
5220 
5221     case llvm::BitstreamEntry::Error:
5222       return true;
5223 
5224     case llvm::BitstreamEntry::Record:
5225       break;
5226     }
5227 
5228     if (DoneWithControlBlock) break;
5229 
5230     Record.clear();
5231     StringRef Blob;
5232     Expected<unsigned> MaybeRecCode =
5233         Stream.readRecord(Entry.ID, Record, &Blob);
5234     if (!MaybeRecCode) {
5235       // FIXME this drops the error.
5236       return Failure;
5237     }
5238     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5239     case METADATA:
5240       if (Record[0] != VERSION_MAJOR)
5241         return true;
5242       if (Listener.ReadFullVersionInformation(Blob))
5243         return true;
5244       break;
5245     case MODULE_NAME:
5246       Listener.ReadModuleName(Blob);
5247       break;
5248     case MODULE_DIRECTORY:
5249       ModuleDir = std::string(Blob);
5250       break;
5251     case MODULE_MAP_FILE: {
5252       unsigned Idx = 0;
5253       auto Path = ReadString(Record, Idx);
5254       ResolveImportedPath(Path, ModuleDir);
5255       Listener.ReadModuleMapFile(Path);
5256       break;
5257     }
5258     case INPUT_FILE_OFFSETS: {
5259       if (!NeedsInputFiles)
5260         break;
5261 
5262       unsigned NumInputFiles = Record[0];
5263       unsigned NumUserFiles = Record[1];
5264       const llvm::support::unaligned_uint64_t *InputFileOffs =
5265           (const llvm::support::unaligned_uint64_t *)Blob.data();
5266       for (unsigned I = 0; I != NumInputFiles; ++I) {
5267         // Go find this input file.
5268         bool isSystemFile = I >= NumUserFiles;
5269 
5270         if (isSystemFile && !NeedsSystemInputFiles)
5271           break; // the rest are system input files
5272 
5273         BitstreamCursor &Cursor = InputFilesCursor;
5274         SavedStreamPosition SavedPosition(Cursor);
5275         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5276           // FIXME this drops errors on the floor.
5277           consumeError(std::move(Err));
5278         }
5279 
5280         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5281         if (!MaybeCode) {
5282           // FIXME this drops errors on the floor.
5283           consumeError(MaybeCode.takeError());
5284         }
5285         unsigned Code = MaybeCode.get();
5286 
5287         RecordData Record;
5288         StringRef Blob;
5289         bool shouldContinue = false;
5290         Expected<unsigned> MaybeRecordType =
5291             Cursor.readRecord(Code, Record, &Blob);
5292         if (!MaybeRecordType) {
5293           // FIXME this drops errors on the floor.
5294           consumeError(MaybeRecordType.takeError());
5295         }
5296         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5297         case INPUT_FILE_HASH:
5298           break;
5299         case INPUT_FILE:
5300           bool Overridden = static_cast<bool>(Record[3]);
5301           std::string Filename = std::string(Blob);
5302           ResolveImportedPath(Filename, ModuleDir);
5303           shouldContinue = Listener.visitInputFile(
5304               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5305           break;
5306         }
5307         if (!shouldContinue)
5308           break;
5309       }
5310       break;
5311     }
5312 
5313     case IMPORTS: {
5314       if (!NeedsImports)
5315         break;
5316 
5317       unsigned Idx = 0, N = Record.size();
5318       while (Idx < N) {
5319         // Read information about the AST file.
5320         Idx +=
5321             1 + 1 + 1 + 1 +
5322             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5323         std::string ModuleName = ReadString(Record, Idx);
5324         std::string Filename = ReadString(Record, Idx);
5325         ResolveImportedPath(Filename, ModuleDir);
5326         Listener.visitImport(ModuleName, Filename);
5327       }
5328       break;
5329     }
5330 
5331     default:
5332       // No other validation to perform.
5333       break;
5334     }
5335   }
5336 
5337   // Look for module file extension blocks, if requested.
5338   if (FindModuleFileExtensions) {
5339     BitstreamCursor SavedStream = Stream;
5340     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5341       bool DoneWithExtensionBlock = false;
5342       while (!DoneWithExtensionBlock) {
5343         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5344         if (!MaybeEntry) {
5345           // FIXME this drops the error.
5346           return true;
5347         }
5348         llvm::BitstreamEntry Entry = MaybeEntry.get();
5349 
5350         switch (Entry.Kind) {
5351         case llvm::BitstreamEntry::SubBlock:
5352           if (llvm::Error Err = Stream.SkipBlock()) {
5353             // FIXME this drops the error on the floor.
5354             consumeError(std::move(Err));
5355             return true;
5356           }
5357           continue;
5358 
5359         case llvm::BitstreamEntry::EndBlock:
5360           DoneWithExtensionBlock = true;
5361           continue;
5362 
5363         case llvm::BitstreamEntry::Error:
5364           return true;
5365 
5366         case llvm::BitstreamEntry::Record:
5367           break;
5368         }
5369 
5370        Record.clear();
5371        StringRef Blob;
5372        Expected<unsigned> MaybeRecCode =
5373            Stream.readRecord(Entry.ID, Record, &Blob);
5374        if (!MaybeRecCode) {
5375          // FIXME this drops the error.
5376          return true;
5377        }
5378        switch (MaybeRecCode.get()) {
5379        case EXTENSION_METADATA: {
5380          ModuleFileExtensionMetadata Metadata;
5381          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5382            return true;
5383 
5384          Listener.readModuleFileExtension(Metadata);
5385          break;
5386        }
5387        }
5388       }
5389     }
5390     Stream = SavedStream;
5391   }
5392 
5393   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5394   if (readUnhashedControlBlockImpl(
5395           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5396           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5397           ValidateDiagnosticOptions) != Success)
5398     return true;
5399 
5400   return false;
5401 }
5402 
5403 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5404                                     const PCHContainerReader &PCHContainerRdr,
5405                                     const LangOptions &LangOpts,
5406                                     const TargetOptions &TargetOpts,
5407                                     const PreprocessorOptions &PPOpts,
5408                                     StringRef ExistingModuleCachePath) {
5409   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5410                                ExistingModuleCachePath, FileMgr);
5411   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5412                                   /*FindModuleFileExtensions=*/false,
5413                                   validator,
5414                                   /*ValidateDiagnosticOptions=*/true);
5415 }
5416 
5417 llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F,
5418                                           unsigned ClientLoadCapabilities) {
5419   // Enter the submodule block.
5420   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID))
5421     return Err;
5422 
5423   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5424   bool First = true;
5425   Module *CurrentModule = nullptr;
5426   RecordData Record;
5427   while (true) {
5428     Expected<llvm::BitstreamEntry> MaybeEntry =
5429         F.Stream.advanceSkippingSubblocks();
5430     if (!MaybeEntry)
5431       return MaybeEntry.takeError();
5432     llvm::BitstreamEntry Entry = MaybeEntry.get();
5433 
5434     switch (Entry.Kind) {
5435     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5436     case llvm::BitstreamEntry::Error:
5437       return llvm::createStringError(std::errc::illegal_byte_sequence,
5438                                      "malformed block record in AST file");
5439     case llvm::BitstreamEntry::EndBlock:
5440       return llvm::Error::success();
5441     case llvm::BitstreamEntry::Record:
5442       // The interesting case.
5443       break;
5444     }
5445 
5446     // Read a record.
5447     StringRef Blob;
5448     Record.clear();
5449     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5450     if (!MaybeKind)
5451       return MaybeKind.takeError();
5452     unsigned Kind = MaybeKind.get();
5453 
5454     if ((Kind == SUBMODULE_METADATA) != First)
5455       return llvm::createStringError(
5456           std::errc::illegal_byte_sequence,
5457           "submodule metadata record should be at beginning of block");
5458     First = false;
5459 
5460     // Submodule information is only valid if we have a current module.
5461     // FIXME: Should we error on these cases?
5462     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5463         Kind != SUBMODULE_DEFINITION)
5464       continue;
5465 
5466     switch (Kind) {
5467     default:  // Default behavior: ignore.
5468       break;
5469 
5470     case SUBMODULE_DEFINITION: {
5471       if (Record.size() < 12)
5472         return llvm::createStringError(std::errc::illegal_byte_sequence,
5473                                        "malformed module definition");
5474 
5475       StringRef Name = Blob;
5476       unsigned Idx = 0;
5477       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5478       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5479       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5480       bool IsFramework = Record[Idx++];
5481       bool IsExplicit = Record[Idx++];
5482       bool IsSystem = Record[Idx++];
5483       bool IsExternC = Record[Idx++];
5484       bool InferSubmodules = Record[Idx++];
5485       bool InferExplicitSubmodules = Record[Idx++];
5486       bool InferExportWildcard = Record[Idx++];
5487       bool ConfigMacrosExhaustive = Record[Idx++];
5488       bool ModuleMapIsPrivate = Record[Idx++];
5489 
5490       Module *ParentModule = nullptr;
5491       if (Parent)
5492         ParentModule = getSubmodule(Parent);
5493 
5494       // Retrieve this (sub)module from the module map, creating it if
5495       // necessary.
5496       CurrentModule =
5497           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5498               .first;
5499 
5500       // FIXME: set the definition loc for CurrentModule, or call
5501       // ModMap.setInferredModuleAllowedBy()
5502 
5503       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5504       if (GlobalIndex >= SubmodulesLoaded.size() ||
5505           SubmodulesLoaded[GlobalIndex])
5506         return llvm::createStringError(std::errc::invalid_argument,
5507                                        "too many submodules");
5508 
5509       if (!ParentModule) {
5510         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5511           // Don't emit module relocation error if we have -fno-validate-pch
5512           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5513                     DisableValidationForModuleKind::Module) &&
5514               CurFile != F.File) {
5515             auto ConflictError =
5516                 PartialDiagnostic(diag::err_module_file_conflict,
5517                                   ContextObj->DiagAllocator)
5518                 << CurrentModule->getTopLevelModuleName() << CurFile->getName()
5519                 << F.File->getName();
5520             return DiagnosticError::create(CurrentImportLoc, ConflictError);
5521           }
5522         }
5523 
5524         F.DidReadTopLevelSubmodule = true;
5525         CurrentModule->setASTFile(F.File);
5526         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5527       }
5528 
5529       CurrentModule->Kind = Kind;
5530       CurrentModule->Signature = F.Signature;
5531       CurrentModule->IsFromModuleFile = true;
5532       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5533       CurrentModule->IsExternC = IsExternC;
5534       CurrentModule->InferSubmodules = InferSubmodules;
5535       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5536       CurrentModule->InferExportWildcard = InferExportWildcard;
5537       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5538       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5539       if (DeserializationListener)
5540         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5541 
5542       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5543 
5544       // Clear out data that will be replaced by what is in the module file.
5545       CurrentModule->LinkLibraries.clear();
5546       CurrentModule->ConfigMacros.clear();
5547       CurrentModule->UnresolvedConflicts.clear();
5548       CurrentModule->Conflicts.clear();
5549 
5550       // The module is available unless it's missing a requirement; relevant
5551       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5552       // Missing headers that were present when the module was built do not
5553       // make it unavailable -- if we got this far, this must be an explicitly
5554       // imported module file.
5555       CurrentModule->Requirements.clear();
5556       CurrentModule->MissingHeaders.clear();
5557       CurrentModule->IsUnimportable =
5558           ParentModule && ParentModule->IsUnimportable;
5559       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5560       break;
5561     }
5562 
5563     case SUBMODULE_UMBRELLA_HEADER: {
5564       // FIXME: This doesn't work for framework modules as `Filename` is the
5565       //        name as written in the module file and does not include
5566       //        `Headers/`, so this path will never exist.
5567       std::string Filename = std::string(Blob);
5568       ResolveImportedPath(F, Filename);
5569       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5570         if (!CurrentModule->getUmbrellaHeader()) {
5571           // FIXME: NameAsWritten
5572           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5573         }
5574         // Note that it's too late at this point to return out of date if the
5575         // name from the PCM doesn't match up with the one in the module map,
5576         // but also quite unlikely since we will have already checked the
5577         // modification time and size of the module map file itself.
5578       }
5579       break;
5580     }
5581 
5582     case SUBMODULE_HEADER:
5583     case SUBMODULE_EXCLUDED_HEADER:
5584     case SUBMODULE_PRIVATE_HEADER:
5585       // We lazily associate headers with their modules via the HeaderInfo table.
5586       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5587       // of complete filenames or remove it entirely.
5588       break;
5589 
5590     case SUBMODULE_TEXTUAL_HEADER:
5591     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5592       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5593       // them here.
5594       break;
5595 
5596     case SUBMODULE_TOPHEADER:
5597       CurrentModule->addTopHeaderFilename(Blob);
5598       break;
5599 
5600     case SUBMODULE_UMBRELLA_DIR: {
5601       // See comments in SUBMODULE_UMBRELLA_HEADER
5602       std::string Dirname = std::string(Blob);
5603       ResolveImportedPath(F, Dirname);
5604       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5605         if (!CurrentModule->getUmbrellaDir()) {
5606           // FIXME: NameAsWritten
5607           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5608         }
5609       }
5610       break;
5611     }
5612 
5613     case SUBMODULE_METADATA: {
5614       F.BaseSubmoduleID = getTotalNumSubmodules();
5615       F.LocalNumSubmodules = Record[0];
5616       unsigned LocalBaseSubmoduleID = Record[1];
5617       if (F.LocalNumSubmodules > 0) {
5618         // Introduce the global -> local mapping for submodules within this
5619         // module.
5620         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5621 
5622         // Introduce the local -> global mapping for submodules within this
5623         // module.
5624         F.SubmoduleRemap.insertOrReplace(
5625           std::make_pair(LocalBaseSubmoduleID,
5626                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5627 
5628         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5629       }
5630       break;
5631     }
5632 
5633     case SUBMODULE_IMPORTS:
5634       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5635         UnresolvedModuleRef Unresolved;
5636         Unresolved.File = &F;
5637         Unresolved.Mod = CurrentModule;
5638         Unresolved.ID = Record[Idx];
5639         Unresolved.Kind = UnresolvedModuleRef::Import;
5640         Unresolved.IsWildcard = false;
5641         UnresolvedModuleRefs.push_back(Unresolved);
5642       }
5643       break;
5644 
5645     case SUBMODULE_EXPORTS:
5646       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5647         UnresolvedModuleRef Unresolved;
5648         Unresolved.File = &F;
5649         Unresolved.Mod = CurrentModule;
5650         Unresolved.ID = Record[Idx];
5651         Unresolved.Kind = UnresolvedModuleRef::Export;
5652         Unresolved.IsWildcard = Record[Idx + 1];
5653         UnresolvedModuleRefs.push_back(Unresolved);
5654       }
5655 
5656       // Once we've loaded the set of exports, there's no reason to keep
5657       // the parsed, unresolved exports around.
5658       CurrentModule->UnresolvedExports.clear();
5659       break;
5660 
5661     case SUBMODULE_REQUIRES:
5662       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5663                                     PP.getTargetInfo());
5664       break;
5665 
5666     case SUBMODULE_LINK_LIBRARY:
5667       ModMap.resolveLinkAsDependencies(CurrentModule);
5668       CurrentModule->LinkLibraries.push_back(
5669           Module::LinkLibrary(std::string(Blob), Record[0]));
5670       break;
5671 
5672     case SUBMODULE_CONFIG_MACRO:
5673       CurrentModule->ConfigMacros.push_back(Blob.str());
5674       break;
5675 
5676     case SUBMODULE_CONFLICT: {
5677       UnresolvedModuleRef Unresolved;
5678       Unresolved.File = &F;
5679       Unresolved.Mod = CurrentModule;
5680       Unresolved.ID = Record[0];
5681       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5682       Unresolved.IsWildcard = false;
5683       Unresolved.String = Blob;
5684       UnresolvedModuleRefs.push_back(Unresolved);
5685       break;
5686     }
5687 
5688     case SUBMODULE_INITIALIZERS: {
5689       if (!ContextObj)
5690         break;
5691       SmallVector<uint32_t, 16> Inits;
5692       for (auto &ID : Record)
5693         Inits.push_back(getGlobalDeclID(F, ID));
5694       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5695       break;
5696     }
5697 
5698     case SUBMODULE_EXPORT_AS:
5699       CurrentModule->ExportAsModule = Blob.str();
5700       ModMap.addLinkAsDependency(CurrentModule);
5701       break;
5702     }
5703   }
5704 }
5705 
5706 /// Parse the record that corresponds to a LangOptions data
5707 /// structure.
5708 ///
5709 /// This routine parses the language options from the AST file and then gives
5710 /// them to the AST listener if one is set.
5711 ///
5712 /// \returns true if the listener deems the file unacceptable, false otherwise.
5713 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5714                                      bool Complain,
5715                                      ASTReaderListener &Listener,
5716                                      bool AllowCompatibleDifferences) {
5717   LangOptions LangOpts;
5718   unsigned Idx = 0;
5719 #define LANGOPT(Name, Bits, Default, Description) \
5720   LangOpts.Name = Record[Idx++];
5721 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5722   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5723 #include "clang/Basic/LangOptions.def"
5724 #define SANITIZER(NAME, ID)                                                    \
5725   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5726 #include "clang/Basic/Sanitizers.def"
5727 
5728   for (unsigned N = Record[Idx++]; N; --N)
5729     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5730 
5731   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5732   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5733   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5734 
5735   LangOpts.CurrentModule = ReadString(Record, Idx);
5736 
5737   // Comment options.
5738   for (unsigned N = Record[Idx++]; N; --N) {
5739     LangOpts.CommentOpts.BlockCommandNames.push_back(
5740       ReadString(Record, Idx));
5741   }
5742   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5743 
5744   // OpenMP offloading options.
5745   for (unsigned N = Record[Idx++]; N; --N) {
5746     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5747   }
5748 
5749   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5750 
5751   return Listener.ReadLanguageOptions(LangOpts, Complain,
5752                                       AllowCompatibleDifferences);
5753 }
5754 
5755 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5756                                    ASTReaderListener &Listener,
5757                                    bool AllowCompatibleDifferences) {
5758   unsigned Idx = 0;
5759   TargetOptions TargetOpts;
5760   TargetOpts.Triple = ReadString(Record, Idx);
5761   TargetOpts.CPU = ReadString(Record, Idx);
5762   TargetOpts.TuneCPU = ReadString(Record, Idx);
5763   TargetOpts.ABI = ReadString(Record, Idx);
5764   for (unsigned N = Record[Idx++]; N; --N) {
5765     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5766   }
5767   for (unsigned N = Record[Idx++]; N; --N) {
5768     TargetOpts.Features.push_back(ReadString(Record, Idx));
5769   }
5770 
5771   return Listener.ReadTargetOptions(TargetOpts, Complain,
5772                                     AllowCompatibleDifferences);
5773 }
5774 
5775 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5776                                        ASTReaderListener &Listener) {
5777   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5778   unsigned Idx = 0;
5779 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5780 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5781   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5782 #include "clang/Basic/DiagnosticOptions.def"
5783 
5784   for (unsigned N = Record[Idx++]; N; --N)
5785     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5786   for (unsigned N = Record[Idx++]; N; --N)
5787     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5788 
5789   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5790 }
5791 
5792 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5793                                        ASTReaderListener &Listener) {
5794   FileSystemOptions FSOpts;
5795   unsigned Idx = 0;
5796   FSOpts.WorkingDir = ReadString(Record, Idx);
5797   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5798 }
5799 
5800 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5801                                          bool Complain,
5802                                          ASTReaderListener &Listener) {
5803   HeaderSearchOptions HSOpts;
5804   unsigned Idx = 0;
5805   HSOpts.Sysroot = ReadString(Record, Idx);
5806 
5807   // Include entries.
5808   for (unsigned N = Record[Idx++]; N; --N) {
5809     std::string Path = ReadString(Record, Idx);
5810     frontend::IncludeDirGroup Group
5811       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5812     bool IsFramework = Record[Idx++];
5813     bool IgnoreSysRoot = Record[Idx++];
5814     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5815                                     IgnoreSysRoot);
5816   }
5817 
5818   // System header prefixes.
5819   for (unsigned N = Record[Idx++]; N; --N) {
5820     std::string Prefix = ReadString(Record, Idx);
5821     bool IsSystemHeader = Record[Idx++];
5822     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5823   }
5824 
5825   HSOpts.ResourceDir = ReadString(Record, Idx);
5826   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5827   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5828   HSOpts.DisableModuleHash = Record[Idx++];
5829   HSOpts.ImplicitModuleMaps = Record[Idx++];
5830   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5831   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5832   HSOpts.UseBuiltinIncludes = Record[Idx++];
5833   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5834   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5835   HSOpts.UseLibcxx = Record[Idx++];
5836   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5837 
5838   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5839                                           Complain);
5840 }
5841 
5842 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5843                                          bool Complain,
5844                                          ASTReaderListener &Listener,
5845                                          std::string &SuggestedPredefines) {
5846   PreprocessorOptions PPOpts;
5847   unsigned Idx = 0;
5848 
5849   // Macro definitions/undefs
5850   for (unsigned N = Record[Idx++]; N; --N) {
5851     std::string Macro = ReadString(Record, Idx);
5852     bool IsUndef = Record[Idx++];
5853     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5854   }
5855 
5856   // Includes
5857   for (unsigned N = Record[Idx++]; N; --N) {
5858     PPOpts.Includes.push_back(ReadString(Record, Idx));
5859   }
5860 
5861   // Macro Includes
5862   for (unsigned N = Record[Idx++]; N; --N) {
5863     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5864   }
5865 
5866   PPOpts.UsePredefines = Record[Idx++];
5867   PPOpts.DetailedRecord = Record[Idx++];
5868   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5869   PPOpts.ObjCXXARCStandardLibrary =
5870     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5871   SuggestedPredefines.clear();
5872   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5873                                           SuggestedPredefines);
5874 }
5875 
5876 std::pair<ModuleFile *, unsigned>
5877 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5878   GlobalPreprocessedEntityMapType::iterator
5879   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5880   assert(I != GlobalPreprocessedEntityMap.end() &&
5881          "Corrupted global preprocessed entity map");
5882   ModuleFile *M = I->second;
5883   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5884   return std::make_pair(M, LocalIndex);
5885 }
5886 
5887 llvm::iterator_range<PreprocessingRecord::iterator>
5888 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5889   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5890     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5891                                              Mod.NumPreprocessedEntities);
5892 
5893   return llvm::make_range(PreprocessingRecord::iterator(),
5894                           PreprocessingRecord::iterator());
5895 }
5896 
5897 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5898                                         unsigned int ClientLoadCapabilities) {
5899   return ClientLoadCapabilities & ARR_OutOfDate &&
5900          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
5901 }
5902 
5903 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5904 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5905   return llvm::make_range(
5906       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5907       ModuleDeclIterator(this, &Mod,
5908                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5909 }
5910 
5911 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5912   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5913   assert(I != GlobalSkippedRangeMap.end() &&
5914     "Corrupted global skipped range map");
5915   ModuleFile *M = I->second;
5916   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5917   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5918   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5919   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5920                     TranslateSourceLocation(*M, RawRange.getEnd()));
5921   assert(Range.isValid());
5922   return Range;
5923 }
5924 
5925 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5926   PreprocessedEntityID PPID = Index+1;
5927   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5928   ModuleFile &M = *PPInfo.first;
5929   unsigned LocalIndex = PPInfo.second;
5930   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5931 
5932   if (!PP.getPreprocessingRecord()) {
5933     Error("no preprocessing record");
5934     return nullptr;
5935   }
5936 
5937   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5938   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5939           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5940     Error(std::move(Err));
5941     return nullptr;
5942   }
5943 
5944   Expected<llvm::BitstreamEntry> MaybeEntry =
5945       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5946   if (!MaybeEntry) {
5947     Error(MaybeEntry.takeError());
5948     return nullptr;
5949   }
5950   llvm::BitstreamEntry Entry = MaybeEntry.get();
5951 
5952   if (Entry.Kind != llvm::BitstreamEntry::Record)
5953     return nullptr;
5954 
5955   // Read the record.
5956   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5957                     TranslateSourceLocation(M, PPOffs.getEnd()));
5958   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5959   StringRef Blob;
5960   RecordData Record;
5961   Expected<unsigned> MaybeRecType =
5962       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5963   if (!MaybeRecType) {
5964     Error(MaybeRecType.takeError());
5965     return nullptr;
5966   }
5967   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5968   case PPD_MACRO_EXPANSION: {
5969     bool isBuiltin = Record[0];
5970     IdentifierInfo *Name = nullptr;
5971     MacroDefinitionRecord *Def = nullptr;
5972     if (isBuiltin)
5973       Name = getLocalIdentifier(M, Record[1]);
5974     else {
5975       PreprocessedEntityID GlobalID =
5976           getGlobalPreprocessedEntityID(M, Record[1]);
5977       Def = cast<MacroDefinitionRecord>(
5978           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5979     }
5980 
5981     MacroExpansion *ME;
5982     if (isBuiltin)
5983       ME = new (PPRec) MacroExpansion(Name, Range);
5984     else
5985       ME = new (PPRec) MacroExpansion(Def, Range);
5986 
5987     return ME;
5988   }
5989 
5990   case PPD_MACRO_DEFINITION: {
5991     // Decode the identifier info and then check again; if the macro is
5992     // still defined and associated with the identifier,
5993     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
5994     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
5995 
5996     if (DeserializationListener)
5997       DeserializationListener->MacroDefinitionRead(PPID, MD);
5998 
5999     return MD;
6000   }
6001 
6002   case PPD_INCLUSION_DIRECTIVE: {
6003     const char *FullFileNameStart = Blob.data() + Record[0];
6004     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6005     const FileEntry *File = nullptr;
6006     if (!FullFileName.empty())
6007       if (auto FE = PP.getFileManager().getFile(FullFileName))
6008         File = *FE;
6009 
6010     // FIXME: Stable encoding
6011     InclusionDirective::InclusionKind Kind
6012       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6013     InclusionDirective *ID
6014       = new (PPRec) InclusionDirective(PPRec, Kind,
6015                                        StringRef(Blob.data(), Record[0]),
6016                                        Record[1], Record[3],
6017                                        File,
6018                                        Range);
6019     return ID;
6020   }
6021   }
6022 
6023   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6024 }
6025 
6026 /// Find the next module that contains entities and return the ID
6027 /// of the first entry.
6028 ///
6029 /// \param SLocMapI points at a chunk of a module that contains no
6030 /// preprocessed entities or the entities it contains are not the ones we are
6031 /// looking for.
6032 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6033                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6034   ++SLocMapI;
6035   for (GlobalSLocOffsetMapType::const_iterator
6036          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6037     ModuleFile &M = *SLocMapI->second;
6038     if (M.NumPreprocessedEntities)
6039       return M.BasePreprocessedEntityID;
6040   }
6041 
6042   return getTotalNumPreprocessedEntities();
6043 }
6044 
6045 namespace {
6046 
6047 struct PPEntityComp {
6048   const ASTReader &Reader;
6049   ModuleFile &M;
6050 
6051   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6052 
6053   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6054     SourceLocation LHS = getLoc(L);
6055     SourceLocation RHS = getLoc(R);
6056     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6057   }
6058 
6059   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6060     SourceLocation LHS = getLoc(L);
6061     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6062   }
6063 
6064   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6065     SourceLocation RHS = getLoc(R);
6066     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6067   }
6068 
6069   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6070     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6071   }
6072 };
6073 
6074 } // namespace
6075 
6076 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6077                                                        bool EndsAfter) const {
6078   if (SourceMgr.isLocalSourceLocation(Loc))
6079     return getTotalNumPreprocessedEntities();
6080 
6081   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6082       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6083   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6084          "Corrupted global sloc offset map");
6085 
6086   if (SLocMapI->second->NumPreprocessedEntities == 0)
6087     return findNextPreprocessedEntity(SLocMapI);
6088 
6089   ModuleFile &M = *SLocMapI->second;
6090 
6091   using pp_iterator = const PPEntityOffset *;
6092 
6093   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6094   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6095 
6096   size_t Count = M.NumPreprocessedEntities;
6097   size_t Half;
6098   pp_iterator First = pp_begin;
6099   pp_iterator PPI;
6100 
6101   if (EndsAfter) {
6102     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6103                            PPEntityComp(*this, M));
6104   } else {
6105     // Do a binary search manually instead of using std::lower_bound because
6106     // The end locations of entities may be unordered (when a macro expansion
6107     // is inside another macro argument), but for this case it is not important
6108     // whether we get the first macro expansion or its containing macro.
6109     while (Count > 0) {
6110       Half = Count / 2;
6111       PPI = First;
6112       std::advance(PPI, Half);
6113       if (SourceMgr.isBeforeInTranslationUnit(
6114               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6115         First = PPI;
6116         ++First;
6117         Count = Count - Half - 1;
6118       } else
6119         Count = Half;
6120     }
6121   }
6122 
6123   if (PPI == pp_end)
6124     return findNextPreprocessedEntity(SLocMapI);
6125 
6126   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6127 }
6128 
6129 /// Returns a pair of [Begin, End) indices of preallocated
6130 /// preprocessed entities that \arg Range encompasses.
6131 std::pair<unsigned, unsigned>
6132     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6133   if (Range.isInvalid())
6134     return std::make_pair(0,0);
6135   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6136 
6137   PreprocessedEntityID BeginID =
6138       findPreprocessedEntity(Range.getBegin(), false);
6139   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6140   return std::make_pair(BeginID, EndID);
6141 }
6142 
6143 /// Optionally returns true or false if the preallocated preprocessed
6144 /// entity with index \arg Index came from file \arg FID.
6145 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6146                                                              FileID FID) {
6147   if (FID.isInvalid())
6148     return false;
6149 
6150   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6151   ModuleFile &M = *PPInfo.first;
6152   unsigned LocalIndex = PPInfo.second;
6153   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6154 
6155   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6156   if (Loc.isInvalid())
6157     return false;
6158 
6159   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6160     return true;
6161   else
6162     return false;
6163 }
6164 
6165 namespace {
6166 
6167   /// Visitor used to search for information about a header file.
6168   class HeaderFileInfoVisitor {
6169     const FileEntry *FE;
6170     Optional<HeaderFileInfo> HFI;
6171 
6172   public:
6173     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6174 
6175     bool operator()(ModuleFile &M) {
6176       HeaderFileInfoLookupTable *Table
6177         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6178       if (!Table)
6179         return false;
6180 
6181       // Look in the on-disk hash table for an entry for this file name.
6182       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6183       if (Pos == Table->end())
6184         return false;
6185 
6186       HFI = *Pos;
6187       return true;
6188     }
6189 
6190     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6191   };
6192 
6193 } // namespace
6194 
6195 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6196   HeaderFileInfoVisitor Visitor(FE);
6197   ModuleMgr.visit(Visitor);
6198   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6199     return *HFI;
6200 
6201   return HeaderFileInfo();
6202 }
6203 
6204 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6205   using DiagState = DiagnosticsEngine::DiagState;
6206   SmallVector<DiagState *, 32> DiagStates;
6207 
6208   for (ModuleFile &F : ModuleMgr) {
6209     unsigned Idx = 0;
6210     auto &Record = F.PragmaDiagMappings;
6211     if (Record.empty())
6212       continue;
6213 
6214     DiagStates.clear();
6215 
6216     auto ReadDiagState =
6217         [&](const DiagState &BasedOn, SourceLocation Loc,
6218             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6219       unsigned BackrefID = Record[Idx++];
6220       if (BackrefID != 0)
6221         return DiagStates[BackrefID - 1];
6222 
6223       // A new DiagState was created here.
6224       Diag.DiagStates.push_back(BasedOn);
6225       DiagState *NewState = &Diag.DiagStates.back();
6226       DiagStates.push_back(NewState);
6227       unsigned Size = Record[Idx++];
6228       assert(Idx + Size * 2 <= Record.size() &&
6229              "Invalid data, not enough diag/map pairs");
6230       while (Size--) {
6231         unsigned DiagID = Record[Idx++];
6232         DiagnosticMapping NewMapping =
6233             DiagnosticMapping::deserialize(Record[Idx++]);
6234         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6235           continue;
6236 
6237         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6238 
6239         // If this mapping was specified as a warning but the severity was
6240         // upgraded due to diagnostic settings, simulate the current diagnostic
6241         // settings (and use a warning).
6242         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6243           NewMapping.setSeverity(diag::Severity::Warning);
6244           NewMapping.setUpgradedFromWarning(false);
6245         }
6246 
6247         Mapping = NewMapping;
6248       }
6249       return NewState;
6250     };
6251 
6252     // Read the first state.
6253     DiagState *FirstState;
6254     if (F.Kind == MK_ImplicitModule) {
6255       // Implicitly-built modules are reused with different diagnostic
6256       // settings.  Use the initial diagnostic state from Diag to simulate this
6257       // compilation's diagnostic settings.
6258       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6259       DiagStates.push_back(FirstState);
6260 
6261       // Skip the initial diagnostic state from the serialized module.
6262       assert(Record[1] == 0 &&
6263              "Invalid data, unexpected backref in initial state");
6264       Idx = 3 + Record[2] * 2;
6265       assert(Idx < Record.size() &&
6266              "Invalid data, not enough state change pairs in initial state");
6267     } else if (F.isModule()) {
6268       // For an explicit module, preserve the flags from the module build
6269       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6270       // -Wblah flags.
6271       unsigned Flags = Record[Idx++];
6272       DiagState Initial;
6273       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6274       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6275       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6276       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6277       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6278       Initial.ExtBehavior = (diag::Severity)Flags;
6279       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6280 
6281       assert(F.OriginalSourceFileID.isValid());
6282 
6283       // Set up the root buffer of the module to start with the initial
6284       // diagnostic state of the module itself, to cover files that contain no
6285       // explicit transitions (for which we did not serialize anything).
6286       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6287           .StateTransitions.push_back({FirstState, 0});
6288     } else {
6289       // For prefix ASTs, start with whatever the user configured on the
6290       // command line.
6291       Idx++; // Skip flags.
6292       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6293                                  SourceLocation(), false);
6294     }
6295 
6296     // Read the state transitions.
6297     unsigned NumLocations = Record[Idx++];
6298     while (NumLocations--) {
6299       assert(Idx < Record.size() &&
6300              "Invalid data, missing pragma diagnostic states");
6301       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6302       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6303       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6304       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6305       unsigned Transitions = Record[Idx++];
6306 
6307       // Note that we don't need to set up Parent/ParentOffset here, because
6308       // we won't be changing the diagnostic state within imported FileIDs
6309       // (other than perhaps appending to the main source file, which has no
6310       // parent).
6311       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6312       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6313       for (unsigned I = 0; I != Transitions; ++I) {
6314         unsigned Offset = Record[Idx++];
6315         auto *State =
6316             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6317         F.StateTransitions.push_back({State, Offset});
6318       }
6319     }
6320 
6321     // Read the final state.
6322     assert(Idx < Record.size() &&
6323            "Invalid data, missing final pragma diagnostic state");
6324     SourceLocation CurStateLoc =
6325         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6326     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6327 
6328     if (!F.isModule()) {
6329       Diag.DiagStatesByLoc.CurDiagState = CurState;
6330       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6331 
6332       // Preserve the property that the imaginary root file describes the
6333       // current state.
6334       FileID NullFile;
6335       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6336       if (T.empty())
6337         T.push_back({CurState, 0});
6338       else
6339         T[0].State = CurState;
6340     }
6341 
6342     // Don't try to read these mappings again.
6343     Record.clear();
6344   }
6345 }
6346 
6347 /// Get the correct cursor and offset for loading a type.
6348 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6349   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6350   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6351   ModuleFile *M = I->second;
6352   return RecordLocation(
6353       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6354              M->DeclsBlockStartOffset);
6355 }
6356 
6357 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6358   switch (code) {
6359 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6360   case TYPE_##CODE_ID: return Type::CLASS_ID;
6361 #include "clang/Serialization/TypeBitCodes.def"
6362   default: return llvm::None;
6363   }
6364 }
6365 
6366 /// Read and return the type with the given index..
6367 ///
6368 /// The index is the type ID, shifted and minus the number of predefs. This
6369 /// routine actually reads the record corresponding to the type at the given
6370 /// location. It is a helper routine for GetType, which deals with reading type
6371 /// IDs.
6372 QualType ASTReader::readTypeRecord(unsigned Index) {
6373   assert(ContextObj && "reading type with no AST context");
6374   ASTContext &Context = *ContextObj;
6375   RecordLocation Loc = TypeCursorForIndex(Index);
6376   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6377 
6378   // Keep track of where we are in the stream, then jump back there
6379   // after reading this type.
6380   SavedStreamPosition SavedPosition(DeclsCursor);
6381 
6382   ReadingKindTracker ReadingKind(Read_Type, *this);
6383 
6384   // Note that we are loading a type record.
6385   Deserializing AType(this);
6386 
6387   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6388     Error(std::move(Err));
6389     return QualType();
6390   }
6391   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6392   if (!RawCode) {
6393     Error(RawCode.takeError());
6394     return QualType();
6395   }
6396 
6397   ASTRecordReader Record(*this, *Loc.F);
6398   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6399   if (!Code) {
6400     Error(Code.takeError());
6401     return QualType();
6402   }
6403   if (Code.get() == TYPE_EXT_QUAL) {
6404     QualType baseType = Record.readQualType();
6405     Qualifiers quals = Record.readQualifiers();
6406     return Context.getQualifiedType(baseType, quals);
6407   }
6408 
6409   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6410   if (!maybeClass) {
6411     Error("Unexpected code for type");
6412     return QualType();
6413   }
6414 
6415   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6416   return TypeReader.read(*maybeClass);
6417 }
6418 
6419 namespace clang {
6420 
6421 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6422   ASTRecordReader &Reader;
6423 
6424   SourceLocation readSourceLocation() {
6425     return Reader.readSourceLocation();
6426   }
6427 
6428   TypeSourceInfo *GetTypeSourceInfo() {
6429     return Reader.readTypeSourceInfo();
6430   }
6431 
6432   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6433     return Reader.readNestedNameSpecifierLoc();
6434   }
6435 
6436   Attr *ReadAttr() {
6437     return Reader.readAttr();
6438   }
6439 
6440 public:
6441   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6442 
6443   // We want compile-time assurance that we've enumerated all of
6444   // these, so unfortunately we have to declare them first, then
6445   // define them out-of-line.
6446 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6447 #define TYPELOC(CLASS, PARENT) \
6448   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6449 #include "clang/AST/TypeLocNodes.def"
6450 
6451   void VisitFunctionTypeLoc(FunctionTypeLoc);
6452   void VisitArrayTypeLoc(ArrayTypeLoc);
6453 };
6454 
6455 } // namespace clang
6456 
6457 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6458   // nothing to do
6459 }
6460 
6461 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6462   TL.setBuiltinLoc(readSourceLocation());
6463   if (TL.needsExtraLocalData()) {
6464     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6465     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6466     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6467     TL.setModeAttr(Reader.readInt());
6468   }
6469 }
6470 
6471 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6472   TL.setNameLoc(readSourceLocation());
6473 }
6474 
6475 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6476   TL.setStarLoc(readSourceLocation());
6477 }
6478 
6479 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6480   // nothing to do
6481 }
6482 
6483 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6484   // nothing to do
6485 }
6486 
6487 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6488   TL.setExpansionLoc(readSourceLocation());
6489 }
6490 
6491 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6492   TL.setCaretLoc(readSourceLocation());
6493 }
6494 
6495 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6496   TL.setAmpLoc(readSourceLocation());
6497 }
6498 
6499 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6500   TL.setAmpAmpLoc(readSourceLocation());
6501 }
6502 
6503 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6504   TL.setStarLoc(readSourceLocation());
6505   TL.setClassTInfo(GetTypeSourceInfo());
6506 }
6507 
6508 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6509   TL.setLBracketLoc(readSourceLocation());
6510   TL.setRBracketLoc(readSourceLocation());
6511   if (Reader.readBool())
6512     TL.setSizeExpr(Reader.readExpr());
6513   else
6514     TL.setSizeExpr(nullptr);
6515 }
6516 
6517 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6518   VisitArrayTypeLoc(TL);
6519 }
6520 
6521 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6522   VisitArrayTypeLoc(TL);
6523 }
6524 
6525 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6526   VisitArrayTypeLoc(TL);
6527 }
6528 
6529 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6530                                             DependentSizedArrayTypeLoc TL) {
6531   VisitArrayTypeLoc(TL);
6532 }
6533 
6534 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6535     DependentAddressSpaceTypeLoc TL) {
6536 
6537     TL.setAttrNameLoc(readSourceLocation());
6538     TL.setAttrOperandParensRange(Reader.readSourceRange());
6539     TL.setAttrExprOperand(Reader.readExpr());
6540 }
6541 
6542 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6543                                         DependentSizedExtVectorTypeLoc TL) {
6544   TL.setNameLoc(readSourceLocation());
6545 }
6546 
6547 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6548   TL.setNameLoc(readSourceLocation());
6549 }
6550 
6551 void TypeLocReader::VisitDependentVectorTypeLoc(
6552     DependentVectorTypeLoc TL) {
6553   TL.setNameLoc(readSourceLocation());
6554 }
6555 
6556 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6557   TL.setNameLoc(readSourceLocation());
6558 }
6559 
6560 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6561   TL.setAttrNameLoc(readSourceLocation());
6562   TL.setAttrOperandParensRange(Reader.readSourceRange());
6563   TL.setAttrRowOperand(Reader.readExpr());
6564   TL.setAttrColumnOperand(Reader.readExpr());
6565 }
6566 
6567 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6568     DependentSizedMatrixTypeLoc TL) {
6569   TL.setAttrNameLoc(readSourceLocation());
6570   TL.setAttrOperandParensRange(Reader.readSourceRange());
6571   TL.setAttrRowOperand(Reader.readExpr());
6572   TL.setAttrColumnOperand(Reader.readExpr());
6573 }
6574 
6575 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6576   TL.setLocalRangeBegin(readSourceLocation());
6577   TL.setLParenLoc(readSourceLocation());
6578   TL.setRParenLoc(readSourceLocation());
6579   TL.setExceptionSpecRange(Reader.readSourceRange());
6580   TL.setLocalRangeEnd(readSourceLocation());
6581   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6582     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6583   }
6584 }
6585 
6586 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6587   VisitFunctionTypeLoc(TL);
6588 }
6589 
6590 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6591   VisitFunctionTypeLoc(TL);
6592 }
6593 
6594 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6595   TL.setNameLoc(readSourceLocation());
6596 }
6597 
6598 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6599   TL.setNameLoc(readSourceLocation());
6600 }
6601 
6602 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6603   TL.setTypeofLoc(readSourceLocation());
6604   TL.setLParenLoc(readSourceLocation());
6605   TL.setRParenLoc(readSourceLocation());
6606 }
6607 
6608 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6609   TL.setTypeofLoc(readSourceLocation());
6610   TL.setLParenLoc(readSourceLocation());
6611   TL.setRParenLoc(readSourceLocation());
6612   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6613 }
6614 
6615 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6616   TL.setNameLoc(readSourceLocation());
6617 }
6618 
6619 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6620   TL.setKWLoc(readSourceLocation());
6621   TL.setLParenLoc(readSourceLocation());
6622   TL.setRParenLoc(readSourceLocation());
6623   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6624 }
6625 
6626 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6627   TL.setNameLoc(readSourceLocation());
6628   if (Reader.readBool()) {
6629     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6630     TL.setTemplateKWLoc(readSourceLocation());
6631     TL.setConceptNameLoc(readSourceLocation());
6632     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6633     TL.setLAngleLoc(readSourceLocation());
6634     TL.setRAngleLoc(readSourceLocation());
6635     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6636       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6637                               TL.getTypePtr()->getArg(i).getKind()));
6638   }
6639 }
6640 
6641 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6642     DeducedTemplateSpecializationTypeLoc TL) {
6643   TL.setTemplateNameLoc(readSourceLocation());
6644 }
6645 
6646 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6647   TL.setNameLoc(readSourceLocation());
6648 }
6649 
6650 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6651   TL.setNameLoc(readSourceLocation());
6652 }
6653 
6654 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6655   TL.setAttr(ReadAttr());
6656 }
6657 
6658 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6659   TL.setNameLoc(readSourceLocation());
6660 }
6661 
6662 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6663                                             SubstTemplateTypeParmTypeLoc TL) {
6664   TL.setNameLoc(readSourceLocation());
6665 }
6666 
6667 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6668                                           SubstTemplateTypeParmPackTypeLoc TL) {
6669   TL.setNameLoc(readSourceLocation());
6670 }
6671 
6672 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6673                                            TemplateSpecializationTypeLoc TL) {
6674   TL.setTemplateKeywordLoc(readSourceLocation());
6675   TL.setTemplateNameLoc(readSourceLocation());
6676   TL.setLAngleLoc(readSourceLocation());
6677   TL.setRAngleLoc(readSourceLocation());
6678   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6679     TL.setArgLocInfo(
6680         i,
6681         Reader.readTemplateArgumentLocInfo(
6682           TL.getTypePtr()->getArg(i).getKind()));
6683 }
6684 
6685 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6686   TL.setLParenLoc(readSourceLocation());
6687   TL.setRParenLoc(readSourceLocation());
6688 }
6689 
6690 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6691   TL.setElaboratedKeywordLoc(readSourceLocation());
6692   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6693 }
6694 
6695 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6696   TL.setNameLoc(readSourceLocation());
6697 }
6698 
6699 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6700   TL.setElaboratedKeywordLoc(readSourceLocation());
6701   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6702   TL.setNameLoc(readSourceLocation());
6703 }
6704 
6705 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6706        DependentTemplateSpecializationTypeLoc TL) {
6707   TL.setElaboratedKeywordLoc(readSourceLocation());
6708   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6709   TL.setTemplateKeywordLoc(readSourceLocation());
6710   TL.setTemplateNameLoc(readSourceLocation());
6711   TL.setLAngleLoc(readSourceLocation());
6712   TL.setRAngleLoc(readSourceLocation());
6713   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6714     TL.setArgLocInfo(
6715         I,
6716         Reader.readTemplateArgumentLocInfo(
6717             TL.getTypePtr()->getArg(I).getKind()));
6718 }
6719 
6720 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6721   TL.setEllipsisLoc(readSourceLocation());
6722 }
6723 
6724 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6725   TL.setNameLoc(readSourceLocation());
6726 }
6727 
6728 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6729   if (TL.getNumProtocols()) {
6730     TL.setProtocolLAngleLoc(readSourceLocation());
6731     TL.setProtocolRAngleLoc(readSourceLocation());
6732   }
6733   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6734     TL.setProtocolLoc(i, readSourceLocation());
6735 }
6736 
6737 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6738   TL.setHasBaseTypeAsWritten(Reader.readBool());
6739   TL.setTypeArgsLAngleLoc(readSourceLocation());
6740   TL.setTypeArgsRAngleLoc(readSourceLocation());
6741   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6742     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6743   TL.setProtocolLAngleLoc(readSourceLocation());
6744   TL.setProtocolRAngleLoc(readSourceLocation());
6745   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6746     TL.setProtocolLoc(i, readSourceLocation());
6747 }
6748 
6749 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6750   TL.setStarLoc(readSourceLocation());
6751 }
6752 
6753 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6754   TL.setKWLoc(readSourceLocation());
6755   TL.setLParenLoc(readSourceLocation());
6756   TL.setRParenLoc(readSourceLocation());
6757 }
6758 
6759 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6760   TL.setKWLoc(readSourceLocation());
6761 }
6762 
6763 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6764   TL.setNameLoc(readSourceLocation());
6765 }
6766 void TypeLocReader::VisitDependentExtIntTypeLoc(
6767     clang::DependentExtIntTypeLoc TL) {
6768   TL.setNameLoc(readSourceLocation());
6769 }
6770 
6771 
6772 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6773   TypeLocReader TLR(*this);
6774   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6775     TLR.Visit(TL);
6776 }
6777 
6778 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6779   QualType InfoTy = readType();
6780   if (InfoTy.isNull())
6781     return nullptr;
6782 
6783   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6784   readTypeLoc(TInfo->getTypeLoc());
6785   return TInfo;
6786 }
6787 
6788 QualType ASTReader::GetType(TypeID ID) {
6789   assert(ContextObj && "reading type with no AST context");
6790   ASTContext &Context = *ContextObj;
6791 
6792   unsigned FastQuals = ID & Qualifiers::FastMask;
6793   unsigned Index = ID >> Qualifiers::FastWidth;
6794 
6795   if (Index < NUM_PREDEF_TYPE_IDS) {
6796     QualType T;
6797     switch ((PredefinedTypeIDs)Index) {
6798     case PREDEF_TYPE_NULL_ID:
6799       return QualType();
6800     case PREDEF_TYPE_VOID_ID:
6801       T = Context.VoidTy;
6802       break;
6803     case PREDEF_TYPE_BOOL_ID:
6804       T = Context.BoolTy;
6805       break;
6806     case PREDEF_TYPE_CHAR_U_ID:
6807     case PREDEF_TYPE_CHAR_S_ID:
6808       // FIXME: Check that the signedness of CharTy is correct!
6809       T = Context.CharTy;
6810       break;
6811     case PREDEF_TYPE_UCHAR_ID:
6812       T = Context.UnsignedCharTy;
6813       break;
6814     case PREDEF_TYPE_USHORT_ID:
6815       T = Context.UnsignedShortTy;
6816       break;
6817     case PREDEF_TYPE_UINT_ID:
6818       T = Context.UnsignedIntTy;
6819       break;
6820     case PREDEF_TYPE_ULONG_ID:
6821       T = Context.UnsignedLongTy;
6822       break;
6823     case PREDEF_TYPE_ULONGLONG_ID:
6824       T = Context.UnsignedLongLongTy;
6825       break;
6826     case PREDEF_TYPE_UINT128_ID:
6827       T = Context.UnsignedInt128Ty;
6828       break;
6829     case PREDEF_TYPE_SCHAR_ID:
6830       T = Context.SignedCharTy;
6831       break;
6832     case PREDEF_TYPE_WCHAR_ID:
6833       T = Context.WCharTy;
6834       break;
6835     case PREDEF_TYPE_SHORT_ID:
6836       T = Context.ShortTy;
6837       break;
6838     case PREDEF_TYPE_INT_ID:
6839       T = Context.IntTy;
6840       break;
6841     case PREDEF_TYPE_LONG_ID:
6842       T = Context.LongTy;
6843       break;
6844     case PREDEF_TYPE_LONGLONG_ID:
6845       T = Context.LongLongTy;
6846       break;
6847     case PREDEF_TYPE_INT128_ID:
6848       T = Context.Int128Ty;
6849       break;
6850     case PREDEF_TYPE_BFLOAT16_ID:
6851       T = Context.BFloat16Ty;
6852       break;
6853     case PREDEF_TYPE_HALF_ID:
6854       T = Context.HalfTy;
6855       break;
6856     case PREDEF_TYPE_FLOAT_ID:
6857       T = Context.FloatTy;
6858       break;
6859     case PREDEF_TYPE_DOUBLE_ID:
6860       T = Context.DoubleTy;
6861       break;
6862     case PREDEF_TYPE_LONGDOUBLE_ID:
6863       T = Context.LongDoubleTy;
6864       break;
6865     case PREDEF_TYPE_SHORT_ACCUM_ID:
6866       T = Context.ShortAccumTy;
6867       break;
6868     case PREDEF_TYPE_ACCUM_ID:
6869       T = Context.AccumTy;
6870       break;
6871     case PREDEF_TYPE_LONG_ACCUM_ID:
6872       T = Context.LongAccumTy;
6873       break;
6874     case PREDEF_TYPE_USHORT_ACCUM_ID:
6875       T = Context.UnsignedShortAccumTy;
6876       break;
6877     case PREDEF_TYPE_UACCUM_ID:
6878       T = Context.UnsignedAccumTy;
6879       break;
6880     case PREDEF_TYPE_ULONG_ACCUM_ID:
6881       T = Context.UnsignedLongAccumTy;
6882       break;
6883     case PREDEF_TYPE_SHORT_FRACT_ID:
6884       T = Context.ShortFractTy;
6885       break;
6886     case PREDEF_TYPE_FRACT_ID:
6887       T = Context.FractTy;
6888       break;
6889     case PREDEF_TYPE_LONG_FRACT_ID:
6890       T = Context.LongFractTy;
6891       break;
6892     case PREDEF_TYPE_USHORT_FRACT_ID:
6893       T = Context.UnsignedShortFractTy;
6894       break;
6895     case PREDEF_TYPE_UFRACT_ID:
6896       T = Context.UnsignedFractTy;
6897       break;
6898     case PREDEF_TYPE_ULONG_FRACT_ID:
6899       T = Context.UnsignedLongFractTy;
6900       break;
6901     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6902       T = Context.SatShortAccumTy;
6903       break;
6904     case PREDEF_TYPE_SAT_ACCUM_ID:
6905       T = Context.SatAccumTy;
6906       break;
6907     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6908       T = Context.SatLongAccumTy;
6909       break;
6910     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6911       T = Context.SatUnsignedShortAccumTy;
6912       break;
6913     case PREDEF_TYPE_SAT_UACCUM_ID:
6914       T = Context.SatUnsignedAccumTy;
6915       break;
6916     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6917       T = Context.SatUnsignedLongAccumTy;
6918       break;
6919     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6920       T = Context.SatShortFractTy;
6921       break;
6922     case PREDEF_TYPE_SAT_FRACT_ID:
6923       T = Context.SatFractTy;
6924       break;
6925     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6926       T = Context.SatLongFractTy;
6927       break;
6928     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6929       T = Context.SatUnsignedShortFractTy;
6930       break;
6931     case PREDEF_TYPE_SAT_UFRACT_ID:
6932       T = Context.SatUnsignedFractTy;
6933       break;
6934     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6935       T = Context.SatUnsignedLongFractTy;
6936       break;
6937     case PREDEF_TYPE_FLOAT16_ID:
6938       T = Context.Float16Ty;
6939       break;
6940     case PREDEF_TYPE_FLOAT128_ID:
6941       T = Context.Float128Ty;
6942       break;
6943     case PREDEF_TYPE_IBM128_ID:
6944       T = Context.Ibm128Ty;
6945       break;
6946     case PREDEF_TYPE_OVERLOAD_ID:
6947       T = Context.OverloadTy;
6948       break;
6949     case PREDEF_TYPE_BOUND_MEMBER:
6950       T = Context.BoundMemberTy;
6951       break;
6952     case PREDEF_TYPE_PSEUDO_OBJECT:
6953       T = Context.PseudoObjectTy;
6954       break;
6955     case PREDEF_TYPE_DEPENDENT_ID:
6956       T = Context.DependentTy;
6957       break;
6958     case PREDEF_TYPE_UNKNOWN_ANY:
6959       T = Context.UnknownAnyTy;
6960       break;
6961     case PREDEF_TYPE_NULLPTR_ID:
6962       T = Context.NullPtrTy;
6963       break;
6964     case PREDEF_TYPE_CHAR8_ID:
6965       T = Context.Char8Ty;
6966       break;
6967     case PREDEF_TYPE_CHAR16_ID:
6968       T = Context.Char16Ty;
6969       break;
6970     case PREDEF_TYPE_CHAR32_ID:
6971       T = Context.Char32Ty;
6972       break;
6973     case PREDEF_TYPE_OBJC_ID:
6974       T = Context.ObjCBuiltinIdTy;
6975       break;
6976     case PREDEF_TYPE_OBJC_CLASS:
6977       T = Context.ObjCBuiltinClassTy;
6978       break;
6979     case PREDEF_TYPE_OBJC_SEL:
6980       T = Context.ObjCBuiltinSelTy;
6981       break;
6982 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6983     case PREDEF_TYPE_##Id##_ID: \
6984       T = Context.SingletonId; \
6985       break;
6986 #include "clang/Basic/OpenCLImageTypes.def"
6987 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
6988     case PREDEF_TYPE_##Id##_ID: \
6989       T = Context.Id##Ty; \
6990       break;
6991 #include "clang/Basic/OpenCLExtensionTypes.def"
6992     case PREDEF_TYPE_SAMPLER_ID:
6993       T = Context.OCLSamplerTy;
6994       break;
6995     case PREDEF_TYPE_EVENT_ID:
6996       T = Context.OCLEventTy;
6997       break;
6998     case PREDEF_TYPE_CLK_EVENT_ID:
6999       T = Context.OCLClkEventTy;
7000       break;
7001     case PREDEF_TYPE_QUEUE_ID:
7002       T = Context.OCLQueueTy;
7003       break;
7004     case PREDEF_TYPE_RESERVE_ID_ID:
7005       T = Context.OCLReserveIDTy;
7006       break;
7007     case PREDEF_TYPE_AUTO_DEDUCT:
7008       T = Context.getAutoDeductType();
7009       break;
7010     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7011       T = Context.getAutoRRefDeductType();
7012       break;
7013     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7014       T = Context.ARCUnbridgedCastTy;
7015       break;
7016     case PREDEF_TYPE_BUILTIN_FN:
7017       T = Context.BuiltinFnTy;
7018       break;
7019     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7020       T = Context.IncompleteMatrixIdxTy;
7021       break;
7022     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7023       T = Context.OMPArraySectionTy;
7024       break;
7025     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7026       T = Context.OMPArraySectionTy;
7027       break;
7028     case PREDEF_TYPE_OMP_ITERATOR:
7029       T = Context.OMPIteratorTy;
7030       break;
7031 #define SVE_TYPE(Name, Id, SingletonId) \
7032     case PREDEF_TYPE_##Id##_ID: \
7033       T = Context.SingletonId; \
7034       break;
7035 #include "clang/Basic/AArch64SVEACLETypes.def"
7036 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7037     case PREDEF_TYPE_##Id##_ID: \
7038       T = Context.Id##Ty; \
7039       break;
7040 #include "clang/Basic/PPCTypes.def"
7041 #define RVV_TYPE(Name, Id, SingletonId) \
7042     case PREDEF_TYPE_##Id##_ID: \
7043       T = Context.SingletonId; \
7044       break;
7045 #include "clang/Basic/RISCVVTypes.def"
7046     }
7047 
7048     assert(!T.isNull() && "Unknown predefined type");
7049     return T.withFastQualifiers(FastQuals);
7050   }
7051 
7052   Index -= NUM_PREDEF_TYPE_IDS;
7053   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7054   if (TypesLoaded[Index].isNull()) {
7055     TypesLoaded[Index] = readTypeRecord(Index);
7056     if (TypesLoaded[Index].isNull())
7057       return QualType();
7058 
7059     TypesLoaded[Index]->setFromAST();
7060     if (DeserializationListener)
7061       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7062                                         TypesLoaded[Index]);
7063   }
7064 
7065   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7066 }
7067 
7068 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7069   return GetType(getGlobalTypeID(F, LocalID));
7070 }
7071 
7072 serialization::TypeID
7073 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7074   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7075   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7076 
7077   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7078     return LocalID;
7079 
7080   if (!F.ModuleOffsetMap.empty())
7081     ReadModuleOffsetMap(F);
7082 
7083   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7084     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7085   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7086 
7087   unsigned GlobalIndex = LocalIndex + I->second;
7088   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7089 }
7090 
7091 TemplateArgumentLocInfo
7092 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7093   switch (Kind) {
7094   case TemplateArgument::Expression:
7095     return readExpr();
7096   case TemplateArgument::Type:
7097     return readTypeSourceInfo();
7098   case TemplateArgument::Template: {
7099     NestedNameSpecifierLoc QualifierLoc =
7100       readNestedNameSpecifierLoc();
7101     SourceLocation TemplateNameLoc = readSourceLocation();
7102     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7103                                    TemplateNameLoc, SourceLocation());
7104   }
7105   case TemplateArgument::TemplateExpansion: {
7106     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7107     SourceLocation TemplateNameLoc = readSourceLocation();
7108     SourceLocation EllipsisLoc = readSourceLocation();
7109     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7110                                    TemplateNameLoc, EllipsisLoc);
7111   }
7112   case TemplateArgument::Null:
7113   case TemplateArgument::Integral:
7114   case TemplateArgument::Declaration:
7115   case TemplateArgument::NullPtr:
7116   case TemplateArgument::Pack:
7117     // FIXME: Is this right?
7118     return TemplateArgumentLocInfo();
7119   }
7120   llvm_unreachable("unexpected template argument loc");
7121 }
7122 
7123 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7124   TemplateArgument Arg = readTemplateArgument();
7125 
7126   if (Arg.getKind() == TemplateArgument::Expression) {
7127     if (readBool()) // bool InfoHasSameExpr.
7128       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7129   }
7130   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7131 }
7132 
7133 const ASTTemplateArgumentListInfo *
7134 ASTRecordReader::readASTTemplateArgumentListInfo() {
7135   SourceLocation LAngleLoc = readSourceLocation();
7136   SourceLocation RAngleLoc = readSourceLocation();
7137   unsigned NumArgsAsWritten = readInt();
7138   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7139   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7140     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7141   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7142 }
7143 
7144 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7145   return GetDecl(ID);
7146 }
7147 
7148 void ASTReader::CompleteRedeclChain(const Decl *D) {
7149   if (NumCurrentElementsDeserializing) {
7150     // We arrange to not care about the complete redeclaration chain while we're
7151     // deserializing. Just remember that the AST has marked this one as complete
7152     // but that it's not actually complete yet, so we know we still need to
7153     // complete it later.
7154     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7155     return;
7156   }
7157 
7158   if (!D->getDeclContext()) {
7159     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7160     return;
7161   }
7162 
7163   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7164 
7165   // If this is a named declaration, complete it by looking it up
7166   // within its context.
7167   //
7168   // FIXME: Merging a function definition should merge
7169   // all mergeable entities within it.
7170   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7171       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7172     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7173       if (!getContext().getLangOpts().CPlusPlus &&
7174           isa<TranslationUnitDecl>(DC)) {
7175         // Outside of C++, we don't have a lookup table for the TU, so update
7176         // the identifier instead. (For C++ modules, we don't store decls
7177         // in the serialized identifier table, so we do the lookup in the TU.)
7178         auto *II = Name.getAsIdentifierInfo();
7179         assert(II && "non-identifier name in C?");
7180         if (II->isOutOfDate())
7181           updateOutOfDateIdentifier(*II);
7182       } else
7183         DC->lookup(Name);
7184     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7185       // Find all declarations of this kind from the relevant context.
7186       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7187         auto *DC = cast<DeclContext>(DCDecl);
7188         SmallVector<Decl*, 8> Decls;
7189         FindExternalLexicalDecls(
7190             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7191       }
7192     }
7193   }
7194 
7195   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7196     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7197   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7198     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7199   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7200     if (auto *Template = FD->getPrimaryTemplate())
7201       Template->LoadLazySpecializations();
7202   }
7203 }
7204 
7205 CXXCtorInitializer **
7206 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7207   RecordLocation Loc = getLocalBitOffset(Offset);
7208   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7209   SavedStreamPosition SavedPosition(Cursor);
7210   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7211     Error(std::move(Err));
7212     return nullptr;
7213   }
7214   ReadingKindTracker ReadingKind(Read_Decl, *this);
7215 
7216   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7217   if (!MaybeCode) {
7218     Error(MaybeCode.takeError());
7219     return nullptr;
7220   }
7221   unsigned Code = MaybeCode.get();
7222 
7223   ASTRecordReader Record(*this, *Loc.F);
7224   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7225   if (!MaybeRecCode) {
7226     Error(MaybeRecCode.takeError());
7227     return nullptr;
7228   }
7229   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7230     Error("malformed AST file: missing C++ ctor initializers");
7231     return nullptr;
7232   }
7233 
7234   return Record.readCXXCtorInitializers();
7235 }
7236 
7237 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7238   assert(ContextObj && "reading base specifiers with no AST context");
7239   ASTContext &Context = *ContextObj;
7240 
7241   RecordLocation Loc = getLocalBitOffset(Offset);
7242   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7243   SavedStreamPosition SavedPosition(Cursor);
7244   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7245     Error(std::move(Err));
7246     return nullptr;
7247   }
7248   ReadingKindTracker ReadingKind(Read_Decl, *this);
7249 
7250   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7251   if (!MaybeCode) {
7252     Error(MaybeCode.takeError());
7253     return nullptr;
7254   }
7255   unsigned Code = MaybeCode.get();
7256 
7257   ASTRecordReader Record(*this, *Loc.F);
7258   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7259   if (!MaybeRecCode) {
7260     Error(MaybeCode.takeError());
7261     return nullptr;
7262   }
7263   unsigned RecCode = MaybeRecCode.get();
7264 
7265   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7266     Error("malformed AST file: missing C++ base specifiers");
7267     return nullptr;
7268   }
7269 
7270   unsigned NumBases = Record.readInt();
7271   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7272   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7273   for (unsigned I = 0; I != NumBases; ++I)
7274     Bases[I] = Record.readCXXBaseSpecifier();
7275   return Bases;
7276 }
7277 
7278 serialization::DeclID
7279 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7280   if (LocalID < NUM_PREDEF_DECL_IDS)
7281     return LocalID;
7282 
7283   if (!F.ModuleOffsetMap.empty())
7284     ReadModuleOffsetMap(F);
7285 
7286   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7287     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7288   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7289 
7290   return LocalID + I->second;
7291 }
7292 
7293 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7294                                    ModuleFile &M) const {
7295   // Predefined decls aren't from any module.
7296   if (ID < NUM_PREDEF_DECL_IDS)
7297     return false;
7298 
7299   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7300          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7301 }
7302 
7303 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7304   if (!D->isFromASTFile())
7305     return nullptr;
7306   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7307   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7308   return I->second;
7309 }
7310 
7311 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7312   if (ID < NUM_PREDEF_DECL_IDS)
7313     return SourceLocation();
7314 
7315   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7316 
7317   if (Index > DeclsLoaded.size()) {
7318     Error("declaration ID out-of-range for AST file");
7319     return SourceLocation();
7320   }
7321 
7322   if (Decl *D = DeclsLoaded[Index])
7323     return D->getLocation();
7324 
7325   SourceLocation Loc;
7326   DeclCursorForID(ID, Loc);
7327   return Loc;
7328 }
7329 
7330 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7331   switch (ID) {
7332   case PREDEF_DECL_NULL_ID:
7333     return nullptr;
7334 
7335   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7336     return Context.getTranslationUnitDecl();
7337 
7338   case PREDEF_DECL_OBJC_ID_ID:
7339     return Context.getObjCIdDecl();
7340 
7341   case PREDEF_DECL_OBJC_SEL_ID:
7342     return Context.getObjCSelDecl();
7343 
7344   case PREDEF_DECL_OBJC_CLASS_ID:
7345     return Context.getObjCClassDecl();
7346 
7347   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7348     return Context.getObjCProtocolDecl();
7349 
7350   case PREDEF_DECL_INT_128_ID:
7351     return Context.getInt128Decl();
7352 
7353   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7354     return Context.getUInt128Decl();
7355 
7356   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7357     return Context.getObjCInstanceTypeDecl();
7358 
7359   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7360     return Context.getBuiltinVaListDecl();
7361 
7362   case PREDEF_DECL_VA_LIST_TAG:
7363     return Context.getVaListTagDecl();
7364 
7365   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7366     return Context.getBuiltinMSVaListDecl();
7367 
7368   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7369     return Context.getMSGuidTagDecl();
7370 
7371   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7372     return Context.getExternCContextDecl();
7373 
7374   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7375     return Context.getMakeIntegerSeqDecl();
7376 
7377   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7378     return Context.getCFConstantStringDecl();
7379 
7380   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7381     return Context.getCFConstantStringTagDecl();
7382 
7383   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7384     return Context.getTypePackElementDecl();
7385   }
7386   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7387 }
7388 
7389 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7390   assert(ContextObj && "reading decl with no AST context");
7391   if (ID < NUM_PREDEF_DECL_IDS) {
7392     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7393     if (D) {
7394       // Track that we have merged the declaration with ID \p ID into the
7395       // pre-existing predefined declaration \p D.
7396       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7397       if (Merged.empty())
7398         Merged.push_back(ID);
7399     }
7400     return D;
7401   }
7402 
7403   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7404 
7405   if (Index >= DeclsLoaded.size()) {
7406     assert(0 && "declaration ID out-of-range for AST file");
7407     Error("declaration ID out-of-range for AST file");
7408     return nullptr;
7409   }
7410 
7411   return DeclsLoaded[Index];
7412 }
7413 
7414 Decl *ASTReader::GetDecl(DeclID ID) {
7415   if (ID < NUM_PREDEF_DECL_IDS)
7416     return GetExistingDecl(ID);
7417 
7418   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7419 
7420   if (Index >= DeclsLoaded.size()) {
7421     assert(0 && "declaration ID out-of-range for AST file");
7422     Error("declaration ID out-of-range for AST file");
7423     return nullptr;
7424   }
7425 
7426   if (!DeclsLoaded[Index]) {
7427     ReadDeclRecord(ID);
7428     if (DeserializationListener)
7429       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7430   }
7431 
7432   return DeclsLoaded[Index];
7433 }
7434 
7435 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7436                                                   DeclID GlobalID) {
7437   if (GlobalID < NUM_PREDEF_DECL_IDS)
7438     return GlobalID;
7439 
7440   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7441   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7442   ModuleFile *Owner = I->second;
7443 
7444   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7445     = M.GlobalToLocalDeclIDs.find(Owner);
7446   if (Pos == M.GlobalToLocalDeclIDs.end())
7447     return 0;
7448 
7449   return GlobalID - Owner->BaseDeclID + Pos->second;
7450 }
7451 
7452 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7453                                             const RecordData &Record,
7454                                             unsigned &Idx) {
7455   if (Idx >= Record.size()) {
7456     Error("Corrupted AST file");
7457     return 0;
7458   }
7459 
7460   return getGlobalDeclID(F, Record[Idx++]);
7461 }
7462 
7463 /// Resolve the offset of a statement into a statement.
7464 ///
7465 /// This operation will read a new statement from the external
7466 /// source each time it is called, and is meant to be used via a
7467 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7468 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7469   // Switch case IDs are per Decl.
7470   ClearSwitchCaseIDs();
7471 
7472   // Offset here is a global offset across the entire chain.
7473   RecordLocation Loc = getLocalBitOffset(Offset);
7474   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7475     Error(std::move(Err));
7476     return nullptr;
7477   }
7478   assert(NumCurrentElementsDeserializing == 0 &&
7479          "should not be called while already deserializing");
7480   Deserializing D(this);
7481   return ReadStmtFromStream(*Loc.F);
7482 }
7483 
7484 void ASTReader::FindExternalLexicalDecls(
7485     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7486     SmallVectorImpl<Decl *> &Decls) {
7487   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7488 
7489   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7490     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7491     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7492       auto K = (Decl::Kind)+LexicalDecls[I];
7493       if (!IsKindWeWant(K))
7494         continue;
7495 
7496       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7497 
7498       // Don't add predefined declarations to the lexical context more
7499       // than once.
7500       if (ID < NUM_PREDEF_DECL_IDS) {
7501         if (PredefsVisited[ID])
7502           continue;
7503 
7504         PredefsVisited[ID] = true;
7505       }
7506 
7507       if (Decl *D = GetLocalDecl(*M, ID)) {
7508         assert(D->getKind() == K && "wrong kind for lexical decl");
7509         if (!DC->isDeclInLexicalTraversal(D))
7510           Decls.push_back(D);
7511       }
7512     }
7513   };
7514 
7515   if (isa<TranslationUnitDecl>(DC)) {
7516     for (auto Lexical : TULexicalDecls)
7517       Visit(Lexical.first, Lexical.second);
7518   } else {
7519     auto I = LexicalDecls.find(DC);
7520     if (I != LexicalDecls.end())
7521       Visit(I->second.first, I->second.second);
7522   }
7523 
7524   ++NumLexicalDeclContextsRead;
7525 }
7526 
7527 namespace {
7528 
7529 class DeclIDComp {
7530   ASTReader &Reader;
7531   ModuleFile &Mod;
7532 
7533 public:
7534   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7535 
7536   bool operator()(LocalDeclID L, LocalDeclID R) const {
7537     SourceLocation LHS = getLocation(L);
7538     SourceLocation RHS = getLocation(R);
7539     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7540   }
7541 
7542   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7543     SourceLocation RHS = getLocation(R);
7544     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7545   }
7546 
7547   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7548     SourceLocation LHS = getLocation(L);
7549     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7550   }
7551 
7552   SourceLocation getLocation(LocalDeclID ID) const {
7553     return Reader.getSourceManager().getFileLoc(
7554             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7555   }
7556 };
7557 
7558 } // namespace
7559 
7560 void ASTReader::FindFileRegionDecls(FileID File,
7561                                     unsigned Offset, unsigned Length,
7562                                     SmallVectorImpl<Decl *> &Decls) {
7563   SourceManager &SM = getSourceManager();
7564 
7565   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7566   if (I == FileDeclIDs.end())
7567     return;
7568 
7569   FileDeclsInfo &DInfo = I->second;
7570   if (DInfo.Decls.empty())
7571     return;
7572 
7573   SourceLocation
7574     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7575   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7576 
7577   DeclIDComp DIDComp(*this, *DInfo.Mod);
7578   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7579       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7580   if (BeginIt != DInfo.Decls.begin())
7581     --BeginIt;
7582 
7583   // If we are pointing at a top-level decl inside an objc container, we need
7584   // to backtrack until we find it otherwise we will fail to report that the
7585   // region overlaps with an objc container.
7586   while (BeginIt != DInfo.Decls.begin() &&
7587          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7588              ->isTopLevelDeclInObjCContainer())
7589     --BeginIt;
7590 
7591   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7592       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7593   if (EndIt != DInfo.Decls.end())
7594     ++EndIt;
7595 
7596   for (ArrayRef<serialization::LocalDeclID>::iterator
7597          DIt = BeginIt; DIt != EndIt; ++DIt)
7598     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7599 }
7600 
7601 bool
7602 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7603                                           DeclarationName Name) {
7604   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7605          "DeclContext has no visible decls in storage");
7606   if (!Name)
7607     return false;
7608 
7609   auto It = Lookups.find(DC);
7610   if (It == Lookups.end())
7611     return false;
7612 
7613   Deserializing LookupResults(this);
7614 
7615   // Load the list of declarations.
7616   SmallVector<NamedDecl *, 64> Decls;
7617   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7618   for (DeclID ID : It->second.Table.find(Name)) {
7619     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7620     if (ND->getDeclName() == Name && Found.insert(ND).second)
7621       Decls.push_back(ND);
7622   }
7623 
7624   ++NumVisibleDeclContextsRead;
7625   SetExternalVisibleDeclsForName(DC, Name, Decls);
7626   return !Decls.empty();
7627 }
7628 
7629 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7630   if (!DC->hasExternalVisibleStorage())
7631     return;
7632 
7633   auto It = Lookups.find(DC);
7634   assert(It != Lookups.end() &&
7635          "have external visible storage but no lookup tables");
7636 
7637   DeclsMap Decls;
7638 
7639   for (DeclID ID : It->second.Table.findAll()) {
7640     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7641     Decls[ND->getDeclName()].push_back(ND);
7642   }
7643 
7644   ++NumVisibleDeclContextsRead;
7645 
7646   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7647     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7648   }
7649   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7650 }
7651 
7652 const serialization::reader::DeclContextLookupTable *
7653 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7654   auto I = Lookups.find(Primary);
7655   return I == Lookups.end() ? nullptr : &I->second;
7656 }
7657 
7658 /// Under non-PCH compilation the consumer receives the objc methods
7659 /// before receiving the implementation, and codegen depends on this.
7660 /// We simulate this by deserializing and passing to consumer the methods of the
7661 /// implementation before passing the deserialized implementation decl.
7662 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7663                                        ASTConsumer *Consumer) {
7664   assert(ImplD && Consumer);
7665 
7666   for (auto *I : ImplD->methods())
7667     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7668 
7669   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7670 }
7671 
7672 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7673   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7674     PassObjCImplDeclToConsumer(ImplD, Consumer);
7675   else
7676     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7677 }
7678 
7679 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7680   this->Consumer = Consumer;
7681 
7682   if (Consumer)
7683     PassInterestingDeclsToConsumer();
7684 
7685   if (DeserializationListener)
7686     DeserializationListener->ReaderInitialized(this);
7687 }
7688 
7689 void ASTReader::PrintStats() {
7690   std::fprintf(stderr, "*** AST File Statistics:\n");
7691 
7692   unsigned NumTypesLoaded
7693     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7694                                       QualType());
7695   unsigned NumDeclsLoaded
7696     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7697                                       (Decl *)nullptr);
7698   unsigned NumIdentifiersLoaded
7699     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7700                                             IdentifiersLoaded.end(),
7701                                             (IdentifierInfo *)nullptr);
7702   unsigned NumMacrosLoaded
7703     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7704                                        MacrosLoaded.end(),
7705                                        (MacroInfo *)nullptr);
7706   unsigned NumSelectorsLoaded
7707     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7708                                           SelectorsLoaded.end(),
7709                                           Selector());
7710 
7711   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7712     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7713                  NumSLocEntriesRead, TotalNumSLocEntries,
7714                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7715   if (!TypesLoaded.empty())
7716     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7717                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7718                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7719   if (!DeclsLoaded.empty())
7720     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7721                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7722                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7723   if (!IdentifiersLoaded.empty())
7724     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7725                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7726                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7727   if (!MacrosLoaded.empty())
7728     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7729                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7730                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7731   if (!SelectorsLoaded.empty())
7732     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7733                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7734                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7735   if (TotalNumStatements)
7736     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7737                  NumStatementsRead, TotalNumStatements,
7738                  ((float)NumStatementsRead/TotalNumStatements * 100));
7739   if (TotalNumMacros)
7740     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7741                  NumMacrosRead, TotalNumMacros,
7742                  ((float)NumMacrosRead/TotalNumMacros * 100));
7743   if (TotalLexicalDeclContexts)
7744     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7745                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7746                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7747                   * 100));
7748   if (TotalVisibleDeclContexts)
7749     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7750                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7751                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7752                   * 100));
7753   if (TotalNumMethodPoolEntries)
7754     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7755                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7756                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7757                   * 100));
7758   if (NumMethodPoolLookups)
7759     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7760                  NumMethodPoolHits, NumMethodPoolLookups,
7761                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7762   if (NumMethodPoolTableLookups)
7763     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7764                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7765                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7766                   * 100.0));
7767   if (NumIdentifierLookupHits)
7768     std::fprintf(stderr,
7769                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7770                  NumIdentifierLookupHits, NumIdentifierLookups,
7771                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7772 
7773   if (GlobalIndex) {
7774     std::fprintf(stderr, "\n");
7775     GlobalIndex->printStats();
7776   }
7777 
7778   std::fprintf(stderr, "\n");
7779   dump();
7780   std::fprintf(stderr, "\n");
7781 }
7782 
7783 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7784 LLVM_DUMP_METHOD static void
7785 dumpModuleIDMap(StringRef Name,
7786                 const ContinuousRangeMap<Key, ModuleFile *,
7787                                          InitialCapacity> &Map) {
7788   if (Map.begin() == Map.end())
7789     return;
7790 
7791   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7792 
7793   llvm::errs() << Name << ":\n";
7794   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7795        I != IEnd; ++I) {
7796     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7797       << "\n";
7798   }
7799 }
7800 
7801 LLVM_DUMP_METHOD void ASTReader::dump() {
7802   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7803   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7804   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7805   dumpModuleIDMap("Global type map", GlobalTypeMap);
7806   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7807   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7808   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7809   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7810   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7811   dumpModuleIDMap("Global preprocessed entity map",
7812                   GlobalPreprocessedEntityMap);
7813 
7814   llvm::errs() << "\n*** PCH/Modules Loaded:";
7815   for (ModuleFile &M : ModuleMgr)
7816     M.dump();
7817 }
7818 
7819 /// Return the amount of memory used by memory buffers, breaking down
7820 /// by heap-backed versus mmap'ed memory.
7821 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7822   for (ModuleFile &I : ModuleMgr) {
7823     if (llvm::MemoryBuffer *buf = I.Buffer) {
7824       size_t bytes = buf->getBufferSize();
7825       switch (buf->getBufferKind()) {
7826         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7827           sizes.malloc_bytes += bytes;
7828           break;
7829         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7830           sizes.mmap_bytes += bytes;
7831           break;
7832       }
7833     }
7834   }
7835 }
7836 
7837 void ASTReader::InitializeSema(Sema &S) {
7838   SemaObj = &S;
7839   S.addExternalSource(this);
7840 
7841   // Makes sure any declarations that were deserialized "too early"
7842   // still get added to the identifier's declaration chains.
7843   for (uint64_t ID : PreloadedDeclIDs) {
7844     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7845     pushExternalDeclIntoScope(D, D->getDeclName());
7846   }
7847   PreloadedDeclIDs.clear();
7848 
7849   // FIXME: What happens if these are changed by a module import?
7850   if (!FPPragmaOptions.empty()) {
7851     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7852     FPOptionsOverride NewOverrides =
7853         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7854     SemaObj->CurFPFeatures =
7855         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7856   }
7857 
7858   SemaObj->OpenCLFeatures = OpenCLExtensions;
7859 
7860   UpdateSema();
7861 }
7862 
7863 void ASTReader::UpdateSema() {
7864   assert(SemaObj && "no Sema to update");
7865 
7866   // Load the offsets of the declarations that Sema references.
7867   // They will be lazily deserialized when needed.
7868   if (!SemaDeclRefs.empty()) {
7869     assert(SemaDeclRefs.size() % 3 == 0);
7870     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7871       if (!SemaObj->StdNamespace)
7872         SemaObj->StdNamespace = SemaDeclRefs[I];
7873       if (!SemaObj->StdBadAlloc)
7874         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7875       if (!SemaObj->StdAlignValT)
7876         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7877     }
7878     SemaDeclRefs.clear();
7879   }
7880 
7881   // Update the state of pragmas. Use the same API as if we had encountered the
7882   // pragma in the source.
7883   if(OptimizeOffPragmaLocation.isValid())
7884     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7885   if (PragmaMSStructState != -1)
7886     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7887   if (PointersToMembersPragmaLocation.isValid()) {
7888     SemaObj->ActOnPragmaMSPointersToMembers(
7889         (LangOptions::PragmaMSPointersToMembersKind)
7890             PragmaMSPointersToMembersState,
7891         PointersToMembersPragmaLocation);
7892   }
7893   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7894 
7895   if (PragmaAlignPackCurrentValue) {
7896     // The bottom of the stack might have a default value. It must be adjusted
7897     // to the current value to ensure that the packing state is preserved after
7898     // popping entries that were included/imported from a PCH/module.
7899     bool DropFirst = false;
7900     if (!PragmaAlignPackStack.empty() &&
7901         PragmaAlignPackStack.front().Location.isInvalid()) {
7902       assert(PragmaAlignPackStack.front().Value ==
7903                  SemaObj->AlignPackStack.DefaultValue &&
7904              "Expected a default alignment value");
7905       SemaObj->AlignPackStack.Stack.emplace_back(
7906           PragmaAlignPackStack.front().SlotLabel,
7907           SemaObj->AlignPackStack.CurrentValue,
7908           SemaObj->AlignPackStack.CurrentPragmaLocation,
7909           PragmaAlignPackStack.front().PushLocation);
7910       DropFirst = true;
7911     }
7912     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7913                                  .drop_front(DropFirst ? 1 : 0)) {
7914       SemaObj->AlignPackStack.Stack.emplace_back(
7915           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7916     }
7917     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7918       assert(*PragmaAlignPackCurrentValue ==
7919                  SemaObj->AlignPackStack.DefaultValue &&
7920              "Expected a default align and pack value");
7921       // Keep the current values.
7922     } else {
7923       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7924       SemaObj->AlignPackStack.CurrentPragmaLocation =
7925           PragmaAlignPackCurrentLocation;
7926     }
7927   }
7928   if (FpPragmaCurrentValue) {
7929     // The bottom of the stack might have a default value. It must be adjusted
7930     // to the current value to ensure that fp-pragma state is preserved after
7931     // popping entries that were included/imported from a PCH/module.
7932     bool DropFirst = false;
7933     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7934       assert(FpPragmaStack.front().Value ==
7935                  SemaObj->FpPragmaStack.DefaultValue &&
7936              "Expected a default pragma float_control value");
7937       SemaObj->FpPragmaStack.Stack.emplace_back(
7938           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7939           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7940           FpPragmaStack.front().PushLocation);
7941       DropFirst = true;
7942     }
7943     for (const auto &Entry :
7944          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7945       SemaObj->FpPragmaStack.Stack.emplace_back(
7946           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7947     if (FpPragmaCurrentLocation.isInvalid()) {
7948       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7949              "Expected a default pragma float_control value");
7950       // Keep the current values.
7951     } else {
7952       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7953       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7954     }
7955   }
7956 
7957   // For non-modular AST files, restore visiblity of modules.
7958   for (auto &Import : ImportedModules) {
7959     if (Import.ImportLoc.isInvalid())
7960       continue;
7961     if (Module *Imported = getSubmodule(Import.ID)) {
7962       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7963     }
7964   }
7965 }
7966 
7967 IdentifierInfo *ASTReader::get(StringRef Name) {
7968   // Note that we are loading an identifier.
7969   Deserializing AnIdentifier(this);
7970 
7971   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7972                                   NumIdentifierLookups,
7973                                   NumIdentifierLookupHits);
7974 
7975   // We don't need to do identifier table lookups in C++ modules (we preload
7976   // all interesting declarations, and don't need to use the scope for name
7977   // lookups). Perform the lookup in PCH files, though, since we don't build
7978   // a complete initial identifier table if we're carrying on from a PCH.
7979   if (PP.getLangOpts().CPlusPlus) {
7980     for (auto F : ModuleMgr.pch_modules())
7981       if (Visitor(*F))
7982         break;
7983   } else {
7984     // If there is a global index, look there first to determine which modules
7985     // provably do not have any results for this identifier.
7986     GlobalModuleIndex::HitSet Hits;
7987     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7988     if (!loadGlobalIndex()) {
7989       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7990         HitsPtr = &Hits;
7991       }
7992     }
7993 
7994     ModuleMgr.visit(Visitor, HitsPtr);
7995   }
7996 
7997   IdentifierInfo *II = Visitor.getIdentifierInfo();
7998   markIdentifierUpToDate(II);
7999   return II;
8000 }
8001 
8002 namespace clang {
8003 
8004   /// An identifier-lookup iterator that enumerates all of the
8005   /// identifiers stored within a set of AST files.
8006   class ASTIdentifierIterator : public IdentifierIterator {
8007     /// The AST reader whose identifiers are being enumerated.
8008     const ASTReader &Reader;
8009 
8010     /// The current index into the chain of AST files stored in
8011     /// the AST reader.
8012     unsigned Index;
8013 
8014     /// The current position within the identifier lookup table
8015     /// of the current AST file.
8016     ASTIdentifierLookupTable::key_iterator Current;
8017 
8018     /// The end position within the identifier lookup table of
8019     /// the current AST file.
8020     ASTIdentifierLookupTable::key_iterator End;
8021 
8022     /// Whether to skip any modules in the ASTReader.
8023     bool SkipModules;
8024 
8025   public:
8026     explicit ASTIdentifierIterator(const ASTReader &Reader,
8027                                    bool SkipModules = false);
8028 
8029     StringRef Next() override;
8030   };
8031 
8032 } // namespace clang
8033 
8034 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8035                                              bool SkipModules)
8036     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8037 }
8038 
8039 StringRef ASTIdentifierIterator::Next() {
8040   while (Current == End) {
8041     // If we have exhausted all of our AST files, we're done.
8042     if (Index == 0)
8043       return StringRef();
8044 
8045     --Index;
8046     ModuleFile &F = Reader.ModuleMgr[Index];
8047     if (SkipModules && F.isModule())
8048       continue;
8049 
8050     ASTIdentifierLookupTable *IdTable =
8051         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8052     Current = IdTable->key_begin();
8053     End = IdTable->key_end();
8054   }
8055 
8056   // We have any identifiers remaining in the current AST file; return
8057   // the next one.
8058   StringRef Result = *Current;
8059   ++Current;
8060   return Result;
8061 }
8062 
8063 namespace {
8064 
8065 /// A utility for appending two IdentifierIterators.
8066 class ChainedIdentifierIterator : public IdentifierIterator {
8067   std::unique_ptr<IdentifierIterator> Current;
8068   std::unique_ptr<IdentifierIterator> Queued;
8069 
8070 public:
8071   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8072                             std::unique_ptr<IdentifierIterator> Second)
8073       : Current(std::move(First)), Queued(std::move(Second)) {}
8074 
8075   StringRef Next() override {
8076     if (!Current)
8077       return StringRef();
8078 
8079     StringRef result = Current->Next();
8080     if (!result.empty())
8081       return result;
8082 
8083     // Try the queued iterator, which may itself be empty.
8084     Current.reset();
8085     std::swap(Current, Queued);
8086     return Next();
8087   }
8088 };
8089 
8090 } // namespace
8091 
8092 IdentifierIterator *ASTReader::getIdentifiers() {
8093   if (!loadGlobalIndex()) {
8094     std::unique_ptr<IdentifierIterator> ReaderIter(
8095         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8096     std::unique_ptr<IdentifierIterator> ModulesIter(
8097         GlobalIndex->createIdentifierIterator());
8098     return new ChainedIdentifierIterator(std::move(ReaderIter),
8099                                          std::move(ModulesIter));
8100   }
8101 
8102   return new ASTIdentifierIterator(*this);
8103 }
8104 
8105 namespace clang {
8106 namespace serialization {
8107 
8108   class ReadMethodPoolVisitor {
8109     ASTReader &Reader;
8110     Selector Sel;
8111     unsigned PriorGeneration;
8112     unsigned InstanceBits = 0;
8113     unsigned FactoryBits = 0;
8114     bool InstanceHasMoreThanOneDecl = false;
8115     bool FactoryHasMoreThanOneDecl = false;
8116     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8117     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8118 
8119   public:
8120     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8121                           unsigned PriorGeneration)
8122         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8123 
8124     bool operator()(ModuleFile &M) {
8125       if (!M.SelectorLookupTable)
8126         return false;
8127 
8128       // If we've already searched this module file, skip it now.
8129       if (M.Generation <= PriorGeneration)
8130         return true;
8131 
8132       ++Reader.NumMethodPoolTableLookups;
8133       ASTSelectorLookupTable *PoolTable
8134         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8135       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8136       if (Pos == PoolTable->end())
8137         return false;
8138 
8139       ++Reader.NumMethodPoolTableHits;
8140       ++Reader.NumSelectorsRead;
8141       // FIXME: Not quite happy with the statistics here. We probably should
8142       // disable this tracking when called via LoadSelector.
8143       // Also, should entries without methods count as misses?
8144       ++Reader.NumMethodPoolEntriesRead;
8145       ASTSelectorLookupTrait::data_type Data = *Pos;
8146       if (Reader.DeserializationListener)
8147         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8148 
8149       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8150       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8151       InstanceBits = Data.InstanceBits;
8152       FactoryBits = Data.FactoryBits;
8153       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8154       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8155       return true;
8156     }
8157 
8158     /// Retrieve the instance methods found by this visitor.
8159     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8160       return InstanceMethods;
8161     }
8162 
8163     /// Retrieve the instance methods found by this visitor.
8164     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8165       return FactoryMethods;
8166     }
8167 
8168     unsigned getInstanceBits() const { return InstanceBits; }
8169     unsigned getFactoryBits() const { return FactoryBits; }
8170 
8171     bool instanceHasMoreThanOneDecl() const {
8172       return InstanceHasMoreThanOneDecl;
8173     }
8174 
8175     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8176   };
8177 
8178 } // namespace serialization
8179 } // namespace clang
8180 
8181 /// Add the given set of methods to the method list.
8182 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8183                              ObjCMethodList &List) {
8184   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8185     S.addMethodToGlobalList(&List, Methods[I]);
8186   }
8187 }
8188 
8189 void ASTReader::ReadMethodPool(Selector Sel) {
8190   // Get the selector generation and update it to the current generation.
8191   unsigned &Generation = SelectorGeneration[Sel];
8192   unsigned PriorGeneration = Generation;
8193   Generation = getGeneration();
8194   SelectorOutOfDate[Sel] = false;
8195 
8196   // Search for methods defined with this selector.
8197   ++NumMethodPoolLookups;
8198   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8199   ModuleMgr.visit(Visitor);
8200 
8201   if (Visitor.getInstanceMethods().empty() &&
8202       Visitor.getFactoryMethods().empty())
8203     return;
8204 
8205   ++NumMethodPoolHits;
8206 
8207   if (!getSema())
8208     return;
8209 
8210   Sema &S = *getSema();
8211   Sema::GlobalMethodPool::iterator Pos =
8212       S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethodPool::Lists()))
8213           .first;
8214 
8215   Pos->second.first.setBits(Visitor.getInstanceBits());
8216   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8217   Pos->second.second.setBits(Visitor.getFactoryBits());
8218   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8219 
8220   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8221   // when building a module we keep every method individually and may need to
8222   // update hasMoreThanOneDecl as we add the methods.
8223   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8224   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8225 }
8226 
8227 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8228   if (SelectorOutOfDate[Sel])
8229     ReadMethodPool(Sel);
8230 }
8231 
8232 void ASTReader::ReadKnownNamespaces(
8233                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8234   Namespaces.clear();
8235 
8236   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8237     if (NamespaceDecl *Namespace
8238                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8239       Namespaces.push_back(Namespace);
8240   }
8241 }
8242 
8243 void ASTReader::ReadUndefinedButUsed(
8244     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8245   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8246     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8247     SourceLocation Loc =
8248         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8249     Undefined.insert(std::make_pair(D, Loc));
8250   }
8251 }
8252 
8253 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8254     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8255                                                      Exprs) {
8256   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8257     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8258     uint64_t Count = DelayedDeleteExprs[Idx++];
8259     for (uint64_t C = 0; C < Count; ++C) {
8260       SourceLocation DeleteLoc =
8261           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8262       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8263       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8264     }
8265   }
8266 }
8267 
8268 void ASTReader::ReadTentativeDefinitions(
8269                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8270   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8271     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8272     if (Var)
8273       TentativeDefs.push_back(Var);
8274   }
8275   TentativeDefinitions.clear();
8276 }
8277 
8278 void ASTReader::ReadUnusedFileScopedDecls(
8279                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8280   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8281     DeclaratorDecl *D
8282       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8283     if (D)
8284       Decls.push_back(D);
8285   }
8286   UnusedFileScopedDecls.clear();
8287 }
8288 
8289 void ASTReader::ReadDelegatingConstructors(
8290                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8291   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8292     CXXConstructorDecl *D
8293       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8294     if (D)
8295       Decls.push_back(D);
8296   }
8297   DelegatingCtorDecls.clear();
8298 }
8299 
8300 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8301   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8302     TypedefNameDecl *D
8303       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8304     if (D)
8305       Decls.push_back(D);
8306   }
8307   ExtVectorDecls.clear();
8308 }
8309 
8310 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8311     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8312   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8313        ++I) {
8314     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8315         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8316     if (D)
8317       Decls.insert(D);
8318   }
8319   UnusedLocalTypedefNameCandidates.clear();
8320 }
8321 
8322 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8323     llvm::SmallSetVector<Decl *, 4> &Decls) {
8324   for (auto I : DeclsToCheckForDeferredDiags) {
8325     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8326     if (D)
8327       Decls.insert(D);
8328   }
8329   DeclsToCheckForDeferredDiags.clear();
8330 }
8331 
8332 void ASTReader::ReadReferencedSelectors(
8333        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8334   if (ReferencedSelectorsData.empty())
8335     return;
8336 
8337   // If there are @selector references added them to its pool. This is for
8338   // implementation of -Wselector.
8339   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8340   unsigned I = 0;
8341   while (I < DataSize) {
8342     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8343     SourceLocation SelLoc
8344       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8345     Sels.push_back(std::make_pair(Sel, SelLoc));
8346   }
8347   ReferencedSelectorsData.clear();
8348 }
8349 
8350 void ASTReader::ReadWeakUndeclaredIdentifiers(
8351        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8352   if (WeakUndeclaredIdentifiers.empty())
8353     return;
8354 
8355   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8356     IdentifierInfo *WeakId
8357       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8358     IdentifierInfo *AliasId
8359       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8360     SourceLocation Loc
8361       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8362     bool Used = WeakUndeclaredIdentifiers[I++];
8363     WeakInfo WI(AliasId, Loc);
8364     WI.setUsed(Used);
8365     WeakIDs.push_back(std::make_pair(WeakId, WI));
8366   }
8367   WeakUndeclaredIdentifiers.clear();
8368 }
8369 
8370 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8371   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8372     ExternalVTableUse VT;
8373     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8374     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8375     VT.DefinitionRequired = VTableUses[Idx++];
8376     VTables.push_back(VT);
8377   }
8378 
8379   VTableUses.clear();
8380 }
8381 
8382 void ASTReader::ReadPendingInstantiations(
8383        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8384   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8385     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8386     SourceLocation Loc
8387       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8388 
8389     Pending.push_back(std::make_pair(D, Loc));
8390   }
8391   PendingInstantiations.clear();
8392 }
8393 
8394 void ASTReader::ReadLateParsedTemplates(
8395     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8396         &LPTMap) {
8397   for (auto &LPT : LateParsedTemplates) {
8398     ModuleFile *FMod = LPT.first;
8399     RecordDataImpl &LateParsed = LPT.second;
8400     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8401          /* In loop */) {
8402       FunctionDecl *FD =
8403           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8404 
8405       auto LT = std::make_unique<LateParsedTemplate>();
8406       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8407 
8408       ModuleFile *F = getOwningModuleFile(LT->D);
8409       assert(F && "No module");
8410 
8411       unsigned TokN = LateParsed[Idx++];
8412       LT->Toks.reserve(TokN);
8413       for (unsigned T = 0; T < TokN; ++T)
8414         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8415 
8416       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8417     }
8418   }
8419 
8420   LateParsedTemplates.clear();
8421 }
8422 
8423 void ASTReader::LoadSelector(Selector Sel) {
8424   // It would be complicated to avoid reading the methods anyway. So don't.
8425   ReadMethodPool(Sel);
8426 }
8427 
8428 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8429   assert(ID && "Non-zero identifier ID required");
8430   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8431   IdentifiersLoaded[ID - 1] = II;
8432   if (DeserializationListener)
8433     DeserializationListener->IdentifierRead(ID, II);
8434 }
8435 
8436 /// Set the globally-visible declarations associated with the given
8437 /// identifier.
8438 ///
8439 /// If the AST reader is currently in a state where the given declaration IDs
8440 /// cannot safely be resolved, they are queued until it is safe to resolve
8441 /// them.
8442 ///
8443 /// \param II an IdentifierInfo that refers to one or more globally-visible
8444 /// declarations.
8445 ///
8446 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8447 /// visible at global scope.
8448 ///
8449 /// \param Decls if non-null, this vector will be populated with the set of
8450 /// deserialized declarations. These declarations will not be pushed into
8451 /// scope.
8452 void
8453 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8454                               const SmallVectorImpl<uint32_t> &DeclIDs,
8455                                    SmallVectorImpl<Decl *> *Decls) {
8456   if (NumCurrentElementsDeserializing && !Decls) {
8457     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8458     return;
8459   }
8460 
8461   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8462     if (!SemaObj) {
8463       // Queue this declaration so that it will be added to the
8464       // translation unit scope and identifier's declaration chain
8465       // once a Sema object is known.
8466       PreloadedDeclIDs.push_back(DeclIDs[I]);
8467       continue;
8468     }
8469 
8470     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8471 
8472     // If we're simply supposed to record the declarations, do so now.
8473     if (Decls) {
8474       Decls->push_back(D);
8475       continue;
8476     }
8477 
8478     // Introduce this declaration into the translation-unit scope
8479     // and add it to the declaration chain for this identifier, so
8480     // that (unqualified) name lookup will find it.
8481     pushExternalDeclIntoScope(D, II);
8482   }
8483 }
8484 
8485 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8486   if (ID == 0)
8487     return nullptr;
8488 
8489   if (IdentifiersLoaded.empty()) {
8490     Error("no identifier table in AST file");
8491     return nullptr;
8492   }
8493 
8494   ID -= 1;
8495   if (!IdentifiersLoaded[ID]) {
8496     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8497     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8498     ModuleFile *M = I->second;
8499     unsigned Index = ID - M->BaseIdentifierID;
8500     const unsigned char *Data =
8501         M->IdentifierTableData + M->IdentifierOffsets[Index];
8502 
8503     ASTIdentifierLookupTrait Trait(*this, *M);
8504     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8505     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8506     auto &II = PP.getIdentifierTable().get(Key);
8507     IdentifiersLoaded[ID] = &II;
8508     markIdentifierFromAST(*this,  II);
8509     if (DeserializationListener)
8510       DeserializationListener->IdentifierRead(ID + 1, &II);
8511   }
8512 
8513   return IdentifiersLoaded[ID];
8514 }
8515 
8516 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8517   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8518 }
8519 
8520 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8521   if (LocalID < NUM_PREDEF_IDENT_IDS)
8522     return LocalID;
8523 
8524   if (!M.ModuleOffsetMap.empty())
8525     ReadModuleOffsetMap(M);
8526 
8527   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8528     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8529   assert(I != M.IdentifierRemap.end()
8530          && "Invalid index into identifier index remap");
8531 
8532   return LocalID + I->second;
8533 }
8534 
8535 MacroInfo *ASTReader::getMacro(MacroID ID) {
8536   if (ID == 0)
8537     return nullptr;
8538 
8539   if (MacrosLoaded.empty()) {
8540     Error("no macro table in AST file");
8541     return nullptr;
8542   }
8543 
8544   ID -= NUM_PREDEF_MACRO_IDS;
8545   if (!MacrosLoaded[ID]) {
8546     GlobalMacroMapType::iterator I
8547       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8548     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8549     ModuleFile *M = I->second;
8550     unsigned Index = ID - M->BaseMacroID;
8551     MacrosLoaded[ID] =
8552         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8553 
8554     if (DeserializationListener)
8555       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8556                                          MacrosLoaded[ID]);
8557   }
8558 
8559   return MacrosLoaded[ID];
8560 }
8561 
8562 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8563   if (LocalID < NUM_PREDEF_MACRO_IDS)
8564     return LocalID;
8565 
8566   if (!M.ModuleOffsetMap.empty())
8567     ReadModuleOffsetMap(M);
8568 
8569   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8570     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8571   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8572 
8573   return LocalID + I->second;
8574 }
8575 
8576 serialization::SubmoduleID
8577 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8578   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8579     return LocalID;
8580 
8581   if (!M.ModuleOffsetMap.empty())
8582     ReadModuleOffsetMap(M);
8583 
8584   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8585     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8586   assert(I != M.SubmoduleRemap.end()
8587          && "Invalid index into submodule index remap");
8588 
8589   return LocalID + I->second;
8590 }
8591 
8592 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8593   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8594     assert(GlobalID == 0 && "Unhandled global submodule ID");
8595     return nullptr;
8596   }
8597 
8598   if (GlobalID > SubmodulesLoaded.size()) {
8599     Error("submodule ID out of range in AST file");
8600     return nullptr;
8601   }
8602 
8603   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8604 }
8605 
8606 Module *ASTReader::getModule(unsigned ID) {
8607   return getSubmodule(ID);
8608 }
8609 
8610 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8611   if (ID & 1) {
8612     // It's a module, look it up by submodule ID.
8613     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8614     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8615   } else {
8616     // It's a prefix (preamble, PCH, ...). Look it up by index.
8617     unsigned IndexFromEnd = ID >> 1;
8618     assert(IndexFromEnd && "got reference to unknown module file");
8619     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8620   }
8621 }
8622 
8623 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8624   if (!F)
8625     return 1;
8626 
8627   // For a file representing a module, use the submodule ID of the top-level
8628   // module as the file ID. For any other kind of file, the number of such
8629   // files loaded beforehand will be the same on reload.
8630   // FIXME: Is this true even if we have an explicit module file and a PCH?
8631   if (F->isModule())
8632     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8633 
8634   auto PCHModules = getModuleManager().pch_modules();
8635   auto I = llvm::find(PCHModules, F);
8636   assert(I != PCHModules.end() && "emitting reference to unknown file");
8637   return (I - PCHModules.end()) << 1;
8638 }
8639 
8640 llvm::Optional<ASTSourceDescriptor>
8641 ASTReader::getSourceDescriptor(unsigned ID) {
8642   if (Module *M = getSubmodule(ID))
8643     return ASTSourceDescriptor(*M);
8644 
8645   // If there is only a single PCH, return it instead.
8646   // Chained PCH are not supported.
8647   const auto &PCHChain = ModuleMgr.pch_modules();
8648   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8649     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8650     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8651     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8652     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8653                                MF.Signature);
8654   }
8655   return None;
8656 }
8657 
8658 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8659   auto I = DefinitionSource.find(FD);
8660   if (I == DefinitionSource.end())
8661     return EK_ReplyHazy;
8662   return I->second ? EK_Never : EK_Always;
8663 }
8664 
8665 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8666   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8667 }
8668 
8669 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8670   if (ID == 0)
8671     return Selector();
8672 
8673   if (ID > SelectorsLoaded.size()) {
8674     Error("selector ID out of range in AST file");
8675     return Selector();
8676   }
8677 
8678   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8679     // Load this selector from the selector table.
8680     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8681     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8682     ModuleFile &M = *I->second;
8683     ASTSelectorLookupTrait Trait(*this, M);
8684     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8685     SelectorsLoaded[ID - 1] =
8686       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8687     if (DeserializationListener)
8688       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8689   }
8690 
8691   return SelectorsLoaded[ID - 1];
8692 }
8693 
8694 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8695   return DecodeSelector(ID);
8696 }
8697 
8698 uint32_t ASTReader::GetNumExternalSelectors() {
8699   // ID 0 (the null selector) is considered an external selector.
8700   return getTotalNumSelectors() + 1;
8701 }
8702 
8703 serialization::SelectorID
8704 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8705   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8706     return LocalID;
8707 
8708   if (!M.ModuleOffsetMap.empty())
8709     ReadModuleOffsetMap(M);
8710 
8711   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8712     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8713   assert(I != M.SelectorRemap.end()
8714          && "Invalid index into selector index remap");
8715 
8716   return LocalID + I->second;
8717 }
8718 
8719 DeclarationNameLoc
8720 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8721   switch (Name.getNameKind()) {
8722   case DeclarationName::CXXConstructorName:
8723   case DeclarationName::CXXDestructorName:
8724   case DeclarationName::CXXConversionFunctionName:
8725     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8726 
8727   case DeclarationName::CXXOperatorName:
8728     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8729 
8730   case DeclarationName::CXXLiteralOperatorName:
8731     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8732         readSourceLocation());
8733 
8734   case DeclarationName::Identifier:
8735   case DeclarationName::ObjCZeroArgSelector:
8736   case DeclarationName::ObjCOneArgSelector:
8737   case DeclarationName::ObjCMultiArgSelector:
8738   case DeclarationName::CXXUsingDirective:
8739   case DeclarationName::CXXDeductionGuideName:
8740     break;
8741   }
8742   return DeclarationNameLoc();
8743 }
8744 
8745 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8746   DeclarationNameInfo NameInfo;
8747   NameInfo.setName(readDeclarationName());
8748   NameInfo.setLoc(readSourceLocation());
8749   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8750   return NameInfo;
8751 }
8752 
8753 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8754   Info.QualifierLoc = readNestedNameSpecifierLoc();
8755   unsigned NumTPLists = readInt();
8756   Info.NumTemplParamLists = NumTPLists;
8757   if (NumTPLists) {
8758     Info.TemplParamLists =
8759         new (getContext()) TemplateParameterList *[NumTPLists];
8760     for (unsigned i = 0; i != NumTPLists; ++i)
8761       Info.TemplParamLists[i] = readTemplateParameterList();
8762   }
8763 }
8764 
8765 TemplateParameterList *
8766 ASTRecordReader::readTemplateParameterList() {
8767   SourceLocation TemplateLoc = readSourceLocation();
8768   SourceLocation LAngleLoc = readSourceLocation();
8769   SourceLocation RAngleLoc = readSourceLocation();
8770 
8771   unsigned NumParams = readInt();
8772   SmallVector<NamedDecl *, 16> Params;
8773   Params.reserve(NumParams);
8774   while (NumParams--)
8775     Params.push_back(readDeclAs<NamedDecl>());
8776 
8777   bool HasRequiresClause = readBool();
8778   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8779 
8780   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8781       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8782   return TemplateParams;
8783 }
8784 
8785 void ASTRecordReader::readTemplateArgumentList(
8786                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8787                         bool Canonicalize) {
8788   unsigned NumTemplateArgs = readInt();
8789   TemplArgs.reserve(NumTemplateArgs);
8790   while (NumTemplateArgs--)
8791     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8792 }
8793 
8794 /// Read a UnresolvedSet structure.
8795 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8796   unsigned NumDecls = readInt();
8797   Set.reserve(getContext(), NumDecls);
8798   while (NumDecls--) {
8799     DeclID ID = readDeclID();
8800     AccessSpecifier AS = (AccessSpecifier) readInt();
8801     Set.addLazyDecl(getContext(), ID, AS);
8802   }
8803 }
8804 
8805 CXXBaseSpecifier
8806 ASTRecordReader::readCXXBaseSpecifier() {
8807   bool isVirtual = readBool();
8808   bool isBaseOfClass = readBool();
8809   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8810   bool inheritConstructors = readBool();
8811   TypeSourceInfo *TInfo = readTypeSourceInfo();
8812   SourceRange Range = readSourceRange();
8813   SourceLocation EllipsisLoc = readSourceLocation();
8814   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8815                           EllipsisLoc);
8816   Result.setInheritConstructors(inheritConstructors);
8817   return Result;
8818 }
8819 
8820 CXXCtorInitializer **
8821 ASTRecordReader::readCXXCtorInitializers() {
8822   ASTContext &Context = getContext();
8823   unsigned NumInitializers = readInt();
8824   assert(NumInitializers && "wrote ctor initializers but have no inits");
8825   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8826   for (unsigned i = 0; i != NumInitializers; ++i) {
8827     TypeSourceInfo *TInfo = nullptr;
8828     bool IsBaseVirtual = false;
8829     FieldDecl *Member = nullptr;
8830     IndirectFieldDecl *IndirectMember = nullptr;
8831 
8832     CtorInitializerType Type = (CtorInitializerType) readInt();
8833     switch (Type) {
8834     case CTOR_INITIALIZER_BASE:
8835       TInfo = readTypeSourceInfo();
8836       IsBaseVirtual = readBool();
8837       break;
8838 
8839     case CTOR_INITIALIZER_DELEGATING:
8840       TInfo = readTypeSourceInfo();
8841       break;
8842 
8843      case CTOR_INITIALIZER_MEMBER:
8844       Member = readDeclAs<FieldDecl>();
8845       break;
8846 
8847      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8848       IndirectMember = readDeclAs<IndirectFieldDecl>();
8849       break;
8850     }
8851 
8852     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8853     Expr *Init = readExpr();
8854     SourceLocation LParenLoc = readSourceLocation();
8855     SourceLocation RParenLoc = readSourceLocation();
8856 
8857     CXXCtorInitializer *BOMInit;
8858     if (Type == CTOR_INITIALIZER_BASE)
8859       BOMInit = new (Context)
8860           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8861                              RParenLoc, MemberOrEllipsisLoc);
8862     else if (Type == CTOR_INITIALIZER_DELEGATING)
8863       BOMInit = new (Context)
8864           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8865     else if (Member)
8866       BOMInit = new (Context)
8867           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8868                              Init, RParenLoc);
8869     else
8870       BOMInit = new (Context)
8871           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8872                              LParenLoc, Init, RParenLoc);
8873 
8874     if (/*IsWritten*/readBool()) {
8875       unsigned SourceOrder = readInt();
8876       BOMInit->setSourceOrder(SourceOrder);
8877     }
8878 
8879     CtorInitializers[i] = BOMInit;
8880   }
8881 
8882   return CtorInitializers;
8883 }
8884 
8885 NestedNameSpecifierLoc
8886 ASTRecordReader::readNestedNameSpecifierLoc() {
8887   ASTContext &Context = getContext();
8888   unsigned N = readInt();
8889   NestedNameSpecifierLocBuilder Builder;
8890   for (unsigned I = 0; I != N; ++I) {
8891     auto Kind = readNestedNameSpecifierKind();
8892     switch (Kind) {
8893     case NestedNameSpecifier::Identifier: {
8894       IdentifierInfo *II = readIdentifier();
8895       SourceRange Range = readSourceRange();
8896       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8897       break;
8898     }
8899 
8900     case NestedNameSpecifier::Namespace: {
8901       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8902       SourceRange Range = readSourceRange();
8903       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8904       break;
8905     }
8906 
8907     case NestedNameSpecifier::NamespaceAlias: {
8908       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8909       SourceRange Range = readSourceRange();
8910       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8911       break;
8912     }
8913 
8914     case NestedNameSpecifier::TypeSpec:
8915     case NestedNameSpecifier::TypeSpecWithTemplate: {
8916       bool Template = readBool();
8917       TypeSourceInfo *T = readTypeSourceInfo();
8918       if (!T)
8919         return NestedNameSpecifierLoc();
8920       SourceLocation ColonColonLoc = readSourceLocation();
8921 
8922       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8923       Builder.Extend(Context,
8924                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8925                      T->getTypeLoc(), ColonColonLoc);
8926       break;
8927     }
8928 
8929     case NestedNameSpecifier::Global: {
8930       SourceLocation ColonColonLoc = readSourceLocation();
8931       Builder.MakeGlobal(Context, ColonColonLoc);
8932       break;
8933     }
8934 
8935     case NestedNameSpecifier::Super: {
8936       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8937       SourceRange Range = readSourceRange();
8938       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8939       break;
8940     }
8941     }
8942   }
8943 
8944   return Builder.getWithLocInContext(Context);
8945 }
8946 
8947 SourceRange
8948 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8949                            unsigned &Idx) {
8950   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8951   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8952   return SourceRange(beg, end);
8953 }
8954 
8955 /// Read a floating-point value
8956 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8957   return llvm::APFloat(Sem, readAPInt());
8958 }
8959 
8960 // Read a string
8961 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8962   unsigned Len = Record[Idx++];
8963   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8964   Idx += Len;
8965   return Result;
8966 }
8967 
8968 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8969                                 unsigned &Idx) {
8970   std::string Filename = ReadString(Record, Idx);
8971   ResolveImportedPath(F, Filename);
8972   return Filename;
8973 }
8974 
8975 std::string ASTReader::ReadPath(StringRef BaseDirectory,
8976                                 const RecordData &Record, unsigned &Idx) {
8977   std::string Filename = ReadString(Record, Idx);
8978   if (!BaseDirectory.empty())
8979     ResolveImportedPath(Filename, BaseDirectory);
8980   return Filename;
8981 }
8982 
8983 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8984                                          unsigned &Idx) {
8985   unsigned Major = Record[Idx++];
8986   unsigned Minor = Record[Idx++];
8987   unsigned Subminor = Record[Idx++];
8988   if (Minor == 0)
8989     return VersionTuple(Major);
8990   if (Subminor == 0)
8991     return VersionTuple(Major, Minor - 1);
8992   return VersionTuple(Major, Minor - 1, Subminor - 1);
8993 }
8994 
8995 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
8996                                           const RecordData &Record,
8997                                           unsigned &Idx) {
8998   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
8999   return CXXTemporary::Create(getContext(), Decl);
9000 }
9001 
9002 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9003   return Diag(CurrentImportLoc, DiagID);
9004 }
9005 
9006 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9007   return Diags.Report(Loc, DiagID);
9008 }
9009 
9010 /// Retrieve the identifier table associated with the
9011 /// preprocessor.
9012 IdentifierTable &ASTReader::getIdentifierTable() {
9013   return PP.getIdentifierTable();
9014 }
9015 
9016 /// Record that the given ID maps to the given switch-case
9017 /// statement.
9018 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9019   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9020          "Already have a SwitchCase with this ID");
9021   (*CurrSwitchCaseStmts)[ID] = SC;
9022 }
9023 
9024 /// Retrieve the switch-case statement with the given ID.
9025 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9026   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9027   return (*CurrSwitchCaseStmts)[ID];
9028 }
9029 
9030 void ASTReader::ClearSwitchCaseIDs() {
9031   CurrSwitchCaseStmts->clear();
9032 }
9033 
9034 void ASTReader::ReadComments() {
9035   ASTContext &Context = getContext();
9036   std::vector<RawComment *> Comments;
9037   for (SmallVectorImpl<std::pair<BitstreamCursor,
9038                                  serialization::ModuleFile *>>::iterator
9039        I = CommentsCursors.begin(),
9040        E = CommentsCursors.end();
9041        I != E; ++I) {
9042     Comments.clear();
9043     BitstreamCursor &Cursor = I->first;
9044     serialization::ModuleFile &F = *I->second;
9045     SavedStreamPosition SavedPosition(Cursor);
9046 
9047     RecordData Record;
9048     while (true) {
9049       Expected<llvm::BitstreamEntry> MaybeEntry =
9050           Cursor.advanceSkippingSubblocks(
9051               BitstreamCursor::AF_DontPopBlockAtEnd);
9052       if (!MaybeEntry) {
9053         Error(MaybeEntry.takeError());
9054         return;
9055       }
9056       llvm::BitstreamEntry Entry = MaybeEntry.get();
9057 
9058       switch (Entry.Kind) {
9059       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9060       case llvm::BitstreamEntry::Error:
9061         Error("malformed block record in AST file");
9062         return;
9063       case llvm::BitstreamEntry::EndBlock:
9064         goto NextCursor;
9065       case llvm::BitstreamEntry::Record:
9066         // The interesting case.
9067         break;
9068       }
9069 
9070       // Read a record.
9071       Record.clear();
9072       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9073       if (!MaybeComment) {
9074         Error(MaybeComment.takeError());
9075         return;
9076       }
9077       switch ((CommentRecordTypes)MaybeComment.get()) {
9078       case COMMENTS_RAW_COMMENT: {
9079         unsigned Idx = 0;
9080         SourceRange SR = ReadSourceRange(F, Record, Idx);
9081         RawComment::CommentKind Kind =
9082             (RawComment::CommentKind) Record[Idx++];
9083         bool IsTrailingComment = Record[Idx++];
9084         bool IsAlmostTrailingComment = Record[Idx++];
9085         Comments.push_back(new (Context) RawComment(
9086             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9087         break;
9088       }
9089       }
9090     }
9091   NextCursor:
9092     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9093         FileToOffsetToComment;
9094     for (RawComment *C : Comments) {
9095       SourceLocation CommentLoc = C->getBeginLoc();
9096       if (CommentLoc.isValid()) {
9097         std::pair<FileID, unsigned> Loc =
9098             SourceMgr.getDecomposedLoc(CommentLoc);
9099         if (Loc.first.isValid())
9100           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9101       }
9102     }
9103   }
9104 }
9105 
9106 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9107                                 bool IncludeSystem, bool Complain,
9108                     llvm::function_ref<void(const serialization::InputFile &IF,
9109                                             bool isSystem)> Visitor) {
9110   unsigned NumUserInputs = MF.NumUserInputFiles;
9111   unsigned NumInputs = MF.InputFilesLoaded.size();
9112   assert(NumUserInputs <= NumInputs);
9113   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9114   for (unsigned I = 0; I < N; ++I) {
9115     bool IsSystem = I >= NumUserInputs;
9116     InputFile IF = getInputFile(MF, I+1, Complain);
9117     Visitor(IF, IsSystem);
9118   }
9119 }
9120 
9121 void ASTReader::visitTopLevelModuleMaps(
9122     serialization::ModuleFile &MF,
9123     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9124   unsigned NumInputs = MF.InputFilesLoaded.size();
9125   for (unsigned I = 0; I < NumInputs; ++I) {
9126     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9127     if (IFI.TopLevelModuleMap)
9128       // FIXME: This unnecessarily re-reads the InputFileInfo.
9129       if (auto FE = getInputFile(MF, I + 1).getFile())
9130         Visitor(FE);
9131   }
9132 }
9133 
9134 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9135   // If we know the owning module, use it.
9136   if (Module *M = D->getImportedOwningModule())
9137     return M->getFullModuleName();
9138 
9139   // Otherwise, use the name of the top-level module the decl is within.
9140   if (ModuleFile *M = getOwningModuleFile(D))
9141     return M->ModuleName;
9142 
9143   // Not from a module.
9144   return {};
9145 }
9146 
9147 void ASTReader::finishPendingActions() {
9148   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9149          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9150          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9151          !PendingUpdateRecords.empty()) {
9152     // If any identifiers with corresponding top-level declarations have
9153     // been loaded, load those declarations now.
9154     using TopLevelDeclsMap =
9155         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9156     TopLevelDeclsMap TopLevelDecls;
9157 
9158     while (!PendingIdentifierInfos.empty()) {
9159       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9160       SmallVector<uint32_t, 4> DeclIDs =
9161           std::move(PendingIdentifierInfos.back().second);
9162       PendingIdentifierInfos.pop_back();
9163 
9164       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9165     }
9166 
9167     // Load each function type that we deferred loading because it was a
9168     // deduced type that might refer to a local type declared within itself.
9169     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9170       auto *FD = PendingFunctionTypes[I].first;
9171       FD->setType(GetType(PendingFunctionTypes[I].second));
9172 
9173       // If we gave a function a deduced return type, remember that we need to
9174       // propagate that along the redeclaration chain.
9175       auto *DT = FD->getReturnType()->getContainedDeducedType();
9176       if (DT && DT->isDeduced())
9177         PendingDeducedTypeUpdates.insert(
9178             {FD->getCanonicalDecl(), FD->getReturnType()});
9179     }
9180     PendingFunctionTypes.clear();
9181 
9182     // For each decl chain that we wanted to complete while deserializing, mark
9183     // it as "still needs to be completed".
9184     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9185       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9186     }
9187     PendingIncompleteDeclChains.clear();
9188 
9189     // Load pending declaration chains.
9190     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9191       loadPendingDeclChain(PendingDeclChains[I].first,
9192                            PendingDeclChains[I].second);
9193     PendingDeclChains.clear();
9194 
9195     // Make the most recent of the top-level declarations visible.
9196     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9197            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9198       IdentifierInfo *II = TLD->first;
9199       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9200         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9201       }
9202     }
9203 
9204     // Load any pending macro definitions.
9205     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9206       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9207       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9208       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9209       // Initialize the macro history from chained-PCHs ahead of module imports.
9210       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9211            ++IDIdx) {
9212         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9213         if (!Info.M->isModule())
9214           resolvePendingMacro(II, Info);
9215       }
9216       // Handle module imports.
9217       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9218            ++IDIdx) {
9219         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9220         if (Info.M->isModule())
9221           resolvePendingMacro(II, Info);
9222       }
9223     }
9224     PendingMacroIDs.clear();
9225 
9226     // Wire up the DeclContexts for Decls that we delayed setting until
9227     // recursive loading is completed.
9228     while (!PendingDeclContextInfos.empty()) {
9229       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9230       PendingDeclContextInfos.pop_front();
9231       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9232       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9233       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9234     }
9235 
9236     // Perform any pending declaration updates.
9237     while (!PendingUpdateRecords.empty()) {
9238       auto Update = PendingUpdateRecords.pop_back_val();
9239       ReadingKindTracker ReadingKind(Read_Decl, *this);
9240       loadDeclUpdateRecords(Update);
9241     }
9242   }
9243 
9244   // At this point, all update records for loaded decls are in place, so any
9245   // fake class definitions should have become real.
9246   assert(PendingFakeDefinitionData.empty() &&
9247          "faked up a class definition but never saw the real one");
9248 
9249   // If we deserialized any C++ or Objective-C class definitions, any
9250   // Objective-C protocol definitions, or any redeclarable templates, make sure
9251   // that all redeclarations point to the definitions. Note that this can only
9252   // happen now, after the redeclaration chains have been fully wired.
9253   for (Decl *D : PendingDefinitions) {
9254     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9255       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9256         // Make sure that the TagType points at the definition.
9257         const_cast<TagType*>(TagT)->decl = TD;
9258       }
9259 
9260       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9261         for (auto *R = getMostRecentExistingDecl(RD); R;
9262              R = R->getPreviousDecl()) {
9263           assert((R == D) ==
9264                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9265                  "declaration thinks it's the definition but it isn't");
9266           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9267         }
9268       }
9269 
9270       continue;
9271     }
9272 
9273     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9274       // Make sure that the ObjCInterfaceType points at the definition.
9275       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9276         ->Decl = ID;
9277 
9278       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9279         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9280 
9281       continue;
9282     }
9283 
9284     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9285       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9286         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9287 
9288       continue;
9289     }
9290 
9291     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9292     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9293       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9294   }
9295   PendingDefinitions.clear();
9296 
9297   // Load the bodies of any functions or methods we've encountered. We do
9298   // this now (delayed) so that we can be sure that the declaration chains
9299   // have been fully wired up (hasBody relies on this).
9300   // FIXME: We shouldn't require complete redeclaration chains here.
9301   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9302                                PBEnd = PendingBodies.end();
9303        PB != PBEnd; ++PB) {
9304     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9305       // For a function defined inline within a class template, force the
9306       // canonical definition to be the one inside the canonical definition of
9307       // the template. This ensures that we instantiate from a correct view
9308       // of the template.
9309       //
9310       // Sadly we can't do this more generally: we can't be sure that all
9311       // copies of an arbitrary class definition will have the same members
9312       // defined (eg, some member functions may not be instantiated, and some
9313       // special members may or may not have been implicitly defined).
9314       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9315         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9316           continue;
9317 
9318       // FIXME: Check for =delete/=default?
9319       // FIXME: Complain about ODR violations here?
9320       const FunctionDecl *Defn = nullptr;
9321       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9322         FD->setLazyBody(PB->second);
9323       } else {
9324         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9325         mergeDefinitionVisibility(NonConstDefn, FD);
9326 
9327         if (!FD->isLateTemplateParsed() &&
9328             !NonConstDefn->isLateTemplateParsed() &&
9329             FD->getODRHash() != NonConstDefn->getODRHash()) {
9330           if (!isa<CXXMethodDecl>(FD)) {
9331             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9332           } else if (FD->getLexicalParent()->isFileContext() &&
9333                      NonConstDefn->getLexicalParent()->isFileContext()) {
9334             // Only diagnose out-of-line method definitions.  If they are
9335             // in class definitions, then an error will be generated when
9336             // processing the class bodies.
9337             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9338           }
9339         }
9340       }
9341       continue;
9342     }
9343 
9344     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9345     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9346       MD->setLazyBody(PB->second);
9347   }
9348   PendingBodies.clear();
9349 
9350   // Do some cleanup.
9351   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9352     getContext().deduplicateMergedDefinitonsFor(ND);
9353   PendingMergedDefinitionsToDeduplicate.clear();
9354 }
9355 
9356 void ASTReader::diagnoseOdrViolations() {
9357   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9358       PendingFunctionOdrMergeFailures.empty() &&
9359       PendingEnumOdrMergeFailures.empty())
9360     return;
9361 
9362   // Trigger the import of the full definition of each class that had any
9363   // odr-merging problems, so we can produce better diagnostics for them.
9364   // These updates may in turn find and diagnose some ODR failures, so take
9365   // ownership of the set first.
9366   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9367   PendingOdrMergeFailures.clear();
9368   for (auto &Merge : OdrMergeFailures) {
9369     Merge.first->buildLookup();
9370     Merge.first->decls_begin();
9371     Merge.first->bases_begin();
9372     Merge.first->vbases_begin();
9373     for (auto &RecordPair : Merge.second) {
9374       auto *RD = RecordPair.first;
9375       RD->decls_begin();
9376       RD->bases_begin();
9377       RD->vbases_begin();
9378     }
9379   }
9380 
9381   // Trigger the import of functions.
9382   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9383   PendingFunctionOdrMergeFailures.clear();
9384   for (auto &Merge : FunctionOdrMergeFailures) {
9385     Merge.first->buildLookup();
9386     Merge.first->decls_begin();
9387     Merge.first->getBody();
9388     for (auto &FD : Merge.second) {
9389       FD->buildLookup();
9390       FD->decls_begin();
9391       FD->getBody();
9392     }
9393   }
9394 
9395   // Trigger the import of enums.
9396   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9397   PendingEnumOdrMergeFailures.clear();
9398   for (auto &Merge : EnumOdrMergeFailures) {
9399     Merge.first->decls_begin();
9400     for (auto &Enum : Merge.second) {
9401       Enum->decls_begin();
9402     }
9403   }
9404 
9405   // For each declaration from a merged context, check that the canonical
9406   // definition of that context also contains a declaration of the same
9407   // entity.
9408   //
9409   // Caution: this loop does things that might invalidate iterators into
9410   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9411   while (!PendingOdrMergeChecks.empty()) {
9412     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9413 
9414     // FIXME: Skip over implicit declarations for now. This matters for things
9415     // like implicitly-declared special member functions. This isn't entirely
9416     // correct; we can end up with multiple unmerged declarations of the same
9417     // implicit entity.
9418     if (D->isImplicit())
9419       continue;
9420 
9421     DeclContext *CanonDef = D->getDeclContext();
9422 
9423     bool Found = false;
9424     const Decl *DCanon = D->getCanonicalDecl();
9425 
9426     for (auto RI : D->redecls()) {
9427       if (RI->getLexicalDeclContext() == CanonDef) {
9428         Found = true;
9429         break;
9430       }
9431     }
9432     if (Found)
9433       continue;
9434 
9435     // Quick check failed, time to do the slow thing. Note, we can't just
9436     // look up the name of D in CanonDef here, because the member that is
9437     // in CanonDef might not be found by name lookup (it might have been
9438     // replaced by a more recent declaration in the lookup table), and we
9439     // can't necessarily find it in the redeclaration chain because it might
9440     // be merely mergeable, not redeclarable.
9441     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9442     for (auto *CanonMember : CanonDef->decls()) {
9443       if (CanonMember->getCanonicalDecl() == DCanon) {
9444         // This can happen if the declaration is merely mergeable and not
9445         // actually redeclarable (we looked for redeclarations earlier).
9446         //
9447         // FIXME: We should be able to detect this more efficiently, without
9448         // pulling in all of the members of CanonDef.
9449         Found = true;
9450         break;
9451       }
9452       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9453         if (ND->getDeclName() == D->getDeclName())
9454           Candidates.push_back(ND);
9455     }
9456 
9457     if (!Found) {
9458       // The AST doesn't like TagDecls becoming invalid after they've been
9459       // completed. We only really need to mark FieldDecls as invalid here.
9460       if (!isa<TagDecl>(D))
9461         D->setInvalidDecl();
9462 
9463       // Ensure we don't accidentally recursively enter deserialization while
9464       // we're producing our diagnostic.
9465       Deserializing RecursionGuard(this);
9466 
9467       std::string CanonDefModule =
9468           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9469       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9470         << D << getOwningModuleNameForDiagnostic(D)
9471         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9472 
9473       if (Candidates.empty())
9474         Diag(cast<Decl>(CanonDef)->getLocation(),
9475              diag::note_module_odr_violation_no_possible_decls) << D;
9476       else {
9477         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9478           Diag(Candidates[I]->getLocation(),
9479                diag::note_module_odr_violation_possible_decl)
9480             << Candidates[I];
9481       }
9482 
9483       DiagnosedOdrMergeFailures.insert(CanonDef);
9484     }
9485   }
9486 
9487   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9488       EnumOdrMergeFailures.empty())
9489     return;
9490 
9491   // Ensure we don't accidentally recursively enter deserialization while
9492   // we're producing our diagnostics.
9493   Deserializing RecursionGuard(this);
9494 
9495   // Common code for hashing helpers.
9496   ODRHash Hash;
9497   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9498     Hash.clear();
9499     Hash.AddQualType(Ty);
9500     return Hash.CalculateHash();
9501   };
9502 
9503   auto ComputeODRHash = [&Hash](const Stmt *S) {
9504     assert(S);
9505     Hash.clear();
9506     Hash.AddStmt(S);
9507     return Hash.CalculateHash();
9508   };
9509 
9510   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9511     assert(D);
9512     Hash.clear();
9513     Hash.AddSubDecl(D);
9514     return Hash.CalculateHash();
9515   };
9516 
9517   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9518     Hash.clear();
9519     Hash.AddTemplateArgument(TA);
9520     return Hash.CalculateHash();
9521   };
9522 
9523   auto ComputeTemplateParameterListODRHash =
9524       [&Hash](const TemplateParameterList *TPL) {
9525         assert(TPL);
9526         Hash.clear();
9527         Hash.AddTemplateParameterList(TPL);
9528         return Hash.CalculateHash();
9529       };
9530 
9531   // Used with err_module_odr_violation_mismatch_decl and
9532   // note_module_odr_violation_mismatch_decl
9533   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9534   enum ODRMismatchDecl {
9535     EndOfClass,
9536     PublicSpecifer,
9537     PrivateSpecifer,
9538     ProtectedSpecifer,
9539     StaticAssert,
9540     Field,
9541     CXXMethod,
9542     TypeAlias,
9543     TypeDef,
9544     Var,
9545     Friend,
9546     FunctionTemplate,
9547     Other
9548   };
9549 
9550   // Used with err_module_odr_violation_mismatch_decl_diff and
9551   // note_module_odr_violation_mismatch_decl_diff
9552   enum ODRMismatchDeclDifference {
9553     StaticAssertCondition,
9554     StaticAssertMessage,
9555     StaticAssertOnlyMessage,
9556     FieldName,
9557     FieldTypeName,
9558     FieldSingleBitField,
9559     FieldDifferentWidthBitField,
9560     FieldSingleMutable,
9561     FieldSingleInitializer,
9562     FieldDifferentInitializers,
9563     MethodName,
9564     MethodDeleted,
9565     MethodDefaulted,
9566     MethodVirtual,
9567     MethodStatic,
9568     MethodVolatile,
9569     MethodConst,
9570     MethodInline,
9571     MethodNumberParameters,
9572     MethodParameterType,
9573     MethodParameterName,
9574     MethodParameterSingleDefaultArgument,
9575     MethodParameterDifferentDefaultArgument,
9576     MethodNoTemplateArguments,
9577     MethodDifferentNumberTemplateArguments,
9578     MethodDifferentTemplateArgument,
9579     MethodSingleBody,
9580     MethodDifferentBody,
9581     TypedefName,
9582     TypedefType,
9583     VarName,
9584     VarType,
9585     VarSingleInitializer,
9586     VarDifferentInitializer,
9587     VarConstexpr,
9588     FriendTypeFunction,
9589     FriendType,
9590     FriendFunction,
9591     FunctionTemplateDifferentNumberParameters,
9592     FunctionTemplateParameterDifferentKind,
9593     FunctionTemplateParameterName,
9594     FunctionTemplateParameterSingleDefaultArgument,
9595     FunctionTemplateParameterDifferentDefaultArgument,
9596     FunctionTemplateParameterDifferentType,
9597     FunctionTemplatePackParameter,
9598   };
9599 
9600   // These lambdas have the common portions of the ODR diagnostics.  This
9601   // has the same return as Diag(), so addition parameters can be passed
9602   // in with operator<<
9603   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9604                                  SourceLocation Loc, SourceRange Range,
9605                                  ODRMismatchDeclDifference DiffType) {
9606     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9607            << FirstRecord << FirstModule.empty() << FirstModule << Range
9608            << DiffType;
9609   };
9610   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9611                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9612     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9613            << SecondModule << Range << DiffType;
9614   };
9615 
9616   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9617                        &ComputeQualTypeODRHash, &ComputeODRHash](
9618                           NamedDecl *FirstRecord, StringRef FirstModule,
9619                           StringRef SecondModule, FieldDecl *FirstField,
9620                           FieldDecl *SecondField) {
9621     IdentifierInfo *FirstII = FirstField->getIdentifier();
9622     IdentifierInfo *SecondII = SecondField->getIdentifier();
9623     if (FirstII->getName() != SecondII->getName()) {
9624       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9625                        FirstField->getSourceRange(), FieldName)
9626           << FirstII;
9627       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9628                       SecondField->getSourceRange(), FieldName)
9629           << SecondII;
9630 
9631       return true;
9632     }
9633 
9634     assert(getContext().hasSameType(FirstField->getType(),
9635                                     SecondField->getType()));
9636 
9637     QualType FirstType = FirstField->getType();
9638     QualType SecondType = SecondField->getType();
9639     if (ComputeQualTypeODRHash(FirstType) !=
9640         ComputeQualTypeODRHash(SecondType)) {
9641       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9642                        FirstField->getSourceRange(), FieldTypeName)
9643           << FirstII << FirstType;
9644       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9645                       SecondField->getSourceRange(), FieldTypeName)
9646           << SecondII << SecondType;
9647 
9648       return true;
9649     }
9650 
9651     const bool IsFirstBitField = FirstField->isBitField();
9652     const bool IsSecondBitField = SecondField->isBitField();
9653     if (IsFirstBitField != IsSecondBitField) {
9654       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9655                        FirstField->getSourceRange(), FieldSingleBitField)
9656           << FirstII << IsFirstBitField;
9657       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9658                       SecondField->getSourceRange(), FieldSingleBitField)
9659           << SecondII << IsSecondBitField;
9660       return true;
9661     }
9662 
9663     if (IsFirstBitField && IsSecondBitField) {
9664       unsigned FirstBitWidthHash =
9665           ComputeODRHash(FirstField->getBitWidth());
9666       unsigned SecondBitWidthHash =
9667           ComputeODRHash(SecondField->getBitWidth());
9668       if (FirstBitWidthHash != SecondBitWidthHash) {
9669         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9670                          FirstField->getSourceRange(),
9671                          FieldDifferentWidthBitField)
9672             << FirstII << FirstField->getBitWidth()->getSourceRange();
9673         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9674                         SecondField->getSourceRange(),
9675                         FieldDifferentWidthBitField)
9676             << SecondII << SecondField->getBitWidth()->getSourceRange();
9677         return true;
9678       }
9679     }
9680 
9681     if (!PP.getLangOpts().CPlusPlus)
9682       return false;
9683 
9684     const bool IsFirstMutable = FirstField->isMutable();
9685     const bool IsSecondMutable = SecondField->isMutable();
9686     if (IsFirstMutable != IsSecondMutable) {
9687       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9688                        FirstField->getSourceRange(), FieldSingleMutable)
9689           << FirstII << IsFirstMutable;
9690       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9691                       SecondField->getSourceRange(), FieldSingleMutable)
9692           << SecondII << IsSecondMutable;
9693       return true;
9694     }
9695 
9696     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9697     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9698     if ((!FirstInitializer && SecondInitializer) ||
9699         (FirstInitializer && !SecondInitializer)) {
9700       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9701                        FirstField->getSourceRange(), FieldSingleInitializer)
9702           << FirstII << (FirstInitializer != nullptr);
9703       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9704                       SecondField->getSourceRange(), FieldSingleInitializer)
9705           << SecondII << (SecondInitializer != nullptr);
9706       return true;
9707     }
9708 
9709     if (FirstInitializer && SecondInitializer) {
9710       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9711       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9712       if (FirstInitHash != SecondInitHash) {
9713         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9714                          FirstField->getSourceRange(),
9715                          FieldDifferentInitializers)
9716             << FirstII << FirstInitializer->getSourceRange();
9717         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9718                         SecondField->getSourceRange(),
9719                         FieldDifferentInitializers)
9720             << SecondII << SecondInitializer->getSourceRange();
9721         return true;
9722       }
9723     }
9724 
9725     return false;
9726   };
9727 
9728   auto ODRDiagTypeDefOrAlias =
9729       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9730           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9731           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9732           bool IsTypeAlias) {
9733         auto FirstName = FirstTD->getDeclName();
9734         auto SecondName = SecondTD->getDeclName();
9735         if (FirstName != SecondName) {
9736           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9737                            FirstTD->getSourceRange(), TypedefName)
9738               << IsTypeAlias << FirstName;
9739           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9740                           SecondTD->getSourceRange(), TypedefName)
9741               << IsTypeAlias << SecondName;
9742           return true;
9743         }
9744 
9745         QualType FirstType = FirstTD->getUnderlyingType();
9746         QualType SecondType = SecondTD->getUnderlyingType();
9747         if (ComputeQualTypeODRHash(FirstType) !=
9748             ComputeQualTypeODRHash(SecondType)) {
9749           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9750                            FirstTD->getSourceRange(), TypedefType)
9751               << IsTypeAlias << FirstName << FirstType;
9752           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9753                           SecondTD->getSourceRange(), TypedefType)
9754               << IsTypeAlias << SecondName << SecondType;
9755           return true;
9756         }
9757 
9758         return false;
9759   };
9760 
9761   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9762                      &ComputeQualTypeODRHash, &ComputeODRHash,
9763                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9764                            StringRef SecondModule, VarDecl *FirstVD,
9765                            VarDecl *SecondVD) {
9766     auto FirstName = FirstVD->getDeclName();
9767     auto SecondName = SecondVD->getDeclName();
9768     if (FirstName != SecondName) {
9769       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9770                        FirstVD->getSourceRange(), VarName)
9771           << FirstName;
9772       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9773                       SecondVD->getSourceRange(), VarName)
9774           << SecondName;
9775       return true;
9776     }
9777 
9778     QualType FirstType = FirstVD->getType();
9779     QualType SecondType = SecondVD->getType();
9780     if (ComputeQualTypeODRHash(FirstType) !=
9781         ComputeQualTypeODRHash(SecondType)) {
9782       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9783                        FirstVD->getSourceRange(), VarType)
9784           << FirstName << FirstType;
9785       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9786                       SecondVD->getSourceRange(), VarType)
9787           << SecondName << SecondType;
9788       return true;
9789     }
9790 
9791     if (!PP.getLangOpts().CPlusPlus)
9792       return false;
9793 
9794     const Expr *FirstInit = FirstVD->getInit();
9795     const Expr *SecondInit = SecondVD->getInit();
9796     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9797       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9798                        FirstVD->getSourceRange(), VarSingleInitializer)
9799           << FirstName << (FirstInit == nullptr)
9800           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9801       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9802                       SecondVD->getSourceRange(), VarSingleInitializer)
9803           << SecondName << (SecondInit == nullptr)
9804           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9805       return true;
9806     }
9807 
9808     if (FirstInit && SecondInit &&
9809         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9810       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9811                        FirstVD->getSourceRange(), VarDifferentInitializer)
9812           << FirstName << FirstInit->getSourceRange();
9813       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9814                       SecondVD->getSourceRange(), VarDifferentInitializer)
9815           << SecondName << SecondInit->getSourceRange();
9816       return true;
9817     }
9818 
9819     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9820     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9821     if (FirstIsConstexpr != SecondIsConstexpr) {
9822       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9823                        FirstVD->getSourceRange(), VarConstexpr)
9824           << FirstName << FirstIsConstexpr;
9825       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9826                       SecondVD->getSourceRange(), VarConstexpr)
9827           << SecondName << SecondIsConstexpr;
9828       return true;
9829     }
9830     return false;
9831   };
9832 
9833   auto DifferenceSelector = [](Decl *D) {
9834     assert(D && "valid Decl required");
9835     switch (D->getKind()) {
9836     default:
9837       return Other;
9838     case Decl::AccessSpec:
9839       switch (D->getAccess()) {
9840       case AS_public:
9841         return PublicSpecifer;
9842       case AS_private:
9843         return PrivateSpecifer;
9844       case AS_protected:
9845         return ProtectedSpecifer;
9846       case AS_none:
9847         break;
9848       }
9849       llvm_unreachable("Invalid access specifier");
9850     case Decl::StaticAssert:
9851       return StaticAssert;
9852     case Decl::Field:
9853       return Field;
9854     case Decl::CXXMethod:
9855     case Decl::CXXConstructor:
9856     case Decl::CXXDestructor:
9857       return CXXMethod;
9858     case Decl::TypeAlias:
9859       return TypeAlias;
9860     case Decl::Typedef:
9861       return TypeDef;
9862     case Decl::Var:
9863       return Var;
9864     case Decl::Friend:
9865       return Friend;
9866     case Decl::FunctionTemplate:
9867       return FunctionTemplate;
9868     }
9869   };
9870 
9871   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9872   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9873                                                  RecordDecl *Record,
9874                                                  const DeclContext *DC) {
9875     for (auto *D : Record->decls()) {
9876       if (!ODRHash::isDeclToBeProcessed(D, DC))
9877         continue;
9878       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9879     }
9880   };
9881 
9882   struct DiffResult {
9883     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9884     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9885   };
9886 
9887   // If there is a diagnoseable difference, FirstDiffType and
9888   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9889   // filled in if not EndOfClass.
9890   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9891                                              DeclHashes &SecondHashes) {
9892     DiffResult DR;
9893     auto FirstIt = FirstHashes.begin();
9894     auto SecondIt = SecondHashes.begin();
9895     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9896       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9897           FirstIt->second == SecondIt->second) {
9898         ++FirstIt;
9899         ++SecondIt;
9900         continue;
9901       }
9902 
9903       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9904       DR.SecondDecl =
9905           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9906 
9907       DR.FirstDiffType =
9908           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9909       DR.SecondDiffType =
9910           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9911       return DR;
9912     }
9913     return DR;
9914   };
9915 
9916   // Use this to diagnose that an unexpected Decl was encountered
9917   // or no difference was detected. This causes a generic error
9918   // message to be emitted.
9919   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9920                                       StringRef FirstModule,
9921                                       NamedDecl *SecondRecord,
9922                                       StringRef SecondModule) {
9923     Diag(FirstRecord->getLocation(),
9924          diag::err_module_odr_violation_different_definitions)
9925         << FirstRecord << FirstModule.empty() << FirstModule;
9926 
9927     if (DR.FirstDecl) {
9928       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9929           << FirstRecord << DR.FirstDecl->getSourceRange();
9930     }
9931 
9932     Diag(SecondRecord->getLocation(),
9933          diag::note_module_odr_violation_different_definitions)
9934         << SecondModule;
9935 
9936     if (DR.SecondDecl) {
9937       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9938           << DR.SecondDecl->getSourceRange();
9939     }
9940   };
9941 
9942   auto DiagnoseODRMismatch =
9943       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9944              NamedDecl *SecondRecord, StringRef SecondModule) {
9945         SourceLocation FirstLoc;
9946         SourceRange FirstRange;
9947         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9948         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9949           FirstLoc = FirstTag->getBraceRange().getEnd();
9950         } else {
9951           FirstLoc = DR.FirstDecl->getLocation();
9952           FirstRange = DR.FirstDecl->getSourceRange();
9953         }
9954         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9955             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9956             << DR.FirstDiffType;
9957 
9958         SourceLocation SecondLoc;
9959         SourceRange SecondRange;
9960         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9961         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9962           SecondLoc = SecondTag->getBraceRange().getEnd();
9963         } else {
9964           SecondLoc = DR.SecondDecl->getLocation();
9965           SecondRange = DR.SecondDecl->getSourceRange();
9966         }
9967         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9968             << SecondModule << SecondRange << DR.SecondDiffType;
9969       };
9970 
9971   // Issue any pending ODR-failure diagnostics.
9972   for (auto &Merge : OdrMergeFailures) {
9973     // If we've already pointed out a specific problem with this class, don't
9974     // bother issuing a general "something's different" diagnostic.
9975     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9976       continue;
9977 
9978     bool Diagnosed = false;
9979     CXXRecordDecl *FirstRecord = Merge.first;
9980     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9981     for (auto &RecordPair : Merge.second) {
9982       CXXRecordDecl *SecondRecord = RecordPair.first;
9983       // Multiple different declarations got merged together; tell the user
9984       // where they came from.
9985       if (FirstRecord == SecondRecord)
9986         continue;
9987 
9988       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
9989 
9990       auto *FirstDD = FirstRecord->DefinitionData;
9991       auto *SecondDD = RecordPair.second;
9992 
9993       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
9994 
9995       // Diagnostics from DefinitionData are emitted here.
9996       if (FirstDD != SecondDD) {
9997         enum ODRDefinitionDataDifference {
9998           NumBases,
9999           NumVBases,
10000           BaseType,
10001           BaseVirtual,
10002           BaseAccess,
10003         };
10004         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10005                                  this](SourceLocation Loc, SourceRange Range,
10006                                        ODRDefinitionDataDifference DiffType) {
10007           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10008                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10009                  << DiffType;
10010         };
10011         auto ODRDiagBaseNote = [&SecondModule,
10012                                 this](SourceLocation Loc, SourceRange Range,
10013                                       ODRDefinitionDataDifference DiffType) {
10014           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10015                  << SecondModule << Range << DiffType;
10016         };
10017 
10018         unsigned FirstNumBases = FirstDD->NumBases;
10019         unsigned FirstNumVBases = FirstDD->NumVBases;
10020         unsigned SecondNumBases = SecondDD->NumBases;
10021         unsigned SecondNumVBases = SecondDD->NumVBases;
10022 
10023         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10024           unsigned NumBases = DD->NumBases;
10025           if (NumBases == 0) return SourceRange();
10026           auto bases = DD->bases();
10027           return SourceRange(bases[0].getBeginLoc(),
10028                              bases[NumBases - 1].getEndLoc());
10029         };
10030 
10031         if (FirstNumBases != SecondNumBases) {
10032           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10033                            NumBases)
10034               << FirstNumBases;
10035           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10036                           NumBases)
10037               << SecondNumBases;
10038           Diagnosed = true;
10039           break;
10040         }
10041 
10042         if (FirstNumVBases != SecondNumVBases) {
10043           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10044                            NumVBases)
10045               << FirstNumVBases;
10046           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10047                           NumVBases)
10048               << SecondNumVBases;
10049           Diagnosed = true;
10050           break;
10051         }
10052 
10053         auto FirstBases = FirstDD->bases();
10054         auto SecondBases = SecondDD->bases();
10055         unsigned i = 0;
10056         for (i = 0; i < FirstNumBases; ++i) {
10057           auto FirstBase = FirstBases[i];
10058           auto SecondBase = SecondBases[i];
10059           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10060               ComputeQualTypeODRHash(SecondBase.getType())) {
10061             ODRDiagBaseError(FirstRecord->getLocation(),
10062                              FirstBase.getSourceRange(), BaseType)
10063                 << (i + 1) << FirstBase.getType();
10064             ODRDiagBaseNote(SecondRecord->getLocation(),
10065                             SecondBase.getSourceRange(), BaseType)
10066                 << (i + 1) << SecondBase.getType();
10067             break;
10068           }
10069 
10070           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10071             ODRDiagBaseError(FirstRecord->getLocation(),
10072                              FirstBase.getSourceRange(), BaseVirtual)
10073                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10074             ODRDiagBaseNote(SecondRecord->getLocation(),
10075                             SecondBase.getSourceRange(), BaseVirtual)
10076                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10077             break;
10078           }
10079 
10080           if (FirstBase.getAccessSpecifierAsWritten() !=
10081               SecondBase.getAccessSpecifierAsWritten()) {
10082             ODRDiagBaseError(FirstRecord->getLocation(),
10083                              FirstBase.getSourceRange(), BaseAccess)
10084                 << (i + 1) << FirstBase.getType()
10085                 << (int)FirstBase.getAccessSpecifierAsWritten();
10086             ODRDiagBaseNote(SecondRecord->getLocation(),
10087                             SecondBase.getSourceRange(), BaseAccess)
10088                 << (i + 1) << SecondBase.getType()
10089                 << (int)SecondBase.getAccessSpecifierAsWritten();
10090             break;
10091           }
10092         }
10093 
10094         if (i != FirstNumBases) {
10095           Diagnosed = true;
10096           break;
10097         }
10098       }
10099 
10100       const ClassTemplateDecl *FirstTemplate =
10101           FirstRecord->getDescribedClassTemplate();
10102       const ClassTemplateDecl *SecondTemplate =
10103           SecondRecord->getDescribedClassTemplate();
10104 
10105       assert(!FirstTemplate == !SecondTemplate &&
10106              "Both pointers should be null or non-null");
10107 
10108       enum ODRTemplateDifference {
10109         ParamEmptyName,
10110         ParamName,
10111         ParamSingleDefaultArgument,
10112         ParamDifferentDefaultArgument,
10113       };
10114 
10115       if (FirstTemplate && SecondTemplate) {
10116         DeclHashes FirstTemplateHashes;
10117         DeclHashes SecondTemplateHashes;
10118 
10119         auto PopulateTemplateParameterHashs =
10120             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10121                                      const ClassTemplateDecl *TD) {
10122               for (auto *D : TD->getTemplateParameters()->asArray()) {
10123                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10124               }
10125             };
10126 
10127         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10128         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10129 
10130         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10131                "Number of template parameters should be equal.");
10132 
10133         auto FirstIt = FirstTemplateHashes.begin();
10134         auto FirstEnd = FirstTemplateHashes.end();
10135         auto SecondIt = SecondTemplateHashes.begin();
10136         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10137           if (FirstIt->second == SecondIt->second)
10138             continue;
10139 
10140           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10141                                           SourceLocation Loc, SourceRange Range,
10142                                           ODRTemplateDifference DiffType) {
10143             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10144                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10145                    << DiffType;
10146           };
10147           auto ODRDiagTemplateNote = [&SecondModule, this](
10148                                          SourceLocation Loc, SourceRange Range,
10149                                          ODRTemplateDifference DiffType) {
10150             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10151                    << SecondModule << Range << DiffType;
10152           };
10153 
10154           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10155           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10156 
10157           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10158                  "Parameter Decl's should be the same kind.");
10159 
10160           DeclarationName FirstName = FirstDecl->getDeclName();
10161           DeclarationName SecondName = SecondDecl->getDeclName();
10162 
10163           if (FirstName != SecondName) {
10164             const bool FirstNameEmpty =
10165                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10166             const bool SecondNameEmpty =
10167                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10168             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10169                    "Both template parameters cannot be unnamed.");
10170             ODRDiagTemplateError(FirstDecl->getLocation(),
10171                                  FirstDecl->getSourceRange(),
10172                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10173                 << FirstName;
10174             ODRDiagTemplateNote(SecondDecl->getLocation(),
10175                                 SecondDecl->getSourceRange(),
10176                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10177                 << SecondName;
10178             break;
10179           }
10180 
10181           switch (FirstDecl->getKind()) {
10182           default:
10183             llvm_unreachable("Invalid template parameter type.");
10184           case Decl::TemplateTypeParm: {
10185             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10186             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10187             const bool HasFirstDefaultArgument =
10188                 FirstParam->hasDefaultArgument() &&
10189                 !FirstParam->defaultArgumentWasInherited();
10190             const bool HasSecondDefaultArgument =
10191                 SecondParam->hasDefaultArgument() &&
10192                 !SecondParam->defaultArgumentWasInherited();
10193 
10194             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10195               ODRDiagTemplateError(FirstDecl->getLocation(),
10196                                    FirstDecl->getSourceRange(),
10197                                    ParamSingleDefaultArgument)
10198                   << HasFirstDefaultArgument;
10199               ODRDiagTemplateNote(SecondDecl->getLocation(),
10200                                   SecondDecl->getSourceRange(),
10201                                   ParamSingleDefaultArgument)
10202                   << HasSecondDefaultArgument;
10203               break;
10204             }
10205 
10206             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10207                    "Expecting default arguments.");
10208 
10209             ODRDiagTemplateError(FirstDecl->getLocation(),
10210                                  FirstDecl->getSourceRange(),
10211                                  ParamDifferentDefaultArgument);
10212             ODRDiagTemplateNote(SecondDecl->getLocation(),
10213                                 SecondDecl->getSourceRange(),
10214                                 ParamDifferentDefaultArgument);
10215 
10216             break;
10217           }
10218           case Decl::NonTypeTemplateParm: {
10219             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10220             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10221             const bool HasFirstDefaultArgument =
10222                 FirstParam->hasDefaultArgument() &&
10223                 !FirstParam->defaultArgumentWasInherited();
10224             const bool HasSecondDefaultArgument =
10225                 SecondParam->hasDefaultArgument() &&
10226                 !SecondParam->defaultArgumentWasInherited();
10227 
10228             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10229               ODRDiagTemplateError(FirstDecl->getLocation(),
10230                                    FirstDecl->getSourceRange(),
10231                                    ParamSingleDefaultArgument)
10232                   << HasFirstDefaultArgument;
10233               ODRDiagTemplateNote(SecondDecl->getLocation(),
10234                                   SecondDecl->getSourceRange(),
10235                                   ParamSingleDefaultArgument)
10236                   << HasSecondDefaultArgument;
10237               break;
10238             }
10239 
10240             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10241                    "Expecting default arguments.");
10242 
10243             ODRDiagTemplateError(FirstDecl->getLocation(),
10244                                  FirstDecl->getSourceRange(),
10245                                  ParamDifferentDefaultArgument);
10246             ODRDiagTemplateNote(SecondDecl->getLocation(),
10247                                 SecondDecl->getSourceRange(),
10248                                 ParamDifferentDefaultArgument);
10249 
10250             break;
10251           }
10252           case Decl::TemplateTemplateParm: {
10253             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10254             const auto *SecondParam =
10255                 cast<TemplateTemplateParmDecl>(SecondDecl);
10256             const bool HasFirstDefaultArgument =
10257                 FirstParam->hasDefaultArgument() &&
10258                 !FirstParam->defaultArgumentWasInherited();
10259             const bool HasSecondDefaultArgument =
10260                 SecondParam->hasDefaultArgument() &&
10261                 !SecondParam->defaultArgumentWasInherited();
10262 
10263             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10264               ODRDiagTemplateError(FirstDecl->getLocation(),
10265                                    FirstDecl->getSourceRange(),
10266                                    ParamSingleDefaultArgument)
10267                   << HasFirstDefaultArgument;
10268               ODRDiagTemplateNote(SecondDecl->getLocation(),
10269                                   SecondDecl->getSourceRange(),
10270                                   ParamSingleDefaultArgument)
10271                   << HasSecondDefaultArgument;
10272               break;
10273             }
10274 
10275             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10276                    "Expecting default arguments.");
10277 
10278             ODRDiagTemplateError(FirstDecl->getLocation(),
10279                                  FirstDecl->getSourceRange(),
10280                                  ParamDifferentDefaultArgument);
10281             ODRDiagTemplateNote(SecondDecl->getLocation(),
10282                                 SecondDecl->getSourceRange(),
10283                                 ParamDifferentDefaultArgument);
10284 
10285             break;
10286           }
10287           }
10288 
10289           break;
10290         }
10291 
10292         if (FirstIt != FirstEnd) {
10293           Diagnosed = true;
10294           break;
10295         }
10296       }
10297 
10298       DeclHashes FirstHashes;
10299       DeclHashes SecondHashes;
10300       const DeclContext *DC = FirstRecord;
10301       PopulateHashes(FirstHashes, FirstRecord, DC);
10302       PopulateHashes(SecondHashes, SecondRecord, DC);
10303 
10304       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10305       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10306       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10307       Decl *FirstDecl = DR.FirstDecl;
10308       Decl *SecondDecl = DR.SecondDecl;
10309 
10310       if (FirstDiffType == Other || SecondDiffType == Other) {
10311         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10312                               SecondModule);
10313         Diagnosed = true;
10314         break;
10315       }
10316 
10317       if (FirstDiffType != SecondDiffType) {
10318         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10319                             SecondModule);
10320         Diagnosed = true;
10321         break;
10322       }
10323 
10324       assert(FirstDiffType == SecondDiffType);
10325 
10326       switch (FirstDiffType) {
10327       case Other:
10328       case EndOfClass:
10329       case PublicSpecifer:
10330       case PrivateSpecifer:
10331       case ProtectedSpecifer:
10332         llvm_unreachable("Invalid diff type");
10333 
10334       case StaticAssert: {
10335         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10336         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10337 
10338         Expr *FirstExpr = FirstSA->getAssertExpr();
10339         Expr *SecondExpr = SecondSA->getAssertExpr();
10340         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10341         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10342         if (FirstODRHash != SecondODRHash) {
10343           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10344                            FirstExpr->getSourceRange(), StaticAssertCondition);
10345           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10346                           SecondExpr->getSourceRange(), StaticAssertCondition);
10347           Diagnosed = true;
10348           break;
10349         }
10350 
10351         StringLiteral *FirstStr = FirstSA->getMessage();
10352         StringLiteral *SecondStr = SecondSA->getMessage();
10353         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10354         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10355           SourceLocation FirstLoc, SecondLoc;
10356           SourceRange FirstRange, SecondRange;
10357           if (FirstStr) {
10358             FirstLoc = FirstStr->getBeginLoc();
10359             FirstRange = FirstStr->getSourceRange();
10360           } else {
10361             FirstLoc = FirstSA->getBeginLoc();
10362             FirstRange = FirstSA->getSourceRange();
10363           }
10364           if (SecondStr) {
10365             SecondLoc = SecondStr->getBeginLoc();
10366             SecondRange = SecondStr->getSourceRange();
10367           } else {
10368             SecondLoc = SecondSA->getBeginLoc();
10369             SecondRange = SecondSA->getSourceRange();
10370           }
10371           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10372                            StaticAssertOnlyMessage)
10373               << (FirstStr == nullptr);
10374           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10375                           StaticAssertOnlyMessage)
10376               << (SecondStr == nullptr);
10377           Diagnosed = true;
10378           break;
10379         }
10380 
10381         if (FirstStr && SecondStr &&
10382             FirstStr->getString() != SecondStr->getString()) {
10383           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10384                            FirstStr->getSourceRange(), StaticAssertMessage);
10385           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10386                           SecondStr->getSourceRange(), StaticAssertMessage);
10387           Diagnosed = true;
10388           break;
10389         }
10390         break;
10391       }
10392       case Field: {
10393         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10394                                  cast<FieldDecl>(FirstDecl),
10395                                  cast<FieldDecl>(SecondDecl));
10396         break;
10397       }
10398       case CXXMethod: {
10399         enum {
10400           DiagMethod,
10401           DiagConstructor,
10402           DiagDestructor,
10403         } FirstMethodType,
10404             SecondMethodType;
10405         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10406           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10407           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10408           return DiagMethod;
10409         };
10410         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10411         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10412         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10413         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10414         auto FirstName = FirstMethod->getDeclName();
10415         auto SecondName = SecondMethod->getDeclName();
10416         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10417           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10418                            FirstMethod->getSourceRange(), MethodName)
10419               << FirstMethodType << FirstName;
10420           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10421                           SecondMethod->getSourceRange(), MethodName)
10422               << SecondMethodType << SecondName;
10423 
10424           Diagnosed = true;
10425           break;
10426         }
10427 
10428         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10429         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10430         if (FirstDeleted != SecondDeleted) {
10431           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10432                            FirstMethod->getSourceRange(), MethodDeleted)
10433               << FirstMethodType << FirstName << FirstDeleted;
10434 
10435           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10436                           SecondMethod->getSourceRange(), MethodDeleted)
10437               << SecondMethodType << SecondName << SecondDeleted;
10438           Diagnosed = true;
10439           break;
10440         }
10441 
10442         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10443         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10444         if (FirstDefaulted != SecondDefaulted) {
10445           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10446                            FirstMethod->getSourceRange(), MethodDefaulted)
10447               << FirstMethodType << FirstName << FirstDefaulted;
10448 
10449           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10450                           SecondMethod->getSourceRange(), MethodDefaulted)
10451               << SecondMethodType << SecondName << SecondDefaulted;
10452           Diagnosed = true;
10453           break;
10454         }
10455 
10456         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10457         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10458         const bool FirstPure = FirstMethod->isPure();
10459         const bool SecondPure = SecondMethod->isPure();
10460         if ((FirstVirtual || SecondVirtual) &&
10461             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10462           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10463                            FirstMethod->getSourceRange(), MethodVirtual)
10464               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10465           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10466                           SecondMethod->getSourceRange(), MethodVirtual)
10467               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10468           Diagnosed = true;
10469           break;
10470         }
10471 
10472         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10473         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10474         // class needs to be checked instead.
10475         const auto FirstStorage = FirstMethod->getStorageClass();
10476         const auto SecondStorage = SecondMethod->getStorageClass();
10477         const bool FirstStatic = FirstStorage == SC_Static;
10478         const bool SecondStatic = SecondStorage == SC_Static;
10479         if (FirstStatic != SecondStatic) {
10480           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10481                            FirstMethod->getSourceRange(), MethodStatic)
10482               << FirstMethodType << FirstName << FirstStatic;
10483           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10484                           SecondMethod->getSourceRange(), MethodStatic)
10485               << SecondMethodType << SecondName << SecondStatic;
10486           Diagnosed = true;
10487           break;
10488         }
10489 
10490         const bool FirstVolatile = FirstMethod->isVolatile();
10491         const bool SecondVolatile = SecondMethod->isVolatile();
10492         if (FirstVolatile != SecondVolatile) {
10493           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10494                            FirstMethod->getSourceRange(), MethodVolatile)
10495               << FirstMethodType << FirstName << FirstVolatile;
10496           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10497                           SecondMethod->getSourceRange(), MethodVolatile)
10498               << SecondMethodType << SecondName << SecondVolatile;
10499           Diagnosed = true;
10500           break;
10501         }
10502 
10503         const bool FirstConst = FirstMethod->isConst();
10504         const bool SecondConst = SecondMethod->isConst();
10505         if (FirstConst != SecondConst) {
10506           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10507                            FirstMethod->getSourceRange(), MethodConst)
10508               << FirstMethodType << FirstName << FirstConst;
10509           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10510                           SecondMethod->getSourceRange(), MethodConst)
10511               << SecondMethodType << SecondName << SecondConst;
10512           Diagnosed = true;
10513           break;
10514         }
10515 
10516         const bool FirstInline = FirstMethod->isInlineSpecified();
10517         const bool SecondInline = SecondMethod->isInlineSpecified();
10518         if (FirstInline != SecondInline) {
10519           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10520                            FirstMethod->getSourceRange(), MethodInline)
10521               << FirstMethodType << FirstName << FirstInline;
10522           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10523                           SecondMethod->getSourceRange(), MethodInline)
10524               << SecondMethodType << SecondName << SecondInline;
10525           Diagnosed = true;
10526           break;
10527         }
10528 
10529         const unsigned FirstNumParameters = FirstMethod->param_size();
10530         const unsigned SecondNumParameters = SecondMethod->param_size();
10531         if (FirstNumParameters != SecondNumParameters) {
10532           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10533                            FirstMethod->getSourceRange(),
10534                            MethodNumberParameters)
10535               << FirstMethodType << FirstName << FirstNumParameters;
10536           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10537                           SecondMethod->getSourceRange(),
10538                           MethodNumberParameters)
10539               << SecondMethodType << SecondName << SecondNumParameters;
10540           Diagnosed = true;
10541           break;
10542         }
10543 
10544         // Need this status boolean to know when break out of the switch.
10545         bool ParameterMismatch = false;
10546         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10547           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10548           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10549 
10550           QualType FirstParamType = FirstParam->getType();
10551           QualType SecondParamType = SecondParam->getType();
10552           if (FirstParamType != SecondParamType &&
10553               ComputeQualTypeODRHash(FirstParamType) !=
10554                   ComputeQualTypeODRHash(SecondParamType)) {
10555             if (const DecayedType *ParamDecayedType =
10556                     FirstParamType->getAs<DecayedType>()) {
10557               ODRDiagDeclError(
10558                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10559                   FirstMethod->getSourceRange(), MethodParameterType)
10560                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10561                   << true << ParamDecayedType->getOriginalType();
10562             } else {
10563               ODRDiagDeclError(
10564                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10565                   FirstMethod->getSourceRange(), MethodParameterType)
10566                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10567                   << false;
10568             }
10569 
10570             if (const DecayedType *ParamDecayedType =
10571                     SecondParamType->getAs<DecayedType>()) {
10572               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10573                               SecondMethod->getSourceRange(),
10574                               MethodParameterType)
10575                   << SecondMethodType << SecondName << (I + 1)
10576                   << SecondParamType << true
10577                   << ParamDecayedType->getOriginalType();
10578             } else {
10579               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10580                               SecondMethod->getSourceRange(),
10581                               MethodParameterType)
10582                   << SecondMethodType << SecondName << (I + 1)
10583                   << SecondParamType << false;
10584             }
10585             ParameterMismatch = true;
10586             break;
10587           }
10588 
10589           DeclarationName FirstParamName = FirstParam->getDeclName();
10590           DeclarationName SecondParamName = SecondParam->getDeclName();
10591           if (FirstParamName != SecondParamName) {
10592             ODRDiagDeclError(FirstRecord, FirstModule,
10593                              FirstMethod->getLocation(),
10594                              FirstMethod->getSourceRange(), MethodParameterName)
10595                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10596             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10597                             SecondMethod->getSourceRange(), MethodParameterName)
10598                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10599             ParameterMismatch = true;
10600             break;
10601           }
10602 
10603           const Expr *FirstInit = FirstParam->getInit();
10604           const Expr *SecondInit = SecondParam->getInit();
10605           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10606             ODRDiagDeclError(FirstRecord, FirstModule,
10607                              FirstMethod->getLocation(),
10608                              FirstMethod->getSourceRange(),
10609                              MethodParameterSingleDefaultArgument)
10610                 << FirstMethodType << FirstName << (I + 1)
10611                 << (FirstInit == nullptr)
10612                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10613             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10614                             SecondMethod->getSourceRange(),
10615                             MethodParameterSingleDefaultArgument)
10616                 << SecondMethodType << SecondName << (I + 1)
10617                 << (SecondInit == nullptr)
10618                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10619             ParameterMismatch = true;
10620             break;
10621           }
10622 
10623           if (FirstInit && SecondInit &&
10624               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10625             ODRDiagDeclError(FirstRecord, FirstModule,
10626                              FirstMethod->getLocation(),
10627                              FirstMethod->getSourceRange(),
10628                              MethodParameterDifferentDefaultArgument)
10629                 << FirstMethodType << FirstName << (I + 1)
10630                 << FirstInit->getSourceRange();
10631             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10632                             SecondMethod->getSourceRange(),
10633                             MethodParameterDifferentDefaultArgument)
10634                 << SecondMethodType << SecondName << (I + 1)
10635                 << SecondInit->getSourceRange();
10636             ParameterMismatch = true;
10637             break;
10638 
10639           }
10640         }
10641 
10642         if (ParameterMismatch) {
10643           Diagnosed = true;
10644           break;
10645         }
10646 
10647         const auto *FirstTemplateArgs =
10648             FirstMethod->getTemplateSpecializationArgs();
10649         const auto *SecondTemplateArgs =
10650             SecondMethod->getTemplateSpecializationArgs();
10651 
10652         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10653             (!FirstTemplateArgs && SecondTemplateArgs)) {
10654           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10655                            FirstMethod->getSourceRange(),
10656                            MethodNoTemplateArguments)
10657               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10658           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10659                           SecondMethod->getSourceRange(),
10660                           MethodNoTemplateArguments)
10661               << SecondMethodType << SecondName
10662               << (SecondTemplateArgs != nullptr);
10663 
10664           Diagnosed = true;
10665           break;
10666         }
10667 
10668         if (FirstTemplateArgs && SecondTemplateArgs) {
10669           // Remove pack expansions from argument list.
10670           auto ExpandTemplateArgumentList =
10671               [](const TemplateArgumentList *TAL) {
10672                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10673                 for (const TemplateArgument &TA : TAL->asArray()) {
10674                   if (TA.getKind() != TemplateArgument::Pack) {
10675                     ExpandedList.push_back(&TA);
10676                     continue;
10677                   }
10678                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10679                     ExpandedList.push_back(&PackTA);
10680                   }
10681                 }
10682                 return ExpandedList;
10683               };
10684           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10685               ExpandTemplateArgumentList(FirstTemplateArgs);
10686           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10687               ExpandTemplateArgumentList(SecondTemplateArgs);
10688 
10689           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10690             ODRDiagDeclError(FirstRecord, FirstModule,
10691                              FirstMethod->getLocation(),
10692                              FirstMethod->getSourceRange(),
10693                              MethodDifferentNumberTemplateArguments)
10694                 << FirstMethodType << FirstName
10695                 << (unsigned)FirstExpandedList.size();
10696             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10697                             SecondMethod->getSourceRange(),
10698                             MethodDifferentNumberTemplateArguments)
10699                 << SecondMethodType << SecondName
10700                 << (unsigned)SecondExpandedList.size();
10701 
10702             Diagnosed = true;
10703             break;
10704           }
10705 
10706           bool TemplateArgumentMismatch = false;
10707           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10708             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10709                                    &SecondTA = *SecondExpandedList[i];
10710             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10711                 ComputeTemplateArgumentODRHash(SecondTA)) {
10712               continue;
10713             }
10714 
10715             ODRDiagDeclError(
10716                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10717                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10718                 << FirstMethodType << FirstName << FirstTA << i + 1;
10719             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10720                             SecondMethod->getSourceRange(),
10721                             MethodDifferentTemplateArgument)
10722                 << SecondMethodType << SecondName << SecondTA << i + 1;
10723 
10724             TemplateArgumentMismatch = true;
10725             break;
10726           }
10727 
10728           if (TemplateArgumentMismatch) {
10729             Diagnosed = true;
10730             break;
10731           }
10732         }
10733 
10734         // Compute the hash of the method as if it has no body.
10735         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10736           Hash.clear();
10737           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10738           return Hash.CalculateHash();
10739         };
10740 
10741         // Compare the hash generated to the hash stored.  A difference means
10742         // that a body was present in the original source.  Due to merging,
10743         // the stardard way of detecting a body will not work.
10744         const bool HasFirstBody =
10745             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10746         const bool HasSecondBody =
10747             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10748 
10749         if (HasFirstBody != HasSecondBody) {
10750           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10751                            FirstMethod->getSourceRange(), MethodSingleBody)
10752               << FirstMethodType << FirstName << HasFirstBody;
10753           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10754                           SecondMethod->getSourceRange(), MethodSingleBody)
10755               << SecondMethodType << SecondName << HasSecondBody;
10756           Diagnosed = true;
10757           break;
10758         }
10759 
10760         if (HasFirstBody && HasSecondBody) {
10761           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10762                            FirstMethod->getSourceRange(), MethodDifferentBody)
10763               << FirstMethodType << FirstName;
10764           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10765                           SecondMethod->getSourceRange(), MethodDifferentBody)
10766               << SecondMethodType << SecondName;
10767           Diagnosed = true;
10768           break;
10769         }
10770 
10771         break;
10772       }
10773       case TypeAlias:
10774       case TypeDef: {
10775         Diagnosed = ODRDiagTypeDefOrAlias(
10776             FirstRecord, FirstModule, SecondModule,
10777             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10778             FirstDiffType == TypeAlias);
10779         break;
10780       }
10781       case Var: {
10782         Diagnosed =
10783             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10784                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10785         break;
10786       }
10787       case Friend: {
10788         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10789         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10790 
10791         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10792         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10793 
10794         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10795         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10796 
10797         if (FirstND && SecondND) {
10798           ODRDiagDeclError(FirstRecord, FirstModule,
10799                            FirstFriend->getFriendLoc(),
10800                            FirstFriend->getSourceRange(), FriendFunction)
10801               << FirstND;
10802           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10803                           SecondFriend->getSourceRange(), FriendFunction)
10804               << SecondND;
10805 
10806           Diagnosed = true;
10807           break;
10808         }
10809 
10810         if (FirstTSI && SecondTSI) {
10811           QualType FirstFriendType = FirstTSI->getType();
10812           QualType SecondFriendType = SecondTSI->getType();
10813           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10814                  ComputeQualTypeODRHash(SecondFriendType));
10815           ODRDiagDeclError(FirstRecord, FirstModule,
10816                            FirstFriend->getFriendLoc(),
10817                            FirstFriend->getSourceRange(), FriendType)
10818               << FirstFriendType;
10819           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10820                           SecondFriend->getSourceRange(), FriendType)
10821               << SecondFriendType;
10822           Diagnosed = true;
10823           break;
10824         }
10825 
10826         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10827                          FirstFriend->getSourceRange(), FriendTypeFunction)
10828             << (FirstTSI == nullptr);
10829         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10830                         SecondFriend->getSourceRange(), FriendTypeFunction)
10831             << (SecondTSI == nullptr);
10832 
10833         Diagnosed = true;
10834         break;
10835       }
10836       case FunctionTemplate: {
10837         FunctionTemplateDecl *FirstTemplate =
10838             cast<FunctionTemplateDecl>(FirstDecl);
10839         FunctionTemplateDecl *SecondTemplate =
10840             cast<FunctionTemplateDecl>(SecondDecl);
10841 
10842         TemplateParameterList *FirstTPL =
10843             FirstTemplate->getTemplateParameters();
10844         TemplateParameterList *SecondTPL =
10845             SecondTemplate->getTemplateParameters();
10846 
10847         if (FirstTPL->size() != SecondTPL->size()) {
10848           ODRDiagDeclError(FirstRecord, FirstModule,
10849                            FirstTemplate->getLocation(),
10850                            FirstTemplate->getSourceRange(),
10851                            FunctionTemplateDifferentNumberParameters)
10852               << FirstTemplate << FirstTPL->size();
10853           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10854                           SecondTemplate->getSourceRange(),
10855                           FunctionTemplateDifferentNumberParameters)
10856               << SecondTemplate << SecondTPL->size();
10857 
10858           Diagnosed = true;
10859           break;
10860         }
10861 
10862         bool ParameterMismatch = false;
10863         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10864           NamedDecl *FirstParam = FirstTPL->getParam(i);
10865           NamedDecl *SecondParam = SecondTPL->getParam(i);
10866 
10867           if (FirstParam->getKind() != SecondParam->getKind()) {
10868             enum {
10869               TemplateTypeParameter,
10870               NonTypeTemplateParameter,
10871               TemplateTemplateParameter,
10872             };
10873             auto GetParamType = [](NamedDecl *D) {
10874               switch (D->getKind()) {
10875                 default:
10876                   llvm_unreachable("Unexpected template parameter type");
10877                 case Decl::TemplateTypeParm:
10878                   return TemplateTypeParameter;
10879                 case Decl::NonTypeTemplateParm:
10880                   return NonTypeTemplateParameter;
10881                 case Decl::TemplateTemplateParm:
10882                   return TemplateTemplateParameter;
10883               }
10884             };
10885 
10886             ODRDiagDeclError(FirstRecord, FirstModule,
10887                              FirstTemplate->getLocation(),
10888                              FirstTemplate->getSourceRange(),
10889                              FunctionTemplateParameterDifferentKind)
10890                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10891             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10892                             SecondTemplate->getSourceRange(),
10893                             FunctionTemplateParameterDifferentKind)
10894                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10895 
10896             ParameterMismatch = true;
10897             break;
10898           }
10899 
10900           if (FirstParam->getName() != SecondParam->getName()) {
10901             ODRDiagDeclError(
10902                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10903                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10904                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10905                 << FirstParam;
10906             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10907                             SecondTemplate->getSourceRange(),
10908                             FunctionTemplateParameterName)
10909                 << SecondTemplate << (i + 1)
10910                 << (bool)SecondParam->getIdentifier() << SecondParam;
10911             ParameterMismatch = true;
10912             break;
10913           }
10914 
10915           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10916               isa<TemplateTypeParmDecl>(SecondParam)) {
10917             TemplateTypeParmDecl *FirstTTPD =
10918                 cast<TemplateTypeParmDecl>(FirstParam);
10919             TemplateTypeParmDecl *SecondTTPD =
10920                 cast<TemplateTypeParmDecl>(SecondParam);
10921             bool HasFirstDefaultArgument =
10922                 FirstTTPD->hasDefaultArgument() &&
10923                 !FirstTTPD->defaultArgumentWasInherited();
10924             bool HasSecondDefaultArgument =
10925                 SecondTTPD->hasDefaultArgument() &&
10926                 !SecondTTPD->defaultArgumentWasInherited();
10927             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10928               ODRDiagDeclError(FirstRecord, FirstModule,
10929                                FirstTemplate->getLocation(),
10930                                FirstTemplate->getSourceRange(),
10931                                FunctionTemplateParameterSingleDefaultArgument)
10932                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10933               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10934                               SecondTemplate->getSourceRange(),
10935                               FunctionTemplateParameterSingleDefaultArgument)
10936                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10937               ParameterMismatch = true;
10938               break;
10939             }
10940 
10941             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10942               QualType FirstType = FirstTTPD->getDefaultArgument();
10943               QualType SecondType = SecondTTPD->getDefaultArgument();
10944               if (ComputeQualTypeODRHash(FirstType) !=
10945                   ComputeQualTypeODRHash(SecondType)) {
10946                 ODRDiagDeclError(
10947                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10948                     FirstTemplate->getSourceRange(),
10949                     FunctionTemplateParameterDifferentDefaultArgument)
10950                     << FirstTemplate << (i + 1) << FirstType;
10951                 ODRDiagDeclNote(
10952                     SecondModule, SecondTemplate->getLocation(),
10953                     SecondTemplate->getSourceRange(),
10954                     FunctionTemplateParameterDifferentDefaultArgument)
10955                     << SecondTemplate << (i + 1) << SecondType;
10956                 ParameterMismatch = true;
10957                 break;
10958               }
10959             }
10960 
10961             if (FirstTTPD->isParameterPack() !=
10962                 SecondTTPD->isParameterPack()) {
10963               ODRDiagDeclError(FirstRecord, FirstModule,
10964                                FirstTemplate->getLocation(),
10965                                FirstTemplate->getSourceRange(),
10966                                FunctionTemplatePackParameter)
10967                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10968               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10969                               SecondTemplate->getSourceRange(),
10970                               FunctionTemplatePackParameter)
10971                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10972               ParameterMismatch = true;
10973               break;
10974             }
10975           }
10976 
10977           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10978               isa<TemplateTemplateParmDecl>(SecondParam)) {
10979             TemplateTemplateParmDecl *FirstTTPD =
10980                 cast<TemplateTemplateParmDecl>(FirstParam);
10981             TemplateTemplateParmDecl *SecondTTPD =
10982                 cast<TemplateTemplateParmDecl>(SecondParam);
10983 
10984             TemplateParameterList *FirstTPL =
10985                 FirstTTPD->getTemplateParameters();
10986             TemplateParameterList *SecondTPL =
10987                 SecondTTPD->getTemplateParameters();
10988 
10989             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
10990                 ComputeTemplateParameterListODRHash(SecondTPL)) {
10991               ODRDiagDeclError(FirstRecord, FirstModule,
10992                                FirstTemplate->getLocation(),
10993                                FirstTemplate->getSourceRange(),
10994                                FunctionTemplateParameterDifferentType)
10995                   << FirstTemplate << (i + 1);
10996               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10997                               SecondTemplate->getSourceRange(),
10998                               FunctionTemplateParameterDifferentType)
10999                   << SecondTemplate << (i + 1);
11000               ParameterMismatch = true;
11001               break;
11002             }
11003 
11004             bool HasFirstDefaultArgument =
11005                 FirstTTPD->hasDefaultArgument() &&
11006                 !FirstTTPD->defaultArgumentWasInherited();
11007             bool HasSecondDefaultArgument =
11008                 SecondTTPD->hasDefaultArgument() &&
11009                 !SecondTTPD->defaultArgumentWasInherited();
11010             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11011               ODRDiagDeclError(FirstRecord, FirstModule,
11012                                FirstTemplate->getLocation(),
11013                                FirstTemplate->getSourceRange(),
11014                                FunctionTemplateParameterSingleDefaultArgument)
11015                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11016               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11017                               SecondTemplate->getSourceRange(),
11018                               FunctionTemplateParameterSingleDefaultArgument)
11019                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11020               ParameterMismatch = true;
11021               break;
11022             }
11023 
11024             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11025               TemplateArgument FirstTA =
11026                   FirstTTPD->getDefaultArgument().getArgument();
11027               TemplateArgument SecondTA =
11028                   SecondTTPD->getDefaultArgument().getArgument();
11029               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11030                   ComputeTemplateArgumentODRHash(SecondTA)) {
11031                 ODRDiagDeclError(
11032                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11033                     FirstTemplate->getSourceRange(),
11034                     FunctionTemplateParameterDifferentDefaultArgument)
11035                     << FirstTemplate << (i + 1) << FirstTA;
11036                 ODRDiagDeclNote(
11037                     SecondModule, SecondTemplate->getLocation(),
11038                     SecondTemplate->getSourceRange(),
11039                     FunctionTemplateParameterDifferentDefaultArgument)
11040                     << SecondTemplate << (i + 1) << SecondTA;
11041                 ParameterMismatch = true;
11042                 break;
11043               }
11044             }
11045 
11046             if (FirstTTPD->isParameterPack() !=
11047                 SecondTTPD->isParameterPack()) {
11048               ODRDiagDeclError(FirstRecord, FirstModule,
11049                                FirstTemplate->getLocation(),
11050                                FirstTemplate->getSourceRange(),
11051                                FunctionTemplatePackParameter)
11052                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11053               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11054                               SecondTemplate->getSourceRange(),
11055                               FunctionTemplatePackParameter)
11056                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11057               ParameterMismatch = true;
11058               break;
11059             }
11060           }
11061 
11062           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11063               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11064             NonTypeTemplateParmDecl *FirstNTTPD =
11065                 cast<NonTypeTemplateParmDecl>(FirstParam);
11066             NonTypeTemplateParmDecl *SecondNTTPD =
11067                 cast<NonTypeTemplateParmDecl>(SecondParam);
11068 
11069             QualType FirstType = FirstNTTPD->getType();
11070             QualType SecondType = SecondNTTPD->getType();
11071             if (ComputeQualTypeODRHash(FirstType) !=
11072                 ComputeQualTypeODRHash(SecondType)) {
11073               ODRDiagDeclError(FirstRecord, FirstModule,
11074                                FirstTemplate->getLocation(),
11075                                FirstTemplate->getSourceRange(),
11076                                FunctionTemplateParameterDifferentType)
11077                   << FirstTemplate << (i + 1);
11078               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11079                               SecondTemplate->getSourceRange(),
11080                               FunctionTemplateParameterDifferentType)
11081                   << SecondTemplate << (i + 1);
11082               ParameterMismatch = true;
11083               break;
11084             }
11085 
11086             bool HasFirstDefaultArgument =
11087                 FirstNTTPD->hasDefaultArgument() &&
11088                 !FirstNTTPD->defaultArgumentWasInherited();
11089             bool HasSecondDefaultArgument =
11090                 SecondNTTPD->hasDefaultArgument() &&
11091                 !SecondNTTPD->defaultArgumentWasInherited();
11092             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11093               ODRDiagDeclError(FirstRecord, FirstModule,
11094                                FirstTemplate->getLocation(),
11095                                FirstTemplate->getSourceRange(),
11096                                FunctionTemplateParameterSingleDefaultArgument)
11097                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11098               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11099                               SecondTemplate->getSourceRange(),
11100                               FunctionTemplateParameterSingleDefaultArgument)
11101                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11102               ParameterMismatch = true;
11103               break;
11104             }
11105 
11106             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11107               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11108               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11109               if (ComputeODRHash(FirstDefaultArgument) !=
11110                   ComputeODRHash(SecondDefaultArgument)) {
11111                 ODRDiagDeclError(
11112                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11113                     FirstTemplate->getSourceRange(),
11114                     FunctionTemplateParameterDifferentDefaultArgument)
11115                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11116                 ODRDiagDeclNote(
11117                     SecondModule, SecondTemplate->getLocation(),
11118                     SecondTemplate->getSourceRange(),
11119                     FunctionTemplateParameterDifferentDefaultArgument)
11120                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11121                 ParameterMismatch = true;
11122                 break;
11123               }
11124             }
11125 
11126             if (FirstNTTPD->isParameterPack() !=
11127                 SecondNTTPD->isParameterPack()) {
11128               ODRDiagDeclError(FirstRecord, FirstModule,
11129                                FirstTemplate->getLocation(),
11130                                FirstTemplate->getSourceRange(),
11131                                FunctionTemplatePackParameter)
11132                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11133               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11134                               SecondTemplate->getSourceRange(),
11135                               FunctionTemplatePackParameter)
11136                   << SecondTemplate << (i + 1)
11137                   << SecondNTTPD->isParameterPack();
11138               ParameterMismatch = true;
11139               break;
11140             }
11141           }
11142         }
11143 
11144         if (ParameterMismatch) {
11145           Diagnosed = true;
11146           break;
11147         }
11148 
11149         break;
11150       }
11151       }
11152 
11153       if (Diagnosed)
11154         continue;
11155 
11156       Diag(FirstDecl->getLocation(),
11157            diag::err_module_odr_violation_mismatch_decl_unknown)
11158           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11159           << FirstDecl->getSourceRange();
11160       Diag(SecondDecl->getLocation(),
11161            diag::note_module_odr_violation_mismatch_decl_unknown)
11162           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11163       Diagnosed = true;
11164     }
11165 
11166     if (!Diagnosed) {
11167       // All definitions are updates to the same declaration. This happens if a
11168       // module instantiates the declaration of a class template specialization
11169       // and two or more other modules instantiate its definition.
11170       //
11171       // FIXME: Indicate which modules had instantiations of this definition.
11172       // FIXME: How can this even happen?
11173       Diag(Merge.first->getLocation(),
11174            diag::err_module_odr_violation_different_instantiations)
11175         << Merge.first;
11176     }
11177   }
11178 
11179   // Issue ODR failures diagnostics for functions.
11180   for (auto &Merge : FunctionOdrMergeFailures) {
11181     enum ODRFunctionDifference {
11182       ReturnType,
11183       ParameterName,
11184       ParameterType,
11185       ParameterSingleDefaultArgument,
11186       ParameterDifferentDefaultArgument,
11187       FunctionBody,
11188     };
11189 
11190     FunctionDecl *FirstFunction = Merge.first;
11191     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11192 
11193     bool Diagnosed = false;
11194     for (auto &SecondFunction : Merge.second) {
11195 
11196       if (FirstFunction == SecondFunction)
11197         continue;
11198 
11199       std::string SecondModule =
11200           getOwningModuleNameForDiagnostic(SecondFunction);
11201 
11202       auto ODRDiagError = [FirstFunction, &FirstModule,
11203                            this](SourceLocation Loc, SourceRange Range,
11204                                  ODRFunctionDifference DiffType) {
11205         return Diag(Loc, diag::err_module_odr_violation_function)
11206                << FirstFunction << FirstModule.empty() << FirstModule << Range
11207                << DiffType;
11208       };
11209       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11210                                                SourceRange Range,
11211                                                ODRFunctionDifference DiffType) {
11212         return Diag(Loc, diag::note_module_odr_violation_function)
11213                << SecondModule << Range << DiffType;
11214       };
11215 
11216       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11217           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11218         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11219                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11220             << FirstFunction->getReturnType();
11221         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11222                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11223             << SecondFunction->getReturnType();
11224         Diagnosed = true;
11225         break;
11226       }
11227 
11228       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11229              "Merged functions with different number of parameters");
11230 
11231       auto ParamSize = FirstFunction->param_size();
11232       bool ParameterMismatch = false;
11233       for (unsigned I = 0; I < ParamSize; ++I) {
11234         auto *FirstParam = FirstFunction->getParamDecl(I);
11235         auto *SecondParam = SecondFunction->getParamDecl(I);
11236 
11237         assert(getContext().hasSameType(FirstParam->getType(),
11238                                       SecondParam->getType()) &&
11239                "Merged function has different parameter types.");
11240 
11241         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11242           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11243                        ParameterName)
11244               << I + 1 << FirstParam->getDeclName();
11245           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11246                       ParameterName)
11247               << I + 1 << SecondParam->getDeclName();
11248           ParameterMismatch = true;
11249           break;
11250         };
11251 
11252         QualType FirstParamType = FirstParam->getType();
11253         QualType SecondParamType = SecondParam->getType();
11254         if (FirstParamType != SecondParamType &&
11255             ComputeQualTypeODRHash(FirstParamType) !=
11256                 ComputeQualTypeODRHash(SecondParamType)) {
11257           if (const DecayedType *ParamDecayedType =
11258                   FirstParamType->getAs<DecayedType>()) {
11259             ODRDiagError(FirstParam->getLocation(),
11260                          FirstParam->getSourceRange(), ParameterType)
11261                 << (I + 1) << FirstParamType << true
11262                 << ParamDecayedType->getOriginalType();
11263           } else {
11264             ODRDiagError(FirstParam->getLocation(),
11265                          FirstParam->getSourceRange(), ParameterType)
11266                 << (I + 1) << FirstParamType << false;
11267           }
11268 
11269           if (const DecayedType *ParamDecayedType =
11270                   SecondParamType->getAs<DecayedType>()) {
11271             ODRDiagNote(SecondParam->getLocation(),
11272                         SecondParam->getSourceRange(), ParameterType)
11273                 << (I + 1) << SecondParamType << true
11274                 << ParamDecayedType->getOriginalType();
11275           } else {
11276             ODRDiagNote(SecondParam->getLocation(),
11277                         SecondParam->getSourceRange(), ParameterType)
11278                 << (I + 1) << SecondParamType << false;
11279           }
11280           ParameterMismatch = true;
11281           break;
11282         }
11283 
11284         const Expr *FirstInit = FirstParam->getInit();
11285         const Expr *SecondInit = SecondParam->getInit();
11286         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11287           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11288                        ParameterSingleDefaultArgument)
11289               << (I + 1) << (FirstInit == nullptr)
11290               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11291           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11292                       ParameterSingleDefaultArgument)
11293               << (I + 1) << (SecondInit == nullptr)
11294               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11295           ParameterMismatch = true;
11296           break;
11297         }
11298 
11299         if (FirstInit && SecondInit &&
11300             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11301           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11302                        ParameterDifferentDefaultArgument)
11303               << (I + 1) << FirstInit->getSourceRange();
11304           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11305                       ParameterDifferentDefaultArgument)
11306               << (I + 1) << SecondInit->getSourceRange();
11307           ParameterMismatch = true;
11308           break;
11309         }
11310 
11311         assert(ComputeSubDeclODRHash(FirstParam) ==
11312                    ComputeSubDeclODRHash(SecondParam) &&
11313                "Undiagnosed parameter difference.");
11314       }
11315 
11316       if (ParameterMismatch) {
11317         Diagnosed = true;
11318         break;
11319       }
11320 
11321       // If no error has been generated before now, assume the problem is in
11322       // the body and generate a message.
11323       ODRDiagError(FirstFunction->getLocation(),
11324                    FirstFunction->getSourceRange(), FunctionBody);
11325       ODRDiagNote(SecondFunction->getLocation(),
11326                   SecondFunction->getSourceRange(), FunctionBody);
11327       Diagnosed = true;
11328       break;
11329     }
11330     (void)Diagnosed;
11331     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11332   }
11333 
11334   // Issue ODR failures diagnostics for enums.
11335   for (auto &Merge : EnumOdrMergeFailures) {
11336     enum ODREnumDifference {
11337       SingleScopedEnum,
11338       EnumTagKeywordMismatch,
11339       SingleSpecifiedType,
11340       DifferentSpecifiedTypes,
11341       DifferentNumberEnumConstants,
11342       EnumConstantName,
11343       EnumConstantSingleInitilizer,
11344       EnumConstantDifferentInitilizer,
11345     };
11346 
11347     // If we've already pointed out a specific problem with this enum, don't
11348     // bother issuing a general "something's different" diagnostic.
11349     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11350       continue;
11351 
11352     EnumDecl *FirstEnum = Merge.first;
11353     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11354 
11355     using DeclHashes =
11356         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11357     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11358                               DeclHashes &Hashes, EnumDecl *Enum) {
11359       for (auto *D : Enum->decls()) {
11360         // Due to decl merging, the first EnumDecl is the parent of
11361         // Decls in both records.
11362         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11363           continue;
11364         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11365         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11366                             ComputeSubDeclODRHash(D));
11367       }
11368     };
11369     DeclHashes FirstHashes;
11370     PopulateHashes(FirstHashes, FirstEnum);
11371     bool Diagnosed = false;
11372     for (auto &SecondEnum : Merge.second) {
11373 
11374       if (FirstEnum == SecondEnum)
11375         continue;
11376 
11377       std::string SecondModule =
11378           getOwningModuleNameForDiagnostic(SecondEnum);
11379 
11380       auto ODRDiagError = [FirstEnum, &FirstModule,
11381                            this](SourceLocation Loc, SourceRange Range,
11382                                  ODREnumDifference DiffType) {
11383         return Diag(Loc, diag::err_module_odr_violation_enum)
11384                << FirstEnum << FirstModule.empty() << FirstModule << Range
11385                << DiffType;
11386       };
11387       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11388                                                SourceRange Range,
11389                                                ODREnumDifference DiffType) {
11390         return Diag(Loc, diag::note_module_odr_violation_enum)
11391                << SecondModule << Range << DiffType;
11392       };
11393 
11394       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11395         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11396                      SingleScopedEnum)
11397             << FirstEnum->isScoped();
11398         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11399                     SingleScopedEnum)
11400             << SecondEnum->isScoped();
11401         Diagnosed = true;
11402         continue;
11403       }
11404 
11405       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11406         if (FirstEnum->isScopedUsingClassTag() !=
11407             SecondEnum->isScopedUsingClassTag()) {
11408           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11409                        EnumTagKeywordMismatch)
11410               << FirstEnum->isScopedUsingClassTag();
11411           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11412                       EnumTagKeywordMismatch)
11413               << SecondEnum->isScopedUsingClassTag();
11414           Diagnosed = true;
11415           continue;
11416         }
11417       }
11418 
11419       QualType FirstUnderlyingType =
11420           FirstEnum->getIntegerTypeSourceInfo()
11421               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11422               : QualType();
11423       QualType SecondUnderlyingType =
11424           SecondEnum->getIntegerTypeSourceInfo()
11425               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11426               : QualType();
11427       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11428           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11429                        SingleSpecifiedType)
11430               << !FirstUnderlyingType.isNull();
11431           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11432                       SingleSpecifiedType)
11433               << !SecondUnderlyingType.isNull();
11434           Diagnosed = true;
11435           continue;
11436       }
11437 
11438       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11439         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11440             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11441           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11442                        DifferentSpecifiedTypes)
11443               << FirstUnderlyingType;
11444           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11445                       DifferentSpecifiedTypes)
11446               << SecondUnderlyingType;
11447           Diagnosed = true;
11448           continue;
11449         }
11450       }
11451 
11452       DeclHashes SecondHashes;
11453       PopulateHashes(SecondHashes, SecondEnum);
11454 
11455       if (FirstHashes.size() != SecondHashes.size()) {
11456         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11457                      DifferentNumberEnumConstants)
11458             << (int)FirstHashes.size();
11459         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11460                     DifferentNumberEnumConstants)
11461             << (int)SecondHashes.size();
11462         Diagnosed = true;
11463         continue;
11464       }
11465 
11466       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11467         if (FirstHashes[I].second == SecondHashes[I].second)
11468           continue;
11469         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11470         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11471 
11472         if (FirstEnumConstant->getDeclName() !=
11473             SecondEnumConstant->getDeclName()) {
11474 
11475           ODRDiagError(FirstEnumConstant->getLocation(),
11476                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11477               << I + 1 << FirstEnumConstant;
11478           ODRDiagNote(SecondEnumConstant->getLocation(),
11479                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11480               << I + 1 << SecondEnumConstant;
11481           Diagnosed = true;
11482           break;
11483         }
11484 
11485         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11486         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11487         if (!FirstInit && !SecondInit)
11488           continue;
11489 
11490         if (!FirstInit || !SecondInit) {
11491           ODRDiagError(FirstEnumConstant->getLocation(),
11492                        FirstEnumConstant->getSourceRange(),
11493                        EnumConstantSingleInitilizer)
11494               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11495           ODRDiagNote(SecondEnumConstant->getLocation(),
11496                       SecondEnumConstant->getSourceRange(),
11497                       EnumConstantSingleInitilizer)
11498               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11499           Diagnosed = true;
11500           break;
11501         }
11502 
11503         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11504           ODRDiagError(FirstEnumConstant->getLocation(),
11505                        FirstEnumConstant->getSourceRange(),
11506                        EnumConstantDifferentInitilizer)
11507               << I + 1 << FirstEnumConstant;
11508           ODRDiagNote(SecondEnumConstant->getLocation(),
11509                       SecondEnumConstant->getSourceRange(),
11510                       EnumConstantDifferentInitilizer)
11511               << I + 1 << SecondEnumConstant;
11512           Diagnosed = true;
11513           break;
11514         }
11515       }
11516     }
11517 
11518     (void)Diagnosed;
11519     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11520   }
11521 }
11522 
11523 void ASTReader::StartedDeserializing() {
11524   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11525     ReadTimer->startTimer();
11526 }
11527 
11528 void ASTReader::FinishedDeserializing() {
11529   assert(NumCurrentElementsDeserializing &&
11530          "FinishedDeserializing not paired with StartedDeserializing");
11531   if (NumCurrentElementsDeserializing == 1) {
11532     // We decrease NumCurrentElementsDeserializing only after pending actions
11533     // are finished, to avoid recursively re-calling finishPendingActions().
11534     finishPendingActions();
11535   }
11536   --NumCurrentElementsDeserializing;
11537 
11538   if (NumCurrentElementsDeserializing == 0) {
11539     // Propagate exception specification and deduced type updates along
11540     // redeclaration chains.
11541     //
11542     // We do this now rather than in finishPendingActions because we want to
11543     // be able to walk the complete redeclaration chains of the updated decls.
11544     while (!PendingExceptionSpecUpdates.empty() ||
11545            !PendingDeducedTypeUpdates.empty()) {
11546       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11547       PendingExceptionSpecUpdates.clear();
11548       for (auto Update : ESUpdates) {
11549         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11550         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11551         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11552         if (auto *Listener = getContext().getASTMutationListener())
11553           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11554         for (auto *Redecl : Update.second->redecls())
11555           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11556       }
11557 
11558       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11559       PendingDeducedTypeUpdates.clear();
11560       for (auto Update : DTUpdates) {
11561         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11562         // FIXME: If the return type is already deduced, check that it matches.
11563         getContext().adjustDeducedFunctionResultType(Update.first,
11564                                                      Update.second);
11565       }
11566     }
11567 
11568     if (ReadTimer)
11569       ReadTimer->stopTimer();
11570 
11571     diagnoseOdrViolations();
11572 
11573     // We are not in recursive loading, so it's safe to pass the "interesting"
11574     // decls to the consumer.
11575     if (Consumer)
11576       PassInterestingDeclsToConsumer();
11577   }
11578 }
11579 
11580 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11581   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11582     // Remove any fake results before adding any real ones.
11583     auto It = PendingFakeLookupResults.find(II);
11584     if (It != PendingFakeLookupResults.end()) {
11585       for (auto *ND : It->second)
11586         SemaObj->IdResolver.RemoveDecl(ND);
11587       // FIXME: this works around module+PCH performance issue.
11588       // Rather than erase the result from the map, which is O(n), just clear
11589       // the vector of NamedDecls.
11590       It->second.clear();
11591     }
11592   }
11593 
11594   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11595     SemaObj->TUScope->AddDecl(D);
11596   } else if (SemaObj->TUScope) {
11597     // Adding the decl to IdResolver may have failed because it was already in
11598     // (even though it was not added in scope). If it is already in, make sure
11599     // it gets in the scope as well.
11600     if (std::find(SemaObj->IdResolver.begin(Name),
11601                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11602       SemaObj->TUScope->AddDecl(D);
11603   }
11604 }
11605 
11606 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11607                      ASTContext *Context,
11608                      const PCHContainerReader &PCHContainerRdr,
11609                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11610                      StringRef isysroot,
11611                      DisableValidationForModuleKind DisableValidationKind,
11612                      bool AllowASTWithCompilerErrors,
11613                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11614                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11615                      std::unique_ptr<llvm::Timer> ReadTimer)
11616     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11617                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11618                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11619       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11620       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11621       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11622                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11623       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11624       DisableValidationKind(DisableValidationKind),
11625       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11626       AllowConfigurationMismatch(AllowConfigurationMismatch),
11627       ValidateSystemInputs(ValidateSystemInputs),
11628       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11629       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11630   SourceMgr.setExternalSLocEntrySource(this);
11631 
11632   for (const auto &Ext : Extensions) {
11633     auto BlockName = Ext->getExtensionMetadata().BlockName;
11634     auto Known = ModuleFileExtensions.find(BlockName);
11635     if (Known != ModuleFileExtensions.end()) {
11636       Diags.Report(diag::warn_duplicate_module_file_extension)
11637         << BlockName;
11638       continue;
11639     }
11640 
11641     ModuleFileExtensions.insert({BlockName, Ext});
11642   }
11643 }
11644 
11645 ASTReader::~ASTReader() {
11646   if (OwnsDeserializationListener)
11647     delete DeserializationListener;
11648 }
11649 
11650 IdentifierResolver &ASTReader::getIdResolver() {
11651   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11652 }
11653 
11654 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11655                                                unsigned AbbrevID) {
11656   Idx = 0;
11657   Record.clear();
11658   return Cursor.readRecord(AbbrevID, Record);
11659 }
11660 //===----------------------------------------------------------------------===//
11661 //// OMPClauseReader implementation
11662 ////===----------------------------------------------------------------------===//
11663 
11664 // This has to be in namespace clang because it's friended by all
11665 // of the OMP clauses.
11666 namespace clang {
11667 
11668 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11669   ASTRecordReader &Record;
11670   ASTContext &Context;
11671 
11672 public:
11673   OMPClauseReader(ASTRecordReader &Record)
11674       : Record(Record), Context(Record.getContext()) {}
11675 #define GEN_CLANG_CLAUSE_CLASS
11676 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11677 #include "llvm/Frontend/OpenMP/OMP.inc"
11678   OMPClause *readClause();
11679   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11680   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11681 };
11682 
11683 } // end namespace clang
11684 
11685 OMPClause *ASTRecordReader::readOMPClause() {
11686   return OMPClauseReader(*this).readClause();
11687 }
11688 
11689 OMPClause *OMPClauseReader::readClause() {
11690   OMPClause *C = nullptr;
11691   switch (llvm::omp::Clause(Record.readInt())) {
11692   case llvm::omp::OMPC_if:
11693     C = new (Context) OMPIfClause();
11694     break;
11695   case llvm::omp::OMPC_final:
11696     C = new (Context) OMPFinalClause();
11697     break;
11698   case llvm::omp::OMPC_num_threads:
11699     C = new (Context) OMPNumThreadsClause();
11700     break;
11701   case llvm::omp::OMPC_safelen:
11702     C = new (Context) OMPSafelenClause();
11703     break;
11704   case llvm::omp::OMPC_simdlen:
11705     C = new (Context) OMPSimdlenClause();
11706     break;
11707   case llvm::omp::OMPC_sizes: {
11708     unsigned NumSizes = Record.readInt();
11709     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11710     break;
11711   }
11712   case llvm::omp::OMPC_full:
11713     C = OMPFullClause::CreateEmpty(Context);
11714     break;
11715   case llvm::omp::OMPC_partial:
11716     C = OMPPartialClause::CreateEmpty(Context);
11717     break;
11718   case llvm::omp::OMPC_allocator:
11719     C = new (Context) OMPAllocatorClause();
11720     break;
11721   case llvm::omp::OMPC_collapse:
11722     C = new (Context) OMPCollapseClause();
11723     break;
11724   case llvm::omp::OMPC_default:
11725     C = new (Context) OMPDefaultClause();
11726     break;
11727   case llvm::omp::OMPC_proc_bind:
11728     C = new (Context) OMPProcBindClause();
11729     break;
11730   case llvm::omp::OMPC_schedule:
11731     C = new (Context) OMPScheduleClause();
11732     break;
11733   case llvm::omp::OMPC_ordered:
11734     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11735     break;
11736   case llvm::omp::OMPC_nowait:
11737     C = new (Context) OMPNowaitClause();
11738     break;
11739   case llvm::omp::OMPC_untied:
11740     C = new (Context) OMPUntiedClause();
11741     break;
11742   case llvm::omp::OMPC_mergeable:
11743     C = new (Context) OMPMergeableClause();
11744     break;
11745   case llvm::omp::OMPC_read:
11746     C = new (Context) OMPReadClause();
11747     break;
11748   case llvm::omp::OMPC_write:
11749     C = new (Context) OMPWriteClause();
11750     break;
11751   case llvm::omp::OMPC_update:
11752     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11753     break;
11754   case llvm::omp::OMPC_capture:
11755     C = new (Context) OMPCaptureClause();
11756     break;
11757   case llvm::omp::OMPC_seq_cst:
11758     C = new (Context) OMPSeqCstClause();
11759     break;
11760   case llvm::omp::OMPC_acq_rel:
11761     C = new (Context) OMPAcqRelClause();
11762     break;
11763   case llvm::omp::OMPC_acquire:
11764     C = new (Context) OMPAcquireClause();
11765     break;
11766   case llvm::omp::OMPC_release:
11767     C = new (Context) OMPReleaseClause();
11768     break;
11769   case llvm::omp::OMPC_relaxed:
11770     C = new (Context) OMPRelaxedClause();
11771     break;
11772   case llvm::omp::OMPC_threads:
11773     C = new (Context) OMPThreadsClause();
11774     break;
11775   case llvm::omp::OMPC_simd:
11776     C = new (Context) OMPSIMDClause();
11777     break;
11778   case llvm::omp::OMPC_nogroup:
11779     C = new (Context) OMPNogroupClause();
11780     break;
11781   case llvm::omp::OMPC_unified_address:
11782     C = new (Context) OMPUnifiedAddressClause();
11783     break;
11784   case llvm::omp::OMPC_unified_shared_memory:
11785     C = new (Context) OMPUnifiedSharedMemoryClause();
11786     break;
11787   case llvm::omp::OMPC_reverse_offload:
11788     C = new (Context) OMPReverseOffloadClause();
11789     break;
11790   case llvm::omp::OMPC_dynamic_allocators:
11791     C = new (Context) OMPDynamicAllocatorsClause();
11792     break;
11793   case llvm::omp::OMPC_atomic_default_mem_order:
11794     C = new (Context) OMPAtomicDefaultMemOrderClause();
11795     break;
11796  case llvm::omp::OMPC_private:
11797     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11798     break;
11799   case llvm::omp::OMPC_firstprivate:
11800     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11801     break;
11802   case llvm::omp::OMPC_lastprivate:
11803     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11804     break;
11805   case llvm::omp::OMPC_shared:
11806     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11807     break;
11808   case llvm::omp::OMPC_reduction: {
11809     unsigned N = Record.readInt();
11810     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11811     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11812     break;
11813   }
11814   case llvm::omp::OMPC_task_reduction:
11815     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11816     break;
11817   case llvm::omp::OMPC_in_reduction:
11818     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11819     break;
11820   case llvm::omp::OMPC_linear:
11821     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11822     break;
11823   case llvm::omp::OMPC_aligned:
11824     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11825     break;
11826   case llvm::omp::OMPC_copyin:
11827     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11828     break;
11829   case llvm::omp::OMPC_copyprivate:
11830     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11831     break;
11832   case llvm::omp::OMPC_flush:
11833     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11834     break;
11835   case llvm::omp::OMPC_depobj:
11836     C = OMPDepobjClause::CreateEmpty(Context);
11837     break;
11838   case llvm::omp::OMPC_depend: {
11839     unsigned NumVars = Record.readInt();
11840     unsigned NumLoops = Record.readInt();
11841     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11842     break;
11843   }
11844   case llvm::omp::OMPC_device:
11845     C = new (Context) OMPDeviceClause();
11846     break;
11847   case llvm::omp::OMPC_map: {
11848     OMPMappableExprListSizeTy Sizes;
11849     Sizes.NumVars = Record.readInt();
11850     Sizes.NumUniqueDeclarations = Record.readInt();
11851     Sizes.NumComponentLists = Record.readInt();
11852     Sizes.NumComponents = Record.readInt();
11853     C = OMPMapClause::CreateEmpty(Context, Sizes);
11854     break;
11855   }
11856   case llvm::omp::OMPC_num_teams:
11857     C = new (Context) OMPNumTeamsClause();
11858     break;
11859   case llvm::omp::OMPC_thread_limit:
11860     C = new (Context) OMPThreadLimitClause();
11861     break;
11862   case llvm::omp::OMPC_priority:
11863     C = new (Context) OMPPriorityClause();
11864     break;
11865   case llvm::omp::OMPC_grainsize:
11866     C = new (Context) OMPGrainsizeClause();
11867     break;
11868   case llvm::omp::OMPC_num_tasks:
11869     C = new (Context) OMPNumTasksClause();
11870     break;
11871   case llvm::omp::OMPC_hint:
11872     C = new (Context) OMPHintClause();
11873     break;
11874   case llvm::omp::OMPC_dist_schedule:
11875     C = new (Context) OMPDistScheduleClause();
11876     break;
11877   case llvm::omp::OMPC_defaultmap:
11878     C = new (Context) OMPDefaultmapClause();
11879     break;
11880   case llvm::omp::OMPC_to: {
11881     OMPMappableExprListSizeTy Sizes;
11882     Sizes.NumVars = Record.readInt();
11883     Sizes.NumUniqueDeclarations = Record.readInt();
11884     Sizes.NumComponentLists = Record.readInt();
11885     Sizes.NumComponents = Record.readInt();
11886     C = OMPToClause::CreateEmpty(Context, Sizes);
11887     break;
11888   }
11889   case llvm::omp::OMPC_from: {
11890     OMPMappableExprListSizeTy Sizes;
11891     Sizes.NumVars = Record.readInt();
11892     Sizes.NumUniqueDeclarations = Record.readInt();
11893     Sizes.NumComponentLists = Record.readInt();
11894     Sizes.NumComponents = Record.readInt();
11895     C = OMPFromClause::CreateEmpty(Context, Sizes);
11896     break;
11897   }
11898   case llvm::omp::OMPC_use_device_ptr: {
11899     OMPMappableExprListSizeTy Sizes;
11900     Sizes.NumVars = Record.readInt();
11901     Sizes.NumUniqueDeclarations = Record.readInt();
11902     Sizes.NumComponentLists = Record.readInt();
11903     Sizes.NumComponents = Record.readInt();
11904     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11905     break;
11906   }
11907   case llvm::omp::OMPC_use_device_addr: {
11908     OMPMappableExprListSizeTy Sizes;
11909     Sizes.NumVars = Record.readInt();
11910     Sizes.NumUniqueDeclarations = Record.readInt();
11911     Sizes.NumComponentLists = Record.readInt();
11912     Sizes.NumComponents = Record.readInt();
11913     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11914     break;
11915   }
11916   case llvm::omp::OMPC_is_device_ptr: {
11917     OMPMappableExprListSizeTy Sizes;
11918     Sizes.NumVars = Record.readInt();
11919     Sizes.NumUniqueDeclarations = Record.readInt();
11920     Sizes.NumComponentLists = Record.readInt();
11921     Sizes.NumComponents = Record.readInt();
11922     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11923     break;
11924   }
11925   case llvm::omp::OMPC_allocate:
11926     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11927     break;
11928   case llvm::omp::OMPC_nontemporal:
11929     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11930     break;
11931   case llvm::omp::OMPC_inclusive:
11932     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11933     break;
11934   case llvm::omp::OMPC_exclusive:
11935     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11936     break;
11937   case llvm::omp::OMPC_order:
11938     C = new (Context) OMPOrderClause();
11939     break;
11940   case llvm::omp::OMPC_init:
11941     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11942     break;
11943   case llvm::omp::OMPC_use:
11944     C = new (Context) OMPUseClause();
11945     break;
11946   case llvm::omp::OMPC_destroy:
11947     C = new (Context) OMPDestroyClause();
11948     break;
11949   case llvm::omp::OMPC_novariants:
11950     C = new (Context) OMPNovariantsClause();
11951     break;
11952   case llvm::omp::OMPC_nocontext:
11953     C = new (Context) OMPNocontextClause();
11954     break;
11955   case llvm::omp::OMPC_detach:
11956     C = new (Context) OMPDetachClause();
11957     break;
11958   case llvm::omp::OMPC_uses_allocators:
11959     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11960     break;
11961   case llvm::omp::OMPC_affinity:
11962     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11963     break;
11964   case llvm::omp::OMPC_filter:
11965     C = new (Context) OMPFilterClause();
11966     break;
11967 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11968   case llvm::omp::Enum:                                                        \
11969     break;
11970 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11971   default:
11972     break;
11973   }
11974   assert(C && "Unknown OMPClause type");
11975 
11976   Visit(C);
11977   C->setLocStart(Record.readSourceLocation());
11978   C->setLocEnd(Record.readSourceLocation());
11979 
11980   return C;
11981 }
11982 
11983 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
11984   C->setPreInitStmt(Record.readSubStmt(),
11985                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
11986 }
11987 
11988 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
11989   VisitOMPClauseWithPreInit(C);
11990   C->setPostUpdateExpr(Record.readSubExpr());
11991 }
11992 
11993 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
11994   VisitOMPClauseWithPreInit(C);
11995   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
11996   C->setNameModifierLoc(Record.readSourceLocation());
11997   C->setColonLoc(Record.readSourceLocation());
11998   C->setCondition(Record.readSubExpr());
11999   C->setLParenLoc(Record.readSourceLocation());
12000 }
12001 
12002 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12003   VisitOMPClauseWithPreInit(C);
12004   C->setCondition(Record.readSubExpr());
12005   C->setLParenLoc(Record.readSourceLocation());
12006 }
12007 
12008 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12009   VisitOMPClauseWithPreInit(C);
12010   C->setNumThreads(Record.readSubExpr());
12011   C->setLParenLoc(Record.readSourceLocation());
12012 }
12013 
12014 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12015   C->setSafelen(Record.readSubExpr());
12016   C->setLParenLoc(Record.readSourceLocation());
12017 }
12018 
12019 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12020   C->setSimdlen(Record.readSubExpr());
12021   C->setLParenLoc(Record.readSourceLocation());
12022 }
12023 
12024 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12025   for (Expr *&E : C->getSizesRefs())
12026     E = Record.readSubExpr();
12027   C->setLParenLoc(Record.readSourceLocation());
12028 }
12029 
12030 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12031 
12032 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12033   C->setFactor(Record.readSubExpr());
12034   C->setLParenLoc(Record.readSourceLocation());
12035 }
12036 
12037 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12038   C->setAllocator(Record.readExpr());
12039   C->setLParenLoc(Record.readSourceLocation());
12040 }
12041 
12042 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12043   C->setNumForLoops(Record.readSubExpr());
12044   C->setLParenLoc(Record.readSourceLocation());
12045 }
12046 
12047 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12048   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12049   C->setLParenLoc(Record.readSourceLocation());
12050   C->setDefaultKindKwLoc(Record.readSourceLocation());
12051 }
12052 
12053 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12054   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12055   C->setLParenLoc(Record.readSourceLocation());
12056   C->setProcBindKindKwLoc(Record.readSourceLocation());
12057 }
12058 
12059 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12060   VisitOMPClauseWithPreInit(C);
12061   C->setScheduleKind(
12062        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12063   C->setFirstScheduleModifier(
12064       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12065   C->setSecondScheduleModifier(
12066       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12067   C->setChunkSize(Record.readSubExpr());
12068   C->setLParenLoc(Record.readSourceLocation());
12069   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12070   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12071   C->setScheduleKindLoc(Record.readSourceLocation());
12072   C->setCommaLoc(Record.readSourceLocation());
12073 }
12074 
12075 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12076   C->setNumForLoops(Record.readSubExpr());
12077   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12078     C->setLoopNumIterations(I, Record.readSubExpr());
12079   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12080     C->setLoopCounter(I, Record.readSubExpr());
12081   C->setLParenLoc(Record.readSourceLocation());
12082 }
12083 
12084 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12085   C->setEventHandler(Record.readSubExpr());
12086   C->setLParenLoc(Record.readSourceLocation());
12087 }
12088 
12089 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12090 
12091 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12092 
12093 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12094 
12095 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12096 
12097 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12098 
12099 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12100   if (C->isExtended()) {
12101     C->setLParenLoc(Record.readSourceLocation());
12102     C->setArgumentLoc(Record.readSourceLocation());
12103     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12104   }
12105 }
12106 
12107 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12108 
12109 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12110 
12111 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12112 
12113 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12114 
12115 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12116 
12117 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12118 
12119 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12120 
12121 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12122 
12123 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12124 
12125 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12126   unsigned NumVars = C->varlist_size();
12127   SmallVector<Expr *, 16> Vars;
12128   Vars.reserve(NumVars);
12129   for (unsigned I = 0; I != NumVars; ++I)
12130     Vars.push_back(Record.readSubExpr());
12131   C->setVarRefs(Vars);
12132   C->setIsTarget(Record.readBool());
12133   C->setIsTargetSync(Record.readBool());
12134   C->setLParenLoc(Record.readSourceLocation());
12135   C->setVarLoc(Record.readSourceLocation());
12136 }
12137 
12138 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12139   C->setInteropVar(Record.readSubExpr());
12140   C->setLParenLoc(Record.readSourceLocation());
12141   C->setVarLoc(Record.readSourceLocation());
12142 }
12143 
12144 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12145   C->setInteropVar(Record.readSubExpr());
12146   C->setLParenLoc(Record.readSourceLocation());
12147   C->setVarLoc(Record.readSourceLocation());
12148 }
12149 
12150 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12151   VisitOMPClauseWithPreInit(C);
12152   C->setCondition(Record.readSubExpr());
12153   C->setLParenLoc(Record.readSourceLocation());
12154 }
12155 
12156 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12157   VisitOMPClauseWithPreInit(C);
12158   C->setCondition(Record.readSubExpr());
12159   C->setLParenLoc(Record.readSourceLocation());
12160 }
12161 
12162 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12163 
12164 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12165     OMPUnifiedSharedMemoryClause *) {}
12166 
12167 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12168 
12169 void
12170 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12171 }
12172 
12173 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12174     OMPAtomicDefaultMemOrderClause *C) {
12175   C->setAtomicDefaultMemOrderKind(
12176       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12177   C->setLParenLoc(Record.readSourceLocation());
12178   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12179 }
12180 
12181 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12182   C->setLParenLoc(Record.readSourceLocation());
12183   unsigned NumVars = C->varlist_size();
12184   SmallVector<Expr *, 16> Vars;
12185   Vars.reserve(NumVars);
12186   for (unsigned i = 0; i != NumVars; ++i)
12187     Vars.push_back(Record.readSubExpr());
12188   C->setVarRefs(Vars);
12189   Vars.clear();
12190   for (unsigned i = 0; i != NumVars; ++i)
12191     Vars.push_back(Record.readSubExpr());
12192   C->setPrivateCopies(Vars);
12193 }
12194 
12195 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12196   VisitOMPClauseWithPreInit(C);
12197   C->setLParenLoc(Record.readSourceLocation());
12198   unsigned NumVars = C->varlist_size();
12199   SmallVector<Expr *, 16> Vars;
12200   Vars.reserve(NumVars);
12201   for (unsigned i = 0; i != NumVars; ++i)
12202     Vars.push_back(Record.readSubExpr());
12203   C->setVarRefs(Vars);
12204   Vars.clear();
12205   for (unsigned i = 0; i != NumVars; ++i)
12206     Vars.push_back(Record.readSubExpr());
12207   C->setPrivateCopies(Vars);
12208   Vars.clear();
12209   for (unsigned i = 0; i != NumVars; ++i)
12210     Vars.push_back(Record.readSubExpr());
12211   C->setInits(Vars);
12212 }
12213 
12214 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12215   VisitOMPClauseWithPostUpdate(C);
12216   C->setLParenLoc(Record.readSourceLocation());
12217   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12218   C->setKindLoc(Record.readSourceLocation());
12219   C->setColonLoc(Record.readSourceLocation());
12220   unsigned NumVars = C->varlist_size();
12221   SmallVector<Expr *, 16> Vars;
12222   Vars.reserve(NumVars);
12223   for (unsigned i = 0; i != NumVars; ++i)
12224     Vars.push_back(Record.readSubExpr());
12225   C->setVarRefs(Vars);
12226   Vars.clear();
12227   for (unsigned i = 0; i != NumVars; ++i)
12228     Vars.push_back(Record.readSubExpr());
12229   C->setPrivateCopies(Vars);
12230   Vars.clear();
12231   for (unsigned i = 0; i != NumVars; ++i)
12232     Vars.push_back(Record.readSubExpr());
12233   C->setSourceExprs(Vars);
12234   Vars.clear();
12235   for (unsigned i = 0; i != NumVars; ++i)
12236     Vars.push_back(Record.readSubExpr());
12237   C->setDestinationExprs(Vars);
12238   Vars.clear();
12239   for (unsigned i = 0; i != NumVars; ++i)
12240     Vars.push_back(Record.readSubExpr());
12241   C->setAssignmentOps(Vars);
12242 }
12243 
12244 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12245   C->setLParenLoc(Record.readSourceLocation());
12246   unsigned NumVars = C->varlist_size();
12247   SmallVector<Expr *, 16> Vars;
12248   Vars.reserve(NumVars);
12249   for (unsigned i = 0; i != NumVars; ++i)
12250     Vars.push_back(Record.readSubExpr());
12251   C->setVarRefs(Vars);
12252 }
12253 
12254 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12255   VisitOMPClauseWithPostUpdate(C);
12256   C->setLParenLoc(Record.readSourceLocation());
12257   C->setModifierLoc(Record.readSourceLocation());
12258   C->setColonLoc(Record.readSourceLocation());
12259   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12260   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12261   C->setQualifierLoc(NNSL);
12262   C->setNameInfo(DNI);
12263 
12264   unsigned NumVars = C->varlist_size();
12265   SmallVector<Expr *, 16> Vars;
12266   Vars.reserve(NumVars);
12267   for (unsigned i = 0; i != NumVars; ++i)
12268     Vars.push_back(Record.readSubExpr());
12269   C->setVarRefs(Vars);
12270   Vars.clear();
12271   for (unsigned i = 0; i != NumVars; ++i)
12272     Vars.push_back(Record.readSubExpr());
12273   C->setPrivates(Vars);
12274   Vars.clear();
12275   for (unsigned i = 0; i != NumVars; ++i)
12276     Vars.push_back(Record.readSubExpr());
12277   C->setLHSExprs(Vars);
12278   Vars.clear();
12279   for (unsigned i = 0; i != NumVars; ++i)
12280     Vars.push_back(Record.readSubExpr());
12281   C->setRHSExprs(Vars);
12282   Vars.clear();
12283   for (unsigned i = 0; i != NumVars; ++i)
12284     Vars.push_back(Record.readSubExpr());
12285   C->setReductionOps(Vars);
12286   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12287     Vars.clear();
12288     for (unsigned i = 0; i != NumVars; ++i)
12289       Vars.push_back(Record.readSubExpr());
12290     C->setInscanCopyOps(Vars);
12291     Vars.clear();
12292     for (unsigned i = 0; i != NumVars; ++i)
12293       Vars.push_back(Record.readSubExpr());
12294     C->setInscanCopyArrayTemps(Vars);
12295     Vars.clear();
12296     for (unsigned i = 0; i != NumVars; ++i)
12297       Vars.push_back(Record.readSubExpr());
12298     C->setInscanCopyArrayElems(Vars);
12299   }
12300 }
12301 
12302 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12303   VisitOMPClauseWithPostUpdate(C);
12304   C->setLParenLoc(Record.readSourceLocation());
12305   C->setColonLoc(Record.readSourceLocation());
12306   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12307   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12308   C->setQualifierLoc(NNSL);
12309   C->setNameInfo(DNI);
12310 
12311   unsigned NumVars = C->varlist_size();
12312   SmallVector<Expr *, 16> Vars;
12313   Vars.reserve(NumVars);
12314   for (unsigned I = 0; I != NumVars; ++I)
12315     Vars.push_back(Record.readSubExpr());
12316   C->setVarRefs(Vars);
12317   Vars.clear();
12318   for (unsigned I = 0; I != NumVars; ++I)
12319     Vars.push_back(Record.readSubExpr());
12320   C->setPrivates(Vars);
12321   Vars.clear();
12322   for (unsigned I = 0; I != NumVars; ++I)
12323     Vars.push_back(Record.readSubExpr());
12324   C->setLHSExprs(Vars);
12325   Vars.clear();
12326   for (unsigned I = 0; I != NumVars; ++I)
12327     Vars.push_back(Record.readSubExpr());
12328   C->setRHSExprs(Vars);
12329   Vars.clear();
12330   for (unsigned I = 0; I != NumVars; ++I)
12331     Vars.push_back(Record.readSubExpr());
12332   C->setReductionOps(Vars);
12333 }
12334 
12335 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12336   VisitOMPClauseWithPostUpdate(C);
12337   C->setLParenLoc(Record.readSourceLocation());
12338   C->setColonLoc(Record.readSourceLocation());
12339   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12340   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12341   C->setQualifierLoc(NNSL);
12342   C->setNameInfo(DNI);
12343 
12344   unsigned NumVars = C->varlist_size();
12345   SmallVector<Expr *, 16> Vars;
12346   Vars.reserve(NumVars);
12347   for (unsigned I = 0; I != NumVars; ++I)
12348     Vars.push_back(Record.readSubExpr());
12349   C->setVarRefs(Vars);
12350   Vars.clear();
12351   for (unsigned I = 0; I != NumVars; ++I)
12352     Vars.push_back(Record.readSubExpr());
12353   C->setPrivates(Vars);
12354   Vars.clear();
12355   for (unsigned I = 0; I != NumVars; ++I)
12356     Vars.push_back(Record.readSubExpr());
12357   C->setLHSExprs(Vars);
12358   Vars.clear();
12359   for (unsigned I = 0; I != NumVars; ++I)
12360     Vars.push_back(Record.readSubExpr());
12361   C->setRHSExprs(Vars);
12362   Vars.clear();
12363   for (unsigned I = 0; I != NumVars; ++I)
12364     Vars.push_back(Record.readSubExpr());
12365   C->setReductionOps(Vars);
12366   Vars.clear();
12367   for (unsigned I = 0; I != NumVars; ++I)
12368     Vars.push_back(Record.readSubExpr());
12369   C->setTaskgroupDescriptors(Vars);
12370 }
12371 
12372 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12373   VisitOMPClauseWithPostUpdate(C);
12374   C->setLParenLoc(Record.readSourceLocation());
12375   C->setColonLoc(Record.readSourceLocation());
12376   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12377   C->setModifierLoc(Record.readSourceLocation());
12378   unsigned NumVars = C->varlist_size();
12379   SmallVector<Expr *, 16> Vars;
12380   Vars.reserve(NumVars);
12381   for (unsigned i = 0; i != NumVars; ++i)
12382     Vars.push_back(Record.readSubExpr());
12383   C->setVarRefs(Vars);
12384   Vars.clear();
12385   for (unsigned i = 0; i != NumVars; ++i)
12386     Vars.push_back(Record.readSubExpr());
12387   C->setPrivates(Vars);
12388   Vars.clear();
12389   for (unsigned i = 0; i != NumVars; ++i)
12390     Vars.push_back(Record.readSubExpr());
12391   C->setInits(Vars);
12392   Vars.clear();
12393   for (unsigned i = 0; i != NumVars; ++i)
12394     Vars.push_back(Record.readSubExpr());
12395   C->setUpdates(Vars);
12396   Vars.clear();
12397   for (unsigned i = 0; i != NumVars; ++i)
12398     Vars.push_back(Record.readSubExpr());
12399   C->setFinals(Vars);
12400   C->setStep(Record.readSubExpr());
12401   C->setCalcStep(Record.readSubExpr());
12402   Vars.clear();
12403   for (unsigned I = 0; I != NumVars + 1; ++I)
12404     Vars.push_back(Record.readSubExpr());
12405   C->setUsedExprs(Vars);
12406 }
12407 
12408 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12409   C->setLParenLoc(Record.readSourceLocation());
12410   C->setColonLoc(Record.readSourceLocation());
12411   unsigned NumVars = C->varlist_size();
12412   SmallVector<Expr *, 16> Vars;
12413   Vars.reserve(NumVars);
12414   for (unsigned i = 0; i != NumVars; ++i)
12415     Vars.push_back(Record.readSubExpr());
12416   C->setVarRefs(Vars);
12417   C->setAlignment(Record.readSubExpr());
12418 }
12419 
12420 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12421   C->setLParenLoc(Record.readSourceLocation());
12422   unsigned NumVars = C->varlist_size();
12423   SmallVector<Expr *, 16> Exprs;
12424   Exprs.reserve(NumVars);
12425   for (unsigned i = 0; i != NumVars; ++i)
12426     Exprs.push_back(Record.readSubExpr());
12427   C->setVarRefs(Exprs);
12428   Exprs.clear();
12429   for (unsigned i = 0; i != NumVars; ++i)
12430     Exprs.push_back(Record.readSubExpr());
12431   C->setSourceExprs(Exprs);
12432   Exprs.clear();
12433   for (unsigned i = 0; i != NumVars; ++i)
12434     Exprs.push_back(Record.readSubExpr());
12435   C->setDestinationExprs(Exprs);
12436   Exprs.clear();
12437   for (unsigned i = 0; i != NumVars; ++i)
12438     Exprs.push_back(Record.readSubExpr());
12439   C->setAssignmentOps(Exprs);
12440 }
12441 
12442 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12443   C->setLParenLoc(Record.readSourceLocation());
12444   unsigned NumVars = C->varlist_size();
12445   SmallVector<Expr *, 16> Exprs;
12446   Exprs.reserve(NumVars);
12447   for (unsigned i = 0; i != NumVars; ++i)
12448     Exprs.push_back(Record.readSubExpr());
12449   C->setVarRefs(Exprs);
12450   Exprs.clear();
12451   for (unsigned i = 0; i != NumVars; ++i)
12452     Exprs.push_back(Record.readSubExpr());
12453   C->setSourceExprs(Exprs);
12454   Exprs.clear();
12455   for (unsigned i = 0; i != NumVars; ++i)
12456     Exprs.push_back(Record.readSubExpr());
12457   C->setDestinationExprs(Exprs);
12458   Exprs.clear();
12459   for (unsigned i = 0; i != NumVars; ++i)
12460     Exprs.push_back(Record.readSubExpr());
12461   C->setAssignmentOps(Exprs);
12462 }
12463 
12464 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12465   C->setLParenLoc(Record.readSourceLocation());
12466   unsigned NumVars = C->varlist_size();
12467   SmallVector<Expr *, 16> Vars;
12468   Vars.reserve(NumVars);
12469   for (unsigned i = 0; i != NumVars; ++i)
12470     Vars.push_back(Record.readSubExpr());
12471   C->setVarRefs(Vars);
12472 }
12473 
12474 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12475   C->setDepobj(Record.readSubExpr());
12476   C->setLParenLoc(Record.readSourceLocation());
12477 }
12478 
12479 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12480   C->setLParenLoc(Record.readSourceLocation());
12481   C->setModifier(Record.readSubExpr());
12482   C->setDependencyKind(
12483       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12484   C->setDependencyLoc(Record.readSourceLocation());
12485   C->setColonLoc(Record.readSourceLocation());
12486   unsigned NumVars = C->varlist_size();
12487   SmallVector<Expr *, 16> Vars;
12488   Vars.reserve(NumVars);
12489   for (unsigned I = 0; I != NumVars; ++I)
12490     Vars.push_back(Record.readSubExpr());
12491   C->setVarRefs(Vars);
12492   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12493     C->setLoopData(I, Record.readSubExpr());
12494 }
12495 
12496 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12497   VisitOMPClauseWithPreInit(C);
12498   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12499   C->setDevice(Record.readSubExpr());
12500   C->setModifierLoc(Record.readSourceLocation());
12501   C->setLParenLoc(Record.readSourceLocation());
12502 }
12503 
12504 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12505   C->setLParenLoc(Record.readSourceLocation());
12506   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12507     C->setMapTypeModifier(
12508         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12509     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12510   }
12511   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12512   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12513   C->setMapType(
12514      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12515   C->setMapLoc(Record.readSourceLocation());
12516   C->setColonLoc(Record.readSourceLocation());
12517   auto NumVars = C->varlist_size();
12518   auto UniqueDecls = C->getUniqueDeclarationsNum();
12519   auto TotalLists = C->getTotalComponentListNum();
12520   auto TotalComponents = C->getTotalComponentsNum();
12521 
12522   SmallVector<Expr *, 16> Vars;
12523   Vars.reserve(NumVars);
12524   for (unsigned i = 0; i != NumVars; ++i)
12525     Vars.push_back(Record.readExpr());
12526   C->setVarRefs(Vars);
12527 
12528   SmallVector<Expr *, 16> UDMappers;
12529   UDMappers.reserve(NumVars);
12530   for (unsigned I = 0; I < NumVars; ++I)
12531     UDMappers.push_back(Record.readExpr());
12532   C->setUDMapperRefs(UDMappers);
12533 
12534   SmallVector<ValueDecl *, 16> Decls;
12535   Decls.reserve(UniqueDecls);
12536   for (unsigned i = 0; i < UniqueDecls; ++i)
12537     Decls.push_back(Record.readDeclAs<ValueDecl>());
12538   C->setUniqueDecls(Decls);
12539 
12540   SmallVector<unsigned, 16> ListsPerDecl;
12541   ListsPerDecl.reserve(UniqueDecls);
12542   for (unsigned i = 0; i < UniqueDecls; ++i)
12543     ListsPerDecl.push_back(Record.readInt());
12544   C->setDeclNumLists(ListsPerDecl);
12545 
12546   SmallVector<unsigned, 32> ListSizes;
12547   ListSizes.reserve(TotalLists);
12548   for (unsigned i = 0; i < TotalLists; ++i)
12549     ListSizes.push_back(Record.readInt());
12550   C->setComponentListSizes(ListSizes);
12551 
12552   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12553   Components.reserve(TotalComponents);
12554   for (unsigned i = 0; i < TotalComponents; ++i) {
12555     Expr *AssociatedExprPr = Record.readExpr();
12556     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12557     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12558                             /*IsNonContiguous=*/false);
12559   }
12560   C->setComponents(Components, ListSizes);
12561 }
12562 
12563 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12564   C->setLParenLoc(Record.readSourceLocation());
12565   C->setColonLoc(Record.readSourceLocation());
12566   C->setAllocator(Record.readSubExpr());
12567   unsigned NumVars = C->varlist_size();
12568   SmallVector<Expr *, 16> Vars;
12569   Vars.reserve(NumVars);
12570   for (unsigned i = 0; i != NumVars; ++i)
12571     Vars.push_back(Record.readSubExpr());
12572   C->setVarRefs(Vars);
12573 }
12574 
12575 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12576   VisitOMPClauseWithPreInit(C);
12577   C->setNumTeams(Record.readSubExpr());
12578   C->setLParenLoc(Record.readSourceLocation());
12579 }
12580 
12581 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12582   VisitOMPClauseWithPreInit(C);
12583   C->setThreadLimit(Record.readSubExpr());
12584   C->setLParenLoc(Record.readSourceLocation());
12585 }
12586 
12587 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12588   VisitOMPClauseWithPreInit(C);
12589   C->setPriority(Record.readSubExpr());
12590   C->setLParenLoc(Record.readSourceLocation());
12591 }
12592 
12593 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12594   VisitOMPClauseWithPreInit(C);
12595   C->setGrainsize(Record.readSubExpr());
12596   C->setLParenLoc(Record.readSourceLocation());
12597 }
12598 
12599 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12600   VisitOMPClauseWithPreInit(C);
12601   C->setNumTasks(Record.readSubExpr());
12602   C->setLParenLoc(Record.readSourceLocation());
12603 }
12604 
12605 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12606   C->setHint(Record.readSubExpr());
12607   C->setLParenLoc(Record.readSourceLocation());
12608 }
12609 
12610 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12611   VisitOMPClauseWithPreInit(C);
12612   C->setDistScheduleKind(
12613       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12614   C->setChunkSize(Record.readSubExpr());
12615   C->setLParenLoc(Record.readSourceLocation());
12616   C->setDistScheduleKindLoc(Record.readSourceLocation());
12617   C->setCommaLoc(Record.readSourceLocation());
12618 }
12619 
12620 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12621   C->setDefaultmapKind(
12622        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12623   C->setDefaultmapModifier(
12624       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12625   C->setLParenLoc(Record.readSourceLocation());
12626   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12627   C->setDefaultmapKindLoc(Record.readSourceLocation());
12628 }
12629 
12630 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12631   C->setLParenLoc(Record.readSourceLocation());
12632   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12633     C->setMotionModifier(
12634         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12635     C->setMotionModifierLoc(I, Record.readSourceLocation());
12636   }
12637   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12638   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12639   C->setColonLoc(Record.readSourceLocation());
12640   auto NumVars = C->varlist_size();
12641   auto UniqueDecls = C->getUniqueDeclarationsNum();
12642   auto TotalLists = C->getTotalComponentListNum();
12643   auto TotalComponents = C->getTotalComponentsNum();
12644 
12645   SmallVector<Expr *, 16> Vars;
12646   Vars.reserve(NumVars);
12647   for (unsigned i = 0; i != NumVars; ++i)
12648     Vars.push_back(Record.readSubExpr());
12649   C->setVarRefs(Vars);
12650 
12651   SmallVector<Expr *, 16> UDMappers;
12652   UDMappers.reserve(NumVars);
12653   for (unsigned I = 0; I < NumVars; ++I)
12654     UDMappers.push_back(Record.readSubExpr());
12655   C->setUDMapperRefs(UDMappers);
12656 
12657   SmallVector<ValueDecl *, 16> Decls;
12658   Decls.reserve(UniqueDecls);
12659   for (unsigned i = 0; i < UniqueDecls; ++i)
12660     Decls.push_back(Record.readDeclAs<ValueDecl>());
12661   C->setUniqueDecls(Decls);
12662 
12663   SmallVector<unsigned, 16> ListsPerDecl;
12664   ListsPerDecl.reserve(UniqueDecls);
12665   for (unsigned i = 0; i < UniqueDecls; ++i)
12666     ListsPerDecl.push_back(Record.readInt());
12667   C->setDeclNumLists(ListsPerDecl);
12668 
12669   SmallVector<unsigned, 32> ListSizes;
12670   ListSizes.reserve(TotalLists);
12671   for (unsigned i = 0; i < TotalLists; ++i)
12672     ListSizes.push_back(Record.readInt());
12673   C->setComponentListSizes(ListSizes);
12674 
12675   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12676   Components.reserve(TotalComponents);
12677   for (unsigned i = 0; i < TotalComponents; ++i) {
12678     Expr *AssociatedExprPr = Record.readSubExpr();
12679     bool IsNonContiguous = Record.readBool();
12680     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12681     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12682   }
12683   C->setComponents(Components, ListSizes);
12684 }
12685 
12686 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12687   C->setLParenLoc(Record.readSourceLocation());
12688   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12689     C->setMotionModifier(
12690         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12691     C->setMotionModifierLoc(I, Record.readSourceLocation());
12692   }
12693   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12694   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12695   C->setColonLoc(Record.readSourceLocation());
12696   auto NumVars = C->varlist_size();
12697   auto UniqueDecls = C->getUniqueDeclarationsNum();
12698   auto TotalLists = C->getTotalComponentListNum();
12699   auto TotalComponents = C->getTotalComponentsNum();
12700 
12701   SmallVector<Expr *, 16> Vars;
12702   Vars.reserve(NumVars);
12703   for (unsigned i = 0; i != NumVars; ++i)
12704     Vars.push_back(Record.readSubExpr());
12705   C->setVarRefs(Vars);
12706 
12707   SmallVector<Expr *, 16> UDMappers;
12708   UDMappers.reserve(NumVars);
12709   for (unsigned I = 0; I < NumVars; ++I)
12710     UDMappers.push_back(Record.readSubExpr());
12711   C->setUDMapperRefs(UDMappers);
12712 
12713   SmallVector<ValueDecl *, 16> Decls;
12714   Decls.reserve(UniqueDecls);
12715   for (unsigned i = 0; i < UniqueDecls; ++i)
12716     Decls.push_back(Record.readDeclAs<ValueDecl>());
12717   C->setUniqueDecls(Decls);
12718 
12719   SmallVector<unsigned, 16> ListsPerDecl;
12720   ListsPerDecl.reserve(UniqueDecls);
12721   for (unsigned i = 0; i < UniqueDecls; ++i)
12722     ListsPerDecl.push_back(Record.readInt());
12723   C->setDeclNumLists(ListsPerDecl);
12724 
12725   SmallVector<unsigned, 32> ListSizes;
12726   ListSizes.reserve(TotalLists);
12727   for (unsigned i = 0; i < TotalLists; ++i)
12728     ListSizes.push_back(Record.readInt());
12729   C->setComponentListSizes(ListSizes);
12730 
12731   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12732   Components.reserve(TotalComponents);
12733   for (unsigned i = 0; i < TotalComponents; ++i) {
12734     Expr *AssociatedExprPr = Record.readSubExpr();
12735     bool IsNonContiguous = Record.readBool();
12736     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12737     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12738   }
12739   C->setComponents(Components, ListSizes);
12740 }
12741 
12742 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12743   C->setLParenLoc(Record.readSourceLocation());
12744   auto NumVars = C->varlist_size();
12745   auto UniqueDecls = C->getUniqueDeclarationsNum();
12746   auto TotalLists = C->getTotalComponentListNum();
12747   auto TotalComponents = C->getTotalComponentsNum();
12748 
12749   SmallVector<Expr *, 16> Vars;
12750   Vars.reserve(NumVars);
12751   for (unsigned i = 0; i != NumVars; ++i)
12752     Vars.push_back(Record.readSubExpr());
12753   C->setVarRefs(Vars);
12754   Vars.clear();
12755   for (unsigned i = 0; i != NumVars; ++i)
12756     Vars.push_back(Record.readSubExpr());
12757   C->setPrivateCopies(Vars);
12758   Vars.clear();
12759   for (unsigned i = 0; i != NumVars; ++i)
12760     Vars.push_back(Record.readSubExpr());
12761   C->setInits(Vars);
12762 
12763   SmallVector<ValueDecl *, 16> Decls;
12764   Decls.reserve(UniqueDecls);
12765   for (unsigned i = 0; i < UniqueDecls; ++i)
12766     Decls.push_back(Record.readDeclAs<ValueDecl>());
12767   C->setUniqueDecls(Decls);
12768 
12769   SmallVector<unsigned, 16> ListsPerDecl;
12770   ListsPerDecl.reserve(UniqueDecls);
12771   for (unsigned i = 0; i < UniqueDecls; ++i)
12772     ListsPerDecl.push_back(Record.readInt());
12773   C->setDeclNumLists(ListsPerDecl);
12774 
12775   SmallVector<unsigned, 32> ListSizes;
12776   ListSizes.reserve(TotalLists);
12777   for (unsigned i = 0; i < TotalLists; ++i)
12778     ListSizes.push_back(Record.readInt());
12779   C->setComponentListSizes(ListSizes);
12780 
12781   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12782   Components.reserve(TotalComponents);
12783   for (unsigned i = 0; i < TotalComponents; ++i) {
12784     auto *AssociatedExprPr = Record.readSubExpr();
12785     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12786     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12787                             /*IsNonContiguous=*/false);
12788   }
12789   C->setComponents(Components, ListSizes);
12790 }
12791 
12792 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12793   C->setLParenLoc(Record.readSourceLocation());
12794   auto NumVars = C->varlist_size();
12795   auto UniqueDecls = C->getUniqueDeclarationsNum();
12796   auto TotalLists = C->getTotalComponentListNum();
12797   auto TotalComponents = C->getTotalComponentsNum();
12798 
12799   SmallVector<Expr *, 16> Vars;
12800   Vars.reserve(NumVars);
12801   for (unsigned i = 0; i != NumVars; ++i)
12802     Vars.push_back(Record.readSubExpr());
12803   C->setVarRefs(Vars);
12804 
12805   SmallVector<ValueDecl *, 16> Decls;
12806   Decls.reserve(UniqueDecls);
12807   for (unsigned i = 0; i < UniqueDecls; ++i)
12808     Decls.push_back(Record.readDeclAs<ValueDecl>());
12809   C->setUniqueDecls(Decls);
12810 
12811   SmallVector<unsigned, 16> ListsPerDecl;
12812   ListsPerDecl.reserve(UniqueDecls);
12813   for (unsigned i = 0; i < UniqueDecls; ++i)
12814     ListsPerDecl.push_back(Record.readInt());
12815   C->setDeclNumLists(ListsPerDecl);
12816 
12817   SmallVector<unsigned, 32> ListSizes;
12818   ListSizes.reserve(TotalLists);
12819   for (unsigned i = 0; i < TotalLists; ++i)
12820     ListSizes.push_back(Record.readInt());
12821   C->setComponentListSizes(ListSizes);
12822 
12823   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12824   Components.reserve(TotalComponents);
12825   for (unsigned i = 0; i < TotalComponents; ++i) {
12826     Expr *AssociatedExpr = Record.readSubExpr();
12827     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12828     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12829                             /*IsNonContiguous*/ false);
12830   }
12831   C->setComponents(Components, ListSizes);
12832 }
12833 
12834 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12835   C->setLParenLoc(Record.readSourceLocation());
12836   auto NumVars = C->varlist_size();
12837   auto UniqueDecls = C->getUniqueDeclarationsNum();
12838   auto TotalLists = C->getTotalComponentListNum();
12839   auto TotalComponents = C->getTotalComponentsNum();
12840 
12841   SmallVector<Expr *, 16> Vars;
12842   Vars.reserve(NumVars);
12843   for (unsigned i = 0; i != NumVars; ++i)
12844     Vars.push_back(Record.readSubExpr());
12845   C->setVarRefs(Vars);
12846   Vars.clear();
12847 
12848   SmallVector<ValueDecl *, 16> Decls;
12849   Decls.reserve(UniqueDecls);
12850   for (unsigned i = 0; i < UniqueDecls; ++i)
12851     Decls.push_back(Record.readDeclAs<ValueDecl>());
12852   C->setUniqueDecls(Decls);
12853 
12854   SmallVector<unsigned, 16> ListsPerDecl;
12855   ListsPerDecl.reserve(UniqueDecls);
12856   for (unsigned i = 0; i < UniqueDecls; ++i)
12857     ListsPerDecl.push_back(Record.readInt());
12858   C->setDeclNumLists(ListsPerDecl);
12859 
12860   SmallVector<unsigned, 32> ListSizes;
12861   ListSizes.reserve(TotalLists);
12862   for (unsigned i = 0; i < TotalLists; ++i)
12863     ListSizes.push_back(Record.readInt());
12864   C->setComponentListSizes(ListSizes);
12865 
12866   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12867   Components.reserve(TotalComponents);
12868   for (unsigned i = 0; i < TotalComponents; ++i) {
12869     Expr *AssociatedExpr = Record.readSubExpr();
12870     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12871     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12872                             /*IsNonContiguous=*/false);
12873   }
12874   C->setComponents(Components, ListSizes);
12875 }
12876 
12877 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12878   C->setLParenLoc(Record.readSourceLocation());
12879   unsigned NumVars = C->varlist_size();
12880   SmallVector<Expr *, 16> Vars;
12881   Vars.reserve(NumVars);
12882   for (unsigned i = 0; i != NumVars; ++i)
12883     Vars.push_back(Record.readSubExpr());
12884   C->setVarRefs(Vars);
12885   Vars.clear();
12886   Vars.reserve(NumVars);
12887   for (unsigned i = 0; i != NumVars; ++i)
12888     Vars.push_back(Record.readSubExpr());
12889   C->setPrivateRefs(Vars);
12890 }
12891 
12892 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12893   C->setLParenLoc(Record.readSourceLocation());
12894   unsigned NumVars = C->varlist_size();
12895   SmallVector<Expr *, 16> Vars;
12896   Vars.reserve(NumVars);
12897   for (unsigned i = 0; i != NumVars; ++i)
12898     Vars.push_back(Record.readSubExpr());
12899   C->setVarRefs(Vars);
12900 }
12901 
12902 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12903   C->setLParenLoc(Record.readSourceLocation());
12904   unsigned NumVars = C->varlist_size();
12905   SmallVector<Expr *, 16> Vars;
12906   Vars.reserve(NumVars);
12907   for (unsigned i = 0; i != NumVars; ++i)
12908     Vars.push_back(Record.readSubExpr());
12909   C->setVarRefs(Vars);
12910 }
12911 
12912 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12913   C->setLParenLoc(Record.readSourceLocation());
12914   unsigned NumOfAllocators = C->getNumberOfAllocators();
12915   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12916   Data.reserve(NumOfAllocators);
12917   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12918     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12919     D.Allocator = Record.readSubExpr();
12920     D.AllocatorTraits = Record.readSubExpr();
12921     D.LParenLoc = Record.readSourceLocation();
12922     D.RParenLoc = Record.readSourceLocation();
12923   }
12924   C->setAllocatorsData(Data);
12925 }
12926 
12927 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12928   C->setLParenLoc(Record.readSourceLocation());
12929   C->setModifier(Record.readSubExpr());
12930   C->setColonLoc(Record.readSourceLocation());
12931   unsigned NumOfLocators = C->varlist_size();
12932   SmallVector<Expr *, 4> Locators;
12933   Locators.reserve(NumOfLocators);
12934   for (unsigned I = 0; I != NumOfLocators; ++I)
12935     Locators.push_back(Record.readSubExpr());
12936   C->setVarRefs(Locators);
12937 }
12938 
12939 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12940   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12941   C->setLParenLoc(Record.readSourceLocation());
12942   C->setKindKwLoc(Record.readSourceLocation());
12943 }
12944 
12945 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12946   VisitOMPClauseWithPreInit(C);
12947   C->setThreadID(Record.readSubExpr());
12948   C->setLParenLoc(Record.readSourceLocation());
12949 }
12950 
12951 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12952   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12953   TI.Sets.resize(readUInt32());
12954   for (auto &Set : TI.Sets) {
12955     Set.Kind = readEnum<llvm::omp::TraitSet>();
12956     Set.Selectors.resize(readUInt32());
12957     for (auto &Selector : Set.Selectors) {
12958       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12959       Selector.ScoreOrCondition = nullptr;
12960       if (readBool())
12961         Selector.ScoreOrCondition = readExprRef();
12962       Selector.Properties.resize(readUInt32());
12963       for (auto &Property : Selector.Properties)
12964         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12965     }
12966   }
12967   return &TI;
12968 }
12969 
12970 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
12971   if (!Data)
12972     return;
12973   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
12974     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
12975     skipInts(3);
12976   }
12977   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
12978   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
12979     Clauses[I] = readOMPClause();
12980   Data->setClauses(Clauses);
12981   if (Data->hasAssociatedStmt())
12982     Data->setAssociatedStmt(readStmt());
12983   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
12984     Data->getChildren()[I] = readStmt();
12985 }
12986