xref: /freebsd-src/contrib/llvm-project/clang/lib/Serialization/ASTReader.cpp (revision 0eae32dcef82f6f06de6419a0d623d7def0cc8f6)
1 //===- ASTReader.cpp - AST File Reader ------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file defines the ASTReader class, which reads AST files.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "ASTCommon.h"
14 #include "ASTReaderInternals.h"
15 #include "clang/AST/ASTConsumer.h"
16 #include "clang/AST/ASTContext.h"
17 #include "clang/AST/ASTMutationListener.h"
18 #include "clang/AST/ASTUnresolvedSet.h"
19 #include "clang/AST/AbstractTypeReader.h"
20 #include "clang/AST/Decl.h"
21 #include "clang/AST/DeclBase.h"
22 #include "clang/AST/DeclCXX.h"
23 #include "clang/AST/DeclFriend.h"
24 #include "clang/AST/DeclGroup.h"
25 #include "clang/AST/DeclObjC.h"
26 #include "clang/AST/DeclTemplate.h"
27 #include "clang/AST/DeclarationName.h"
28 #include "clang/AST/Expr.h"
29 #include "clang/AST/ExprCXX.h"
30 #include "clang/AST/ExternalASTSource.h"
31 #include "clang/AST/NestedNameSpecifier.h"
32 #include "clang/AST/ODRHash.h"
33 #include "clang/AST/OpenMPClause.h"
34 #include "clang/AST/RawCommentList.h"
35 #include "clang/AST/TemplateBase.h"
36 #include "clang/AST/TemplateName.h"
37 #include "clang/AST/Type.h"
38 #include "clang/AST/TypeLoc.h"
39 #include "clang/AST/TypeLocVisitor.h"
40 #include "clang/AST/UnresolvedSet.h"
41 #include "clang/Basic/CommentOptions.h"
42 #include "clang/Basic/Diagnostic.h"
43 #include "clang/Basic/DiagnosticError.h"
44 #include "clang/Basic/DiagnosticOptions.h"
45 #include "clang/Basic/ExceptionSpecificationType.h"
46 #include "clang/Basic/FileManager.h"
47 #include "clang/Basic/FileSystemOptions.h"
48 #include "clang/Basic/IdentifierTable.h"
49 #include "clang/Basic/LLVM.h"
50 #include "clang/Basic/LangOptions.h"
51 #include "clang/Basic/Module.h"
52 #include "clang/Basic/ObjCRuntime.h"
53 #include "clang/Basic/OpenMPKinds.h"
54 #include "clang/Basic/OperatorKinds.h"
55 #include "clang/Basic/PragmaKinds.h"
56 #include "clang/Basic/Sanitizers.h"
57 #include "clang/Basic/SourceLocation.h"
58 #include "clang/Basic/SourceManager.h"
59 #include "clang/Basic/SourceManagerInternals.h"
60 #include "clang/Basic/Specifiers.h"
61 #include "clang/Basic/TargetInfo.h"
62 #include "clang/Basic/TargetOptions.h"
63 #include "clang/Basic/TokenKinds.h"
64 #include "clang/Basic/Version.h"
65 #include "clang/Lex/HeaderSearch.h"
66 #include "clang/Lex/HeaderSearchOptions.h"
67 #include "clang/Lex/MacroInfo.h"
68 #include "clang/Lex/ModuleMap.h"
69 #include "clang/Lex/PreprocessingRecord.h"
70 #include "clang/Lex/Preprocessor.h"
71 #include "clang/Lex/PreprocessorOptions.h"
72 #include "clang/Lex/Token.h"
73 #include "clang/Sema/ObjCMethodList.h"
74 #include "clang/Sema/Scope.h"
75 #include "clang/Sema/Sema.h"
76 #include "clang/Sema/Weak.h"
77 #include "clang/Serialization/ASTBitCodes.h"
78 #include "clang/Serialization/ASTDeserializationListener.h"
79 #include "clang/Serialization/ASTRecordReader.h"
80 #include "clang/Serialization/ContinuousRangeMap.h"
81 #include "clang/Serialization/GlobalModuleIndex.h"
82 #include "clang/Serialization/InMemoryModuleCache.h"
83 #include "clang/Serialization/ModuleFile.h"
84 #include "clang/Serialization/ModuleFileExtension.h"
85 #include "clang/Serialization/ModuleManager.h"
86 #include "clang/Serialization/PCHContainerOperations.h"
87 #include "clang/Serialization/SerializationDiagnostic.h"
88 #include "llvm/ADT/APFloat.h"
89 #include "llvm/ADT/APInt.h"
90 #include "llvm/ADT/APSInt.h"
91 #include "llvm/ADT/ArrayRef.h"
92 #include "llvm/ADT/DenseMap.h"
93 #include "llvm/ADT/FloatingPointMode.h"
94 #include "llvm/ADT/FoldingSet.h"
95 #include "llvm/ADT/Hashing.h"
96 #include "llvm/ADT/IntrusiveRefCntPtr.h"
97 #include "llvm/ADT/None.h"
98 #include "llvm/ADT/Optional.h"
99 #include "llvm/ADT/STLExtras.h"
100 #include "llvm/ADT/ScopeExit.h"
101 #include "llvm/ADT/SmallPtrSet.h"
102 #include "llvm/ADT/SmallString.h"
103 #include "llvm/ADT/SmallVector.h"
104 #include "llvm/ADT/StringExtras.h"
105 #include "llvm/ADT/StringMap.h"
106 #include "llvm/ADT/StringRef.h"
107 #include "llvm/ADT/Triple.h"
108 #include "llvm/ADT/iterator_range.h"
109 #include "llvm/Bitstream/BitstreamReader.h"
110 #include "llvm/Support/Casting.h"
111 #include "llvm/Support/Compiler.h"
112 #include "llvm/Support/Compression.h"
113 #include "llvm/Support/DJB.h"
114 #include "llvm/Support/Endian.h"
115 #include "llvm/Support/Error.h"
116 #include "llvm/Support/ErrorHandling.h"
117 #include "llvm/Support/FileSystem.h"
118 #include "llvm/Support/LEB128.h"
119 #include "llvm/Support/MemoryBuffer.h"
120 #include "llvm/Support/Path.h"
121 #include "llvm/Support/SaveAndRestore.h"
122 #include "llvm/Support/Timer.h"
123 #include "llvm/Support/VersionTuple.h"
124 #include "llvm/Support/raw_ostream.h"
125 #include <algorithm>
126 #include <cassert>
127 #include <cstddef>
128 #include <cstdint>
129 #include <cstdio>
130 #include <ctime>
131 #include <iterator>
132 #include <limits>
133 #include <map>
134 #include <memory>
135 #include <string>
136 #include <system_error>
137 #include <tuple>
138 #include <utility>
139 #include <vector>
140 
141 using namespace clang;
142 using namespace clang::serialization;
143 using namespace clang::serialization::reader;
144 using llvm::BitstreamCursor;
145 using llvm::RoundingMode;
146 
147 //===----------------------------------------------------------------------===//
148 // ChainedASTReaderListener implementation
149 //===----------------------------------------------------------------------===//
150 
151 bool
152 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
153   return First->ReadFullVersionInformation(FullVersion) ||
154          Second->ReadFullVersionInformation(FullVersion);
155 }
156 
157 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
158   First->ReadModuleName(ModuleName);
159   Second->ReadModuleName(ModuleName);
160 }
161 
162 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
163   First->ReadModuleMapFile(ModuleMapPath);
164   Second->ReadModuleMapFile(ModuleMapPath);
165 }
166 
167 bool
168 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
169                                               bool Complain,
170                                               bool AllowCompatibleDifferences) {
171   return First->ReadLanguageOptions(LangOpts, Complain,
172                                     AllowCompatibleDifferences) ||
173          Second->ReadLanguageOptions(LangOpts, Complain,
174                                      AllowCompatibleDifferences);
175 }
176 
177 bool ChainedASTReaderListener::ReadTargetOptions(
178     const TargetOptions &TargetOpts, bool Complain,
179     bool AllowCompatibleDifferences) {
180   return First->ReadTargetOptions(TargetOpts, Complain,
181                                   AllowCompatibleDifferences) ||
182          Second->ReadTargetOptions(TargetOpts, Complain,
183                                    AllowCompatibleDifferences);
184 }
185 
186 bool ChainedASTReaderListener::ReadDiagnosticOptions(
187     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
188   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
189          Second->ReadDiagnosticOptions(DiagOpts, Complain);
190 }
191 
192 bool
193 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
194                                                 bool Complain) {
195   return First->ReadFileSystemOptions(FSOpts, Complain) ||
196          Second->ReadFileSystemOptions(FSOpts, Complain);
197 }
198 
199 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
200     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
201     bool Complain) {
202   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
203                                         Complain) ||
204          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
205                                          Complain);
206 }
207 
208 bool ChainedASTReaderListener::ReadPreprocessorOptions(
209     const PreprocessorOptions &PPOpts, bool Complain,
210     std::string &SuggestedPredefines) {
211   return First->ReadPreprocessorOptions(PPOpts, Complain,
212                                         SuggestedPredefines) ||
213          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
214 }
215 
216 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
217                                            unsigned Value) {
218   First->ReadCounter(M, Value);
219   Second->ReadCounter(M, Value);
220 }
221 
222 bool ChainedASTReaderListener::needsInputFileVisitation() {
223   return First->needsInputFileVisitation() ||
224          Second->needsInputFileVisitation();
225 }
226 
227 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
228   return First->needsSystemInputFileVisitation() ||
229   Second->needsSystemInputFileVisitation();
230 }
231 
232 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
233                                                ModuleKind Kind) {
234   First->visitModuleFile(Filename, Kind);
235   Second->visitModuleFile(Filename, Kind);
236 }
237 
238 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
239                                               bool isSystem,
240                                               bool isOverridden,
241                                               bool isExplicitModule) {
242   bool Continue = false;
243   if (First->needsInputFileVisitation() &&
244       (!isSystem || First->needsSystemInputFileVisitation()))
245     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
246                                       isExplicitModule);
247   if (Second->needsInputFileVisitation() &&
248       (!isSystem || Second->needsSystemInputFileVisitation()))
249     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
250                                        isExplicitModule);
251   return Continue;
252 }
253 
254 void ChainedASTReaderListener::readModuleFileExtension(
255        const ModuleFileExtensionMetadata &Metadata) {
256   First->readModuleFileExtension(Metadata);
257   Second->readModuleFileExtension(Metadata);
258 }
259 
260 //===----------------------------------------------------------------------===//
261 // PCH validator implementation
262 //===----------------------------------------------------------------------===//
263 
264 ASTReaderListener::~ASTReaderListener() = default;
265 
266 /// Compare the given set of language options against an existing set of
267 /// language options.
268 ///
269 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
270 /// \param AllowCompatibleDifferences If true, differences between compatible
271 ///        language options will be permitted.
272 ///
273 /// \returns true if the languagae options mis-match, false otherwise.
274 static bool checkLanguageOptions(const LangOptions &LangOpts,
275                                  const LangOptions &ExistingLangOpts,
276                                  DiagnosticsEngine *Diags,
277                                  bool AllowCompatibleDifferences = true) {
278 #define LANGOPT(Name, Bits, Default, Description)                 \
279   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
280     if (Diags)                                                    \
281       Diags->Report(diag::err_pch_langopt_mismatch)               \
282         << Description << LangOpts.Name << ExistingLangOpts.Name; \
283     return true;                                                  \
284   }
285 
286 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
287   if (ExistingLangOpts.Name != LangOpts.Name) {           \
288     if (Diags)                                            \
289       Diags->Report(diag::err_pch_langopt_value_mismatch) \
290         << Description;                                   \
291     return true;                                          \
292   }
293 
294 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
295   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
296     if (Diags)                                                 \
297       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
298         << Description;                                        \
299     return true;                                               \
300   }
301 
302 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
303   if (!AllowCompatibleDifferences)                            \
304     LANGOPT(Name, Bits, Default, Description)
305 
306 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
307   if (!AllowCompatibleDifferences)                                 \
308     ENUM_LANGOPT(Name, Bits, Default, Description)
309 
310 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
311   if (!AllowCompatibleDifferences)                                 \
312     VALUE_LANGOPT(Name, Bits, Default, Description)
313 
314 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
315 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
316 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
317 #include "clang/Basic/LangOptions.def"
318 
319   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
320     if (Diags)
321       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
322     return true;
323   }
324 
325   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
326     if (Diags)
327       Diags->Report(diag::err_pch_langopt_value_mismatch)
328       << "target Objective-C runtime";
329     return true;
330   }
331 
332   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
333       LangOpts.CommentOpts.BlockCommandNames) {
334     if (Diags)
335       Diags->Report(diag::err_pch_langopt_value_mismatch)
336         << "block command names";
337     return true;
338   }
339 
340   // Sanitizer feature mismatches are treated as compatible differences. If
341   // compatible differences aren't allowed, we still only want to check for
342   // mismatches of non-modular sanitizers (the only ones which can affect AST
343   // generation).
344   if (!AllowCompatibleDifferences) {
345     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
346     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
347     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
348     ExistingSanitizers.clear(ModularSanitizers);
349     ImportedSanitizers.clear(ModularSanitizers);
350     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
351       const std::string Flag = "-fsanitize=";
352       if (Diags) {
353 #define SANITIZER(NAME, ID)                                                    \
354   {                                                                            \
355     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
356     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
357     if (InExistingModule != InImportedModule)                                  \
358       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
359           << InExistingModule << (Flag + NAME);                                \
360   }
361 #include "clang/Basic/Sanitizers.def"
362       }
363       return true;
364     }
365   }
366 
367   return false;
368 }
369 
370 /// Compare the given set of target options against an existing set of
371 /// target options.
372 ///
373 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
374 ///
375 /// \returns true if the target options mis-match, false otherwise.
376 static bool checkTargetOptions(const TargetOptions &TargetOpts,
377                                const TargetOptions &ExistingTargetOpts,
378                                DiagnosticsEngine *Diags,
379                                bool AllowCompatibleDifferences = true) {
380 #define CHECK_TARGET_OPT(Field, Name)                             \
381   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
382     if (Diags)                                                    \
383       Diags->Report(diag::err_pch_targetopt_mismatch)             \
384         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
385     return true;                                                  \
386   }
387 
388   // The triple and ABI must match exactly.
389   CHECK_TARGET_OPT(Triple, "target");
390   CHECK_TARGET_OPT(ABI, "target ABI");
391 
392   // We can tolerate different CPUs in many cases, notably when one CPU
393   // supports a strict superset of another. When allowing compatible
394   // differences skip this check.
395   if (!AllowCompatibleDifferences) {
396     CHECK_TARGET_OPT(CPU, "target CPU");
397     CHECK_TARGET_OPT(TuneCPU, "tune CPU");
398   }
399 
400 #undef CHECK_TARGET_OPT
401 
402   // Compare feature sets.
403   SmallVector<StringRef, 4> ExistingFeatures(
404                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
405                                              ExistingTargetOpts.FeaturesAsWritten.end());
406   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
407                                          TargetOpts.FeaturesAsWritten.end());
408   llvm::sort(ExistingFeatures);
409   llvm::sort(ReadFeatures);
410 
411   // We compute the set difference in both directions explicitly so that we can
412   // diagnose the differences differently.
413   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
414   std::set_difference(
415       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
416       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
417   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
418                       ExistingFeatures.begin(), ExistingFeatures.end(),
419                       std::back_inserter(UnmatchedReadFeatures));
420 
421   // If we are allowing compatible differences and the read feature set is
422   // a strict subset of the existing feature set, there is nothing to diagnose.
423   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
424     return false;
425 
426   if (Diags) {
427     for (StringRef Feature : UnmatchedReadFeatures)
428       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
429           << /* is-existing-feature */ false << Feature;
430     for (StringRef Feature : UnmatchedExistingFeatures)
431       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
432           << /* is-existing-feature */ true << Feature;
433   }
434 
435   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
436 }
437 
438 bool
439 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
440                                   bool Complain,
441                                   bool AllowCompatibleDifferences) {
442   const LangOptions &ExistingLangOpts = PP.getLangOpts();
443   return checkLanguageOptions(LangOpts, ExistingLangOpts,
444                               Complain ? &Reader.Diags : nullptr,
445                               AllowCompatibleDifferences);
446 }
447 
448 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
449                                      bool Complain,
450                                      bool AllowCompatibleDifferences) {
451   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
452   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
453                             Complain ? &Reader.Diags : nullptr,
454                             AllowCompatibleDifferences);
455 }
456 
457 namespace {
458 
459 using MacroDefinitionsMap =
460     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
461 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
462 
463 } // namespace
464 
465 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
466                                          DiagnosticsEngine &Diags,
467                                          bool Complain) {
468   using Level = DiagnosticsEngine::Level;
469 
470   // Check current mappings for new -Werror mappings, and the stored mappings
471   // for cases that were explicitly mapped to *not* be errors that are now
472   // errors because of options like -Werror.
473   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
474 
475   for (DiagnosticsEngine *MappingSource : MappingSources) {
476     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
477       diag::kind DiagID = DiagIDMappingPair.first;
478       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
479       if (CurLevel < DiagnosticsEngine::Error)
480         continue; // not significant
481       Level StoredLevel =
482           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
483       if (StoredLevel < DiagnosticsEngine::Error) {
484         if (Complain)
485           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
486               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
487         return true;
488       }
489     }
490   }
491 
492   return false;
493 }
494 
495 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
496   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
497   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
498     return true;
499   return Ext >= diag::Severity::Error;
500 }
501 
502 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
503                                     DiagnosticsEngine &Diags,
504                                     bool IsSystem, bool Complain) {
505   // Top-level options
506   if (IsSystem) {
507     if (Diags.getSuppressSystemWarnings())
508       return false;
509     // If -Wsystem-headers was not enabled before, be conservative
510     if (StoredDiags.getSuppressSystemWarnings()) {
511       if (Complain)
512         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
513       return true;
514     }
515   }
516 
517   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
518     if (Complain)
519       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
520     return true;
521   }
522 
523   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
524       !StoredDiags.getEnableAllWarnings()) {
525     if (Complain)
526       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
527     return true;
528   }
529 
530   if (isExtHandlingFromDiagsError(Diags) &&
531       !isExtHandlingFromDiagsError(StoredDiags)) {
532     if (Complain)
533       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
534     return true;
535   }
536 
537   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
538 }
539 
540 /// Return the top import module if it is implicit, nullptr otherwise.
541 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
542                                           Preprocessor &PP) {
543   // If the original import came from a file explicitly generated by the user,
544   // don't check the diagnostic mappings.
545   // FIXME: currently this is approximated by checking whether this is not a
546   // module import of an implicitly-loaded module file.
547   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
548   // the transitive closure of its imports, since unrelated modules cannot be
549   // imported until after this module finishes validation.
550   ModuleFile *TopImport = &*ModuleMgr.rbegin();
551   while (!TopImport->ImportedBy.empty())
552     TopImport = TopImport->ImportedBy[0];
553   if (TopImport->Kind != MK_ImplicitModule)
554     return nullptr;
555 
556   StringRef ModuleName = TopImport->ModuleName;
557   assert(!ModuleName.empty() && "diagnostic options read before module name");
558 
559   Module *M =
560       PP.getHeaderSearchInfo().lookupModule(ModuleName, TopImport->ImportLoc);
561   assert(M && "missing module");
562   return M;
563 }
564 
565 bool PCHValidator::ReadDiagnosticOptions(
566     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
567   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
568   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
569   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
570       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
571   // This should never fail, because we would have processed these options
572   // before writing them to an ASTFile.
573   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
574 
575   ModuleManager &ModuleMgr = Reader.getModuleManager();
576   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
577 
578   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
579   if (!TopM)
580     return false;
581 
582   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
583   // contains the union of their flags.
584   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
585                                  Complain);
586 }
587 
588 /// Collect the macro definitions provided by the given preprocessor
589 /// options.
590 static void
591 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
592                         MacroDefinitionsMap &Macros,
593                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
594   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
595     StringRef Macro = PPOpts.Macros[I].first;
596     bool IsUndef = PPOpts.Macros[I].second;
597 
598     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
599     StringRef MacroName = MacroPair.first;
600     StringRef MacroBody = MacroPair.second;
601 
602     // For an #undef'd macro, we only care about the name.
603     if (IsUndef) {
604       if (MacroNames && !Macros.count(MacroName))
605         MacroNames->push_back(MacroName);
606 
607       Macros[MacroName] = std::make_pair("", true);
608       continue;
609     }
610 
611     // For a #define'd macro, figure out the actual definition.
612     if (MacroName.size() == Macro.size())
613       MacroBody = "1";
614     else {
615       // Note: GCC drops anything following an end-of-line character.
616       StringRef::size_type End = MacroBody.find_first_of("\n\r");
617       MacroBody = MacroBody.substr(0, End);
618     }
619 
620     if (MacroNames && !Macros.count(MacroName))
621       MacroNames->push_back(MacroName);
622     Macros[MacroName] = std::make_pair(MacroBody, false);
623   }
624 }
625 
626 /// Check the preprocessor options deserialized from the control block
627 /// against the preprocessor options in an existing preprocessor.
628 ///
629 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
630 /// \param Validate If true, validate preprocessor options. If false, allow
631 ///        macros defined by \p ExistingPPOpts to override those defined by
632 ///        \p PPOpts in SuggestedPredefines.
633 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
634                                      const PreprocessorOptions &ExistingPPOpts,
635                                      DiagnosticsEngine *Diags,
636                                      FileManager &FileMgr,
637                                      std::string &SuggestedPredefines,
638                                      const LangOptions &LangOpts,
639                                      bool Validate = true) {
640   // Check macro definitions.
641   MacroDefinitionsMap ASTFileMacros;
642   collectMacroDefinitions(PPOpts, ASTFileMacros);
643   MacroDefinitionsMap ExistingMacros;
644   SmallVector<StringRef, 4> ExistingMacroNames;
645   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
646 
647   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
648     // Dig out the macro definition in the existing preprocessor options.
649     StringRef MacroName = ExistingMacroNames[I];
650     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
651 
652     // Check whether we know anything about this macro name or not.
653     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
654         ASTFileMacros.find(MacroName);
655     if (!Validate || Known == ASTFileMacros.end()) {
656       // FIXME: Check whether this identifier was referenced anywhere in the
657       // AST file. If so, we should reject the AST file. Unfortunately, this
658       // information isn't in the control block. What shall we do about it?
659 
660       if (Existing.second) {
661         SuggestedPredefines += "#undef ";
662         SuggestedPredefines += MacroName.str();
663         SuggestedPredefines += '\n';
664       } else {
665         SuggestedPredefines += "#define ";
666         SuggestedPredefines += MacroName.str();
667         SuggestedPredefines += ' ';
668         SuggestedPredefines += Existing.first.str();
669         SuggestedPredefines += '\n';
670       }
671       continue;
672     }
673 
674     // If the macro was defined in one but undef'd in the other, we have a
675     // conflict.
676     if (Existing.second != Known->second.second) {
677       if (Diags) {
678         Diags->Report(diag::err_pch_macro_def_undef)
679           << MacroName << Known->second.second;
680       }
681       return true;
682     }
683 
684     // If the macro was #undef'd in both, or if the macro bodies are identical,
685     // it's fine.
686     if (Existing.second || Existing.first == Known->second.first)
687       continue;
688 
689     // The macro bodies differ; complain.
690     if (Diags) {
691       Diags->Report(diag::err_pch_macro_def_conflict)
692         << MacroName << Known->second.first << Existing.first;
693     }
694     return true;
695   }
696 
697   // Check whether we're using predefines.
698   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
699     if (Diags) {
700       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
701     }
702     return true;
703   }
704 
705   // Detailed record is important since it is used for the module cache hash.
706   if (LangOpts.Modules &&
707       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
708     if (Diags) {
709       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
710     }
711     return true;
712   }
713 
714   // Compute the #include and #include_macros lines we need.
715   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
716     StringRef File = ExistingPPOpts.Includes[I];
717 
718     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
719         !ExistingPPOpts.PCHThroughHeader.empty()) {
720       // In case the through header is an include, we must add all the includes
721       // to the predefines so the start point can be determined.
722       SuggestedPredefines += "#include \"";
723       SuggestedPredefines += File;
724       SuggestedPredefines += "\"\n";
725       continue;
726     }
727 
728     if (File == ExistingPPOpts.ImplicitPCHInclude)
729       continue;
730 
731     if (llvm::is_contained(PPOpts.Includes, File))
732       continue;
733 
734     SuggestedPredefines += "#include \"";
735     SuggestedPredefines += File;
736     SuggestedPredefines += "\"\n";
737   }
738 
739   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
740     StringRef File = ExistingPPOpts.MacroIncludes[I];
741     if (llvm::is_contained(PPOpts.MacroIncludes, File))
742       continue;
743 
744     SuggestedPredefines += "#__include_macros \"";
745     SuggestedPredefines += File;
746     SuggestedPredefines += "\"\n##\n";
747   }
748 
749   return false;
750 }
751 
752 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
753                                            bool Complain,
754                                            std::string &SuggestedPredefines) {
755   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
756 
757   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
758                                   Complain? &Reader.Diags : nullptr,
759                                   PP.getFileManager(),
760                                   SuggestedPredefines,
761                                   PP.getLangOpts());
762 }
763 
764 bool SimpleASTReaderListener::ReadPreprocessorOptions(
765                                   const PreprocessorOptions &PPOpts,
766                                   bool Complain,
767                                   std::string &SuggestedPredefines) {
768   return checkPreprocessorOptions(PPOpts,
769                                   PP.getPreprocessorOpts(),
770                                   nullptr,
771                                   PP.getFileManager(),
772                                   SuggestedPredefines,
773                                   PP.getLangOpts(),
774                                   false);
775 }
776 
777 /// Check the header search options deserialized from the control block
778 /// against the header search options in an existing preprocessor.
779 ///
780 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
781 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
782                                      StringRef SpecificModuleCachePath,
783                                      StringRef ExistingModuleCachePath,
784                                      DiagnosticsEngine *Diags,
785                                      const LangOptions &LangOpts,
786                                      const PreprocessorOptions &PPOpts) {
787   if (LangOpts.Modules) {
788     if (SpecificModuleCachePath != ExistingModuleCachePath &&
789         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
790       if (Diags)
791         Diags->Report(diag::err_pch_modulecache_mismatch)
792           << SpecificModuleCachePath << ExistingModuleCachePath;
793       return true;
794     }
795   }
796 
797   return false;
798 }
799 
800 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
801                                            StringRef SpecificModuleCachePath,
802                                            bool Complain) {
803   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
804                                   PP.getHeaderSearchInfo().getModuleCachePath(),
805                                   Complain ? &Reader.Diags : nullptr,
806                                   PP.getLangOpts(), PP.getPreprocessorOpts());
807 }
808 
809 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
810   PP.setCounterValue(Value);
811 }
812 
813 //===----------------------------------------------------------------------===//
814 // AST reader implementation
815 //===----------------------------------------------------------------------===//
816 
817 static uint64_t readULEB(const unsigned char *&P) {
818   unsigned Length = 0;
819   const char *Error = nullptr;
820 
821   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
822   if (Error)
823     llvm::report_fatal_error(Error);
824   P += Length;
825   return Val;
826 }
827 
828 /// Read ULEB-encoded key length and data length.
829 static std::pair<unsigned, unsigned>
830 readULEBKeyDataLength(const unsigned char *&P) {
831   unsigned KeyLen = readULEB(P);
832   if ((unsigned)KeyLen != KeyLen)
833     llvm::report_fatal_error("key too large");
834 
835   unsigned DataLen = readULEB(P);
836   if ((unsigned)DataLen != DataLen)
837     llvm::report_fatal_error("data too large");
838 
839   return std::make_pair(KeyLen, DataLen);
840 }
841 
842 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
843                                            bool TakeOwnership) {
844   DeserializationListener = Listener;
845   OwnsDeserializationListener = TakeOwnership;
846 }
847 
848 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
849   return serialization::ComputeHash(Sel);
850 }
851 
852 std::pair<unsigned, unsigned>
853 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
854   return readULEBKeyDataLength(d);
855 }
856 
857 ASTSelectorLookupTrait::internal_key_type
858 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
859   using namespace llvm::support;
860 
861   SelectorTable &SelTable = Reader.getContext().Selectors;
862   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
863   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
864       F, endian::readNext<uint32_t, little, unaligned>(d));
865   if (N == 0)
866     return SelTable.getNullarySelector(FirstII);
867   else if (N == 1)
868     return SelTable.getUnarySelector(FirstII);
869 
870   SmallVector<IdentifierInfo *, 16> Args;
871   Args.push_back(FirstII);
872   for (unsigned I = 1; I != N; ++I)
873     Args.push_back(Reader.getLocalIdentifier(
874         F, endian::readNext<uint32_t, little, unaligned>(d)));
875 
876   return SelTable.getSelector(N, Args.data());
877 }
878 
879 ASTSelectorLookupTrait::data_type
880 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
881                                  unsigned DataLen) {
882   using namespace llvm::support;
883 
884   data_type Result;
885 
886   Result.ID = Reader.getGlobalSelectorID(
887       F, endian::readNext<uint32_t, little, unaligned>(d));
888   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
889   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
890   Result.InstanceBits = FullInstanceBits & 0x3;
891   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
892   Result.FactoryBits = FullFactoryBits & 0x3;
893   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
894   unsigned NumInstanceMethods = FullInstanceBits >> 3;
895   unsigned NumFactoryMethods = FullFactoryBits >> 3;
896 
897   // Load instance methods
898   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
899     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
900             F, endian::readNext<uint32_t, little, unaligned>(d)))
901       Result.Instance.push_back(Method);
902   }
903 
904   // Load factory methods
905   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
906     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
907             F, endian::readNext<uint32_t, little, unaligned>(d)))
908       Result.Factory.push_back(Method);
909   }
910 
911   return Result;
912 }
913 
914 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
915   return llvm::djbHash(a);
916 }
917 
918 std::pair<unsigned, unsigned>
919 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
920   return readULEBKeyDataLength(d);
921 }
922 
923 ASTIdentifierLookupTraitBase::internal_key_type
924 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
925   assert(n >= 2 && d[n-1] == '\0');
926   return StringRef((const char*) d, n-1);
927 }
928 
929 /// Whether the given identifier is "interesting".
930 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
931                                     bool IsModule) {
932   return II.hadMacroDefinition() || II.isPoisoned() ||
933          (!IsModule && II.getObjCOrBuiltinID()) ||
934          II.hasRevertedTokenIDToIdentifier() ||
935          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
936           II.getFETokenInfo());
937 }
938 
939 static bool readBit(unsigned &Bits) {
940   bool Value = Bits & 0x1;
941   Bits >>= 1;
942   return Value;
943 }
944 
945 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
946   using namespace llvm::support;
947 
948   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
949   return Reader.getGlobalIdentifierID(F, RawID >> 1);
950 }
951 
952 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
953   if (!II.isFromAST()) {
954     II.setIsFromAST();
955     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
956     if (isInterestingIdentifier(Reader, II, IsModule))
957       II.setChangedSinceDeserialization();
958   }
959 }
960 
961 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
962                                                    const unsigned char* d,
963                                                    unsigned DataLen) {
964   using namespace llvm::support;
965 
966   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
967   bool IsInteresting = RawID & 0x01;
968 
969   // Wipe out the "is interesting" bit.
970   RawID = RawID >> 1;
971 
972   // Build the IdentifierInfo and link the identifier ID with it.
973   IdentifierInfo *II = KnownII;
974   if (!II) {
975     II = &Reader.getIdentifierTable().getOwn(k);
976     KnownII = II;
977   }
978   markIdentifierFromAST(Reader, *II);
979   Reader.markIdentifierUpToDate(II);
980 
981   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
982   if (!IsInteresting) {
983     // For uninteresting identifiers, there's nothing else to do. Just notify
984     // the reader that we've finished loading this identifier.
985     Reader.SetIdentifierInfo(ID, II);
986     return II;
987   }
988 
989   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
990   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
991   bool CPlusPlusOperatorKeyword = readBit(Bits);
992   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
993   bool Poisoned = readBit(Bits);
994   bool ExtensionToken = readBit(Bits);
995   bool HadMacroDefinition = readBit(Bits);
996 
997   assert(Bits == 0 && "Extra bits in the identifier?");
998   DataLen -= 8;
999 
1000   // Set or check the various bits in the IdentifierInfo structure.
1001   // Token IDs are read-only.
1002   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1003     II->revertTokenIDToIdentifier();
1004   if (!F.isModule())
1005     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1006   assert(II->isExtensionToken() == ExtensionToken &&
1007          "Incorrect extension token flag");
1008   (void)ExtensionToken;
1009   if (Poisoned)
1010     II->setIsPoisoned(true);
1011   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1012          "Incorrect C++ operator keyword flag");
1013   (void)CPlusPlusOperatorKeyword;
1014 
1015   // If this identifier is a macro, deserialize the macro
1016   // definition.
1017   if (HadMacroDefinition) {
1018     uint32_t MacroDirectivesOffset =
1019         endian::readNext<uint32_t, little, unaligned>(d);
1020     DataLen -= 4;
1021 
1022     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1023   }
1024 
1025   Reader.SetIdentifierInfo(ID, II);
1026 
1027   // Read all of the declarations visible at global scope with this
1028   // name.
1029   if (DataLen > 0) {
1030     SmallVector<uint32_t, 4> DeclIDs;
1031     for (; DataLen > 0; DataLen -= 4)
1032       DeclIDs.push_back(Reader.getGlobalDeclID(
1033           F, endian::readNext<uint32_t, little, unaligned>(d)));
1034     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1035   }
1036 
1037   return II;
1038 }
1039 
1040 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1041     : Kind(Name.getNameKind()) {
1042   switch (Kind) {
1043   case DeclarationName::Identifier:
1044     Data = (uint64_t)Name.getAsIdentifierInfo();
1045     break;
1046   case DeclarationName::ObjCZeroArgSelector:
1047   case DeclarationName::ObjCOneArgSelector:
1048   case DeclarationName::ObjCMultiArgSelector:
1049     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1050     break;
1051   case DeclarationName::CXXOperatorName:
1052     Data = Name.getCXXOverloadedOperator();
1053     break;
1054   case DeclarationName::CXXLiteralOperatorName:
1055     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1056     break;
1057   case DeclarationName::CXXDeductionGuideName:
1058     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1059                ->getDeclName().getAsIdentifierInfo();
1060     break;
1061   case DeclarationName::CXXConstructorName:
1062   case DeclarationName::CXXDestructorName:
1063   case DeclarationName::CXXConversionFunctionName:
1064   case DeclarationName::CXXUsingDirective:
1065     Data = 0;
1066     break;
1067   }
1068 }
1069 
1070 unsigned DeclarationNameKey::getHash() const {
1071   llvm::FoldingSetNodeID ID;
1072   ID.AddInteger(Kind);
1073 
1074   switch (Kind) {
1075   case DeclarationName::Identifier:
1076   case DeclarationName::CXXLiteralOperatorName:
1077   case DeclarationName::CXXDeductionGuideName:
1078     ID.AddString(((IdentifierInfo*)Data)->getName());
1079     break;
1080   case DeclarationName::ObjCZeroArgSelector:
1081   case DeclarationName::ObjCOneArgSelector:
1082   case DeclarationName::ObjCMultiArgSelector:
1083     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1084     break;
1085   case DeclarationName::CXXOperatorName:
1086     ID.AddInteger((OverloadedOperatorKind)Data);
1087     break;
1088   case DeclarationName::CXXConstructorName:
1089   case DeclarationName::CXXDestructorName:
1090   case DeclarationName::CXXConversionFunctionName:
1091   case DeclarationName::CXXUsingDirective:
1092     break;
1093   }
1094 
1095   return ID.ComputeHash();
1096 }
1097 
1098 ModuleFile *
1099 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1100   using namespace llvm::support;
1101 
1102   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1103   return Reader.getLocalModuleFile(F, ModuleFileID);
1104 }
1105 
1106 std::pair<unsigned, unsigned>
1107 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1108   return readULEBKeyDataLength(d);
1109 }
1110 
1111 ASTDeclContextNameLookupTrait::internal_key_type
1112 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1113   using namespace llvm::support;
1114 
1115   auto Kind = (DeclarationName::NameKind)*d++;
1116   uint64_t Data;
1117   switch (Kind) {
1118   case DeclarationName::Identifier:
1119   case DeclarationName::CXXLiteralOperatorName:
1120   case DeclarationName::CXXDeductionGuideName:
1121     Data = (uint64_t)Reader.getLocalIdentifier(
1122         F, endian::readNext<uint32_t, little, unaligned>(d));
1123     break;
1124   case DeclarationName::ObjCZeroArgSelector:
1125   case DeclarationName::ObjCOneArgSelector:
1126   case DeclarationName::ObjCMultiArgSelector:
1127     Data =
1128         (uint64_t)Reader.getLocalSelector(
1129                              F, endian::readNext<uint32_t, little, unaligned>(
1130                                     d)).getAsOpaquePtr();
1131     break;
1132   case DeclarationName::CXXOperatorName:
1133     Data = *d++; // OverloadedOperatorKind
1134     break;
1135   case DeclarationName::CXXConstructorName:
1136   case DeclarationName::CXXDestructorName:
1137   case DeclarationName::CXXConversionFunctionName:
1138   case DeclarationName::CXXUsingDirective:
1139     Data = 0;
1140     break;
1141   }
1142 
1143   return DeclarationNameKey(Kind, Data);
1144 }
1145 
1146 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1147                                                  const unsigned char *d,
1148                                                  unsigned DataLen,
1149                                                  data_type_builder &Val) {
1150   using namespace llvm::support;
1151 
1152   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1153     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1154     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1155   }
1156 }
1157 
1158 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1159                                               BitstreamCursor &Cursor,
1160                                               uint64_t Offset,
1161                                               DeclContext *DC) {
1162   assert(Offset != 0);
1163 
1164   SavedStreamPosition SavedPosition(Cursor);
1165   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1166     Error(std::move(Err));
1167     return true;
1168   }
1169 
1170   RecordData Record;
1171   StringRef Blob;
1172   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1173   if (!MaybeCode) {
1174     Error(MaybeCode.takeError());
1175     return true;
1176   }
1177   unsigned Code = MaybeCode.get();
1178 
1179   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1180   if (!MaybeRecCode) {
1181     Error(MaybeRecCode.takeError());
1182     return true;
1183   }
1184   unsigned RecCode = MaybeRecCode.get();
1185   if (RecCode != DECL_CONTEXT_LEXICAL) {
1186     Error("Expected lexical block");
1187     return true;
1188   }
1189 
1190   assert(!isa<TranslationUnitDecl>(DC) &&
1191          "expected a TU_UPDATE_LEXICAL record for TU");
1192   // If we are handling a C++ class template instantiation, we can see multiple
1193   // lexical updates for the same record. It's important that we select only one
1194   // of them, so that field numbering works properly. Just pick the first one we
1195   // see.
1196   auto &Lex = LexicalDecls[DC];
1197   if (!Lex.first) {
1198     Lex = std::make_pair(
1199         &M, llvm::makeArrayRef(
1200                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1201                     Blob.data()),
1202                 Blob.size() / 4));
1203   }
1204   DC->setHasExternalLexicalStorage(true);
1205   return false;
1206 }
1207 
1208 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1209                                               BitstreamCursor &Cursor,
1210                                               uint64_t Offset,
1211                                               DeclID ID) {
1212   assert(Offset != 0);
1213 
1214   SavedStreamPosition SavedPosition(Cursor);
1215   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1216     Error(std::move(Err));
1217     return true;
1218   }
1219 
1220   RecordData Record;
1221   StringRef Blob;
1222   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1223   if (!MaybeCode) {
1224     Error(MaybeCode.takeError());
1225     return true;
1226   }
1227   unsigned Code = MaybeCode.get();
1228 
1229   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1230   if (!MaybeRecCode) {
1231     Error(MaybeRecCode.takeError());
1232     return true;
1233   }
1234   unsigned RecCode = MaybeRecCode.get();
1235   if (RecCode != DECL_CONTEXT_VISIBLE) {
1236     Error("Expected visible lookup table block");
1237     return true;
1238   }
1239 
1240   // We can't safely determine the primary context yet, so delay attaching the
1241   // lookup table until we're done with recursive deserialization.
1242   auto *Data = (const unsigned char*)Blob.data();
1243   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1244   return false;
1245 }
1246 
1247 void ASTReader::Error(StringRef Msg) const {
1248   Error(diag::err_fe_pch_malformed, Msg);
1249   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1250       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1251     Diag(diag::note_module_cache_path)
1252       << PP.getHeaderSearchInfo().getModuleCachePath();
1253   }
1254 }
1255 
1256 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1257                       StringRef Arg3) const {
1258   if (Diags.isDiagnosticInFlight())
1259     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1260   else
1261     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1262 }
1263 
1264 void ASTReader::Error(llvm::Error &&Err) const {
1265   llvm::Error RemainingErr =
1266       handleErrors(std::move(Err), [this](const DiagnosticError &E) {
1267         auto Diag = E.getDiagnostic().second;
1268 
1269         // Ideally we'd just emit it, but have to handle a possible in-flight
1270         // diagnostic. Note that the location is currently ignored as well.
1271         auto NumArgs = Diag.getStorage()->NumDiagArgs;
1272         assert(NumArgs <= 3 && "Can only have up to 3 arguments");
1273         StringRef Arg1, Arg2, Arg3;
1274         switch (NumArgs) {
1275         case 3:
1276           Arg3 = Diag.getStringArg(2);
1277           LLVM_FALLTHROUGH;
1278         case 2:
1279           Arg2 = Diag.getStringArg(1);
1280           LLVM_FALLTHROUGH;
1281         case 1:
1282           Arg1 = Diag.getStringArg(0);
1283         }
1284         Error(Diag.getDiagID(), Arg1, Arg2, Arg3);
1285       });
1286   if (RemainingErr)
1287     Error(toString(std::move(RemainingErr)));
1288 }
1289 
1290 //===----------------------------------------------------------------------===//
1291 // Source Manager Deserialization
1292 //===----------------------------------------------------------------------===//
1293 
1294 /// Read the line table in the source manager block.
1295 void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
1296   unsigned Idx = 0;
1297   LineTableInfo &LineTable = SourceMgr.getLineTable();
1298 
1299   // Parse the file names
1300   std::map<int, int> FileIDs;
1301   FileIDs[-1] = -1; // For unspecified filenames.
1302   for (unsigned I = 0; Record[Idx]; ++I) {
1303     // Extract the file name
1304     auto Filename = ReadPath(F, Record, Idx);
1305     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1306   }
1307   ++Idx;
1308 
1309   // Parse the line entries
1310   std::vector<LineEntry> Entries;
1311   while (Idx < Record.size()) {
1312     int FID = Record[Idx++];
1313     assert(FID >= 0 && "Serialized line entries for non-local file.");
1314     // Remap FileID from 1-based old view.
1315     FID += F.SLocEntryBaseID - 1;
1316 
1317     // Extract the line entries
1318     unsigned NumEntries = Record[Idx++];
1319     assert(NumEntries && "no line entries for file ID");
1320     Entries.clear();
1321     Entries.reserve(NumEntries);
1322     for (unsigned I = 0; I != NumEntries; ++I) {
1323       unsigned FileOffset = Record[Idx++];
1324       unsigned LineNo = Record[Idx++];
1325       int FilenameID = FileIDs[Record[Idx++]];
1326       SrcMgr::CharacteristicKind FileKind
1327         = (SrcMgr::CharacteristicKind)Record[Idx++];
1328       unsigned IncludeOffset = Record[Idx++];
1329       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1330                                        FileKind, IncludeOffset));
1331     }
1332     LineTable.AddEntry(FileID::get(FID), Entries);
1333   }
1334 }
1335 
1336 /// Read a source manager block
1337 llvm::Error ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1338   using namespace SrcMgr;
1339 
1340   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1341 
1342   // Set the source-location entry cursor to the current position in
1343   // the stream. This cursor will be used to read the contents of the
1344   // source manager block initially, and then lazily read
1345   // source-location entries as needed.
1346   SLocEntryCursor = F.Stream;
1347 
1348   // The stream itself is going to skip over the source manager block.
1349   if (llvm::Error Err = F.Stream.SkipBlock())
1350     return Err;
1351 
1352   // Enter the source manager block.
1353   if (llvm::Error Err = SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID))
1354     return Err;
1355   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1356 
1357   RecordData Record;
1358   while (true) {
1359     Expected<llvm::BitstreamEntry> MaybeE =
1360         SLocEntryCursor.advanceSkippingSubblocks();
1361     if (!MaybeE)
1362       return MaybeE.takeError();
1363     llvm::BitstreamEntry E = MaybeE.get();
1364 
1365     switch (E.Kind) {
1366     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1367     case llvm::BitstreamEntry::Error:
1368       return llvm::createStringError(std::errc::illegal_byte_sequence,
1369                                      "malformed block record in AST file");
1370     case llvm::BitstreamEntry::EndBlock:
1371       return llvm::Error::success();
1372     case llvm::BitstreamEntry::Record:
1373       // The interesting case.
1374       break;
1375     }
1376 
1377     // Read a record.
1378     Record.clear();
1379     StringRef Blob;
1380     Expected<unsigned> MaybeRecord =
1381         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1382     if (!MaybeRecord)
1383       return MaybeRecord.takeError();
1384     switch (MaybeRecord.get()) {
1385     default:  // Default behavior: ignore.
1386       break;
1387 
1388     case SM_SLOC_FILE_ENTRY:
1389     case SM_SLOC_BUFFER_ENTRY:
1390     case SM_SLOC_EXPANSION_ENTRY:
1391       // Once we hit one of the source location entries, we're done.
1392       return llvm::Error::success();
1393     }
1394   }
1395 }
1396 
1397 /// If a header file is not found at the path that we expect it to be
1398 /// and the PCH file was moved from its original location, try to resolve the
1399 /// file by assuming that header+PCH were moved together and the header is in
1400 /// the same place relative to the PCH.
1401 static std::string
1402 resolveFileRelativeToOriginalDir(const std::string &Filename,
1403                                  const std::string &OriginalDir,
1404                                  const std::string &CurrDir) {
1405   assert(OriginalDir != CurrDir &&
1406          "No point trying to resolve the file if the PCH dir didn't change");
1407 
1408   using namespace llvm::sys;
1409 
1410   SmallString<128> filePath(Filename);
1411   fs::make_absolute(filePath);
1412   assert(path::is_absolute(OriginalDir));
1413   SmallString<128> currPCHPath(CurrDir);
1414 
1415   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1416                        fileDirE = path::end(path::parent_path(filePath));
1417   path::const_iterator origDirI = path::begin(OriginalDir),
1418                        origDirE = path::end(OriginalDir);
1419   // Skip the common path components from filePath and OriginalDir.
1420   while (fileDirI != fileDirE && origDirI != origDirE &&
1421          *fileDirI == *origDirI) {
1422     ++fileDirI;
1423     ++origDirI;
1424   }
1425   for (; origDirI != origDirE; ++origDirI)
1426     path::append(currPCHPath, "..");
1427   path::append(currPCHPath, fileDirI, fileDirE);
1428   path::append(currPCHPath, path::filename(Filename));
1429   return std::string(currPCHPath.str());
1430 }
1431 
1432 bool ASTReader::ReadSLocEntry(int ID) {
1433   if (ID == 0)
1434     return false;
1435 
1436   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1437     Error("source location entry ID out-of-range for AST file");
1438     return true;
1439   }
1440 
1441   // Local helper to read the (possibly-compressed) buffer data following the
1442   // entry record.
1443   auto ReadBuffer = [this](
1444       BitstreamCursor &SLocEntryCursor,
1445       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1446     RecordData Record;
1447     StringRef Blob;
1448     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1449     if (!MaybeCode) {
1450       Error(MaybeCode.takeError());
1451       return nullptr;
1452     }
1453     unsigned Code = MaybeCode.get();
1454 
1455     Expected<unsigned> MaybeRecCode =
1456         SLocEntryCursor.readRecord(Code, Record, &Blob);
1457     if (!MaybeRecCode) {
1458       Error(MaybeRecCode.takeError());
1459       return nullptr;
1460     }
1461     unsigned RecCode = MaybeRecCode.get();
1462 
1463     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1464       if (!llvm::zlib::isAvailable()) {
1465         Error("zlib is not available");
1466         return nullptr;
1467       }
1468       SmallString<0> Uncompressed;
1469       if (llvm::Error E =
1470               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1471         Error("could not decompress embedded file contents: " +
1472               llvm::toString(std::move(E)));
1473         return nullptr;
1474       }
1475       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1476     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1477       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1478     } else {
1479       Error("AST record has invalid code");
1480       return nullptr;
1481     }
1482   };
1483 
1484   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1485   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1486           F->SLocEntryOffsetsBase +
1487           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1488     Error(std::move(Err));
1489     return true;
1490   }
1491 
1492   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1493   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1494 
1495   ++NumSLocEntriesRead;
1496   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1497   if (!MaybeEntry) {
1498     Error(MaybeEntry.takeError());
1499     return true;
1500   }
1501   llvm::BitstreamEntry Entry = MaybeEntry.get();
1502 
1503   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1504     Error("incorrectly-formatted source location entry in AST file");
1505     return true;
1506   }
1507 
1508   RecordData Record;
1509   StringRef Blob;
1510   Expected<unsigned> MaybeSLOC =
1511       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1512   if (!MaybeSLOC) {
1513     Error(MaybeSLOC.takeError());
1514     return true;
1515   }
1516   switch (MaybeSLOC.get()) {
1517   default:
1518     Error("incorrectly-formatted source location entry in AST file");
1519     return true;
1520 
1521   case SM_SLOC_FILE_ENTRY: {
1522     // We will detect whether a file changed and return 'Failure' for it, but
1523     // we will also try to fail gracefully by setting up the SLocEntry.
1524     unsigned InputID = Record[4];
1525     InputFile IF = getInputFile(*F, InputID);
1526     Optional<FileEntryRef> File = IF.getFile();
1527     bool OverriddenBuffer = IF.isOverridden();
1528 
1529     // Note that we only check if a File was returned. If it was out-of-date
1530     // we have complained but we will continue creating a FileID to recover
1531     // gracefully.
1532     if (!File)
1533       return true;
1534 
1535     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1536     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1537       // This is the module's main file.
1538       IncludeLoc = getImportLocation(F);
1539     }
1540     SrcMgr::CharacteristicKind
1541       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1542     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1543                                         BaseOffset + Record[0]);
1544     SrcMgr::FileInfo &FileInfo =
1545           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1546     FileInfo.NumCreatedFIDs = Record[5];
1547     if (Record[3])
1548       FileInfo.setHasLineDirectives();
1549 
1550     unsigned NumFileDecls = Record[7];
1551     if (NumFileDecls && ContextObj) {
1552       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1553       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1554       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1555                                                              NumFileDecls));
1556     }
1557 
1558     const SrcMgr::ContentCache &ContentCache =
1559         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1560     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1561         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1562         !ContentCache.getBufferIfLoaded()) {
1563       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1564       if (!Buffer)
1565         return true;
1566       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1567     }
1568 
1569     break;
1570   }
1571 
1572   case SM_SLOC_BUFFER_ENTRY: {
1573     const char *Name = Blob.data();
1574     unsigned Offset = Record[0];
1575     SrcMgr::CharacteristicKind
1576       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1577     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1578     if (IncludeLoc.isInvalid() && F->isModule()) {
1579       IncludeLoc = getImportLocation(F);
1580     }
1581 
1582     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1583     if (!Buffer)
1584       return true;
1585     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1586                            BaseOffset + Offset, IncludeLoc);
1587     break;
1588   }
1589 
1590   case SM_SLOC_EXPANSION_ENTRY: {
1591     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1592     SourceMgr.createExpansionLoc(SpellingLoc,
1593                                      ReadSourceLocation(*F, Record[2]),
1594                                      ReadSourceLocation(*F, Record[3]),
1595                                      Record[5],
1596                                      Record[4],
1597                                      ID,
1598                                      BaseOffset + Record[0]);
1599     break;
1600   }
1601   }
1602 
1603   return false;
1604 }
1605 
1606 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1607   if (ID == 0)
1608     return std::make_pair(SourceLocation(), "");
1609 
1610   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1611     Error("source location entry ID out-of-range for AST file");
1612     return std::make_pair(SourceLocation(), "");
1613   }
1614 
1615   // Find which module file this entry lands in.
1616   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1617   if (!M->isModule())
1618     return std::make_pair(SourceLocation(), "");
1619 
1620   // FIXME: Can we map this down to a particular submodule? That would be
1621   // ideal.
1622   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1623 }
1624 
1625 /// Find the location where the module F is imported.
1626 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1627   if (F->ImportLoc.isValid())
1628     return F->ImportLoc;
1629 
1630   // Otherwise we have a PCH. It's considered to be "imported" at the first
1631   // location of its includer.
1632   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1633     // Main file is the importer.
1634     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1635     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1636   }
1637   return F->ImportedBy[0]->FirstLoc;
1638 }
1639 
1640 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1641 /// the abbreviations that are at the top of the block and then leave the cursor
1642 /// pointing into the block.
1643 llvm::Error ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor,
1644                                         unsigned BlockID,
1645                                         uint64_t *StartOfBlockOffset) {
1646   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID))
1647     return Err;
1648 
1649   if (StartOfBlockOffset)
1650     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1651 
1652   while (true) {
1653     uint64_t Offset = Cursor.GetCurrentBitNo();
1654     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1655     if (!MaybeCode)
1656       return MaybeCode.takeError();
1657     unsigned Code = MaybeCode.get();
1658 
1659     // We expect all abbrevs to be at the start of the block.
1660     if (Code != llvm::bitc::DEFINE_ABBREV) {
1661       if (llvm::Error Err = Cursor.JumpToBit(Offset))
1662         return Err;
1663       return llvm::Error::success();
1664     }
1665     if (llvm::Error Err = Cursor.ReadAbbrevRecord())
1666       return Err;
1667   }
1668 }
1669 
1670 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1671                            unsigned &Idx) {
1672   Token Tok;
1673   Tok.startToken();
1674   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1675   Tok.setLength(Record[Idx++]);
1676   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1677     Tok.setIdentifierInfo(II);
1678   Tok.setKind((tok::TokenKind)Record[Idx++]);
1679   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1680   return Tok;
1681 }
1682 
1683 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1684   BitstreamCursor &Stream = F.MacroCursor;
1685 
1686   // Keep track of where we are in the stream, then jump back there
1687   // after reading this macro.
1688   SavedStreamPosition SavedPosition(Stream);
1689 
1690   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1691     // FIXME this drops errors on the floor.
1692     consumeError(std::move(Err));
1693     return nullptr;
1694   }
1695   RecordData Record;
1696   SmallVector<IdentifierInfo*, 16> MacroParams;
1697   MacroInfo *Macro = nullptr;
1698 
1699   while (true) {
1700     // Advance to the next record, but if we get to the end of the block, don't
1701     // pop it (removing all the abbreviations from the cursor) since we want to
1702     // be able to reseek within the block and read entries.
1703     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1704     Expected<llvm::BitstreamEntry> MaybeEntry =
1705         Stream.advanceSkippingSubblocks(Flags);
1706     if (!MaybeEntry) {
1707       Error(MaybeEntry.takeError());
1708       return Macro;
1709     }
1710     llvm::BitstreamEntry Entry = MaybeEntry.get();
1711 
1712     switch (Entry.Kind) {
1713     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1714     case llvm::BitstreamEntry::Error:
1715       Error("malformed block record in AST file");
1716       return Macro;
1717     case llvm::BitstreamEntry::EndBlock:
1718       return Macro;
1719     case llvm::BitstreamEntry::Record:
1720       // The interesting case.
1721       break;
1722     }
1723 
1724     // Read a record.
1725     Record.clear();
1726     PreprocessorRecordTypes RecType;
1727     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1728       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1729     else {
1730       Error(MaybeRecType.takeError());
1731       return Macro;
1732     }
1733     switch (RecType) {
1734     case PP_MODULE_MACRO:
1735     case PP_MACRO_DIRECTIVE_HISTORY:
1736       return Macro;
1737 
1738     case PP_MACRO_OBJECT_LIKE:
1739     case PP_MACRO_FUNCTION_LIKE: {
1740       // If we already have a macro, that means that we've hit the end
1741       // of the definition of the macro we were looking for. We're
1742       // done.
1743       if (Macro)
1744         return Macro;
1745 
1746       unsigned NextIndex = 1; // Skip identifier ID.
1747       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1748       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1749       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1750       MI->setIsUsed(Record[NextIndex++]);
1751       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1752 
1753       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1754         // Decode function-like macro info.
1755         bool isC99VarArgs = Record[NextIndex++];
1756         bool isGNUVarArgs = Record[NextIndex++];
1757         bool hasCommaPasting = Record[NextIndex++];
1758         MacroParams.clear();
1759         unsigned NumArgs = Record[NextIndex++];
1760         for (unsigned i = 0; i != NumArgs; ++i)
1761           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1762 
1763         // Install function-like macro info.
1764         MI->setIsFunctionLike();
1765         if (isC99VarArgs) MI->setIsC99Varargs();
1766         if (isGNUVarArgs) MI->setIsGNUVarargs();
1767         if (hasCommaPasting) MI->setHasCommaPasting();
1768         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1769       }
1770 
1771       // Remember that we saw this macro last so that we add the tokens that
1772       // form its body to it.
1773       Macro = MI;
1774 
1775       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1776           Record[NextIndex]) {
1777         // We have a macro definition. Register the association
1778         PreprocessedEntityID
1779             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1780         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1781         PreprocessingRecord::PPEntityID PPID =
1782             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1783         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1784             PPRec.getPreprocessedEntity(PPID));
1785         if (PPDef)
1786           PPRec.RegisterMacroDefinition(Macro, PPDef);
1787       }
1788 
1789       ++NumMacrosRead;
1790       break;
1791     }
1792 
1793     case PP_TOKEN: {
1794       // If we see a TOKEN before a PP_MACRO_*, then the file is
1795       // erroneous, just pretend we didn't see this.
1796       if (!Macro) break;
1797 
1798       unsigned Idx = 0;
1799       Token Tok = ReadToken(F, Record, Idx);
1800       Macro->AddTokenToBody(Tok);
1801       break;
1802     }
1803     }
1804   }
1805 }
1806 
1807 PreprocessedEntityID
1808 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1809                                          unsigned LocalID) const {
1810   if (!M.ModuleOffsetMap.empty())
1811     ReadModuleOffsetMap(M);
1812 
1813   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1814     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1815   assert(I != M.PreprocessedEntityRemap.end()
1816          && "Invalid index into preprocessed entity index remap");
1817 
1818   return LocalID + I->second;
1819 }
1820 
1821 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1822   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1823 }
1824 
1825 HeaderFileInfoTrait::internal_key_type
1826 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1827   internal_key_type ikey = {FE->getSize(),
1828                             M.HasTimestamps ? FE->getModificationTime() : 0,
1829                             FE->getName(), /*Imported*/ false};
1830   return ikey;
1831 }
1832 
1833 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1834   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1835     return false;
1836 
1837   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1838     return true;
1839 
1840   // Determine whether the actual files are equivalent.
1841   FileManager &FileMgr = Reader.getFileManager();
1842   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1843     if (!Key.Imported) {
1844       if (auto File = FileMgr.getFile(Key.Filename))
1845         return *File;
1846       return nullptr;
1847     }
1848 
1849     std::string Resolved = std::string(Key.Filename);
1850     Reader.ResolveImportedPath(M, Resolved);
1851     if (auto File = FileMgr.getFile(Resolved))
1852       return *File;
1853     return nullptr;
1854   };
1855 
1856   const FileEntry *FEA = GetFile(a);
1857   const FileEntry *FEB = GetFile(b);
1858   return FEA && FEA == FEB;
1859 }
1860 
1861 std::pair<unsigned, unsigned>
1862 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1863   return readULEBKeyDataLength(d);
1864 }
1865 
1866 HeaderFileInfoTrait::internal_key_type
1867 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1868   using namespace llvm::support;
1869 
1870   internal_key_type ikey;
1871   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1872   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1873   ikey.Filename = (const char *)d;
1874   ikey.Imported = true;
1875   return ikey;
1876 }
1877 
1878 HeaderFileInfoTrait::data_type
1879 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1880                               unsigned DataLen) {
1881   using namespace llvm::support;
1882 
1883   const unsigned char *End = d + DataLen;
1884   HeaderFileInfo HFI;
1885   unsigned Flags = *d++;
1886   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1887   HFI.isImport |= (Flags >> 5) & 0x01;
1888   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1889   HFI.DirInfo = (Flags >> 1) & 0x07;
1890   HFI.IndexHeaderMapHeader = Flags & 0x01;
1891   // FIXME: Find a better way to handle this. Maybe just store a
1892   // "has been included" flag?
1893   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1894                              HFI.NumIncludes);
1895   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1896       M, endian::readNext<uint32_t, little, unaligned>(d));
1897   if (unsigned FrameworkOffset =
1898           endian::readNext<uint32_t, little, unaligned>(d)) {
1899     // The framework offset is 1 greater than the actual offset,
1900     // since 0 is used as an indicator for "no framework name".
1901     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1902     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1903   }
1904 
1905   assert((End - d) % 4 == 0 &&
1906          "Wrong data length in HeaderFileInfo deserialization");
1907   while (d != End) {
1908     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1909     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1910     LocalSMID >>= 2;
1911 
1912     // This header is part of a module. Associate it with the module to enable
1913     // implicit module import.
1914     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1915     Module *Mod = Reader.getSubmodule(GlobalSMID);
1916     FileManager &FileMgr = Reader.getFileManager();
1917     ModuleMap &ModMap =
1918         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1919 
1920     std::string Filename = std::string(key.Filename);
1921     if (key.Imported)
1922       Reader.ResolveImportedPath(M, Filename);
1923     // FIXME: NameAsWritten
1924     Module::Header H = {std::string(key.Filename), "",
1925                         *FileMgr.getFile(Filename)};
1926     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1927     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1928   }
1929 
1930   // This HeaderFileInfo was externally loaded.
1931   HFI.External = true;
1932   HFI.IsValid = true;
1933   return HFI;
1934 }
1935 
1936 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1937                                 uint32_t MacroDirectivesOffset) {
1938   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1939   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1940 }
1941 
1942 void ASTReader::ReadDefinedMacros() {
1943   // Note that we are loading defined macros.
1944   Deserializing Macros(this);
1945 
1946   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1947     BitstreamCursor &MacroCursor = I.MacroCursor;
1948 
1949     // If there was no preprocessor block, skip this file.
1950     if (MacroCursor.getBitcodeBytes().empty())
1951       continue;
1952 
1953     BitstreamCursor Cursor = MacroCursor;
1954     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1955       Error(std::move(Err));
1956       return;
1957     }
1958 
1959     RecordData Record;
1960     while (true) {
1961       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1962       if (!MaybeE) {
1963         Error(MaybeE.takeError());
1964         return;
1965       }
1966       llvm::BitstreamEntry E = MaybeE.get();
1967 
1968       switch (E.Kind) {
1969       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1970       case llvm::BitstreamEntry::Error:
1971         Error("malformed block record in AST file");
1972         return;
1973       case llvm::BitstreamEntry::EndBlock:
1974         goto NextCursor;
1975 
1976       case llvm::BitstreamEntry::Record: {
1977         Record.clear();
1978         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1979         if (!MaybeRecord) {
1980           Error(MaybeRecord.takeError());
1981           return;
1982         }
1983         switch (MaybeRecord.get()) {
1984         default:  // Default behavior: ignore.
1985           break;
1986 
1987         case PP_MACRO_OBJECT_LIKE:
1988         case PP_MACRO_FUNCTION_LIKE: {
1989           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1990           if (II->isOutOfDate())
1991             updateOutOfDateIdentifier(*II);
1992           break;
1993         }
1994 
1995         case PP_TOKEN:
1996           // Ignore tokens.
1997           break;
1998         }
1999         break;
2000       }
2001       }
2002     }
2003     NextCursor:  ;
2004   }
2005 }
2006 
2007 namespace {
2008 
2009   /// Visitor class used to look up identifirs in an AST file.
2010   class IdentifierLookupVisitor {
2011     StringRef Name;
2012     unsigned NameHash;
2013     unsigned PriorGeneration;
2014     unsigned &NumIdentifierLookups;
2015     unsigned &NumIdentifierLookupHits;
2016     IdentifierInfo *Found = nullptr;
2017 
2018   public:
2019     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2020                             unsigned &NumIdentifierLookups,
2021                             unsigned &NumIdentifierLookupHits)
2022       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2023         PriorGeneration(PriorGeneration),
2024         NumIdentifierLookups(NumIdentifierLookups),
2025         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2026 
2027     bool operator()(ModuleFile &M) {
2028       // If we've already searched this module file, skip it now.
2029       if (M.Generation <= PriorGeneration)
2030         return true;
2031 
2032       ASTIdentifierLookupTable *IdTable
2033         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2034       if (!IdTable)
2035         return false;
2036 
2037       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2038                                      Found);
2039       ++NumIdentifierLookups;
2040       ASTIdentifierLookupTable::iterator Pos =
2041           IdTable->find_hashed(Name, NameHash, &Trait);
2042       if (Pos == IdTable->end())
2043         return false;
2044 
2045       // Dereferencing the iterator has the effect of building the
2046       // IdentifierInfo node and populating it with the various
2047       // declarations it needs.
2048       ++NumIdentifierLookupHits;
2049       Found = *Pos;
2050       return true;
2051     }
2052 
2053     // Retrieve the identifier info found within the module
2054     // files.
2055     IdentifierInfo *getIdentifierInfo() const { return Found; }
2056   };
2057 
2058 } // namespace
2059 
2060 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2061   // Note that we are loading an identifier.
2062   Deserializing AnIdentifier(this);
2063 
2064   unsigned PriorGeneration = 0;
2065   if (getContext().getLangOpts().Modules)
2066     PriorGeneration = IdentifierGeneration[&II];
2067 
2068   // If there is a global index, look there first to determine which modules
2069   // provably do not have any results for this identifier.
2070   GlobalModuleIndex::HitSet Hits;
2071   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2072   if (!loadGlobalIndex()) {
2073     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2074       HitsPtr = &Hits;
2075     }
2076   }
2077 
2078   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2079                                   NumIdentifierLookups,
2080                                   NumIdentifierLookupHits);
2081   ModuleMgr.visit(Visitor, HitsPtr);
2082   markIdentifierUpToDate(&II);
2083 }
2084 
2085 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2086   if (!II)
2087     return;
2088 
2089   II->setOutOfDate(false);
2090 
2091   // Update the generation for this identifier.
2092   if (getContext().getLangOpts().Modules)
2093     IdentifierGeneration[II] = getGeneration();
2094 }
2095 
2096 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2097                                     const PendingMacroInfo &PMInfo) {
2098   ModuleFile &M = *PMInfo.M;
2099 
2100   BitstreamCursor &Cursor = M.MacroCursor;
2101   SavedStreamPosition SavedPosition(Cursor);
2102   if (llvm::Error Err =
2103           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2104     Error(std::move(Err));
2105     return;
2106   }
2107 
2108   struct ModuleMacroRecord {
2109     SubmoduleID SubModID;
2110     MacroInfo *MI;
2111     SmallVector<SubmoduleID, 8> Overrides;
2112   };
2113   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2114 
2115   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2116   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2117   // macro histroy.
2118   RecordData Record;
2119   while (true) {
2120     Expected<llvm::BitstreamEntry> MaybeEntry =
2121         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2122     if (!MaybeEntry) {
2123       Error(MaybeEntry.takeError());
2124       return;
2125     }
2126     llvm::BitstreamEntry Entry = MaybeEntry.get();
2127 
2128     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2129       Error("malformed block record in AST file");
2130       return;
2131     }
2132 
2133     Record.clear();
2134     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2135     if (!MaybePP) {
2136       Error(MaybePP.takeError());
2137       return;
2138     }
2139     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2140     case PP_MACRO_DIRECTIVE_HISTORY:
2141       break;
2142 
2143     case PP_MODULE_MACRO: {
2144       ModuleMacros.push_back(ModuleMacroRecord());
2145       auto &Info = ModuleMacros.back();
2146       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2147       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2148       for (int I = 2, N = Record.size(); I != N; ++I)
2149         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2150       continue;
2151     }
2152 
2153     default:
2154       Error("malformed block record in AST file");
2155       return;
2156     }
2157 
2158     // We found the macro directive history; that's the last record
2159     // for this macro.
2160     break;
2161   }
2162 
2163   // Module macros are listed in reverse dependency order.
2164   {
2165     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2166     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2167     for (auto &MMR : ModuleMacros) {
2168       Overrides.clear();
2169       for (unsigned ModID : MMR.Overrides) {
2170         Module *Mod = getSubmodule(ModID);
2171         auto *Macro = PP.getModuleMacro(Mod, II);
2172         assert(Macro && "missing definition for overridden macro");
2173         Overrides.push_back(Macro);
2174       }
2175 
2176       bool Inserted = false;
2177       Module *Owner = getSubmodule(MMR.SubModID);
2178       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2179     }
2180   }
2181 
2182   // Don't read the directive history for a module; we don't have anywhere
2183   // to put it.
2184   if (M.isModule())
2185     return;
2186 
2187   // Deserialize the macro directives history in reverse source-order.
2188   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2189   unsigned Idx = 0, N = Record.size();
2190   while (Idx < N) {
2191     MacroDirective *MD = nullptr;
2192     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2193     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2194     switch (K) {
2195     case MacroDirective::MD_Define: {
2196       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2197       MD = PP.AllocateDefMacroDirective(MI, Loc);
2198       break;
2199     }
2200     case MacroDirective::MD_Undefine:
2201       MD = PP.AllocateUndefMacroDirective(Loc);
2202       break;
2203     case MacroDirective::MD_Visibility:
2204       bool isPublic = Record[Idx++];
2205       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2206       break;
2207     }
2208 
2209     if (!Latest)
2210       Latest = MD;
2211     if (Earliest)
2212       Earliest->setPrevious(MD);
2213     Earliest = MD;
2214   }
2215 
2216   if (Latest)
2217     PP.setLoadedMacroDirective(II, Earliest, Latest);
2218 }
2219 
2220 bool ASTReader::shouldDisableValidationForFile(
2221     const serialization::ModuleFile &M) const {
2222   if (DisableValidationKind == DisableValidationForModuleKind::None)
2223     return false;
2224 
2225   // If a PCH is loaded and validation is disabled for PCH then disable
2226   // validation for the PCH and the modules it loads.
2227   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2228 
2229   switch (K) {
2230   case MK_MainFile:
2231   case MK_Preamble:
2232   case MK_PCH:
2233     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2234   case MK_ImplicitModule:
2235   case MK_ExplicitModule:
2236   case MK_PrebuiltModule:
2237     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2238   }
2239 
2240   return false;
2241 }
2242 
2243 ASTReader::InputFileInfo
2244 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2245   // Go find this input file.
2246   BitstreamCursor &Cursor = F.InputFilesCursor;
2247   SavedStreamPosition SavedPosition(Cursor);
2248   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2249     // FIXME this drops errors on the floor.
2250     consumeError(std::move(Err));
2251   }
2252 
2253   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2254   if (!MaybeCode) {
2255     // FIXME this drops errors on the floor.
2256     consumeError(MaybeCode.takeError());
2257   }
2258   unsigned Code = MaybeCode.get();
2259   RecordData Record;
2260   StringRef Blob;
2261 
2262   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2263     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2264            "invalid record type for input file");
2265   else {
2266     // FIXME this drops errors on the floor.
2267     consumeError(Maybe.takeError());
2268   }
2269 
2270   assert(Record[0] == ID && "Bogus stored ID or offset");
2271   InputFileInfo R;
2272   R.StoredSize = static_cast<off_t>(Record[1]);
2273   R.StoredTime = static_cast<time_t>(Record[2]);
2274   R.Overridden = static_cast<bool>(Record[3]);
2275   R.Transient = static_cast<bool>(Record[4]);
2276   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2277   R.Filename = std::string(Blob);
2278   ResolveImportedPath(F, R.Filename);
2279 
2280   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2281   if (!MaybeEntry) // FIXME this drops errors on the floor.
2282     consumeError(MaybeEntry.takeError());
2283   llvm::BitstreamEntry Entry = MaybeEntry.get();
2284   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2285          "expected record type for input file hash");
2286 
2287   Record.clear();
2288   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2289     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2290            "invalid record type for input file hash");
2291   else {
2292     // FIXME this drops errors on the floor.
2293     consumeError(Maybe.takeError());
2294   }
2295   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2296                   static_cast<uint64_t>(Record[0]);
2297   return R;
2298 }
2299 
2300 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2301 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2302   // If this ID is bogus, just return an empty input file.
2303   if (ID == 0 || ID > F.InputFilesLoaded.size())
2304     return InputFile();
2305 
2306   // If we've already loaded this input file, return it.
2307   if (F.InputFilesLoaded[ID-1].getFile())
2308     return F.InputFilesLoaded[ID-1];
2309 
2310   if (F.InputFilesLoaded[ID-1].isNotFound())
2311     return InputFile();
2312 
2313   // Go find this input file.
2314   BitstreamCursor &Cursor = F.InputFilesCursor;
2315   SavedStreamPosition SavedPosition(Cursor);
2316   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2317     // FIXME this drops errors on the floor.
2318     consumeError(std::move(Err));
2319   }
2320 
2321   InputFileInfo FI = readInputFileInfo(F, ID);
2322   off_t StoredSize = FI.StoredSize;
2323   time_t StoredTime = FI.StoredTime;
2324   bool Overridden = FI.Overridden;
2325   bool Transient = FI.Transient;
2326   StringRef Filename = FI.Filename;
2327   uint64_t StoredContentHash = FI.ContentHash;
2328 
2329   OptionalFileEntryRefDegradesToFileEntryPtr File =
2330       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2331 
2332   // If we didn't find the file, resolve it relative to the
2333   // original directory from which this AST file was created.
2334   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2335       F.OriginalDir != F.BaseDirectory) {
2336     std::string Resolved = resolveFileRelativeToOriginalDir(
2337         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2338     if (!Resolved.empty())
2339       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2340   }
2341 
2342   // For an overridden file, create a virtual file with the stored
2343   // size/timestamp.
2344   if ((Overridden || Transient) && !File)
2345     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2346 
2347   if (!File) {
2348     if (Complain) {
2349       std::string ErrorStr = "could not find file '";
2350       ErrorStr += Filename;
2351       ErrorStr += "' referenced by AST file '";
2352       ErrorStr += F.FileName;
2353       ErrorStr += "'";
2354       Error(ErrorStr);
2355     }
2356     // Record that we didn't find the file.
2357     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2358     return InputFile();
2359   }
2360 
2361   // Check if there was a request to override the contents of the file
2362   // that was part of the precompiled header. Overriding such a file
2363   // can lead to problems when lexing using the source locations from the
2364   // PCH.
2365   SourceManager &SM = getSourceManager();
2366   // FIXME: Reject if the overrides are different.
2367   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2368     if (Complain)
2369       Error(diag::err_fe_pch_file_overridden, Filename);
2370 
2371     // After emitting the diagnostic, bypass the overriding file to recover
2372     // (this creates a separate FileEntry).
2373     File = SM.bypassFileContentsOverride(*File);
2374     if (!File) {
2375       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2376       return InputFile();
2377     }
2378   }
2379 
2380   struct Change {
2381     enum ModificationKind {
2382       Size,
2383       ModTime,
2384       Content,
2385       None,
2386     } Kind;
2387     llvm::Optional<int64_t> Old = llvm::None;
2388     llvm::Optional<int64_t> New = llvm::None;
2389   };
2390   auto HasInputFileChanged = [&]() {
2391     if (StoredSize != File->getSize())
2392       return Change{Change::Size, StoredSize, File->getSize()};
2393     if (!shouldDisableValidationForFile(F) && StoredTime &&
2394         StoredTime != File->getModificationTime()) {
2395       Change MTimeChange = {Change::ModTime, StoredTime,
2396                             File->getModificationTime()};
2397 
2398       // In case the modification time changes but not the content,
2399       // accept the cached file as legit.
2400       if (ValidateASTInputFilesContent &&
2401           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2402         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2403         if (!MemBuffOrError) {
2404           if (!Complain)
2405             return MTimeChange;
2406           std::string ErrorStr = "could not get buffer for file '";
2407           ErrorStr += File->getName();
2408           ErrorStr += "'";
2409           Error(ErrorStr);
2410           return MTimeChange;
2411         }
2412 
2413         // FIXME: hash_value is not guaranteed to be stable!
2414         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2415         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2416           return Change{Change::None};
2417 
2418         return Change{Change::Content};
2419       }
2420       return MTimeChange;
2421     }
2422     return Change{Change::None};
2423   };
2424 
2425   bool IsOutOfDate = false;
2426   auto FileChange = HasInputFileChanged();
2427   // For an overridden file, there is nothing to validate.
2428   if (!Overridden && FileChange.Kind != Change::None) {
2429     if (Complain && !Diags.isDiagnosticInFlight()) {
2430       // Build a list of the PCH imports that got us here (in reverse).
2431       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2432       while (!ImportStack.back()->ImportedBy.empty())
2433         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2434 
2435       // The top-level PCH is stale.
2436       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2437       Diag(diag::err_fe_ast_file_modified)
2438           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2439           << TopLevelPCHName << FileChange.Kind
2440           << (FileChange.Old && FileChange.New)
2441           << llvm::itostr(FileChange.Old.getValueOr(0))
2442           << llvm::itostr(FileChange.New.getValueOr(0));
2443 
2444       // Print the import stack.
2445       if (ImportStack.size() > 1) {
2446         Diag(diag::note_pch_required_by)
2447           << Filename << ImportStack[0]->FileName;
2448         for (unsigned I = 1; I < ImportStack.size(); ++I)
2449           Diag(diag::note_pch_required_by)
2450             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2451       }
2452 
2453       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2454     }
2455 
2456     IsOutOfDate = true;
2457   }
2458   // FIXME: If the file is overridden and we've already opened it,
2459   // issue an error (or split it into a separate FileEntry).
2460 
2461   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2462 
2463   // Note that we've loaded this input file.
2464   F.InputFilesLoaded[ID-1] = IF;
2465   return IF;
2466 }
2467 
2468 /// If we are loading a relocatable PCH or module file, and the filename
2469 /// is not an absolute path, add the system or module root to the beginning of
2470 /// the file name.
2471 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2472   // Resolve relative to the base directory, if we have one.
2473   if (!M.BaseDirectory.empty())
2474     return ResolveImportedPath(Filename, M.BaseDirectory);
2475 }
2476 
2477 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2478   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2479     return;
2480 
2481   SmallString<128> Buffer;
2482   llvm::sys::path::append(Buffer, Prefix, Filename);
2483   Filename.assign(Buffer.begin(), Buffer.end());
2484 }
2485 
2486 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2487   switch (ARR) {
2488   case ASTReader::Failure: return true;
2489   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2490   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2491   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2492   case ASTReader::ConfigurationMismatch:
2493     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2494   case ASTReader::HadErrors: return true;
2495   case ASTReader::Success: return false;
2496   }
2497 
2498   llvm_unreachable("unknown ASTReadResult");
2499 }
2500 
2501 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2502     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2503     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2504     std::string &SuggestedPredefines) {
2505   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2506     // FIXME this drops errors on the floor.
2507     consumeError(std::move(Err));
2508     return Failure;
2509   }
2510 
2511   // Read all of the records in the options block.
2512   RecordData Record;
2513   ASTReadResult Result = Success;
2514   while (true) {
2515     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2516     if (!MaybeEntry) {
2517       // FIXME this drops errors on the floor.
2518       consumeError(MaybeEntry.takeError());
2519       return Failure;
2520     }
2521     llvm::BitstreamEntry Entry = MaybeEntry.get();
2522 
2523     switch (Entry.Kind) {
2524     case llvm::BitstreamEntry::Error:
2525     case llvm::BitstreamEntry::SubBlock:
2526       return Failure;
2527 
2528     case llvm::BitstreamEntry::EndBlock:
2529       return Result;
2530 
2531     case llvm::BitstreamEntry::Record:
2532       // The interesting case.
2533       break;
2534     }
2535 
2536     // Read and process a record.
2537     Record.clear();
2538     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2539     if (!MaybeRecordType) {
2540       // FIXME this drops errors on the floor.
2541       consumeError(MaybeRecordType.takeError());
2542       return Failure;
2543     }
2544     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2545     case LANGUAGE_OPTIONS: {
2546       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2547       if (ParseLanguageOptions(Record, Complain, Listener,
2548                                AllowCompatibleConfigurationMismatch))
2549         Result = ConfigurationMismatch;
2550       break;
2551     }
2552 
2553     case TARGET_OPTIONS: {
2554       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2555       if (ParseTargetOptions(Record, Complain, Listener,
2556                              AllowCompatibleConfigurationMismatch))
2557         Result = ConfigurationMismatch;
2558       break;
2559     }
2560 
2561     case FILE_SYSTEM_OPTIONS: {
2562       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2563       if (!AllowCompatibleConfigurationMismatch &&
2564           ParseFileSystemOptions(Record, Complain, Listener))
2565         Result = ConfigurationMismatch;
2566       break;
2567     }
2568 
2569     case HEADER_SEARCH_OPTIONS: {
2570       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2571       if (!AllowCompatibleConfigurationMismatch &&
2572           ParseHeaderSearchOptions(Record, Complain, Listener))
2573         Result = ConfigurationMismatch;
2574       break;
2575     }
2576 
2577     case PREPROCESSOR_OPTIONS:
2578       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2579       if (!AllowCompatibleConfigurationMismatch &&
2580           ParsePreprocessorOptions(Record, Complain, Listener,
2581                                    SuggestedPredefines))
2582         Result = ConfigurationMismatch;
2583       break;
2584     }
2585   }
2586 }
2587 
2588 ASTReader::ASTReadResult
2589 ASTReader::ReadControlBlock(ModuleFile &F,
2590                             SmallVectorImpl<ImportedModule> &Loaded,
2591                             const ModuleFile *ImportedBy,
2592                             unsigned ClientLoadCapabilities) {
2593   BitstreamCursor &Stream = F.Stream;
2594 
2595   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2596     Error(std::move(Err));
2597     return Failure;
2598   }
2599 
2600   // Lambda to read the unhashed control block the first time it's called.
2601   //
2602   // For PCM files, the unhashed control block cannot be read until after the
2603   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2604   // need to look ahead before reading the IMPORTS record.  For consistency,
2605   // this block is always read somehow (see BitstreamEntry::EndBlock).
2606   bool HasReadUnhashedControlBlock = false;
2607   auto readUnhashedControlBlockOnce = [&]() {
2608     if (!HasReadUnhashedControlBlock) {
2609       HasReadUnhashedControlBlock = true;
2610       if (ASTReadResult Result =
2611               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2612         return Result;
2613     }
2614     return Success;
2615   };
2616 
2617   bool DisableValidation = shouldDisableValidationForFile(F);
2618 
2619   // Read all of the records and blocks in the control block.
2620   RecordData Record;
2621   unsigned NumInputs = 0;
2622   unsigned NumUserInputs = 0;
2623   StringRef BaseDirectoryAsWritten;
2624   while (true) {
2625     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2626     if (!MaybeEntry) {
2627       Error(MaybeEntry.takeError());
2628       return Failure;
2629     }
2630     llvm::BitstreamEntry Entry = MaybeEntry.get();
2631 
2632     switch (Entry.Kind) {
2633     case llvm::BitstreamEntry::Error:
2634       Error("malformed block record in AST file");
2635       return Failure;
2636     case llvm::BitstreamEntry::EndBlock: {
2637       // Validate the module before returning.  This call catches an AST with
2638       // no module name and no imports.
2639       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2640         return Result;
2641 
2642       // Validate input files.
2643       const HeaderSearchOptions &HSOpts =
2644           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2645 
2646       // All user input files reside at the index range [0, NumUserInputs), and
2647       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2648       // loaded module files, ignore missing inputs.
2649       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2650           F.Kind != MK_PrebuiltModule) {
2651         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2652 
2653         // If we are reading a module, we will create a verification timestamp,
2654         // so we verify all input files.  Otherwise, verify only user input
2655         // files.
2656 
2657         unsigned N = NumUserInputs;
2658         if (ValidateSystemInputs ||
2659             (HSOpts.ModulesValidateOncePerBuildSession &&
2660              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2661              F.Kind == MK_ImplicitModule))
2662           N = NumInputs;
2663 
2664         for (unsigned I = 0; I < N; ++I) {
2665           InputFile IF = getInputFile(F, I+1, Complain);
2666           if (!IF.getFile() || IF.isOutOfDate())
2667             return OutOfDate;
2668         }
2669       }
2670 
2671       if (Listener)
2672         Listener->visitModuleFile(F.FileName, F.Kind);
2673 
2674       if (Listener && Listener->needsInputFileVisitation()) {
2675         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2676                                                                 : NumUserInputs;
2677         for (unsigned I = 0; I < N; ++I) {
2678           bool IsSystem = I >= NumUserInputs;
2679           InputFileInfo FI = readInputFileInfo(F, I+1);
2680           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2681                                    F.Kind == MK_ExplicitModule ||
2682                                    F.Kind == MK_PrebuiltModule);
2683         }
2684       }
2685 
2686       return Success;
2687     }
2688 
2689     case llvm::BitstreamEntry::SubBlock:
2690       switch (Entry.ID) {
2691       case INPUT_FILES_BLOCK_ID:
2692         F.InputFilesCursor = Stream;
2693         if (llvm::Error Err = Stream.SkipBlock()) {
2694           Error(std::move(Err));
2695           return Failure;
2696         }
2697         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2698           Error("malformed block record in AST file");
2699           return Failure;
2700         }
2701         continue;
2702 
2703       case OPTIONS_BLOCK_ID:
2704         // If we're reading the first module for this group, check its options
2705         // are compatible with ours. For modules it imports, no further checking
2706         // is required, because we checked them when we built it.
2707         if (Listener && !ImportedBy) {
2708           // Should we allow the configuration of the module file to differ from
2709           // the configuration of the current translation unit in a compatible
2710           // way?
2711           //
2712           // FIXME: Allow this for files explicitly specified with -include-pch.
2713           bool AllowCompatibleConfigurationMismatch =
2714               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2715 
2716           ASTReadResult Result =
2717               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2718                                AllowCompatibleConfigurationMismatch, *Listener,
2719                                SuggestedPredefines);
2720           if (Result == Failure) {
2721             Error("malformed block record in AST file");
2722             return Result;
2723           }
2724 
2725           if (DisableValidation ||
2726               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2727             Result = Success;
2728 
2729           // If we can't load the module, exit early since we likely
2730           // will rebuild the module anyway. The stream may be in the
2731           // middle of a block.
2732           if (Result != Success)
2733             return Result;
2734         } else if (llvm::Error Err = Stream.SkipBlock()) {
2735           Error(std::move(Err));
2736           return Failure;
2737         }
2738         continue;
2739 
2740       default:
2741         if (llvm::Error Err = Stream.SkipBlock()) {
2742           Error(std::move(Err));
2743           return Failure;
2744         }
2745         continue;
2746       }
2747 
2748     case llvm::BitstreamEntry::Record:
2749       // The interesting case.
2750       break;
2751     }
2752 
2753     // Read and process a record.
2754     Record.clear();
2755     StringRef Blob;
2756     Expected<unsigned> MaybeRecordType =
2757         Stream.readRecord(Entry.ID, Record, &Blob);
2758     if (!MaybeRecordType) {
2759       Error(MaybeRecordType.takeError());
2760       return Failure;
2761     }
2762     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2763     case METADATA: {
2764       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2765         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2766           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2767                                         : diag::err_pch_version_too_new);
2768         return VersionMismatch;
2769       }
2770 
2771       bool hasErrors = Record[6];
2772       if (hasErrors && !DisableValidation) {
2773         // If requested by the caller and the module hasn't already been read
2774         // or compiled, mark modules on error as out-of-date.
2775         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2776             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2777           return OutOfDate;
2778 
2779         if (!AllowASTWithCompilerErrors) {
2780           Diag(diag::err_pch_with_compiler_errors);
2781           return HadErrors;
2782         }
2783       }
2784       if (hasErrors) {
2785         Diags.ErrorOccurred = true;
2786         Diags.UncompilableErrorOccurred = true;
2787         Diags.UnrecoverableErrorOccurred = true;
2788       }
2789 
2790       F.RelocatablePCH = Record[4];
2791       // Relative paths in a relocatable PCH are relative to our sysroot.
2792       if (F.RelocatablePCH)
2793         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2794 
2795       F.HasTimestamps = Record[5];
2796 
2797       const std::string &CurBranch = getClangFullRepositoryVersion();
2798       StringRef ASTBranch = Blob;
2799       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2800         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2801           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2802         return VersionMismatch;
2803       }
2804       break;
2805     }
2806 
2807     case IMPORTS: {
2808       // Validate the AST before processing any imports (otherwise, untangling
2809       // them can be error-prone and expensive).  A module will have a name and
2810       // will already have been validated, but this catches the PCH case.
2811       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2812         return Result;
2813 
2814       // Load each of the imported PCH files.
2815       unsigned Idx = 0, N = Record.size();
2816       while (Idx < N) {
2817         // Read information about the AST file.
2818         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2819         // The import location will be the local one for now; we will adjust
2820         // all import locations of module imports after the global source
2821         // location info are setup, in ReadAST.
2822         SourceLocation ImportLoc =
2823             ReadUntranslatedSourceLocation(Record[Idx++]);
2824         off_t StoredSize = (off_t)Record[Idx++];
2825         time_t StoredModTime = (time_t)Record[Idx++];
2826         auto FirstSignatureByte = Record.begin() + Idx;
2827         ASTFileSignature StoredSignature = ASTFileSignature::create(
2828             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2829         Idx += ASTFileSignature::size;
2830 
2831         std::string ImportedName = ReadString(Record, Idx);
2832         std::string ImportedFile;
2833 
2834         // For prebuilt and explicit modules first consult the file map for
2835         // an override. Note that here we don't search prebuilt module
2836         // directories, only the explicit name to file mappings. Also, we will
2837         // still verify the size/signature making sure it is essentially the
2838         // same file but perhaps in a different location.
2839         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2840           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2841             ImportedName, /*FileMapOnly*/ true);
2842 
2843         if (ImportedFile.empty())
2844           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2845           // ModuleCache as when writing.
2846           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2847         else
2848           SkipPath(Record, Idx);
2849 
2850         // If our client can't cope with us being out of date, we can't cope with
2851         // our dependency being missing.
2852         unsigned Capabilities = ClientLoadCapabilities;
2853         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2854           Capabilities &= ~ARR_Missing;
2855 
2856         // Load the AST file.
2857         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2858                                   Loaded, StoredSize, StoredModTime,
2859                                   StoredSignature, Capabilities);
2860 
2861         // If we diagnosed a problem, produce a backtrace.
2862         bool recompilingFinalized =
2863             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2864             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2865         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2866           Diag(diag::note_module_file_imported_by)
2867               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2868         if (recompilingFinalized)
2869           Diag(diag::note_module_file_conflict);
2870 
2871         switch (Result) {
2872         case Failure: return Failure;
2873           // If we have to ignore the dependency, we'll have to ignore this too.
2874         case Missing:
2875         case OutOfDate: return OutOfDate;
2876         case VersionMismatch: return VersionMismatch;
2877         case ConfigurationMismatch: return ConfigurationMismatch;
2878         case HadErrors: return HadErrors;
2879         case Success: break;
2880         }
2881       }
2882       break;
2883     }
2884 
2885     case ORIGINAL_FILE:
2886       F.OriginalSourceFileID = FileID::get(Record[0]);
2887       F.ActualOriginalSourceFileName = std::string(Blob);
2888       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2889       ResolveImportedPath(F, F.OriginalSourceFileName);
2890       break;
2891 
2892     case ORIGINAL_FILE_ID:
2893       F.OriginalSourceFileID = FileID::get(Record[0]);
2894       break;
2895 
2896     case ORIGINAL_PCH_DIR:
2897       F.OriginalDir = std::string(Blob);
2898       break;
2899 
2900     case MODULE_NAME:
2901       F.ModuleName = std::string(Blob);
2902       Diag(diag::remark_module_import)
2903           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2904           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2905       if (Listener)
2906         Listener->ReadModuleName(F.ModuleName);
2907 
2908       // Validate the AST as soon as we have a name so we can exit early on
2909       // failure.
2910       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2911         return Result;
2912 
2913       break;
2914 
2915     case MODULE_DIRECTORY: {
2916       // Save the BaseDirectory as written in the PCM for computing the module
2917       // filename for the ModuleCache.
2918       BaseDirectoryAsWritten = Blob;
2919       assert(!F.ModuleName.empty() &&
2920              "MODULE_DIRECTORY found before MODULE_NAME");
2921       // If we've already loaded a module map file covering this module, we may
2922       // have a better path for it (relative to the current build).
2923       Module *M = PP.getHeaderSearchInfo().lookupModule(
2924           F.ModuleName, SourceLocation(), /*AllowSearch*/ true,
2925           /*AllowExtraModuleMapSearch*/ true);
2926       if (M && M->Directory) {
2927         // If we're implicitly loading a module, the base directory can't
2928         // change between the build and use.
2929         // Don't emit module relocation error if we have -fno-validate-pch
2930         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2931                   DisableValidationForModuleKind::Module) &&
2932             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2933           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2934           if (!BuildDir || *BuildDir != M->Directory) {
2935             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2936               Diag(diag::err_imported_module_relocated)
2937                   << F.ModuleName << Blob << M->Directory->getName();
2938             return OutOfDate;
2939           }
2940         }
2941         F.BaseDirectory = std::string(M->Directory->getName());
2942       } else {
2943         F.BaseDirectory = std::string(Blob);
2944       }
2945       break;
2946     }
2947 
2948     case MODULE_MAP_FILE:
2949       if (ASTReadResult Result =
2950               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2951         return Result;
2952       break;
2953 
2954     case INPUT_FILE_OFFSETS:
2955       NumInputs = Record[0];
2956       NumUserInputs = Record[1];
2957       F.InputFileOffsets =
2958           (const llvm::support::unaligned_uint64_t *)Blob.data();
2959       F.InputFilesLoaded.resize(NumInputs);
2960       F.NumUserInputFiles = NumUserInputs;
2961       break;
2962     }
2963   }
2964 }
2965 
2966 llvm::Error ASTReader::ReadASTBlock(ModuleFile &F,
2967                                     unsigned ClientLoadCapabilities) {
2968   BitstreamCursor &Stream = F.Stream;
2969 
2970   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID))
2971     return Err;
2972   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2973 
2974   // Read all of the records and blocks for the AST file.
2975   RecordData Record;
2976   while (true) {
2977     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2978     if (!MaybeEntry)
2979       return MaybeEntry.takeError();
2980     llvm::BitstreamEntry Entry = MaybeEntry.get();
2981 
2982     switch (Entry.Kind) {
2983     case llvm::BitstreamEntry::Error:
2984       return llvm::createStringError(
2985           std::errc::illegal_byte_sequence,
2986           "error at end of module block in AST file");
2987     case llvm::BitstreamEntry::EndBlock:
2988       // Outside of C++, we do not store a lookup map for the translation unit.
2989       // Instead, mark it as needing a lookup map to be built if this module
2990       // contains any declarations lexically within it (which it always does!).
2991       // This usually has no cost, since we very rarely need the lookup map for
2992       // the translation unit outside C++.
2993       if (ASTContext *Ctx = ContextObj) {
2994         DeclContext *DC = Ctx->getTranslationUnitDecl();
2995         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2996           DC->setMustBuildLookupTable();
2997       }
2998 
2999       return llvm::Error::success();
3000     case llvm::BitstreamEntry::SubBlock:
3001       switch (Entry.ID) {
3002       case DECLTYPES_BLOCK_ID:
3003         // We lazily load the decls block, but we want to set up the
3004         // DeclsCursor cursor to point into it.  Clone our current bitcode
3005         // cursor to it, enter the block and read the abbrevs in that block.
3006         // With the main cursor, we just skip over it.
3007         F.DeclsCursor = Stream;
3008         if (llvm::Error Err = Stream.SkipBlock())
3009           return Err;
3010         if (llvm::Error Err = ReadBlockAbbrevs(
3011                 F.DeclsCursor, DECLTYPES_BLOCK_ID, &F.DeclsBlockStartOffset))
3012           return Err;
3013         break;
3014 
3015       case PREPROCESSOR_BLOCK_ID:
3016         F.MacroCursor = Stream;
3017         if (!PP.getExternalSource())
3018           PP.setExternalSource(this);
3019 
3020         if (llvm::Error Err = Stream.SkipBlock())
3021           return Err;
3022         if (llvm::Error Err =
3023                 ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID))
3024           return Err;
3025         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3026         break;
3027 
3028       case PREPROCESSOR_DETAIL_BLOCK_ID:
3029         F.PreprocessorDetailCursor = Stream;
3030 
3031         if (llvm::Error Err = Stream.SkipBlock()) {
3032           return Err;
3033         }
3034         if (llvm::Error Err = ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3035                                                PREPROCESSOR_DETAIL_BLOCK_ID))
3036           return Err;
3037         F.PreprocessorDetailStartOffset
3038         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3039 
3040         if (!PP.getPreprocessingRecord())
3041           PP.createPreprocessingRecord();
3042         if (!PP.getPreprocessingRecord()->getExternalSource())
3043           PP.getPreprocessingRecord()->SetExternalSource(*this);
3044         break;
3045 
3046       case SOURCE_MANAGER_BLOCK_ID:
3047         if (llvm::Error Err = ReadSourceManagerBlock(F))
3048           return Err;
3049         break;
3050 
3051       case SUBMODULE_BLOCK_ID:
3052         if (llvm::Error Err = ReadSubmoduleBlock(F, ClientLoadCapabilities))
3053           return Err;
3054         break;
3055 
3056       case COMMENTS_BLOCK_ID: {
3057         BitstreamCursor C = Stream;
3058 
3059         if (llvm::Error Err = Stream.SkipBlock())
3060           return Err;
3061         if (llvm::Error Err = ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID))
3062           return Err;
3063         CommentsCursors.push_back(std::make_pair(C, &F));
3064         break;
3065       }
3066 
3067       default:
3068         if (llvm::Error Err = Stream.SkipBlock())
3069           return Err;
3070         break;
3071       }
3072       continue;
3073 
3074     case llvm::BitstreamEntry::Record:
3075       // The interesting case.
3076       break;
3077     }
3078 
3079     // Read and process a record.
3080     Record.clear();
3081     StringRef Blob;
3082     Expected<unsigned> MaybeRecordType =
3083         Stream.readRecord(Entry.ID, Record, &Blob);
3084     if (!MaybeRecordType)
3085       return MaybeRecordType.takeError();
3086     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3087 
3088     // If we're not loading an AST context, we don't care about most records.
3089     if (!ContextObj) {
3090       switch (RecordType) {
3091       case IDENTIFIER_TABLE:
3092       case IDENTIFIER_OFFSET:
3093       case INTERESTING_IDENTIFIERS:
3094       case STATISTICS:
3095       case PP_CONDITIONAL_STACK:
3096       case PP_COUNTER_VALUE:
3097       case SOURCE_LOCATION_OFFSETS:
3098       case MODULE_OFFSET_MAP:
3099       case SOURCE_MANAGER_LINE_TABLE:
3100       case SOURCE_LOCATION_PRELOADS:
3101       case PPD_ENTITIES_OFFSETS:
3102       case HEADER_SEARCH_TABLE:
3103       case IMPORTED_MODULES:
3104       case MACRO_OFFSET:
3105         break;
3106       default:
3107         continue;
3108       }
3109     }
3110 
3111     switch (RecordType) {
3112     default:  // Default behavior: ignore.
3113       break;
3114 
3115     case TYPE_OFFSET: {
3116       if (F.LocalNumTypes != 0)
3117         return llvm::createStringError(
3118             std::errc::illegal_byte_sequence,
3119             "duplicate TYPE_OFFSET record in AST file");
3120       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3121       F.LocalNumTypes = Record[0];
3122       unsigned LocalBaseTypeIndex = Record[1];
3123       F.BaseTypeIndex = getTotalNumTypes();
3124 
3125       if (F.LocalNumTypes > 0) {
3126         // Introduce the global -> local mapping for types within this module.
3127         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3128 
3129         // Introduce the local -> global mapping for types within this module.
3130         F.TypeRemap.insertOrReplace(
3131           std::make_pair(LocalBaseTypeIndex,
3132                          F.BaseTypeIndex - LocalBaseTypeIndex));
3133 
3134         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3135       }
3136       break;
3137     }
3138 
3139     case DECL_OFFSET: {
3140       if (F.LocalNumDecls != 0)
3141         return llvm::createStringError(
3142             std::errc::illegal_byte_sequence,
3143             "duplicate DECL_OFFSET record in AST file");
3144       F.DeclOffsets = (const DeclOffset *)Blob.data();
3145       F.LocalNumDecls = Record[0];
3146       unsigned LocalBaseDeclID = Record[1];
3147       F.BaseDeclID = getTotalNumDecls();
3148 
3149       if (F.LocalNumDecls > 0) {
3150         // Introduce the global -> local mapping for declarations within this
3151         // module.
3152         GlobalDeclMap.insert(
3153           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3154 
3155         // Introduce the local -> global mapping for declarations within this
3156         // module.
3157         F.DeclRemap.insertOrReplace(
3158           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3159 
3160         // Introduce the global -> local mapping for declarations within this
3161         // module.
3162         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3163 
3164         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3165       }
3166       break;
3167     }
3168 
3169     case TU_UPDATE_LEXICAL: {
3170       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3171       LexicalContents Contents(
3172           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3173               Blob.data()),
3174           static_cast<unsigned int>(Blob.size() / 4));
3175       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3176       TU->setHasExternalLexicalStorage(true);
3177       break;
3178     }
3179 
3180     case UPDATE_VISIBLE: {
3181       unsigned Idx = 0;
3182       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3183       auto *Data = (const unsigned char*)Blob.data();
3184       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3185       // If we've already loaded the decl, perform the updates when we finish
3186       // loading this block.
3187       if (Decl *D = GetExistingDecl(ID))
3188         PendingUpdateRecords.push_back(
3189             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3190       break;
3191     }
3192 
3193     case IDENTIFIER_TABLE:
3194       F.IdentifierTableData =
3195           reinterpret_cast<const unsigned char *>(Blob.data());
3196       if (Record[0]) {
3197         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3198             F.IdentifierTableData + Record[0],
3199             F.IdentifierTableData + sizeof(uint32_t),
3200             F.IdentifierTableData,
3201             ASTIdentifierLookupTrait(*this, F));
3202 
3203         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3204       }
3205       break;
3206 
3207     case IDENTIFIER_OFFSET: {
3208       if (F.LocalNumIdentifiers != 0)
3209         return llvm::createStringError(
3210             std::errc::illegal_byte_sequence,
3211             "duplicate IDENTIFIER_OFFSET record in AST file");
3212       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3213       F.LocalNumIdentifiers = Record[0];
3214       unsigned LocalBaseIdentifierID = Record[1];
3215       F.BaseIdentifierID = getTotalNumIdentifiers();
3216 
3217       if (F.LocalNumIdentifiers > 0) {
3218         // Introduce the global -> local mapping for identifiers within this
3219         // module.
3220         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3221                                                   &F));
3222 
3223         // Introduce the local -> global mapping for identifiers within this
3224         // module.
3225         F.IdentifierRemap.insertOrReplace(
3226           std::make_pair(LocalBaseIdentifierID,
3227                          F.BaseIdentifierID - LocalBaseIdentifierID));
3228 
3229         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3230                                  + F.LocalNumIdentifiers);
3231       }
3232       break;
3233     }
3234 
3235     case INTERESTING_IDENTIFIERS:
3236       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3237       break;
3238 
3239     case EAGERLY_DESERIALIZED_DECLS:
3240       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3241       // about "interesting" decls (for instance, if we're building a module).
3242       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3243         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3244       break;
3245 
3246     case MODULAR_CODEGEN_DECLS:
3247       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3248       // them (ie: if we're not codegenerating this module).
3249       if (F.Kind == MK_MainFile ||
3250           getContext().getLangOpts().BuildingPCHWithObjectFile)
3251         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3252           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3253       break;
3254 
3255     case SPECIAL_TYPES:
3256       if (SpecialTypes.empty()) {
3257         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3258           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3259         break;
3260       }
3261 
3262       if (SpecialTypes.size() != Record.size())
3263         return llvm::createStringError(std::errc::illegal_byte_sequence,
3264                                        "invalid special-types record");
3265 
3266       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3267         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3268         if (!SpecialTypes[I])
3269           SpecialTypes[I] = ID;
3270         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3271         // merge step?
3272       }
3273       break;
3274 
3275     case STATISTICS:
3276       TotalNumStatements += Record[0];
3277       TotalNumMacros += Record[1];
3278       TotalLexicalDeclContexts += Record[2];
3279       TotalVisibleDeclContexts += Record[3];
3280       break;
3281 
3282     case UNUSED_FILESCOPED_DECLS:
3283       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3284         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3285       break;
3286 
3287     case DELEGATING_CTORS:
3288       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3289         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3290       break;
3291 
3292     case WEAK_UNDECLARED_IDENTIFIERS:
3293       if (Record.size() % 4 != 0)
3294         return llvm::createStringError(std::errc::illegal_byte_sequence,
3295                                        "invalid weak identifiers record");
3296 
3297       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3298       // files. This isn't the way to do it :)
3299       WeakUndeclaredIdentifiers.clear();
3300 
3301       // Translate the weak, undeclared identifiers into global IDs.
3302       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3303         WeakUndeclaredIdentifiers.push_back(
3304           getGlobalIdentifierID(F, Record[I++]));
3305         WeakUndeclaredIdentifiers.push_back(
3306           getGlobalIdentifierID(F, Record[I++]));
3307         WeakUndeclaredIdentifiers.push_back(
3308           ReadSourceLocation(F, Record, I).getRawEncoding());
3309         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3310       }
3311       break;
3312 
3313     case SELECTOR_OFFSETS: {
3314       F.SelectorOffsets = (const uint32_t *)Blob.data();
3315       F.LocalNumSelectors = Record[0];
3316       unsigned LocalBaseSelectorID = Record[1];
3317       F.BaseSelectorID = getTotalNumSelectors();
3318 
3319       if (F.LocalNumSelectors > 0) {
3320         // Introduce the global -> local mapping for selectors within this
3321         // module.
3322         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3323 
3324         // Introduce the local -> global mapping for selectors within this
3325         // module.
3326         F.SelectorRemap.insertOrReplace(
3327           std::make_pair(LocalBaseSelectorID,
3328                          F.BaseSelectorID - LocalBaseSelectorID));
3329 
3330         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3331       }
3332       break;
3333     }
3334 
3335     case METHOD_POOL:
3336       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3337       if (Record[0])
3338         F.SelectorLookupTable
3339           = ASTSelectorLookupTable::Create(
3340                         F.SelectorLookupTableData + Record[0],
3341                         F.SelectorLookupTableData,
3342                         ASTSelectorLookupTrait(*this, F));
3343       TotalNumMethodPoolEntries += Record[1];
3344       break;
3345 
3346     case REFERENCED_SELECTOR_POOL:
3347       if (!Record.empty()) {
3348         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3349           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3350                                                                 Record[Idx++]));
3351           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3352                                               getRawEncoding());
3353         }
3354       }
3355       break;
3356 
3357     case PP_CONDITIONAL_STACK:
3358       if (!Record.empty()) {
3359         unsigned Idx = 0, End = Record.size() - 1;
3360         bool ReachedEOFWhileSkipping = Record[Idx++];
3361         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3362         if (ReachedEOFWhileSkipping) {
3363           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3364           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3365           bool FoundNonSkipPortion = Record[Idx++];
3366           bool FoundElse = Record[Idx++];
3367           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3368           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3369                            FoundElse, ElseLoc);
3370         }
3371         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3372         while (Idx < End) {
3373           auto Loc = ReadSourceLocation(F, Record, Idx);
3374           bool WasSkipping = Record[Idx++];
3375           bool FoundNonSkip = Record[Idx++];
3376           bool FoundElse = Record[Idx++];
3377           ConditionalStack.push_back(
3378               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3379         }
3380         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3381       }
3382       break;
3383 
3384     case PP_COUNTER_VALUE:
3385       if (!Record.empty() && Listener)
3386         Listener->ReadCounter(F, Record[0]);
3387       break;
3388 
3389     case FILE_SORTED_DECLS:
3390       F.FileSortedDecls = (const DeclID *)Blob.data();
3391       F.NumFileSortedDecls = Record[0];
3392       break;
3393 
3394     case SOURCE_LOCATION_OFFSETS: {
3395       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3396       F.LocalNumSLocEntries = Record[0];
3397       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3398       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3399       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3400           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3401                                               SLocSpaceSize);
3402       if (!F.SLocEntryBaseID)
3403         return llvm::createStringError(std::errc::invalid_argument,
3404                                        "ran out of source locations");
3405       // Make our entry in the range map. BaseID is negative and growing, so
3406       // we invert it. Because we invert it, though, we need the other end of
3407       // the range.
3408       unsigned RangeStart =
3409           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3410       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3411       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3412 
3413       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3414       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3415       GlobalSLocOffsetMap.insert(
3416           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3417                            - SLocSpaceSize,&F));
3418 
3419       // Initialize the remapping table.
3420       // Invalid stays invalid.
3421       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3422       // This module. Base was 2 when being compiled.
3423       F.SLocRemap.insertOrReplace(std::make_pair(
3424           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3425 
3426       TotalNumSLocEntries += F.LocalNumSLocEntries;
3427       break;
3428     }
3429 
3430     case MODULE_OFFSET_MAP:
3431       F.ModuleOffsetMap = Blob;
3432       break;
3433 
3434     case SOURCE_MANAGER_LINE_TABLE:
3435       ParseLineTable(F, Record);
3436       break;
3437 
3438     case SOURCE_LOCATION_PRELOADS: {
3439       // Need to transform from the local view (1-based IDs) to the global view,
3440       // which is based off F.SLocEntryBaseID.
3441       if (!F.PreloadSLocEntries.empty())
3442         return llvm::createStringError(
3443             std::errc::illegal_byte_sequence,
3444             "Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3445 
3446       F.PreloadSLocEntries.swap(Record);
3447       break;
3448     }
3449 
3450     case EXT_VECTOR_DECLS:
3451       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3452         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3453       break;
3454 
3455     case VTABLE_USES:
3456       if (Record.size() % 3 != 0)
3457         return llvm::createStringError(std::errc::illegal_byte_sequence,
3458                                        "Invalid VTABLE_USES record");
3459 
3460       // Later tables overwrite earlier ones.
3461       // FIXME: Modules will have some trouble with this. This is clearly not
3462       // the right way to do this.
3463       VTableUses.clear();
3464 
3465       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3466         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3467         VTableUses.push_back(
3468           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3469         VTableUses.push_back(Record[Idx++]);
3470       }
3471       break;
3472 
3473     case PENDING_IMPLICIT_INSTANTIATIONS:
3474       if (PendingInstantiations.size() % 2 != 0)
3475         return llvm::createStringError(
3476             std::errc::illegal_byte_sequence,
3477             "Invalid existing PendingInstantiations");
3478 
3479       if (Record.size() % 2 != 0)
3480         return llvm::createStringError(
3481             std::errc::illegal_byte_sequence,
3482             "Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3483 
3484       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3485         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3486         PendingInstantiations.push_back(
3487           ReadSourceLocation(F, Record, I).getRawEncoding());
3488       }
3489       break;
3490 
3491     case SEMA_DECL_REFS:
3492       if (Record.size() != 3)
3493         return llvm::createStringError(std::errc::illegal_byte_sequence,
3494                                        "Invalid SEMA_DECL_REFS block");
3495       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3496         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3497       break;
3498 
3499     case PPD_ENTITIES_OFFSETS: {
3500       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3501       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3502       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3503 
3504       unsigned LocalBasePreprocessedEntityID = Record[0];
3505 
3506       unsigned StartingID;
3507       if (!PP.getPreprocessingRecord())
3508         PP.createPreprocessingRecord();
3509       if (!PP.getPreprocessingRecord()->getExternalSource())
3510         PP.getPreprocessingRecord()->SetExternalSource(*this);
3511       StartingID
3512         = PP.getPreprocessingRecord()
3513             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3514       F.BasePreprocessedEntityID = StartingID;
3515 
3516       if (F.NumPreprocessedEntities > 0) {
3517         // Introduce the global -> local mapping for preprocessed entities in
3518         // this module.
3519         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3520 
3521         // Introduce the local -> global mapping for preprocessed entities in
3522         // this module.
3523         F.PreprocessedEntityRemap.insertOrReplace(
3524           std::make_pair(LocalBasePreprocessedEntityID,
3525             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3526       }
3527 
3528       break;
3529     }
3530 
3531     case PPD_SKIPPED_RANGES: {
3532       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3533       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3534       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3535 
3536       if (!PP.getPreprocessingRecord())
3537         PP.createPreprocessingRecord();
3538       if (!PP.getPreprocessingRecord()->getExternalSource())
3539         PP.getPreprocessingRecord()->SetExternalSource(*this);
3540       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3541           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3542 
3543       if (F.NumPreprocessedSkippedRanges > 0)
3544         GlobalSkippedRangeMap.insert(
3545             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3546       break;
3547     }
3548 
3549     case DECL_UPDATE_OFFSETS:
3550       if (Record.size() % 2 != 0)
3551         return llvm::createStringError(
3552             std::errc::illegal_byte_sequence,
3553             "invalid DECL_UPDATE_OFFSETS block in AST file");
3554       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3555         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3556         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3557 
3558         // If we've already loaded the decl, perform the updates when we finish
3559         // loading this block.
3560         if (Decl *D = GetExistingDecl(ID))
3561           PendingUpdateRecords.push_back(
3562               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3563       }
3564       break;
3565 
3566     case OBJC_CATEGORIES_MAP:
3567       if (F.LocalNumObjCCategoriesInMap != 0)
3568         return llvm::createStringError(
3569             std::errc::illegal_byte_sequence,
3570             "duplicate OBJC_CATEGORIES_MAP record in AST file");
3571 
3572       F.LocalNumObjCCategoriesInMap = Record[0];
3573       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3574       break;
3575 
3576     case OBJC_CATEGORIES:
3577       F.ObjCCategories.swap(Record);
3578       break;
3579 
3580     case CUDA_SPECIAL_DECL_REFS:
3581       // Later tables overwrite earlier ones.
3582       // FIXME: Modules will have trouble with this.
3583       CUDASpecialDeclRefs.clear();
3584       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3585         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3586       break;
3587 
3588     case HEADER_SEARCH_TABLE:
3589       F.HeaderFileInfoTableData = Blob.data();
3590       F.LocalNumHeaderFileInfos = Record[1];
3591       if (Record[0]) {
3592         F.HeaderFileInfoTable
3593           = HeaderFileInfoLookupTable::Create(
3594                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3595                    (const unsigned char *)F.HeaderFileInfoTableData,
3596                    HeaderFileInfoTrait(*this, F,
3597                                        &PP.getHeaderSearchInfo(),
3598                                        Blob.data() + Record[2]));
3599 
3600         PP.getHeaderSearchInfo().SetExternalSource(this);
3601         if (!PP.getHeaderSearchInfo().getExternalLookup())
3602           PP.getHeaderSearchInfo().SetExternalLookup(this);
3603       }
3604       break;
3605 
3606     case FP_PRAGMA_OPTIONS:
3607       // Later tables overwrite earlier ones.
3608       FPPragmaOptions.swap(Record);
3609       break;
3610 
3611     case OPENCL_EXTENSIONS:
3612       for (unsigned I = 0, E = Record.size(); I != E; ) {
3613         auto Name = ReadString(Record, I);
3614         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3615         OptInfo.Supported = Record[I++] != 0;
3616         OptInfo.Enabled = Record[I++] != 0;
3617         OptInfo.WithPragma = Record[I++] != 0;
3618         OptInfo.Avail = Record[I++];
3619         OptInfo.Core = Record[I++];
3620         OptInfo.Opt = Record[I++];
3621       }
3622       break;
3623 
3624     case TENTATIVE_DEFINITIONS:
3625       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3626         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3627       break;
3628 
3629     case KNOWN_NAMESPACES:
3630       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3631         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3632       break;
3633 
3634     case UNDEFINED_BUT_USED:
3635       if (UndefinedButUsed.size() % 2 != 0)
3636         return llvm::createStringError(std::errc::illegal_byte_sequence,
3637                                        "Invalid existing UndefinedButUsed");
3638 
3639       if (Record.size() % 2 != 0)
3640         return llvm::createStringError(std::errc::illegal_byte_sequence,
3641                                        "invalid undefined-but-used record");
3642       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3643         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3644         UndefinedButUsed.push_back(
3645             ReadSourceLocation(F, Record, I).getRawEncoding());
3646       }
3647       break;
3648 
3649     case DELETE_EXPRS_TO_ANALYZE:
3650       for (unsigned I = 0, N = Record.size(); I != N;) {
3651         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3652         const uint64_t Count = Record[I++];
3653         DelayedDeleteExprs.push_back(Count);
3654         for (uint64_t C = 0; C < Count; ++C) {
3655           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3656           bool IsArrayForm = Record[I++] == 1;
3657           DelayedDeleteExprs.push_back(IsArrayForm);
3658         }
3659       }
3660       break;
3661 
3662     case IMPORTED_MODULES:
3663       if (!F.isModule()) {
3664         // If we aren't loading a module (which has its own exports), make
3665         // all of the imported modules visible.
3666         // FIXME: Deal with macros-only imports.
3667         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3668           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3669           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3670           if (GlobalID) {
3671             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3672             if (DeserializationListener)
3673               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3674           }
3675         }
3676       }
3677       break;
3678 
3679     case MACRO_OFFSET: {
3680       if (F.LocalNumMacros != 0)
3681         return llvm::createStringError(
3682             std::errc::illegal_byte_sequence,
3683             "duplicate MACRO_OFFSET record in AST file");
3684       F.MacroOffsets = (const uint32_t *)Blob.data();
3685       F.LocalNumMacros = Record[0];
3686       unsigned LocalBaseMacroID = Record[1];
3687       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3688       F.BaseMacroID = getTotalNumMacros();
3689 
3690       if (F.LocalNumMacros > 0) {
3691         // Introduce the global -> local mapping for macros within this module.
3692         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3693 
3694         // Introduce the local -> global mapping for macros within this module.
3695         F.MacroRemap.insertOrReplace(
3696           std::make_pair(LocalBaseMacroID,
3697                          F.BaseMacroID - LocalBaseMacroID));
3698 
3699         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3700       }
3701       break;
3702     }
3703 
3704     case LATE_PARSED_TEMPLATE:
3705       LateParsedTemplates.emplace_back(
3706           std::piecewise_construct, std::forward_as_tuple(&F),
3707           std::forward_as_tuple(Record.begin(), Record.end()));
3708       break;
3709 
3710     case OPTIMIZE_PRAGMA_OPTIONS:
3711       if (Record.size() != 1)
3712         return llvm::createStringError(std::errc::illegal_byte_sequence,
3713                                        "invalid pragma optimize record");
3714       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3715       break;
3716 
3717     case MSSTRUCT_PRAGMA_OPTIONS:
3718       if (Record.size() != 1)
3719         return llvm::createStringError(std::errc::illegal_byte_sequence,
3720                                        "invalid pragma ms_struct record");
3721       PragmaMSStructState = Record[0];
3722       break;
3723 
3724     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3725       if (Record.size() != 2)
3726         return llvm::createStringError(
3727             std::errc::illegal_byte_sequence,
3728             "invalid pragma pointers to members record");
3729       PragmaMSPointersToMembersState = Record[0];
3730       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3731       break;
3732 
3733     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3734       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3735         UnusedLocalTypedefNameCandidates.push_back(
3736             getGlobalDeclID(F, Record[I]));
3737       break;
3738 
3739     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3740       if (Record.size() != 1)
3741         return llvm::createStringError(std::errc::illegal_byte_sequence,
3742                                        "invalid cuda pragma options record");
3743       ForceCUDAHostDeviceDepth = Record[0];
3744       break;
3745 
3746     case ALIGN_PACK_PRAGMA_OPTIONS: {
3747       if (Record.size() < 3)
3748         return llvm::createStringError(std::errc::illegal_byte_sequence,
3749                                        "invalid pragma pack record");
3750       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3751       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3752       unsigned NumStackEntries = Record[2];
3753       unsigned Idx = 3;
3754       // Reset the stack when importing a new module.
3755       PragmaAlignPackStack.clear();
3756       for (unsigned I = 0; I < NumStackEntries; ++I) {
3757         PragmaAlignPackStackEntry Entry;
3758         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3759         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3760         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3761         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3762         Entry.SlotLabel = PragmaAlignPackStrings.back();
3763         PragmaAlignPackStack.push_back(Entry);
3764       }
3765       break;
3766     }
3767 
3768     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3769       if (Record.size() < 3)
3770         return llvm::createStringError(std::errc::illegal_byte_sequence,
3771                                        "invalid pragma float control record");
3772       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3773       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3774       unsigned NumStackEntries = Record[2];
3775       unsigned Idx = 3;
3776       // Reset the stack when importing a new module.
3777       FpPragmaStack.clear();
3778       for (unsigned I = 0; I < NumStackEntries; ++I) {
3779         FpPragmaStackEntry Entry;
3780         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3781         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3782         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3783         FpPragmaStrings.push_back(ReadString(Record, Idx));
3784         Entry.SlotLabel = FpPragmaStrings.back();
3785         FpPragmaStack.push_back(Entry);
3786       }
3787       break;
3788     }
3789 
3790     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3791       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3792         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3793       break;
3794     }
3795   }
3796 }
3797 
3798 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3799   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3800 
3801   // Additional remapping information.
3802   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3803   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3804   F.ModuleOffsetMap = StringRef();
3805 
3806   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3807   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3808     F.SLocRemap.insert(std::make_pair(0U, 0));
3809     F.SLocRemap.insert(std::make_pair(2U, 1));
3810   }
3811 
3812   // Continuous range maps we may be updating in our module.
3813   using SLocRemapBuilder =
3814       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3815                          2>::Builder;
3816   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3817   SLocRemapBuilder SLocRemap(F.SLocRemap);
3818   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3819   RemapBuilder MacroRemap(F.MacroRemap);
3820   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3821   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3822   RemapBuilder SelectorRemap(F.SelectorRemap);
3823   RemapBuilder DeclRemap(F.DeclRemap);
3824   RemapBuilder TypeRemap(F.TypeRemap);
3825 
3826   while (Data < DataEnd) {
3827     // FIXME: Looking up dependency modules by filename is horrible. Let's
3828     // start fixing this with prebuilt, explicit and implicit modules and see
3829     // how it goes...
3830     using namespace llvm::support;
3831     ModuleKind Kind = static_cast<ModuleKind>(
3832       endian::readNext<uint8_t, little, unaligned>(Data));
3833     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3834     StringRef Name = StringRef((const char*)Data, Len);
3835     Data += Len;
3836     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3837                               Kind == MK_ImplicitModule
3838                           ? ModuleMgr.lookupByModuleName(Name)
3839                           : ModuleMgr.lookupByFileName(Name));
3840     if (!OM) {
3841       std::string Msg =
3842           "SourceLocation remap refers to unknown module, cannot find ";
3843       Msg.append(std::string(Name));
3844       Error(Msg);
3845       return;
3846     }
3847 
3848     SourceLocation::UIntTy SLocOffset =
3849         endian::readNext<uint32_t, little, unaligned>(Data);
3850     uint32_t IdentifierIDOffset =
3851         endian::readNext<uint32_t, little, unaligned>(Data);
3852     uint32_t MacroIDOffset =
3853         endian::readNext<uint32_t, little, unaligned>(Data);
3854     uint32_t PreprocessedEntityIDOffset =
3855         endian::readNext<uint32_t, little, unaligned>(Data);
3856     uint32_t SubmoduleIDOffset =
3857         endian::readNext<uint32_t, little, unaligned>(Data);
3858     uint32_t SelectorIDOffset =
3859         endian::readNext<uint32_t, little, unaligned>(Data);
3860     uint32_t DeclIDOffset =
3861         endian::readNext<uint32_t, little, unaligned>(Data);
3862     uint32_t TypeIndexOffset =
3863         endian::readNext<uint32_t, little, unaligned>(Data);
3864 
3865     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3866                          RemapBuilder &Remap) {
3867       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3868       if (Offset != None)
3869         Remap.insert(std::make_pair(Offset,
3870                                     static_cast<int>(BaseOffset - Offset)));
3871     };
3872 
3873     constexpr SourceLocation::UIntTy SLocNone =
3874         std::numeric_limits<SourceLocation::UIntTy>::max();
3875     if (SLocOffset != SLocNone)
3876       SLocRemap.insert(std::make_pair(
3877           SLocOffset, static_cast<SourceLocation::IntTy>(
3878                           OM->SLocEntryBaseOffset - SLocOffset)));
3879 
3880     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3881     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3882     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3883               PreprocessedEntityRemap);
3884     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3885     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3886     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3887     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3888 
3889     // Global -> local mappings.
3890     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3891   }
3892 }
3893 
3894 ASTReader::ASTReadResult
3895 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3896                                   const ModuleFile *ImportedBy,
3897                                   unsigned ClientLoadCapabilities) {
3898   unsigned Idx = 0;
3899   F.ModuleMapPath = ReadPath(F, Record, Idx);
3900 
3901   // Try to resolve ModuleName in the current header search context and
3902   // verify that it is found in the same module map file as we saved. If the
3903   // top-level AST file is a main file, skip this check because there is no
3904   // usable header search context.
3905   assert(!F.ModuleName.empty() &&
3906          "MODULE_NAME should come before MODULE_MAP_FILE");
3907   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3908     // An implicitly-loaded module file should have its module listed in some
3909     // module map file that we've already loaded.
3910     Module *M =
3911         PP.getHeaderSearchInfo().lookupModule(F.ModuleName, F.ImportLoc);
3912     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3913     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3914     // Don't emit module relocation error if we have -fno-validate-pch
3915     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3916               DisableValidationForModuleKind::Module) &&
3917         !ModMap) {
3918       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3919         if (auto ASTFE = M ? M->getASTFile() : None) {
3920           // This module was defined by an imported (explicit) module.
3921           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3922                                                << ASTFE->getName();
3923         } else {
3924           // This module was built with a different module map.
3925           Diag(diag::err_imported_module_not_found)
3926               << F.ModuleName << F.FileName
3927               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3928               << !ImportedBy;
3929           // In case it was imported by a PCH, there's a chance the user is
3930           // just missing to include the search path to the directory containing
3931           // the modulemap.
3932           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3933             Diag(diag::note_imported_by_pch_module_not_found)
3934                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3935         }
3936       }
3937       return OutOfDate;
3938     }
3939 
3940     assert(M && M->Name == F.ModuleName && "found module with different name");
3941 
3942     // Check the primary module map file.
3943     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3944     if (!StoredModMap || *StoredModMap != ModMap) {
3945       assert(ModMap && "found module is missing module map file");
3946       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3947              "top-level import should be verified");
3948       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3949       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3950         Diag(diag::err_imported_module_modmap_changed)
3951             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3952             << ModMap->getName() << F.ModuleMapPath << NotImported;
3953       return OutOfDate;
3954     }
3955 
3956     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3957     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3958       // FIXME: we should use input files rather than storing names.
3959       std::string Filename = ReadPath(F, Record, Idx);
3960       auto SF = FileMgr.getFile(Filename, false, false);
3961       if (!SF) {
3962         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3963           Error("could not find file '" + Filename +"' referenced by AST file");
3964         return OutOfDate;
3965       }
3966       AdditionalStoredMaps.insert(*SF);
3967     }
3968 
3969     // Check any additional module map files (e.g. module.private.modulemap)
3970     // that are not in the pcm.
3971     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3972       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3973         // Remove files that match
3974         // Note: SmallPtrSet::erase is really remove
3975         if (!AdditionalStoredMaps.erase(ModMap)) {
3976           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3977             Diag(diag::err_module_different_modmap)
3978               << F.ModuleName << /*new*/0 << ModMap->getName();
3979           return OutOfDate;
3980         }
3981       }
3982     }
3983 
3984     // Check any additional module map files that are in the pcm, but not
3985     // found in header search. Cases that match are already removed.
3986     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3987       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3988         Diag(diag::err_module_different_modmap)
3989           << F.ModuleName << /*not new*/1 << ModMap->getName();
3990       return OutOfDate;
3991     }
3992   }
3993 
3994   if (Listener)
3995     Listener->ReadModuleMapFile(F.ModuleMapPath);
3996   return Success;
3997 }
3998 
3999 /// Move the given method to the back of the global list of methods.
4000 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4001   // Find the entry for this selector in the method pool.
4002   Sema::GlobalMethodPool::iterator Known
4003     = S.MethodPool.find(Method->getSelector());
4004   if (Known == S.MethodPool.end())
4005     return;
4006 
4007   // Retrieve the appropriate method list.
4008   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4009                                                     : Known->second.second;
4010   bool Found = false;
4011   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4012     if (!Found) {
4013       if (List->getMethod() == Method) {
4014         Found = true;
4015       } else {
4016         // Keep searching.
4017         continue;
4018       }
4019     }
4020 
4021     if (List->getNext())
4022       List->setMethod(List->getNext()->getMethod());
4023     else
4024       List->setMethod(Method);
4025   }
4026 }
4027 
4028 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4029   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4030   for (Decl *D : Names) {
4031     bool wasHidden = !D->isUnconditionallyVisible();
4032     D->setVisibleDespiteOwningModule();
4033 
4034     if (wasHidden && SemaObj) {
4035       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4036         moveMethodToBackOfGlobalList(*SemaObj, Method);
4037       }
4038     }
4039   }
4040 }
4041 
4042 void ASTReader::makeModuleVisible(Module *Mod,
4043                                   Module::NameVisibilityKind NameVisibility,
4044                                   SourceLocation ImportLoc) {
4045   llvm::SmallPtrSet<Module *, 4> Visited;
4046   SmallVector<Module *, 4> Stack;
4047   Stack.push_back(Mod);
4048   while (!Stack.empty()) {
4049     Mod = Stack.pop_back_val();
4050 
4051     if (NameVisibility <= Mod->NameVisibility) {
4052       // This module already has this level of visibility (or greater), so
4053       // there is nothing more to do.
4054       continue;
4055     }
4056 
4057     if (Mod->isUnimportable()) {
4058       // Modules that aren't importable cannot be made visible.
4059       continue;
4060     }
4061 
4062     // Update the module's name visibility.
4063     Mod->NameVisibility = NameVisibility;
4064 
4065     // If we've already deserialized any names from this module,
4066     // mark them as visible.
4067     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4068     if (Hidden != HiddenNamesMap.end()) {
4069       auto HiddenNames = std::move(*Hidden);
4070       HiddenNamesMap.erase(Hidden);
4071       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4072       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4073              "making names visible added hidden names");
4074     }
4075 
4076     // Push any exported modules onto the stack to be marked as visible.
4077     SmallVector<Module *, 16> Exports;
4078     Mod->getExportedModules(Exports);
4079     for (SmallVectorImpl<Module *>::iterator
4080            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4081       Module *Exported = *I;
4082       if (Visited.insert(Exported).second)
4083         Stack.push_back(Exported);
4084     }
4085   }
4086 }
4087 
4088 /// We've merged the definition \p MergedDef into the existing definition
4089 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4090 /// visible.
4091 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4092                                           NamedDecl *MergedDef) {
4093   if (!Def->isUnconditionallyVisible()) {
4094     // If MergedDef is visible or becomes visible, make the definition visible.
4095     if (MergedDef->isUnconditionallyVisible())
4096       Def->setVisibleDespiteOwningModule();
4097     else {
4098       getContext().mergeDefinitionIntoModule(
4099           Def, MergedDef->getImportedOwningModule(),
4100           /*NotifyListeners*/ false);
4101       PendingMergedDefinitionsToDeduplicate.insert(Def);
4102     }
4103   }
4104 }
4105 
4106 bool ASTReader::loadGlobalIndex() {
4107   if (GlobalIndex)
4108     return false;
4109 
4110   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4111       !PP.getLangOpts().Modules)
4112     return true;
4113 
4114   // Try to load the global index.
4115   TriedLoadingGlobalIndex = true;
4116   StringRef ModuleCachePath
4117     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4118   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4119       GlobalModuleIndex::readIndex(ModuleCachePath);
4120   if (llvm::Error Err = std::move(Result.second)) {
4121     assert(!Result.first);
4122     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4123     return true;
4124   }
4125 
4126   GlobalIndex.reset(Result.first);
4127   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4128   return false;
4129 }
4130 
4131 bool ASTReader::isGlobalIndexUnavailable() const {
4132   return PP.getLangOpts().Modules && UseGlobalIndex &&
4133          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4134 }
4135 
4136 static void updateModuleTimestamp(ModuleFile &MF) {
4137   // Overwrite the timestamp file contents so that file's mtime changes.
4138   std::string TimestampFilename = MF.getTimestampFilename();
4139   std::error_code EC;
4140   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4141                           llvm::sys::fs::OF_TextWithCRLF);
4142   if (EC)
4143     return;
4144   OS << "Timestamp file\n";
4145   OS.close();
4146   OS.clear_error(); // Avoid triggering a fatal error.
4147 }
4148 
4149 /// Given a cursor at the start of an AST file, scan ahead and drop the
4150 /// cursor into the start of the given block ID, returning false on success and
4151 /// true on failure.
4152 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4153   while (true) {
4154     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4155     if (!MaybeEntry) {
4156       // FIXME this drops errors on the floor.
4157       consumeError(MaybeEntry.takeError());
4158       return true;
4159     }
4160     llvm::BitstreamEntry Entry = MaybeEntry.get();
4161 
4162     switch (Entry.Kind) {
4163     case llvm::BitstreamEntry::Error:
4164     case llvm::BitstreamEntry::EndBlock:
4165       return true;
4166 
4167     case llvm::BitstreamEntry::Record:
4168       // Ignore top-level records.
4169       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4170         break;
4171       else {
4172         // FIXME this drops errors on the floor.
4173         consumeError(Skipped.takeError());
4174         return true;
4175       }
4176 
4177     case llvm::BitstreamEntry::SubBlock:
4178       if (Entry.ID == BlockID) {
4179         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4180           // FIXME this drops the error on the floor.
4181           consumeError(std::move(Err));
4182           return true;
4183         }
4184         // Found it!
4185         return false;
4186       }
4187 
4188       if (llvm::Error Err = Cursor.SkipBlock()) {
4189         // FIXME this drops the error on the floor.
4190         consumeError(std::move(Err));
4191         return true;
4192       }
4193     }
4194   }
4195 }
4196 
4197 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4198                                             ModuleKind Type,
4199                                             SourceLocation ImportLoc,
4200                                             unsigned ClientLoadCapabilities,
4201                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4202   llvm::SaveAndRestore<SourceLocation>
4203     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4204   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4205       CurrentDeserializingModuleKind, Type);
4206 
4207   // Defer any pending actions until we get to the end of reading the AST file.
4208   Deserializing AnASTFile(this);
4209 
4210   // Bump the generation number.
4211   unsigned PreviousGeneration = 0;
4212   if (ContextObj)
4213     PreviousGeneration = incrementGeneration(*ContextObj);
4214 
4215   unsigned NumModules = ModuleMgr.size();
4216   SmallVector<ImportedModule, 4> Loaded;
4217   if (ASTReadResult ReadResult =
4218           ReadASTCore(FileName, Type, ImportLoc,
4219                       /*ImportedBy=*/nullptr, Loaded, 0, 0, ASTFileSignature(),
4220                       ClientLoadCapabilities)) {
4221     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4222                             PP.getLangOpts().Modules
4223                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4224                                 : nullptr);
4225 
4226     // If we find that any modules are unusable, the global index is going
4227     // to be out-of-date. Just remove it.
4228     GlobalIndex.reset();
4229     ModuleMgr.setGlobalIndex(nullptr);
4230     return ReadResult;
4231   }
4232 
4233   // Here comes stuff that we only do once the entire chain is loaded. Do *not*
4234   // remove modules from this point. Various fields are updated during reading
4235   // the AST block and removing the modules would result in dangling pointers.
4236   // They are generally only incidentally dereferenced, ie. a binary search
4237   // runs over `GlobalSLocEntryMap`, which could cause an invalid module to
4238   // be dereferenced but it wouldn't actually be used.
4239 
4240   // Load the AST blocks of all of the modules that we loaded. We can still
4241   // hit errors parsing the ASTs at this point.
4242   for (ImportedModule &M : Loaded) {
4243     ModuleFile &F = *M.Mod;
4244 
4245     // Read the AST block.
4246     if (llvm::Error Err = ReadASTBlock(F, ClientLoadCapabilities)) {
4247       Error(std::move(Err));
4248       return Failure;
4249     }
4250 
4251     // The AST block should always have a definition for the main module.
4252     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4253       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4254       return Failure;
4255     }
4256 
4257     // Read the extension blocks.
4258     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4259       if (llvm::Error Err = ReadExtensionBlock(F)) {
4260         Error(std::move(Err));
4261         return Failure;
4262       }
4263     }
4264 
4265     // Once read, set the ModuleFile bit base offset and update the size in
4266     // bits of all files we've seen.
4267     F.GlobalBitOffset = TotalModulesSizeInBits;
4268     TotalModulesSizeInBits += F.SizeInBits;
4269     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4270   }
4271 
4272   // Preload source locations and interesting indentifiers.
4273   for (ImportedModule &M : Loaded) {
4274     ModuleFile &F = *M.Mod;
4275 
4276     // Preload SLocEntries.
4277     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4278       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4279       // Load it through the SourceManager and don't call ReadSLocEntry()
4280       // directly because the entry may have already been loaded in which case
4281       // calling ReadSLocEntry() directly would trigger an assertion in
4282       // SourceManager.
4283       SourceMgr.getLoadedSLocEntryByID(Index);
4284     }
4285 
4286     // Map the original source file ID into the ID space of the current
4287     // compilation.
4288     if (F.OriginalSourceFileID.isValid()) {
4289       F.OriginalSourceFileID = FileID::get(
4290           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4291     }
4292 
4293     // Preload all the pending interesting identifiers by marking them out of
4294     // date.
4295     for (auto Offset : F.PreloadIdentifierOffsets) {
4296       const unsigned char *Data = F.IdentifierTableData + Offset;
4297 
4298       ASTIdentifierLookupTrait Trait(*this, F);
4299       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4300       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4301       auto &II = PP.getIdentifierTable().getOwn(Key);
4302       II.setOutOfDate(true);
4303 
4304       // Mark this identifier as being from an AST file so that we can track
4305       // whether we need to serialize it.
4306       markIdentifierFromAST(*this, II);
4307 
4308       // Associate the ID with the identifier so that the writer can reuse it.
4309       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4310       SetIdentifierInfo(ID, &II);
4311     }
4312   }
4313 
4314   // Setup the import locations and notify the module manager that we've
4315   // committed to these module files.
4316   for (ImportedModule &M : Loaded) {
4317     ModuleFile &F = *M.Mod;
4318 
4319     ModuleMgr.moduleFileAccepted(&F);
4320 
4321     // Set the import location.
4322     F.DirectImportLoc = ImportLoc;
4323     // FIXME: We assume that locations from PCH / preamble do not need
4324     // any translation.
4325     if (!M.ImportedBy)
4326       F.ImportLoc = M.ImportLoc;
4327     else
4328       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4329   }
4330 
4331   if (!PP.getLangOpts().CPlusPlus ||
4332       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4333        Type != MK_PrebuiltModule)) {
4334     // Mark all of the identifiers in the identifier table as being out of date,
4335     // so that various accessors know to check the loaded modules when the
4336     // identifier is used.
4337     //
4338     // For C++ modules, we don't need information on many identifiers (just
4339     // those that provide macros or are poisoned), so we mark all of
4340     // the interesting ones via PreloadIdentifierOffsets.
4341     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4342                                 IdEnd = PP.getIdentifierTable().end();
4343          Id != IdEnd; ++Id)
4344       Id->second->setOutOfDate(true);
4345   }
4346   // Mark selectors as out of date.
4347   for (auto Sel : SelectorGeneration)
4348     SelectorOutOfDate[Sel.first] = true;
4349 
4350   // Resolve any unresolved module exports.
4351   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4352     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4353     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4354     Module *ResolvedMod = getSubmodule(GlobalID);
4355 
4356     switch (Unresolved.Kind) {
4357     case UnresolvedModuleRef::Conflict:
4358       if (ResolvedMod) {
4359         Module::Conflict Conflict;
4360         Conflict.Other = ResolvedMod;
4361         Conflict.Message = Unresolved.String.str();
4362         Unresolved.Mod->Conflicts.push_back(Conflict);
4363       }
4364       continue;
4365 
4366     case UnresolvedModuleRef::Import:
4367       if (ResolvedMod)
4368         Unresolved.Mod->Imports.insert(ResolvedMod);
4369       continue;
4370 
4371     case UnresolvedModuleRef::Export:
4372       if (ResolvedMod || Unresolved.IsWildcard)
4373         Unresolved.Mod->Exports.push_back(
4374           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4375       continue;
4376     }
4377   }
4378   UnresolvedModuleRefs.clear();
4379 
4380   if (Imported)
4381     Imported->append(ImportedModules.begin(),
4382                      ImportedModules.end());
4383 
4384   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4385   // Might be unnecessary as use declarations are only used to build the
4386   // module itself.
4387 
4388   if (ContextObj)
4389     InitializeContext();
4390 
4391   if (SemaObj)
4392     UpdateSema();
4393 
4394   if (DeserializationListener)
4395     DeserializationListener->ReaderInitialized(this);
4396 
4397   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4398   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4399     // If this AST file is a precompiled preamble, then set the
4400     // preamble file ID of the source manager to the file source file
4401     // from which the preamble was built.
4402     if (Type == MK_Preamble) {
4403       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4404     } else if (Type == MK_MainFile) {
4405       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4406     }
4407   }
4408 
4409   // For any Objective-C class definitions we have already loaded, make sure
4410   // that we load any additional categories.
4411   if (ContextObj) {
4412     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4413       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4414                          ObjCClassesLoaded[I],
4415                          PreviousGeneration);
4416     }
4417   }
4418 
4419   if (PP.getHeaderSearchInfo()
4420           .getHeaderSearchOpts()
4421           .ModulesValidateOncePerBuildSession) {
4422     // Now we are certain that the module and all modules it depends on are
4423     // up to date.  Create or update timestamp files for modules that are
4424     // located in the module cache (not for PCH files that could be anywhere
4425     // in the filesystem).
4426     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4427       ImportedModule &M = Loaded[I];
4428       if (M.Mod->Kind == MK_ImplicitModule) {
4429         updateModuleTimestamp(*M.Mod);
4430       }
4431     }
4432   }
4433 
4434   return Success;
4435 }
4436 
4437 static ASTFileSignature readASTFileSignature(StringRef PCH);
4438 
4439 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4440 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4441   // FIXME checking magic headers is done in other places such as
4442   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4443   // always done the same. Unify it all with a helper.
4444   if (!Stream.canSkipToPos(4))
4445     return llvm::createStringError(std::errc::illegal_byte_sequence,
4446                                    "file too small to contain AST file magic");
4447   for (unsigned C : {'C', 'P', 'C', 'H'})
4448     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4449       if (Res.get() != C)
4450         return llvm::createStringError(
4451             std::errc::illegal_byte_sequence,
4452             "file doesn't start with AST file magic");
4453     } else
4454       return Res.takeError();
4455   return llvm::Error::success();
4456 }
4457 
4458 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4459   switch (Kind) {
4460   case MK_PCH:
4461     return 0; // PCH
4462   case MK_ImplicitModule:
4463   case MK_ExplicitModule:
4464   case MK_PrebuiltModule:
4465     return 1; // module
4466   case MK_MainFile:
4467   case MK_Preamble:
4468     return 2; // main source file
4469   }
4470   llvm_unreachable("unknown module kind");
4471 }
4472 
4473 ASTReader::ASTReadResult
4474 ASTReader::ReadASTCore(StringRef FileName,
4475                        ModuleKind Type,
4476                        SourceLocation ImportLoc,
4477                        ModuleFile *ImportedBy,
4478                        SmallVectorImpl<ImportedModule> &Loaded,
4479                        off_t ExpectedSize, time_t ExpectedModTime,
4480                        ASTFileSignature ExpectedSignature,
4481                        unsigned ClientLoadCapabilities) {
4482   ModuleFile *M;
4483   std::string ErrorStr;
4484   ModuleManager::AddModuleResult AddResult
4485     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4486                           getGeneration(), ExpectedSize, ExpectedModTime,
4487                           ExpectedSignature, readASTFileSignature,
4488                           M, ErrorStr);
4489 
4490   switch (AddResult) {
4491   case ModuleManager::AlreadyLoaded:
4492     Diag(diag::remark_module_import)
4493         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4494         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4495     return Success;
4496 
4497   case ModuleManager::NewlyLoaded:
4498     // Load module file below.
4499     break;
4500 
4501   case ModuleManager::Missing:
4502     // The module file was missing; if the client can handle that, return
4503     // it.
4504     if (ClientLoadCapabilities & ARR_Missing)
4505       return Missing;
4506 
4507     // Otherwise, return an error.
4508     Diag(diag::err_ast_file_not_found)
4509         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4510         << ErrorStr;
4511     return Failure;
4512 
4513   case ModuleManager::OutOfDate:
4514     // We couldn't load the module file because it is out-of-date. If the
4515     // client can handle out-of-date, return it.
4516     if (ClientLoadCapabilities & ARR_OutOfDate)
4517       return OutOfDate;
4518 
4519     // Otherwise, return an error.
4520     Diag(diag::err_ast_file_out_of_date)
4521         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4522         << ErrorStr;
4523     return Failure;
4524   }
4525 
4526   assert(M && "Missing module file");
4527 
4528   bool ShouldFinalizePCM = false;
4529   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4530     auto &MC = getModuleManager().getModuleCache();
4531     if (ShouldFinalizePCM)
4532       MC.finalizePCM(FileName);
4533     else
4534       MC.tryToDropPCM(FileName);
4535   });
4536   ModuleFile &F = *M;
4537   BitstreamCursor &Stream = F.Stream;
4538   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4539   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4540 
4541   // Sniff for the signature.
4542   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4543     Diag(diag::err_ast_file_invalid)
4544         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4545     return Failure;
4546   }
4547 
4548   // This is used for compatibility with older PCH formats.
4549   bool HaveReadControlBlock = false;
4550   while (true) {
4551     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4552     if (!MaybeEntry) {
4553       Error(MaybeEntry.takeError());
4554       return Failure;
4555     }
4556     llvm::BitstreamEntry Entry = MaybeEntry.get();
4557 
4558     switch (Entry.Kind) {
4559     case llvm::BitstreamEntry::Error:
4560     case llvm::BitstreamEntry::Record:
4561     case llvm::BitstreamEntry::EndBlock:
4562       Error("invalid record at top-level of AST file");
4563       return Failure;
4564 
4565     case llvm::BitstreamEntry::SubBlock:
4566       break;
4567     }
4568 
4569     switch (Entry.ID) {
4570     case CONTROL_BLOCK_ID:
4571       HaveReadControlBlock = true;
4572       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4573       case Success:
4574         // Check that we didn't try to load a non-module AST file as a module.
4575         //
4576         // FIXME: Should we also perform the converse check? Loading a module as
4577         // a PCH file sort of works, but it's a bit wonky.
4578         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4579              Type == MK_PrebuiltModule) &&
4580             F.ModuleName.empty()) {
4581           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4582           if (Result != OutOfDate ||
4583               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4584             Diag(diag::err_module_file_not_module) << FileName;
4585           return Result;
4586         }
4587         break;
4588 
4589       case Failure: return Failure;
4590       case Missing: return Missing;
4591       case OutOfDate: return OutOfDate;
4592       case VersionMismatch: return VersionMismatch;
4593       case ConfigurationMismatch: return ConfigurationMismatch;
4594       case HadErrors: return HadErrors;
4595       }
4596       break;
4597 
4598     case AST_BLOCK_ID:
4599       if (!HaveReadControlBlock) {
4600         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4601           Diag(diag::err_pch_version_too_old);
4602         return VersionMismatch;
4603       }
4604 
4605       // Record that we've loaded this module.
4606       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4607       ShouldFinalizePCM = true;
4608       return Success;
4609 
4610     case UNHASHED_CONTROL_BLOCK_ID:
4611       // This block is handled using look-ahead during ReadControlBlock.  We
4612       // shouldn't get here!
4613       Error("malformed block record in AST file");
4614       return Failure;
4615 
4616     default:
4617       if (llvm::Error Err = Stream.SkipBlock()) {
4618         Error(std::move(Err));
4619         return Failure;
4620       }
4621       break;
4622     }
4623   }
4624 
4625   llvm_unreachable("unexpected break; expected return");
4626 }
4627 
4628 ASTReader::ASTReadResult
4629 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4630                                     unsigned ClientLoadCapabilities) {
4631   const HeaderSearchOptions &HSOpts =
4632       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4633   bool AllowCompatibleConfigurationMismatch =
4634       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4635   bool DisableValidation = shouldDisableValidationForFile(F);
4636 
4637   ASTReadResult Result = readUnhashedControlBlockImpl(
4638       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4639       Listener.get(),
4640       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4641 
4642   // If F was directly imported by another module, it's implicitly validated by
4643   // the importing module.
4644   if (DisableValidation || WasImportedBy ||
4645       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4646     return Success;
4647 
4648   if (Result == Failure) {
4649     Error("malformed block record in AST file");
4650     return Failure;
4651   }
4652 
4653   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4654     // If this module has already been finalized in the ModuleCache, we're stuck
4655     // with it; we can only load a single version of each module.
4656     //
4657     // This can happen when a module is imported in two contexts: in one, as a
4658     // user module; in another, as a system module (due to an import from
4659     // another module marked with the [system] flag).  It usually indicates a
4660     // bug in the module map: this module should also be marked with [system].
4661     //
4662     // If -Wno-system-headers (the default), and the first import is as a
4663     // system module, then validation will fail during the as-user import,
4664     // since -Werror flags won't have been validated.  However, it's reasonable
4665     // to treat this consistently as a system module.
4666     //
4667     // If -Wsystem-headers, the PCM on disk was built with
4668     // -Wno-system-headers, and the first import is as a user module, then
4669     // validation will fail during the as-system import since the PCM on disk
4670     // doesn't guarantee that -Werror was respected.  However, the -Werror
4671     // flags were checked during the initial as-user import.
4672     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4673       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4674       return Success;
4675     }
4676   }
4677 
4678   return Result;
4679 }
4680 
4681 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4682     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4683     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4684     bool ValidateDiagnosticOptions) {
4685   // Initialize a stream.
4686   BitstreamCursor Stream(StreamData);
4687 
4688   // Sniff for the signature.
4689   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4690     // FIXME this drops the error on the floor.
4691     consumeError(std::move(Err));
4692     return Failure;
4693   }
4694 
4695   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4696   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4697     return Failure;
4698 
4699   // Read all of the records in the options block.
4700   RecordData Record;
4701   ASTReadResult Result = Success;
4702   while (true) {
4703     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4704     if (!MaybeEntry) {
4705       // FIXME this drops the error on the floor.
4706       consumeError(MaybeEntry.takeError());
4707       return Failure;
4708     }
4709     llvm::BitstreamEntry Entry = MaybeEntry.get();
4710 
4711     switch (Entry.Kind) {
4712     case llvm::BitstreamEntry::Error:
4713     case llvm::BitstreamEntry::SubBlock:
4714       return Failure;
4715 
4716     case llvm::BitstreamEntry::EndBlock:
4717       return Result;
4718 
4719     case llvm::BitstreamEntry::Record:
4720       // The interesting case.
4721       break;
4722     }
4723 
4724     // Read and process a record.
4725     Record.clear();
4726     StringRef Blob;
4727     Expected<unsigned> MaybeRecordType =
4728         Stream.readRecord(Entry.ID, Record, &Blob);
4729     if (!MaybeRecordType) {
4730       // FIXME this drops the error.
4731       return Failure;
4732     }
4733     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4734     case SIGNATURE:
4735       if (F)
4736         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4737       break;
4738     case AST_BLOCK_HASH:
4739       if (F)
4740         F->ASTBlockHash =
4741             ASTFileSignature::create(Record.begin(), Record.end());
4742       break;
4743     case DIAGNOSTIC_OPTIONS: {
4744       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4745       if (Listener && ValidateDiagnosticOptions &&
4746           !AllowCompatibleConfigurationMismatch &&
4747           ParseDiagnosticOptions(Record, Complain, *Listener))
4748         Result = OutOfDate; // Don't return early.  Read the signature.
4749       break;
4750     }
4751     case DIAG_PRAGMA_MAPPINGS:
4752       if (!F)
4753         break;
4754       if (F->PragmaDiagMappings.empty())
4755         F->PragmaDiagMappings.swap(Record);
4756       else
4757         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4758                                      Record.begin(), Record.end());
4759       break;
4760     case HEADER_SEARCH_ENTRY_USAGE:
4761       if (!F)
4762         break;
4763       unsigned Count = Record[0];
4764       const char *Byte = Blob.data();
4765       F->SearchPathUsage = llvm::BitVector(Count, 0);
4766       for (unsigned I = 0; I < Count; ++Byte)
4767         for (unsigned Bit = 0; Bit < 8 && I < Count; ++Bit, ++I)
4768           if (*Byte & (1 << Bit))
4769             F->SearchPathUsage[I] = 1;
4770       break;
4771     }
4772   }
4773 }
4774 
4775 /// Parse a record and blob containing module file extension metadata.
4776 static bool parseModuleFileExtensionMetadata(
4777               const SmallVectorImpl<uint64_t> &Record,
4778               StringRef Blob,
4779               ModuleFileExtensionMetadata &Metadata) {
4780   if (Record.size() < 4) return true;
4781 
4782   Metadata.MajorVersion = Record[0];
4783   Metadata.MinorVersion = Record[1];
4784 
4785   unsigned BlockNameLen = Record[2];
4786   unsigned UserInfoLen = Record[3];
4787 
4788   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4789 
4790   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4791   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4792                                   Blob.data() + BlockNameLen + UserInfoLen);
4793   return false;
4794 }
4795 
4796 llvm::Error ASTReader::ReadExtensionBlock(ModuleFile &F) {
4797   BitstreamCursor &Stream = F.Stream;
4798 
4799   RecordData Record;
4800   while (true) {
4801     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4802     if (!MaybeEntry)
4803       return MaybeEntry.takeError();
4804     llvm::BitstreamEntry Entry = MaybeEntry.get();
4805 
4806     switch (Entry.Kind) {
4807     case llvm::BitstreamEntry::SubBlock:
4808       if (llvm::Error Err = Stream.SkipBlock())
4809         return Err;
4810       continue;
4811     case llvm::BitstreamEntry::EndBlock:
4812       return llvm::Error::success();
4813     case llvm::BitstreamEntry::Error:
4814       return llvm::createStringError(std::errc::illegal_byte_sequence,
4815                                      "malformed block record in AST file");
4816     case llvm::BitstreamEntry::Record:
4817       break;
4818     }
4819 
4820     Record.clear();
4821     StringRef Blob;
4822     Expected<unsigned> MaybeRecCode =
4823         Stream.readRecord(Entry.ID, Record, &Blob);
4824     if (!MaybeRecCode)
4825       return MaybeRecCode.takeError();
4826     switch (MaybeRecCode.get()) {
4827     case EXTENSION_METADATA: {
4828       ModuleFileExtensionMetadata Metadata;
4829       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4830         return llvm::createStringError(
4831             std::errc::illegal_byte_sequence,
4832             "malformed EXTENSION_METADATA in AST file");
4833 
4834       // Find a module file extension with this block name.
4835       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4836       if (Known == ModuleFileExtensions.end()) break;
4837 
4838       // Form a reader.
4839       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4840                                                              F, Stream)) {
4841         F.ExtensionReaders.push_back(std::move(Reader));
4842       }
4843 
4844       break;
4845     }
4846     }
4847   }
4848 
4849   return llvm::Error::success();
4850 }
4851 
4852 void ASTReader::InitializeContext() {
4853   assert(ContextObj && "no context to initialize");
4854   ASTContext &Context = *ContextObj;
4855 
4856   // If there's a listener, notify them that we "read" the translation unit.
4857   if (DeserializationListener)
4858     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4859                                       Context.getTranslationUnitDecl());
4860 
4861   // FIXME: Find a better way to deal with collisions between these
4862   // built-in types. Right now, we just ignore the problem.
4863 
4864   // Load the special types.
4865   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4866     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4867       if (!Context.CFConstantStringTypeDecl)
4868         Context.setCFConstantStringType(GetType(String));
4869     }
4870 
4871     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4872       QualType FileType = GetType(File);
4873       if (FileType.isNull()) {
4874         Error("FILE type is NULL");
4875         return;
4876       }
4877 
4878       if (!Context.FILEDecl) {
4879         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4880           Context.setFILEDecl(Typedef->getDecl());
4881         else {
4882           const TagType *Tag = FileType->getAs<TagType>();
4883           if (!Tag) {
4884             Error("Invalid FILE type in AST file");
4885             return;
4886           }
4887           Context.setFILEDecl(Tag->getDecl());
4888         }
4889       }
4890     }
4891 
4892     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4893       QualType Jmp_bufType = GetType(Jmp_buf);
4894       if (Jmp_bufType.isNull()) {
4895         Error("jmp_buf type is NULL");
4896         return;
4897       }
4898 
4899       if (!Context.jmp_bufDecl) {
4900         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4901           Context.setjmp_bufDecl(Typedef->getDecl());
4902         else {
4903           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4904           if (!Tag) {
4905             Error("Invalid jmp_buf type in AST file");
4906             return;
4907           }
4908           Context.setjmp_bufDecl(Tag->getDecl());
4909         }
4910       }
4911     }
4912 
4913     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4914       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4915       if (Sigjmp_bufType.isNull()) {
4916         Error("sigjmp_buf type is NULL");
4917         return;
4918       }
4919 
4920       if (!Context.sigjmp_bufDecl) {
4921         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4922           Context.setsigjmp_bufDecl(Typedef->getDecl());
4923         else {
4924           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4925           assert(Tag && "Invalid sigjmp_buf type in AST file");
4926           Context.setsigjmp_bufDecl(Tag->getDecl());
4927         }
4928       }
4929     }
4930 
4931     if (unsigned ObjCIdRedef
4932           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4933       if (Context.ObjCIdRedefinitionType.isNull())
4934         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4935     }
4936 
4937     if (unsigned ObjCClassRedef
4938           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4939       if (Context.ObjCClassRedefinitionType.isNull())
4940         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4941     }
4942 
4943     if (unsigned ObjCSelRedef
4944           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4945       if (Context.ObjCSelRedefinitionType.isNull())
4946         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4947     }
4948 
4949     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4950       QualType Ucontext_tType = GetType(Ucontext_t);
4951       if (Ucontext_tType.isNull()) {
4952         Error("ucontext_t type is NULL");
4953         return;
4954       }
4955 
4956       if (!Context.ucontext_tDecl) {
4957         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4958           Context.setucontext_tDecl(Typedef->getDecl());
4959         else {
4960           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4961           assert(Tag && "Invalid ucontext_t type in AST file");
4962           Context.setucontext_tDecl(Tag->getDecl());
4963         }
4964       }
4965     }
4966   }
4967 
4968   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4969 
4970   // If there were any CUDA special declarations, deserialize them.
4971   if (!CUDASpecialDeclRefs.empty()) {
4972     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4973     Context.setcudaConfigureCallDecl(
4974                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4975   }
4976 
4977   // Re-export any modules that were imported by a non-module AST file.
4978   // FIXME: This does not make macro-only imports visible again.
4979   for (auto &Import : ImportedModules) {
4980     if (Module *Imported = getSubmodule(Import.ID)) {
4981       makeModuleVisible(Imported, Module::AllVisible,
4982                         /*ImportLoc=*/Import.ImportLoc);
4983       if (Import.ImportLoc.isValid())
4984         PP.makeModuleVisible(Imported, Import.ImportLoc);
4985       // This updates visibility for Preprocessor only. For Sema, which can be
4986       // nullptr here, we do the same later, in UpdateSema().
4987     }
4988   }
4989 }
4990 
4991 void ASTReader::finalizeForWriting() {
4992   // Nothing to do for now.
4993 }
4994 
4995 /// Reads and return the signature record from \p PCH's control block, or
4996 /// else returns 0.
4997 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4998   BitstreamCursor Stream(PCH);
4999   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5000     // FIXME this drops the error on the floor.
5001     consumeError(std::move(Err));
5002     return ASTFileSignature();
5003   }
5004 
5005   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5006   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5007     return ASTFileSignature();
5008 
5009   // Scan for SIGNATURE inside the diagnostic options block.
5010   ASTReader::RecordData Record;
5011   while (true) {
5012     Expected<llvm::BitstreamEntry> MaybeEntry =
5013         Stream.advanceSkippingSubblocks();
5014     if (!MaybeEntry) {
5015       // FIXME this drops the error on the floor.
5016       consumeError(MaybeEntry.takeError());
5017       return ASTFileSignature();
5018     }
5019     llvm::BitstreamEntry Entry = MaybeEntry.get();
5020 
5021     if (Entry.Kind != llvm::BitstreamEntry::Record)
5022       return ASTFileSignature();
5023 
5024     Record.clear();
5025     StringRef Blob;
5026     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5027     if (!MaybeRecord) {
5028       // FIXME this drops the error on the floor.
5029       consumeError(MaybeRecord.takeError());
5030       return ASTFileSignature();
5031     }
5032     if (SIGNATURE == MaybeRecord.get())
5033       return ASTFileSignature::create(Record.begin(),
5034                                       Record.begin() + ASTFileSignature::size);
5035   }
5036 }
5037 
5038 /// Retrieve the name of the original source file name
5039 /// directly from the AST file, without actually loading the AST
5040 /// file.
5041 std::string ASTReader::getOriginalSourceFile(
5042     const std::string &ASTFileName, FileManager &FileMgr,
5043     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5044   // Open the AST file.
5045   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5046   if (!Buffer) {
5047     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5048         << ASTFileName << Buffer.getError().message();
5049     return std::string();
5050   }
5051 
5052   // Initialize the stream
5053   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5054 
5055   // Sniff for the signature.
5056   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5057     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5058     return std::string();
5059   }
5060 
5061   // Scan for the CONTROL_BLOCK_ID block.
5062   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5063     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5064     return std::string();
5065   }
5066 
5067   // Scan for ORIGINAL_FILE inside the control block.
5068   RecordData Record;
5069   while (true) {
5070     Expected<llvm::BitstreamEntry> MaybeEntry =
5071         Stream.advanceSkippingSubblocks();
5072     if (!MaybeEntry) {
5073       // FIXME this drops errors on the floor.
5074       consumeError(MaybeEntry.takeError());
5075       return std::string();
5076     }
5077     llvm::BitstreamEntry Entry = MaybeEntry.get();
5078 
5079     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5080       return std::string();
5081 
5082     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5083       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5084       return std::string();
5085     }
5086 
5087     Record.clear();
5088     StringRef Blob;
5089     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5090     if (!MaybeRecord) {
5091       // FIXME this drops the errors on the floor.
5092       consumeError(MaybeRecord.takeError());
5093       return std::string();
5094     }
5095     if (ORIGINAL_FILE == MaybeRecord.get())
5096       return Blob.str();
5097   }
5098 }
5099 
5100 namespace {
5101 
5102   class SimplePCHValidator : public ASTReaderListener {
5103     const LangOptions &ExistingLangOpts;
5104     const TargetOptions &ExistingTargetOpts;
5105     const PreprocessorOptions &ExistingPPOpts;
5106     std::string ExistingModuleCachePath;
5107     FileManager &FileMgr;
5108 
5109   public:
5110     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5111                        const TargetOptions &ExistingTargetOpts,
5112                        const PreprocessorOptions &ExistingPPOpts,
5113                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5114         : ExistingLangOpts(ExistingLangOpts),
5115           ExistingTargetOpts(ExistingTargetOpts),
5116           ExistingPPOpts(ExistingPPOpts),
5117           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5118 
5119     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5120                              bool AllowCompatibleDifferences) override {
5121       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5122                                   AllowCompatibleDifferences);
5123     }
5124 
5125     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5126                            bool AllowCompatibleDifferences) override {
5127       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5128                                 AllowCompatibleDifferences);
5129     }
5130 
5131     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5132                                  StringRef SpecificModuleCachePath,
5133                                  bool Complain) override {
5134       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5135                                       ExistingModuleCachePath, nullptr,
5136                                       ExistingLangOpts, ExistingPPOpts);
5137     }
5138 
5139     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5140                                  bool Complain,
5141                                  std::string &SuggestedPredefines) override {
5142       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5143                                       SuggestedPredefines, ExistingLangOpts);
5144     }
5145   };
5146 
5147 } // namespace
5148 
5149 bool ASTReader::readASTFileControlBlock(
5150     StringRef Filename, FileManager &FileMgr,
5151     const PCHContainerReader &PCHContainerRdr,
5152     bool FindModuleFileExtensions,
5153     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5154   // Open the AST file.
5155   // FIXME: This allows use of the VFS; we do not allow use of the
5156   // VFS when actually loading a module.
5157   auto Buffer = FileMgr.getBufferForFile(Filename);
5158   if (!Buffer) {
5159     return true;
5160   }
5161 
5162   // Initialize the stream
5163   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5164   BitstreamCursor Stream(Bytes);
5165 
5166   // Sniff for the signature.
5167   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5168     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5169     return true;
5170   }
5171 
5172   // Scan for the CONTROL_BLOCK_ID block.
5173   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5174     return true;
5175 
5176   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5177   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5178   bool NeedsImports = Listener.needsImportVisitation();
5179   BitstreamCursor InputFilesCursor;
5180 
5181   RecordData Record;
5182   std::string ModuleDir;
5183   bool DoneWithControlBlock = false;
5184   while (!DoneWithControlBlock) {
5185     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5186     if (!MaybeEntry) {
5187       // FIXME this drops the error on the floor.
5188       consumeError(MaybeEntry.takeError());
5189       return true;
5190     }
5191     llvm::BitstreamEntry Entry = MaybeEntry.get();
5192 
5193     switch (Entry.Kind) {
5194     case llvm::BitstreamEntry::SubBlock: {
5195       switch (Entry.ID) {
5196       case OPTIONS_BLOCK_ID: {
5197         std::string IgnoredSuggestedPredefines;
5198         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5199                              /*AllowCompatibleConfigurationMismatch*/ false,
5200                              Listener, IgnoredSuggestedPredefines) != Success)
5201           return true;
5202         break;
5203       }
5204 
5205       case INPUT_FILES_BLOCK_ID:
5206         InputFilesCursor = Stream;
5207         if (llvm::Error Err = Stream.SkipBlock()) {
5208           // FIXME this drops the error on the floor.
5209           consumeError(std::move(Err));
5210           return true;
5211         }
5212         if (NeedsInputFiles &&
5213             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5214           return true;
5215         break;
5216 
5217       default:
5218         if (llvm::Error Err = Stream.SkipBlock()) {
5219           // FIXME this drops the error on the floor.
5220           consumeError(std::move(Err));
5221           return true;
5222         }
5223         break;
5224       }
5225 
5226       continue;
5227     }
5228 
5229     case llvm::BitstreamEntry::EndBlock:
5230       DoneWithControlBlock = true;
5231       break;
5232 
5233     case llvm::BitstreamEntry::Error:
5234       return true;
5235 
5236     case llvm::BitstreamEntry::Record:
5237       break;
5238     }
5239 
5240     if (DoneWithControlBlock) break;
5241 
5242     Record.clear();
5243     StringRef Blob;
5244     Expected<unsigned> MaybeRecCode =
5245         Stream.readRecord(Entry.ID, Record, &Blob);
5246     if (!MaybeRecCode) {
5247       // FIXME this drops the error.
5248       return Failure;
5249     }
5250     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5251     case METADATA:
5252       if (Record[0] != VERSION_MAJOR)
5253         return true;
5254       if (Listener.ReadFullVersionInformation(Blob))
5255         return true;
5256       break;
5257     case MODULE_NAME:
5258       Listener.ReadModuleName(Blob);
5259       break;
5260     case MODULE_DIRECTORY:
5261       ModuleDir = std::string(Blob);
5262       break;
5263     case MODULE_MAP_FILE: {
5264       unsigned Idx = 0;
5265       auto Path = ReadString(Record, Idx);
5266       ResolveImportedPath(Path, ModuleDir);
5267       Listener.ReadModuleMapFile(Path);
5268       break;
5269     }
5270     case INPUT_FILE_OFFSETS: {
5271       if (!NeedsInputFiles)
5272         break;
5273 
5274       unsigned NumInputFiles = Record[0];
5275       unsigned NumUserFiles = Record[1];
5276       const llvm::support::unaligned_uint64_t *InputFileOffs =
5277           (const llvm::support::unaligned_uint64_t *)Blob.data();
5278       for (unsigned I = 0; I != NumInputFiles; ++I) {
5279         // Go find this input file.
5280         bool isSystemFile = I >= NumUserFiles;
5281 
5282         if (isSystemFile && !NeedsSystemInputFiles)
5283           break; // the rest are system input files
5284 
5285         BitstreamCursor &Cursor = InputFilesCursor;
5286         SavedStreamPosition SavedPosition(Cursor);
5287         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5288           // FIXME this drops errors on the floor.
5289           consumeError(std::move(Err));
5290         }
5291 
5292         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5293         if (!MaybeCode) {
5294           // FIXME this drops errors on the floor.
5295           consumeError(MaybeCode.takeError());
5296         }
5297         unsigned Code = MaybeCode.get();
5298 
5299         RecordData Record;
5300         StringRef Blob;
5301         bool shouldContinue = false;
5302         Expected<unsigned> MaybeRecordType =
5303             Cursor.readRecord(Code, Record, &Blob);
5304         if (!MaybeRecordType) {
5305           // FIXME this drops errors on the floor.
5306           consumeError(MaybeRecordType.takeError());
5307         }
5308         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5309         case INPUT_FILE_HASH:
5310           break;
5311         case INPUT_FILE:
5312           bool Overridden = static_cast<bool>(Record[3]);
5313           std::string Filename = std::string(Blob);
5314           ResolveImportedPath(Filename, ModuleDir);
5315           shouldContinue = Listener.visitInputFile(
5316               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5317           break;
5318         }
5319         if (!shouldContinue)
5320           break;
5321       }
5322       break;
5323     }
5324 
5325     case IMPORTS: {
5326       if (!NeedsImports)
5327         break;
5328 
5329       unsigned Idx = 0, N = Record.size();
5330       while (Idx < N) {
5331         // Read information about the AST file.
5332         Idx +=
5333             1 + 1 + 1 + 1 +
5334             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5335         std::string ModuleName = ReadString(Record, Idx);
5336         std::string Filename = ReadString(Record, Idx);
5337         ResolveImportedPath(Filename, ModuleDir);
5338         Listener.visitImport(ModuleName, Filename);
5339       }
5340       break;
5341     }
5342 
5343     default:
5344       // No other validation to perform.
5345       break;
5346     }
5347   }
5348 
5349   // Look for module file extension blocks, if requested.
5350   if (FindModuleFileExtensions) {
5351     BitstreamCursor SavedStream = Stream;
5352     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5353       bool DoneWithExtensionBlock = false;
5354       while (!DoneWithExtensionBlock) {
5355         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5356         if (!MaybeEntry) {
5357           // FIXME this drops the error.
5358           return true;
5359         }
5360         llvm::BitstreamEntry Entry = MaybeEntry.get();
5361 
5362         switch (Entry.Kind) {
5363         case llvm::BitstreamEntry::SubBlock:
5364           if (llvm::Error Err = Stream.SkipBlock()) {
5365             // FIXME this drops the error on the floor.
5366             consumeError(std::move(Err));
5367             return true;
5368           }
5369           continue;
5370 
5371         case llvm::BitstreamEntry::EndBlock:
5372           DoneWithExtensionBlock = true;
5373           continue;
5374 
5375         case llvm::BitstreamEntry::Error:
5376           return true;
5377 
5378         case llvm::BitstreamEntry::Record:
5379           break;
5380         }
5381 
5382        Record.clear();
5383        StringRef Blob;
5384        Expected<unsigned> MaybeRecCode =
5385            Stream.readRecord(Entry.ID, Record, &Blob);
5386        if (!MaybeRecCode) {
5387          // FIXME this drops the error.
5388          return true;
5389        }
5390        switch (MaybeRecCode.get()) {
5391        case EXTENSION_METADATA: {
5392          ModuleFileExtensionMetadata Metadata;
5393          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5394            return true;
5395 
5396          Listener.readModuleFileExtension(Metadata);
5397          break;
5398        }
5399        }
5400       }
5401     }
5402     Stream = SavedStream;
5403   }
5404 
5405   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5406   if (readUnhashedControlBlockImpl(
5407           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5408           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5409           ValidateDiagnosticOptions) != Success)
5410     return true;
5411 
5412   return false;
5413 }
5414 
5415 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5416                                     const PCHContainerReader &PCHContainerRdr,
5417                                     const LangOptions &LangOpts,
5418                                     const TargetOptions &TargetOpts,
5419                                     const PreprocessorOptions &PPOpts,
5420                                     StringRef ExistingModuleCachePath) {
5421   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5422                                ExistingModuleCachePath, FileMgr);
5423   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5424                                   /*FindModuleFileExtensions=*/false,
5425                                   validator,
5426                                   /*ValidateDiagnosticOptions=*/true);
5427 }
5428 
5429 llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F,
5430                                           unsigned ClientLoadCapabilities) {
5431   // Enter the submodule block.
5432   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID))
5433     return Err;
5434 
5435   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5436   bool First = true;
5437   Module *CurrentModule = nullptr;
5438   RecordData Record;
5439   while (true) {
5440     Expected<llvm::BitstreamEntry> MaybeEntry =
5441         F.Stream.advanceSkippingSubblocks();
5442     if (!MaybeEntry)
5443       return MaybeEntry.takeError();
5444     llvm::BitstreamEntry Entry = MaybeEntry.get();
5445 
5446     switch (Entry.Kind) {
5447     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5448     case llvm::BitstreamEntry::Error:
5449       return llvm::createStringError(std::errc::illegal_byte_sequence,
5450                                      "malformed block record in AST file");
5451     case llvm::BitstreamEntry::EndBlock:
5452       return llvm::Error::success();
5453     case llvm::BitstreamEntry::Record:
5454       // The interesting case.
5455       break;
5456     }
5457 
5458     // Read a record.
5459     StringRef Blob;
5460     Record.clear();
5461     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5462     if (!MaybeKind)
5463       return MaybeKind.takeError();
5464     unsigned Kind = MaybeKind.get();
5465 
5466     if ((Kind == SUBMODULE_METADATA) != First)
5467       return llvm::createStringError(
5468           std::errc::illegal_byte_sequence,
5469           "submodule metadata record should be at beginning of block");
5470     First = false;
5471 
5472     // Submodule information is only valid if we have a current module.
5473     // FIXME: Should we error on these cases?
5474     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5475         Kind != SUBMODULE_DEFINITION)
5476       continue;
5477 
5478     switch (Kind) {
5479     default:  // Default behavior: ignore.
5480       break;
5481 
5482     case SUBMODULE_DEFINITION: {
5483       if (Record.size() < 12)
5484         return llvm::createStringError(std::errc::illegal_byte_sequence,
5485                                        "malformed module definition");
5486 
5487       StringRef Name = Blob;
5488       unsigned Idx = 0;
5489       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5490       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5491       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5492       bool IsFramework = Record[Idx++];
5493       bool IsExplicit = Record[Idx++];
5494       bool IsSystem = Record[Idx++];
5495       bool IsExternC = Record[Idx++];
5496       bool InferSubmodules = Record[Idx++];
5497       bool InferExplicitSubmodules = Record[Idx++];
5498       bool InferExportWildcard = Record[Idx++];
5499       bool ConfigMacrosExhaustive = Record[Idx++];
5500       bool ModuleMapIsPrivate = Record[Idx++];
5501 
5502       Module *ParentModule = nullptr;
5503       if (Parent)
5504         ParentModule = getSubmodule(Parent);
5505 
5506       // Retrieve this (sub)module from the module map, creating it if
5507       // necessary.
5508       CurrentModule =
5509           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5510               .first;
5511 
5512       // FIXME: set the definition loc for CurrentModule, or call
5513       // ModMap.setInferredModuleAllowedBy()
5514 
5515       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5516       if (GlobalIndex >= SubmodulesLoaded.size() ||
5517           SubmodulesLoaded[GlobalIndex])
5518         return llvm::createStringError(std::errc::invalid_argument,
5519                                        "too many submodules");
5520 
5521       if (!ParentModule) {
5522         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5523           // Don't emit module relocation error if we have -fno-validate-pch
5524           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5525                     DisableValidationForModuleKind::Module) &&
5526               CurFile != F.File) {
5527             auto ConflictError =
5528                 PartialDiagnostic(diag::err_module_file_conflict,
5529                                   ContextObj->DiagAllocator)
5530                 << CurrentModule->getTopLevelModuleName() << CurFile->getName()
5531                 << F.File->getName();
5532             return DiagnosticError::create(CurrentImportLoc, ConflictError);
5533           }
5534         }
5535 
5536         F.DidReadTopLevelSubmodule = true;
5537         CurrentModule->setASTFile(F.File);
5538         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5539       }
5540 
5541       CurrentModule->Kind = Kind;
5542       CurrentModule->Signature = F.Signature;
5543       CurrentModule->IsFromModuleFile = true;
5544       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5545       CurrentModule->IsExternC = IsExternC;
5546       CurrentModule->InferSubmodules = InferSubmodules;
5547       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5548       CurrentModule->InferExportWildcard = InferExportWildcard;
5549       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5550       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5551       if (DeserializationListener)
5552         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5553 
5554       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5555 
5556       // Clear out data that will be replaced by what is in the module file.
5557       CurrentModule->LinkLibraries.clear();
5558       CurrentModule->ConfigMacros.clear();
5559       CurrentModule->UnresolvedConflicts.clear();
5560       CurrentModule->Conflicts.clear();
5561 
5562       // The module is available unless it's missing a requirement; relevant
5563       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5564       // Missing headers that were present when the module was built do not
5565       // make it unavailable -- if we got this far, this must be an explicitly
5566       // imported module file.
5567       CurrentModule->Requirements.clear();
5568       CurrentModule->MissingHeaders.clear();
5569       CurrentModule->IsUnimportable =
5570           ParentModule && ParentModule->IsUnimportable;
5571       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5572       break;
5573     }
5574 
5575     case SUBMODULE_UMBRELLA_HEADER: {
5576       // FIXME: This doesn't work for framework modules as `Filename` is the
5577       //        name as written in the module file and does not include
5578       //        `Headers/`, so this path will never exist.
5579       std::string Filename = std::string(Blob);
5580       ResolveImportedPath(F, Filename);
5581       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5582         if (!CurrentModule->getUmbrellaHeader()) {
5583           // FIXME: NameAsWritten
5584           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5585         }
5586         // Note that it's too late at this point to return out of date if the
5587         // name from the PCM doesn't match up with the one in the module map,
5588         // but also quite unlikely since we will have already checked the
5589         // modification time and size of the module map file itself.
5590       }
5591       break;
5592     }
5593 
5594     case SUBMODULE_HEADER:
5595     case SUBMODULE_EXCLUDED_HEADER:
5596     case SUBMODULE_PRIVATE_HEADER:
5597       // We lazily associate headers with their modules via the HeaderInfo table.
5598       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5599       // of complete filenames or remove it entirely.
5600       break;
5601 
5602     case SUBMODULE_TEXTUAL_HEADER:
5603     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5604       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5605       // them here.
5606       break;
5607 
5608     case SUBMODULE_TOPHEADER:
5609       CurrentModule->addTopHeaderFilename(Blob);
5610       break;
5611 
5612     case SUBMODULE_UMBRELLA_DIR: {
5613       // See comments in SUBMODULE_UMBRELLA_HEADER
5614       std::string Dirname = std::string(Blob);
5615       ResolveImportedPath(F, Dirname);
5616       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5617         if (!CurrentModule->getUmbrellaDir()) {
5618           // FIXME: NameAsWritten
5619           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5620         }
5621       }
5622       break;
5623     }
5624 
5625     case SUBMODULE_METADATA: {
5626       F.BaseSubmoduleID = getTotalNumSubmodules();
5627       F.LocalNumSubmodules = Record[0];
5628       unsigned LocalBaseSubmoduleID = Record[1];
5629       if (F.LocalNumSubmodules > 0) {
5630         // Introduce the global -> local mapping for submodules within this
5631         // module.
5632         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5633 
5634         // Introduce the local -> global mapping for submodules within this
5635         // module.
5636         F.SubmoduleRemap.insertOrReplace(
5637           std::make_pair(LocalBaseSubmoduleID,
5638                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5639 
5640         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5641       }
5642       break;
5643     }
5644 
5645     case SUBMODULE_IMPORTS:
5646       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5647         UnresolvedModuleRef Unresolved;
5648         Unresolved.File = &F;
5649         Unresolved.Mod = CurrentModule;
5650         Unresolved.ID = Record[Idx];
5651         Unresolved.Kind = UnresolvedModuleRef::Import;
5652         Unresolved.IsWildcard = false;
5653         UnresolvedModuleRefs.push_back(Unresolved);
5654       }
5655       break;
5656 
5657     case SUBMODULE_EXPORTS:
5658       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5659         UnresolvedModuleRef Unresolved;
5660         Unresolved.File = &F;
5661         Unresolved.Mod = CurrentModule;
5662         Unresolved.ID = Record[Idx];
5663         Unresolved.Kind = UnresolvedModuleRef::Export;
5664         Unresolved.IsWildcard = Record[Idx + 1];
5665         UnresolvedModuleRefs.push_back(Unresolved);
5666       }
5667 
5668       // Once we've loaded the set of exports, there's no reason to keep
5669       // the parsed, unresolved exports around.
5670       CurrentModule->UnresolvedExports.clear();
5671       break;
5672 
5673     case SUBMODULE_REQUIRES:
5674       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5675                                     PP.getTargetInfo());
5676       break;
5677 
5678     case SUBMODULE_LINK_LIBRARY:
5679       ModMap.resolveLinkAsDependencies(CurrentModule);
5680       CurrentModule->LinkLibraries.push_back(
5681           Module::LinkLibrary(std::string(Blob), Record[0]));
5682       break;
5683 
5684     case SUBMODULE_CONFIG_MACRO:
5685       CurrentModule->ConfigMacros.push_back(Blob.str());
5686       break;
5687 
5688     case SUBMODULE_CONFLICT: {
5689       UnresolvedModuleRef Unresolved;
5690       Unresolved.File = &F;
5691       Unresolved.Mod = CurrentModule;
5692       Unresolved.ID = Record[0];
5693       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5694       Unresolved.IsWildcard = false;
5695       Unresolved.String = Blob;
5696       UnresolvedModuleRefs.push_back(Unresolved);
5697       break;
5698     }
5699 
5700     case SUBMODULE_INITIALIZERS: {
5701       if (!ContextObj)
5702         break;
5703       SmallVector<uint32_t, 16> Inits;
5704       for (auto &ID : Record)
5705         Inits.push_back(getGlobalDeclID(F, ID));
5706       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5707       break;
5708     }
5709 
5710     case SUBMODULE_EXPORT_AS:
5711       CurrentModule->ExportAsModule = Blob.str();
5712       ModMap.addLinkAsDependency(CurrentModule);
5713       break;
5714     }
5715   }
5716 }
5717 
5718 /// Parse the record that corresponds to a LangOptions data
5719 /// structure.
5720 ///
5721 /// This routine parses the language options from the AST file and then gives
5722 /// them to the AST listener if one is set.
5723 ///
5724 /// \returns true if the listener deems the file unacceptable, false otherwise.
5725 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5726                                      bool Complain,
5727                                      ASTReaderListener &Listener,
5728                                      bool AllowCompatibleDifferences) {
5729   LangOptions LangOpts;
5730   unsigned Idx = 0;
5731 #define LANGOPT(Name, Bits, Default, Description) \
5732   LangOpts.Name = Record[Idx++];
5733 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5734   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5735 #include "clang/Basic/LangOptions.def"
5736 #define SANITIZER(NAME, ID)                                                    \
5737   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5738 #include "clang/Basic/Sanitizers.def"
5739 
5740   for (unsigned N = Record[Idx++]; N; --N)
5741     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5742 
5743   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5744   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5745   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5746 
5747   LangOpts.CurrentModule = ReadString(Record, Idx);
5748 
5749   // Comment options.
5750   for (unsigned N = Record[Idx++]; N; --N) {
5751     LangOpts.CommentOpts.BlockCommandNames.push_back(
5752       ReadString(Record, Idx));
5753   }
5754   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5755 
5756   // OpenMP offloading options.
5757   for (unsigned N = Record[Idx++]; N; --N) {
5758     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5759   }
5760 
5761   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5762 
5763   return Listener.ReadLanguageOptions(LangOpts, Complain,
5764                                       AllowCompatibleDifferences);
5765 }
5766 
5767 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5768                                    ASTReaderListener &Listener,
5769                                    bool AllowCompatibleDifferences) {
5770   unsigned Idx = 0;
5771   TargetOptions TargetOpts;
5772   TargetOpts.Triple = ReadString(Record, Idx);
5773   TargetOpts.CPU = ReadString(Record, Idx);
5774   TargetOpts.TuneCPU = ReadString(Record, Idx);
5775   TargetOpts.ABI = ReadString(Record, Idx);
5776   for (unsigned N = Record[Idx++]; N; --N) {
5777     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5778   }
5779   for (unsigned N = Record[Idx++]; N; --N) {
5780     TargetOpts.Features.push_back(ReadString(Record, Idx));
5781   }
5782 
5783   return Listener.ReadTargetOptions(TargetOpts, Complain,
5784                                     AllowCompatibleDifferences);
5785 }
5786 
5787 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5788                                        ASTReaderListener &Listener) {
5789   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5790   unsigned Idx = 0;
5791 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5792 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5793   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5794 #include "clang/Basic/DiagnosticOptions.def"
5795 
5796   for (unsigned N = Record[Idx++]; N; --N)
5797     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5798   for (unsigned N = Record[Idx++]; N; --N)
5799     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5800 
5801   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5802 }
5803 
5804 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5805                                        ASTReaderListener &Listener) {
5806   FileSystemOptions FSOpts;
5807   unsigned Idx = 0;
5808   FSOpts.WorkingDir = ReadString(Record, Idx);
5809   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5810 }
5811 
5812 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5813                                          bool Complain,
5814                                          ASTReaderListener &Listener) {
5815   HeaderSearchOptions HSOpts;
5816   unsigned Idx = 0;
5817   HSOpts.Sysroot = ReadString(Record, Idx);
5818 
5819   // Include entries.
5820   for (unsigned N = Record[Idx++]; N; --N) {
5821     std::string Path = ReadString(Record, Idx);
5822     frontend::IncludeDirGroup Group
5823       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5824     bool IsFramework = Record[Idx++];
5825     bool IgnoreSysRoot = Record[Idx++];
5826     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5827                                     IgnoreSysRoot);
5828   }
5829 
5830   // System header prefixes.
5831   for (unsigned N = Record[Idx++]; N; --N) {
5832     std::string Prefix = ReadString(Record, Idx);
5833     bool IsSystemHeader = Record[Idx++];
5834     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5835   }
5836 
5837   HSOpts.ResourceDir = ReadString(Record, Idx);
5838   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5839   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5840   HSOpts.DisableModuleHash = Record[Idx++];
5841   HSOpts.ImplicitModuleMaps = Record[Idx++];
5842   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5843   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5844   HSOpts.UseBuiltinIncludes = Record[Idx++];
5845   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5846   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5847   HSOpts.UseLibcxx = Record[Idx++];
5848   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5849 
5850   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5851                                           Complain);
5852 }
5853 
5854 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5855                                          bool Complain,
5856                                          ASTReaderListener &Listener,
5857                                          std::string &SuggestedPredefines) {
5858   PreprocessorOptions PPOpts;
5859   unsigned Idx = 0;
5860 
5861   // Macro definitions/undefs
5862   for (unsigned N = Record[Idx++]; N; --N) {
5863     std::string Macro = ReadString(Record, Idx);
5864     bool IsUndef = Record[Idx++];
5865     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5866   }
5867 
5868   // Includes
5869   for (unsigned N = Record[Idx++]; N; --N) {
5870     PPOpts.Includes.push_back(ReadString(Record, Idx));
5871   }
5872 
5873   // Macro Includes
5874   for (unsigned N = Record[Idx++]; N; --N) {
5875     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5876   }
5877 
5878   PPOpts.UsePredefines = Record[Idx++];
5879   PPOpts.DetailedRecord = Record[Idx++];
5880   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5881   PPOpts.ObjCXXARCStandardLibrary =
5882     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5883   SuggestedPredefines.clear();
5884   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5885                                           SuggestedPredefines);
5886 }
5887 
5888 std::pair<ModuleFile *, unsigned>
5889 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5890   GlobalPreprocessedEntityMapType::iterator
5891   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5892   assert(I != GlobalPreprocessedEntityMap.end() &&
5893          "Corrupted global preprocessed entity map");
5894   ModuleFile *M = I->second;
5895   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5896   return std::make_pair(M, LocalIndex);
5897 }
5898 
5899 llvm::iterator_range<PreprocessingRecord::iterator>
5900 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5901   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5902     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5903                                              Mod.NumPreprocessedEntities);
5904 
5905   return llvm::make_range(PreprocessingRecord::iterator(),
5906                           PreprocessingRecord::iterator());
5907 }
5908 
5909 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5910                                         unsigned int ClientLoadCapabilities) {
5911   return ClientLoadCapabilities & ARR_OutOfDate &&
5912          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
5913 }
5914 
5915 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5916 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5917   return llvm::make_range(
5918       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5919       ModuleDeclIterator(this, &Mod,
5920                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5921 }
5922 
5923 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5924   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5925   assert(I != GlobalSkippedRangeMap.end() &&
5926     "Corrupted global skipped range map");
5927   ModuleFile *M = I->second;
5928   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5929   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5930   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5931   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5932                     TranslateSourceLocation(*M, RawRange.getEnd()));
5933   assert(Range.isValid());
5934   return Range;
5935 }
5936 
5937 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5938   PreprocessedEntityID PPID = Index+1;
5939   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5940   ModuleFile &M = *PPInfo.first;
5941   unsigned LocalIndex = PPInfo.second;
5942   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5943 
5944   if (!PP.getPreprocessingRecord()) {
5945     Error("no preprocessing record");
5946     return nullptr;
5947   }
5948 
5949   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5950   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5951           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5952     Error(std::move(Err));
5953     return nullptr;
5954   }
5955 
5956   Expected<llvm::BitstreamEntry> MaybeEntry =
5957       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5958   if (!MaybeEntry) {
5959     Error(MaybeEntry.takeError());
5960     return nullptr;
5961   }
5962   llvm::BitstreamEntry Entry = MaybeEntry.get();
5963 
5964   if (Entry.Kind != llvm::BitstreamEntry::Record)
5965     return nullptr;
5966 
5967   // Read the record.
5968   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5969                     TranslateSourceLocation(M, PPOffs.getEnd()));
5970   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5971   StringRef Blob;
5972   RecordData Record;
5973   Expected<unsigned> MaybeRecType =
5974       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5975   if (!MaybeRecType) {
5976     Error(MaybeRecType.takeError());
5977     return nullptr;
5978   }
5979   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5980   case PPD_MACRO_EXPANSION: {
5981     bool isBuiltin = Record[0];
5982     IdentifierInfo *Name = nullptr;
5983     MacroDefinitionRecord *Def = nullptr;
5984     if (isBuiltin)
5985       Name = getLocalIdentifier(M, Record[1]);
5986     else {
5987       PreprocessedEntityID GlobalID =
5988           getGlobalPreprocessedEntityID(M, Record[1]);
5989       Def = cast<MacroDefinitionRecord>(
5990           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5991     }
5992 
5993     MacroExpansion *ME;
5994     if (isBuiltin)
5995       ME = new (PPRec) MacroExpansion(Name, Range);
5996     else
5997       ME = new (PPRec) MacroExpansion(Def, Range);
5998 
5999     return ME;
6000   }
6001 
6002   case PPD_MACRO_DEFINITION: {
6003     // Decode the identifier info and then check again; if the macro is
6004     // still defined and associated with the identifier,
6005     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6006     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6007 
6008     if (DeserializationListener)
6009       DeserializationListener->MacroDefinitionRead(PPID, MD);
6010 
6011     return MD;
6012   }
6013 
6014   case PPD_INCLUSION_DIRECTIVE: {
6015     const char *FullFileNameStart = Blob.data() + Record[0];
6016     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6017     const FileEntry *File = nullptr;
6018     if (!FullFileName.empty())
6019       if (auto FE = PP.getFileManager().getFile(FullFileName))
6020         File = *FE;
6021 
6022     // FIXME: Stable encoding
6023     InclusionDirective::InclusionKind Kind
6024       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6025     InclusionDirective *ID
6026       = new (PPRec) InclusionDirective(PPRec, Kind,
6027                                        StringRef(Blob.data(), Record[0]),
6028                                        Record[1], Record[3],
6029                                        File,
6030                                        Range);
6031     return ID;
6032   }
6033   }
6034 
6035   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6036 }
6037 
6038 /// Find the next module that contains entities and return the ID
6039 /// of the first entry.
6040 ///
6041 /// \param SLocMapI points at a chunk of a module that contains no
6042 /// preprocessed entities or the entities it contains are not the ones we are
6043 /// looking for.
6044 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6045                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6046   ++SLocMapI;
6047   for (GlobalSLocOffsetMapType::const_iterator
6048          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6049     ModuleFile &M = *SLocMapI->second;
6050     if (M.NumPreprocessedEntities)
6051       return M.BasePreprocessedEntityID;
6052   }
6053 
6054   return getTotalNumPreprocessedEntities();
6055 }
6056 
6057 namespace {
6058 
6059 struct PPEntityComp {
6060   const ASTReader &Reader;
6061   ModuleFile &M;
6062 
6063   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6064 
6065   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6066     SourceLocation LHS = getLoc(L);
6067     SourceLocation RHS = getLoc(R);
6068     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6069   }
6070 
6071   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6072     SourceLocation LHS = getLoc(L);
6073     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6074   }
6075 
6076   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6077     SourceLocation RHS = getLoc(R);
6078     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6079   }
6080 
6081   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6082     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6083   }
6084 };
6085 
6086 } // namespace
6087 
6088 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6089                                                        bool EndsAfter) const {
6090   if (SourceMgr.isLocalSourceLocation(Loc))
6091     return getTotalNumPreprocessedEntities();
6092 
6093   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6094       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6095   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6096          "Corrupted global sloc offset map");
6097 
6098   if (SLocMapI->second->NumPreprocessedEntities == 0)
6099     return findNextPreprocessedEntity(SLocMapI);
6100 
6101   ModuleFile &M = *SLocMapI->second;
6102 
6103   using pp_iterator = const PPEntityOffset *;
6104 
6105   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6106   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6107 
6108   size_t Count = M.NumPreprocessedEntities;
6109   size_t Half;
6110   pp_iterator First = pp_begin;
6111   pp_iterator PPI;
6112 
6113   if (EndsAfter) {
6114     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6115                            PPEntityComp(*this, M));
6116   } else {
6117     // Do a binary search manually instead of using std::lower_bound because
6118     // The end locations of entities may be unordered (when a macro expansion
6119     // is inside another macro argument), but for this case it is not important
6120     // whether we get the first macro expansion or its containing macro.
6121     while (Count > 0) {
6122       Half = Count / 2;
6123       PPI = First;
6124       std::advance(PPI, Half);
6125       if (SourceMgr.isBeforeInTranslationUnit(
6126               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6127         First = PPI;
6128         ++First;
6129         Count = Count - Half - 1;
6130       } else
6131         Count = Half;
6132     }
6133   }
6134 
6135   if (PPI == pp_end)
6136     return findNextPreprocessedEntity(SLocMapI);
6137 
6138   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6139 }
6140 
6141 /// Returns a pair of [Begin, End) indices of preallocated
6142 /// preprocessed entities that \arg Range encompasses.
6143 std::pair<unsigned, unsigned>
6144     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6145   if (Range.isInvalid())
6146     return std::make_pair(0,0);
6147   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6148 
6149   PreprocessedEntityID BeginID =
6150       findPreprocessedEntity(Range.getBegin(), false);
6151   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6152   return std::make_pair(BeginID, EndID);
6153 }
6154 
6155 /// Optionally returns true or false if the preallocated preprocessed
6156 /// entity with index \arg Index came from file \arg FID.
6157 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6158                                                              FileID FID) {
6159   if (FID.isInvalid())
6160     return false;
6161 
6162   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6163   ModuleFile &M = *PPInfo.first;
6164   unsigned LocalIndex = PPInfo.second;
6165   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6166 
6167   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6168   if (Loc.isInvalid())
6169     return false;
6170 
6171   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6172     return true;
6173   else
6174     return false;
6175 }
6176 
6177 namespace {
6178 
6179   /// Visitor used to search for information about a header file.
6180   class HeaderFileInfoVisitor {
6181     const FileEntry *FE;
6182     Optional<HeaderFileInfo> HFI;
6183 
6184   public:
6185     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6186 
6187     bool operator()(ModuleFile &M) {
6188       HeaderFileInfoLookupTable *Table
6189         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6190       if (!Table)
6191         return false;
6192 
6193       // Look in the on-disk hash table for an entry for this file name.
6194       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6195       if (Pos == Table->end())
6196         return false;
6197 
6198       HFI = *Pos;
6199       return true;
6200     }
6201 
6202     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6203   };
6204 
6205 } // namespace
6206 
6207 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6208   HeaderFileInfoVisitor Visitor(FE);
6209   ModuleMgr.visit(Visitor);
6210   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6211     return *HFI;
6212 
6213   return HeaderFileInfo();
6214 }
6215 
6216 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6217   using DiagState = DiagnosticsEngine::DiagState;
6218   SmallVector<DiagState *, 32> DiagStates;
6219 
6220   for (ModuleFile &F : ModuleMgr) {
6221     unsigned Idx = 0;
6222     auto &Record = F.PragmaDiagMappings;
6223     if (Record.empty())
6224       continue;
6225 
6226     DiagStates.clear();
6227 
6228     auto ReadDiagState =
6229         [&](const DiagState &BasedOn, SourceLocation Loc,
6230             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6231       unsigned BackrefID = Record[Idx++];
6232       if (BackrefID != 0)
6233         return DiagStates[BackrefID - 1];
6234 
6235       // A new DiagState was created here.
6236       Diag.DiagStates.push_back(BasedOn);
6237       DiagState *NewState = &Diag.DiagStates.back();
6238       DiagStates.push_back(NewState);
6239       unsigned Size = Record[Idx++];
6240       assert(Idx + Size * 2 <= Record.size() &&
6241              "Invalid data, not enough diag/map pairs");
6242       while (Size--) {
6243         unsigned DiagID = Record[Idx++];
6244         DiagnosticMapping NewMapping =
6245             DiagnosticMapping::deserialize(Record[Idx++]);
6246         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6247           continue;
6248 
6249         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6250 
6251         // If this mapping was specified as a warning but the severity was
6252         // upgraded due to diagnostic settings, simulate the current diagnostic
6253         // settings (and use a warning).
6254         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6255           NewMapping.setSeverity(diag::Severity::Warning);
6256           NewMapping.setUpgradedFromWarning(false);
6257         }
6258 
6259         Mapping = NewMapping;
6260       }
6261       return NewState;
6262     };
6263 
6264     // Read the first state.
6265     DiagState *FirstState;
6266     if (F.Kind == MK_ImplicitModule) {
6267       // Implicitly-built modules are reused with different diagnostic
6268       // settings.  Use the initial diagnostic state from Diag to simulate this
6269       // compilation's diagnostic settings.
6270       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6271       DiagStates.push_back(FirstState);
6272 
6273       // Skip the initial diagnostic state from the serialized module.
6274       assert(Record[1] == 0 &&
6275              "Invalid data, unexpected backref in initial state");
6276       Idx = 3 + Record[2] * 2;
6277       assert(Idx < Record.size() &&
6278              "Invalid data, not enough state change pairs in initial state");
6279     } else if (F.isModule()) {
6280       // For an explicit module, preserve the flags from the module build
6281       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6282       // -Wblah flags.
6283       unsigned Flags = Record[Idx++];
6284       DiagState Initial;
6285       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6286       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6287       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6288       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6289       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6290       Initial.ExtBehavior = (diag::Severity)Flags;
6291       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6292 
6293       assert(F.OriginalSourceFileID.isValid());
6294 
6295       // Set up the root buffer of the module to start with the initial
6296       // diagnostic state of the module itself, to cover files that contain no
6297       // explicit transitions (for which we did not serialize anything).
6298       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6299           .StateTransitions.push_back({FirstState, 0});
6300     } else {
6301       // For prefix ASTs, start with whatever the user configured on the
6302       // command line.
6303       Idx++; // Skip flags.
6304       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6305                                  SourceLocation(), false);
6306     }
6307 
6308     // Read the state transitions.
6309     unsigned NumLocations = Record[Idx++];
6310     while (NumLocations--) {
6311       assert(Idx < Record.size() &&
6312              "Invalid data, missing pragma diagnostic states");
6313       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6314       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6315       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6316       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6317       unsigned Transitions = Record[Idx++];
6318 
6319       // Note that we don't need to set up Parent/ParentOffset here, because
6320       // we won't be changing the diagnostic state within imported FileIDs
6321       // (other than perhaps appending to the main source file, which has no
6322       // parent).
6323       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6324       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6325       for (unsigned I = 0; I != Transitions; ++I) {
6326         unsigned Offset = Record[Idx++];
6327         auto *State =
6328             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6329         F.StateTransitions.push_back({State, Offset});
6330       }
6331     }
6332 
6333     // Read the final state.
6334     assert(Idx < Record.size() &&
6335            "Invalid data, missing final pragma diagnostic state");
6336     SourceLocation CurStateLoc =
6337         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6338     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6339 
6340     if (!F.isModule()) {
6341       Diag.DiagStatesByLoc.CurDiagState = CurState;
6342       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6343 
6344       // Preserve the property that the imaginary root file describes the
6345       // current state.
6346       FileID NullFile;
6347       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6348       if (T.empty())
6349         T.push_back({CurState, 0});
6350       else
6351         T[0].State = CurState;
6352     }
6353 
6354     // Don't try to read these mappings again.
6355     Record.clear();
6356   }
6357 }
6358 
6359 /// Get the correct cursor and offset for loading a type.
6360 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6361   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6362   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6363   ModuleFile *M = I->second;
6364   return RecordLocation(
6365       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6366              M->DeclsBlockStartOffset);
6367 }
6368 
6369 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6370   switch (code) {
6371 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6372   case TYPE_##CODE_ID: return Type::CLASS_ID;
6373 #include "clang/Serialization/TypeBitCodes.def"
6374   default: return llvm::None;
6375   }
6376 }
6377 
6378 /// Read and return the type with the given index..
6379 ///
6380 /// The index is the type ID, shifted and minus the number of predefs. This
6381 /// routine actually reads the record corresponding to the type at the given
6382 /// location. It is a helper routine for GetType, which deals with reading type
6383 /// IDs.
6384 QualType ASTReader::readTypeRecord(unsigned Index) {
6385   assert(ContextObj && "reading type with no AST context");
6386   ASTContext &Context = *ContextObj;
6387   RecordLocation Loc = TypeCursorForIndex(Index);
6388   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6389 
6390   // Keep track of where we are in the stream, then jump back there
6391   // after reading this type.
6392   SavedStreamPosition SavedPosition(DeclsCursor);
6393 
6394   ReadingKindTracker ReadingKind(Read_Type, *this);
6395 
6396   // Note that we are loading a type record.
6397   Deserializing AType(this);
6398 
6399   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6400     Error(std::move(Err));
6401     return QualType();
6402   }
6403   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6404   if (!RawCode) {
6405     Error(RawCode.takeError());
6406     return QualType();
6407   }
6408 
6409   ASTRecordReader Record(*this, *Loc.F);
6410   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6411   if (!Code) {
6412     Error(Code.takeError());
6413     return QualType();
6414   }
6415   if (Code.get() == TYPE_EXT_QUAL) {
6416     QualType baseType = Record.readQualType();
6417     Qualifiers quals = Record.readQualifiers();
6418     return Context.getQualifiedType(baseType, quals);
6419   }
6420 
6421   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6422   if (!maybeClass) {
6423     Error("Unexpected code for type");
6424     return QualType();
6425   }
6426 
6427   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6428   return TypeReader.read(*maybeClass);
6429 }
6430 
6431 namespace clang {
6432 
6433 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6434   ASTRecordReader &Reader;
6435 
6436   SourceLocation readSourceLocation() {
6437     return Reader.readSourceLocation();
6438   }
6439 
6440   TypeSourceInfo *GetTypeSourceInfo() {
6441     return Reader.readTypeSourceInfo();
6442   }
6443 
6444   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6445     return Reader.readNestedNameSpecifierLoc();
6446   }
6447 
6448   Attr *ReadAttr() {
6449     return Reader.readAttr();
6450   }
6451 
6452 public:
6453   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6454 
6455   // We want compile-time assurance that we've enumerated all of
6456   // these, so unfortunately we have to declare them first, then
6457   // define them out-of-line.
6458 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6459 #define TYPELOC(CLASS, PARENT) \
6460   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6461 #include "clang/AST/TypeLocNodes.def"
6462 
6463   void VisitFunctionTypeLoc(FunctionTypeLoc);
6464   void VisitArrayTypeLoc(ArrayTypeLoc);
6465 };
6466 
6467 } // namespace clang
6468 
6469 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6470   // nothing to do
6471 }
6472 
6473 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6474   TL.setBuiltinLoc(readSourceLocation());
6475   if (TL.needsExtraLocalData()) {
6476     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6477     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6478     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6479     TL.setModeAttr(Reader.readInt());
6480   }
6481 }
6482 
6483 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6484   TL.setNameLoc(readSourceLocation());
6485 }
6486 
6487 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6488   TL.setStarLoc(readSourceLocation());
6489 }
6490 
6491 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6492   // nothing to do
6493 }
6494 
6495 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6496   // nothing to do
6497 }
6498 
6499 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6500   TL.setExpansionLoc(readSourceLocation());
6501 }
6502 
6503 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6504   TL.setCaretLoc(readSourceLocation());
6505 }
6506 
6507 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6508   TL.setAmpLoc(readSourceLocation());
6509 }
6510 
6511 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6512   TL.setAmpAmpLoc(readSourceLocation());
6513 }
6514 
6515 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6516   TL.setStarLoc(readSourceLocation());
6517   TL.setClassTInfo(GetTypeSourceInfo());
6518 }
6519 
6520 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6521   TL.setLBracketLoc(readSourceLocation());
6522   TL.setRBracketLoc(readSourceLocation());
6523   if (Reader.readBool())
6524     TL.setSizeExpr(Reader.readExpr());
6525   else
6526     TL.setSizeExpr(nullptr);
6527 }
6528 
6529 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6530   VisitArrayTypeLoc(TL);
6531 }
6532 
6533 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6534   VisitArrayTypeLoc(TL);
6535 }
6536 
6537 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6538   VisitArrayTypeLoc(TL);
6539 }
6540 
6541 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6542                                             DependentSizedArrayTypeLoc TL) {
6543   VisitArrayTypeLoc(TL);
6544 }
6545 
6546 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6547     DependentAddressSpaceTypeLoc TL) {
6548 
6549     TL.setAttrNameLoc(readSourceLocation());
6550     TL.setAttrOperandParensRange(Reader.readSourceRange());
6551     TL.setAttrExprOperand(Reader.readExpr());
6552 }
6553 
6554 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6555                                         DependentSizedExtVectorTypeLoc TL) {
6556   TL.setNameLoc(readSourceLocation());
6557 }
6558 
6559 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6560   TL.setNameLoc(readSourceLocation());
6561 }
6562 
6563 void TypeLocReader::VisitDependentVectorTypeLoc(
6564     DependentVectorTypeLoc TL) {
6565   TL.setNameLoc(readSourceLocation());
6566 }
6567 
6568 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6569   TL.setNameLoc(readSourceLocation());
6570 }
6571 
6572 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6573   TL.setAttrNameLoc(readSourceLocation());
6574   TL.setAttrOperandParensRange(Reader.readSourceRange());
6575   TL.setAttrRowOperand(Reader.readExpr());
6576   TL.setAttrColumnOperand(Reader.readExpr());
6577 }
6578 
6579 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6580     DependentSizedMatrixTypeLoc TL) {
6581   TL.setAttrNameLoc(readSourceLocation());
6582   TL.setAttrOperandParensRange(Reader.readSourceRange());
6583   TL.setAttrRowOperand(Reader.readExpr());
6584   TL.setAttrColumnOperand(Reader.readExpr());
6585 }
6586 
6587 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6588   TL.setLocalRangeBegin(readSourceLocation());
6589   TL.setLParenLoc(readSourceLocation());
6590   TL.setRParenLoc(readSourceLocation());
6591   TL.setExceptionSpecRange(Reader.readSourceRange());
6592   TL.setLocalRangeEnd(readSourceLocation());
6593   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6594     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6595   }
6596 }
6597 
6598 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6599   VisitFunctionTypeLoc(TL);
6600 }
6601 
6602 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6603   VisitFunctionTypeLoc(TL);
6604 }
6605 
6606 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6607   TL.setNameLoc(readSourceLocation());
6608 }
6609 
6610 void TypeLocReader::VisitUsingTypeLoc(UsingTypeLoc TL) {
6611   TL.setNameLoc(readSourceLocation());
6612 }
6613 
6614 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6615   TL.setNameLoc(readSourceLocation());
6616 }
6617 
6618 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6619   TL.setTypeofLoc(readSourceLocation());
6620   TL.setLParenLoc(readSourceLocation());
6621   TL.setRParenLoc(readSourceLocation());
6622 }
6623 
6624 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6625   TL.setTypeofLoc(readSourceLocation());
6626   TL.setLParenLoc(readSourceLocation());
6627   TL.setRParenLoc(readSourceLocation());
6628   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6629 }
6630 
6631 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6632   TL.setNameLoc(readSourceLocation());
6633 }
6634 
6635 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6636   TL.setKWLoc(readSourceLocation());
6637   TL.setLParenLoc(readSourceLocation());
6638   TL.setRParenLoc(readSourceLocation());
6639   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6640 }
6641 
6642 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6643   TL.setNameLoc(readSourceLocation());
6644   if (Reader.readBool()) {
6645     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6646     TL.setTemplateKWLoc(readSourceLocation());
6647     TL.setConceptNameLoc(readSourceLocation());
6648     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6649     TL.setLAngleLoc(readSourceLocation());
6650     TL.setRAngleLoc(readSourceLocation());
6651     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6652       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6653                               TL.getTypePtr()->getArg(i).getKind()));
6654   }
6655 }
6656 
6657 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6658     DeducedTemplateSpecializationTypeLoc TL) {
6659   TL.setTemplateNameLoc(readSourceLocation());
6660 }
6661 
6662 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6663   TL.setNameLoc(readSourceLocation());
6664 }
6665 
6666 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6667   TL.setNameLoc(readSourceLocation());
6668 }
6669 
6670 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6671   TL.setAttr(ReadAttr());
6672 }
6673 
6674 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6675   TL.setNameLoc(readSourceLocation());
6676 }
6677 
6678 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6679                                             SubstTemplateTypeParmTypeLoc TL) {
6680   TL.setNameLoc(readSourceLocation());
6681 }
6682 
6683 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6684                                           SubstTemplateTypeParmPackTypeLoc TL) {
6685   TL.setNameLoc(readSourceLocation());
6686 }
6687 
6688 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6689                                            TemplateSpecializationTypeLoc TL) {
6690   TL.setTemplateKeywordLoc(readSourceLocation());
6691   TL.setTemplateNameLoc(readSourceLocation());
6692   TL.setLAngleLoc(readSourceLocation());
6693   TL.setRAngleLoc(readSourceLocation());
6694   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6695     TL.setArgLocInfo(
6696         i,
6697         Reader.readTemplateArgumentLocInfo(
6698           TL.getTypePtr()->getArg(i).getKind()));
6699 }
6700 
6701 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6702   TL.setLParenLoc(readSourceLocation());
6703   TL.setRParenLoc(readSourceLocation());
6704 }
6705 
6706 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6707   TL.setElaboratedKeywordLoc(readSourceLocation());
6708   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6709 }
6710 
6711 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6712   TL.setNameLoc(readSourceLocation());
6713 }
6714 
6715 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6716   TL.setElaboratedKeywordLoc(readSourceLocation());
6717   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6718   TL.setNameLoc(readSourceLocation());
6719 }
6720 
6721 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6722        DependentTemplateSpecializationTypeLoc TL) {
6723   TL.setElaboratedKeywordLoc(readSourceLocation());
6724   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6725   TL.setTemplateKeywordLoc(readSourceLocation());
6726   TL.setTemplateNameLoc(readSourceLocation());
6727   TL.setLAngleLoc(readSourceLocation());
6728   TL.setRAngleLoc(readSourceLocation());
6729   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6730     TL.setArgLocInfo(
6731         I,
6732         Reader.readTemplateArgumentLocInfo(
6733             TL.getTypePtr()->getArg(I).getKind()));
6734 }
6735 
6736 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6737   TL.setEllipsisLoc(readSourceLocation());
6738 }
6739 
6740 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6741   TL.setNameLoc(readSourceLocation());
6742 }
6743 
6744 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6745   if (TL.getNumProtocols()) {
6746     TL.setProtocolLAngleLoc(readSourceLocation());
6747     TL.setProtocolRAngleLoc(readSourceLocation());
6748   }
6749   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6750     TL.setProtocolLoc(i, readSourceLocation());
6751 }
6752 
6753 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6754   TL.setHasBaseTypeAsWritten(Reader.readBool());
6755   TL.setTypeArgsLAngleLoc(readSourceLocation());
6756   TL.setTypeArgsRAngleLoc(readSourceLocation());
6757   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6758     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6759   TL.setProtocolLAngleLoc(readSourceLocation());
6760   TL.setProtocolRAngleLoc(readSourceLocation());
6761   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6762     TL.setProtocolLoc(i, readSourceLocation());
6763 }
6764 
6765 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6766   TL.setStarLoc(readSourceLocation());
6767 }
6768 
6769 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6770   TL.setKWLoc(readSourceLocation());
6771   TL.setLParenLoc(readSourceLocation());
6772   TL.setRParenLoc(readSourceLocation());
6773 }
6774 
6775 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6776   TL.setKWLoc(readSourceLocation());
6777 }
6778 
6779 void TypeLocReader::VisitBitIntTypeLoc(clang::BitIntTypeLoc TL) {
6780   TL.setNameLoc(readSourceLocation());
6781 }
6782 void TypeLocReader::VisitDependentBitIntTypeLoc(
6783     clang::DependentBitIntTypeLoc TL) {
6784   TL.setNameLoc(readSourceLocation());
6785 }
6786 
6787 
6788 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6789   TypeLocReader TLR(*this);
6790   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6791     TLR.Visit(TL);
6792 }
6793 
6794 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6795   QualType InfoTy = readType();
6796   if (InfoTy.isNull())
6797     return nullptr;
6798 
6799   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6800   readTypeLoc(TInfo->getTypeLoc());
6801   return TInfo;
6802 }
6803 
6804 QualType ASTReader::GetType(TypeID ID) {
6805   assert(ContextObj && "reading type with no AST context");
6806   ASTContext &Context = *ContextObj;
6807 
6808   unsigned FastQuals = ID & Qualifiers::FastMask;
6809   unsigned Index = ID >> Qualifiers::FastWidth;
6810 
6811   if (Index < NUM_PREDEF_TYPE_IDS) {
6812     QualType T;
6813     switch ((PredefinedTypeIDs)Index) {
6814     case PREDEF_TYPE_NULL_ID:
6815       return QualType();
6816     case PREDEF_TYPE_VOID_ID:
6817       T = Context.VoidTy;
6818       break;
6819     case PREDEF_TYPE_BOOL_ID:
6820       T = Context.BoolTy;
6821       break;
6822     case PREDEF_TYPE_CHAR_U_ID:
6823     case PREDEF_TYPE_CHAR_S_ID:
6824       // FIXME: Check that the signedness of CharTy is correct!
6825       T = Context.CharTy;
6826       break;
6827     case PREDEF_TYPE_UCHAR_ID:
6828       T = Context.UnsignedCharTy;
6829       break;
6830     case PREDEF_TYPE_USHORT_ID:
6831       T = Context.UnsignedShortTy;
6832       break;
6833     case PREDEF_TYPE_UINT_ID:
6834       T = Context.UnsignedIntTy;
6835       break;
6836     case PREDEF_TYPE_ULONG_ID:
6837       T = Context.UnsignedLongTy;
6838       break;
6839     case PREDEF_TYPE_ULONGLONG_ID:
6840       T = Context.UnsignedLongLongTy;
6841       break;
6842     case PREDEF_TYPE_UINT128_ID:
6843       T = Context.UnsignedInt128Ty;
6844       break;
6845     case PREDEF_TYPE_SCHAR_ID:
6846       T = Context.SignedCharTy;
6847       break;
6848     case PREDEF_TYPE_WCHAR_ID:
6849       T = Context.WCharTy;
6850       break;
6851     case PREDEF_TYPE_SHORT_ID:
6852       T = Context.ShortTy;
6853       break;
6854     case PREDEF_TYPE_INT_ID:
6855       T = Context.IntTy;
6856       break;
6857     case PREDEF_TYPE_LONG_ID:
6858       T = Context.LongTy;
6859       break;
6860     case PREDEF_TYPE_LONGLONG_ID:
6861       T = Context.LongLongTy;
6862       break;
6863     case PREDEF_TYPE_INT128_ID:
6864       T = Context.Int128Ty;
6865       break;
6866     case PREDEF_TYPE_BFLOAT16_ID:
6867       T = Context.BFloat16Ty;
6868       break;
6869     case PREDEF_TYPE_HALF_ID:
6870       T = Context.HalfTy;
6871       break;
6872     case PREDEF_TYPE_FLOAT_ID:
6873       T = Context.FloatTy;
6874       break;
6875     case PREDEF_TYPE_DOUBLE_ID:
6876       T = Context.DoubleTy;
6877       break;
6878     case PREDEF_TYPE_LONGDOUBLE_ID:
6879       T = Context.LongDoubleTy;
6880       break;
6881     case PREDEF_TYPE_SHORT_ACCUM_ID:
6882       T = Context.ShortAccumTy;
6883       break;
6884     case PREDEF_TYPE_ACCUM_ID:
6885       T = Context.AccumTy;
6886       break;
6887     case PREDEF_TYPE_LONG_ACCUM_ID:
6888       T = Context.LongAccumTy;
6889       break;
6890     case PREDEF_TYPE_USHORT_ACCUM_ID:
6891       T = Context.UnsignedShortAccumTy;
6892       break;
6893     case PREDEF_TYPE_UACCUM_ID:
6894       T = Context.UnsignedAccumTy;
6895       break;
6896     case PREDEF_TYPE_ULONG_ACCUM_ID:
6897       T = Context.UnsignedLongAccumTy;
6898       break;
6899     case PREDEF_TYPE_SHORT_FRACT_ID:
6900       T = Context.ShortFractTy;
6901       break;
6902     case PREDEF_TYPE_FRACT_ID:
6903       T = Context.FractTy;
6904       break;
6905     case PREDEF_TYPE_LONG_FRACT_ID:
6906       T = Context.LongFractTy;
6907       break;
6908     case PREDEF_TYPE_USHORT_FRACT_ID:
6909       T = Context.UnsignedShortFractTy;
6910       break;
6911     case PREDEF_TYPE_UFRACT_ID:
6912       T = Context.UnsignedFractTy;
6913       break;
6914     case PREDEF_TYPE_ULONG_FRACT_ID:
6915       T = Context.UnsignedLongFractTy;
6916       break;
6917     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6918       T = Context.SatShortAccumTy;
6919       break;
6920     case PREDEF_TYPE_SAT_ACCUM_ID:
6921       T = Context.SatAccumTy;
6922       break;
6923     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6924       T = Context.SatLongAccumTy;
6925       break;
6926     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6927       T = Context.SatUnsignedShortAccumTy;
6928       break;
6929     case PREDEF_TYPE_SAT_UACCUM_ID:
6930       T = Context.SatUnsignedAccumTy;
6931       break;
6932     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6933       T = Context.SatUnsignedLongAccumTy;
6934       break;
6935     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6936       T = Context.SatShortFractTy;
6937       break;
6938     case PREDEF_TYPE_SAT_FRACT_ID:
6939       T = Context.SatFractTy;
6940       break;
6941     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6942       T = Context.SatLongFractTy;
6943       break;
6944     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6945       T = Context.SatUnsignedShortFractTy;
6946       break;
6947     case PREDEF_TYPE_SAT_UFRACT_ID:
6948       T = Context.SatUnsignedFractTy;
6949       break;
6950     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6951       T = Context.SatUnsignedLongFractTy;
6952       break;
6953     case PREDEF_TYPE_FLOAT16_ID:
6954       T = Context.Float16Ty;
6955       break;
6956     case PREDEF_TYPE_FLOAT128_ID:
6957       T = Context.Float128Ty;
6958       break;
6959     case PREDEF_TYPE_IBM128_ID:
6960       T = Context.Ibm128Ty;
6961       break;
6962     case PREDEF_TYPE_OVERLOAD_ID:
6963       T = Context.OverloadTy;
6964       break;
6965     case PREDEF_TYPE_BOUND_MEMBER:
6966       T = Context.BoundMemberTy;
6967       break;
6968     case PREDEF_TYPE_PSEUDO_OBJECT:
6969       T = Context.PseudoObjectTy;
6970       break;
6971     case PREDEF_TYPE_DEPENDENT_ID:
6972       T = Context.DependentTy;
6973       break;
6974     case PREDEF_TYPE_UNKNOWN_ANY:
6975       T = Context.UnknownAnyTy;
6976       break;
6977     case PREDEF_TYPE_NULLPTR_ID:
6978       T = Context.NullPtrTy;
6979       break;
6980     case PREDEF_TYPE_CHAR8_ID:
6981       T = Context.Char8Ty;
6982       break;
6983     case PREDEF_TYPE_CHAR16_ID:
6984       T = Context.Char16Ty;
6985       break;
6986     case PREDEF_TYPE_CHAR32_ID:
6987       T = Context.Char32Ty;
6988       break;
6989     case PREDEF_TYPE_OBJC_ID:
6990       T = Context.ObjCBuiltinIdTy;
6991       break;
6992     case PREDEF_TYPE_OBJC_CLASS:
6993       T = Context.ObjCBuiltinClassTy;
6994       break;
6995     case PREDEF_TYPE_OBJC_SEL:
6996       T = Context.ObjCBuiltinSelTy;
6997       break;
6998 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6999     case PREDEF_TYPE_##Id##_ID: \
7000       T = Context.SingletonId; \
7001       break;
7002 #include "clang/Basic/OpenCLImageTypes.def"
7003 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7004     case PREDEF_TYPE_##Id##_ID: \
7005       T = Context.Id##Ty; \
7006       break;
7007 #include "clang/Basic/OpenCLExtensionTypes.def"
7008     case PREDEF_TYPE_SAMPLER_ID:
7009       T = Context.OCLSamplerTy;
7010       break;
7011     case PREDEF_TYPE_EVENT_ID:
7012       T = Context.OCLEventTy;
7013       break;
7014     case PREDEF_TYPE_CLK_EVENT_ID:
7015       T = Context.OCLClkEventTy;
7016       break;
7017     case PREDEF_TYPE_QUEUE_ID:
7018       T = Context.OCLQueueTy;
7019       break;
7020     case PREDEF_TYPE_RESERVE_ID_ID:
7021       T = Context.OCLReserveIDTy;
7022       break;
7023     case PREDEF_TYPE_AUTO_DEDUCT:
7024       T = Context.getAutoDeductType();
7025       break;
7026     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7027       T = Context.getAutoRRefDeductType();
7028       break;
7029     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7030       T = Context.ARCUnbridgedCastTy;
7031       break;
7032     case PREDEF_TYPE_BUILTIN_FN:
7033       T = Context.BuiltinFnTy;
7034       break;
7035     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7036       T = Context.IncompleteMatrixIdxTy;
7037       break;
7038     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7039       T = Context.OMPArraySectionTy;
7040       break;
7041     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7042       T = Context.OMPArraySectionTy;
7043       break;
7044     case PREDEF_TYPE_OMP_ITERATOR:
7045       T = Context.OMPIteratorTy;
7046       break;
7047 #define SVE_TYPE(Name, Id, SingletonId) \
7048     case PREDEF_TYPE_##Id##_ID: \
7049       T = Context.SingletonId; \
7050       break;
7051 #include "clang/Basic/AArch64SVEACLETypes.def"
7052 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7053     case PREDEF_TYPE_##Id##_ID: \
7054       T = Context.Id##Ty; \
7055       break;
7056 #include "clang/Basic/PPCTypes.def"
7057 #define RVV_TYPE(Name, Id, SingletonId) \
7058     case PREDEF_TYPE_##Id##_ID: \
7059       T = Context.SingletonId; \
7060       break;
7061 #include "clang/Basic/RISCVVTypes.def"
7062     }
7063 
7064     assert(!T.isNull() && "Unknown predefined type");
7065     return T.withFastQualifiers(FastQuals);
7066   }
7067 
7068   Index -= NUM_PREDEF_TYPE_IDS;
7069   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7070   if (TypesLoaded[Index].isNull()) {
7071     TypesLoaded[Index] = readTypeRecord(Index);
7072     if (TypesLoaded[Index].isNull())
7073       return QualType();
7074 
7075     TypesLoaded[Index]->setFromAST();
7076     if (DeserializationListener)
7077       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7078                                         TypesLoaded[Index]);
7079   }
7080 
7081   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7082 }
7083 
7084 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7085   return GetType(getGlobalTypeID(F, LocalID));
7086 }
7087 
7088 serialization::TypeID
7089 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7090   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7091   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7092 
7093   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7094     return LocalID;
7095 
7096   if (!F.ModuleOffsetMap.empty())
7097     ReadModuleOffsetMap(F);
7098 
7099   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7100     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7101   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7102 
7103   unsigned GlobalIndex = LocalIndex + I->second;
7104   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7105 }
7106 
7107 TemplateArgumentLocInfo
7108 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7109   switch (Kind) {
7110   case TemplateArgument::Expression:
7111     return readExpr();
7112   case TemplateArgument::Type:
7113     return readTypeSourceInfo();
7114   case TemplateArgument::Template: {
7115     NestedNameSpecifierLoc QualifierLoc =
7116       readNestedNameSpecifierLoc();
7117     SourceLocation TemplateNameLoc = readSourceLocation();
7118     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7119                                    TemplateNameLoc, SourceLocation());
7120   }
7121   case TemplateArgument::TemplateExpansion: {
7122     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7123     SourceLocation TemplateNameLoc = readSourceLocation();
7124     SourceLocation EllipsisLoc = readSourceLocation();
7125     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7126                                    TemplateNameLoc, EllipsisLoc);
7127   }
7128   case TemplateArgument::Null:
7129   case TemplateArgument::Integral:
7130   case TemplateArgument::Declaration:
7131   case TemplateArgument::NullPtr:
7132   case TemplateArgument::Pack:
7133     // FIXME: Is this right?
7134     return TemplateArgumentLocInfo();
7135   }
7136   llvm_unreachable("unexpected template argument loc");
7137 }
7138 
7139 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7140   TemplateArgument Arg = readTemplateArgument();
7141 
7142   if (Arg.getKind() == TemplateArgument::Expression) {
7143     if (readBool()) // bool InfoHasSameExpr.
7144       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7145   }
7146   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7147 }
7148 
7149 const ASTTemplateArgumentListInfo *
7150 ASTRecordReader::readASTTemplateArgumentListInfo() {
7151   SourceLocation LAngleLoc = readSourceLocation();
7152   SourceLocation RAngleLoc = readSourceLocation();
7153   unsigned NumArgsAsWritten = readInt();
7154   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7155   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7156     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7157   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7158 }
7159 
7160 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7161   return GetDecl(ID);
7162 }
7163 
7164 void ASTReader::CompleteRedeclChain(const Decl *D) {
7165   if (NumCurrentElementsDeserializing) {
7166     // We arrange to not care about the complete redeclaration chain while we're
7167     // deserializing. Just remember that the AST has marked this one as complete
7168     // but that it's not actually complete yet, so we know we still need to
7169     // complete it later.
7170     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7171     return;
7172   }
7173 
7174   if (!D->getDeclContext()) {
7175     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7176     return;
7177   }
7178 
7179   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7180 
7181   // If this is a named declaration, complete it by looking it up
7182   // within its context.
7183   //
7184   // FIXME: Merging a function definition should merge
7185   // all mergeable entities within it.
7186   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7187       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7188     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7189       if (!getContext().getLangOpts().CPlusPlus &&
7190           isa<TranslationUnitDecl>(DC)) {
7191         // Outside of C++, we don't have a lookup table for the TU, so update
7192         // the identifier instead. (For C++ modules, we don't store decls
7193         // in the serialized identifier table, so we do the lookup in the TU.)
7194         auto *II = Name.getAsIdentifierInfo();
7195         assert(II && "non-identifier name in C?");
7196         if (II->isOutOfDate())
7197           updateOutOfDateIdentifier(*II);
7198       } else
7199         DC->lookup(Name);
7200     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7201       // Find all declarations of this kind from the relevant context.
7202       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7203         auto *DC = cast<DeclContext>(DCDecl);
7204         SmallVector<Decl*, 8> Decls;
7205         FindExternalLexicalDecls(
7206             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7207       }
7208     }
7209   }
7210 
7211   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7212     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7213   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7214     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7215   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7216     if (auto *Template = FD->getPrimaryTemplate())
7217       Template->LoadLazySpecializations();
7218   }
7219 }
7220 
7221 CXXCtorInitializer **
7222 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7223   RecordLocation Loc = getLocalBitOffset(Offset);
7224   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7225   SavedStreamPosition SavedPosition(Cursor);
7226   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7227     Error(std::move(Err));
7228     return nullptr;
7229   }
7230   ReadingKindTracker ReadingKind(Read_Decl, *this);
7231 
7232   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7233   if (!MaybeCode) {
7234     Error(MaybeCode.takeError());
7235     return nullptr;
7236   }
7237   unsigned Code = MaybeCode.get();
7238 
7239   ASTRecordReader Record(*this, *Loc.F);
7240   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7241   if (!MaybeRecCode) {
7242     Error(MaybeRecCode.takeError());
7243     return nullptr;
7244   }
7245   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7246     Error("malformed AST file: missing C++ ctor initializers");
7247     return nullptr;
7248   }
7249 
7250   return Record.readCXXCtorInitializers();
7251 }
7252 
7253 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7254   assert(ContextObj && "reading base specifiers with no AST context");
7255   ASTContext &Context = *ContextObj;
7256 
7257   RecordLocation Loc = getLocalBitOffset(Offset);
7258   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7259   SavedStreamPosition SavedPosition(Cursor);
7260   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7261     Error(std::move(Err));
7262     return nullptr;
7263   }
7264   ReadingKindTracker ReadingKind(Read_Decl, *this);
7265 
7266   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7267   if (!MaybeCode) {
7268     Error(MaybeCode.takeError());
7269     return nullptr;
7270   }
7271   unsigned Code = MaybeCode.get();
7272 
7273   ASTRecordReader Record(*this, *Loc.F);
7274   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7275   if (!MaybeRecCode) {
7276     Error(MaybeCode.takeError());
7277     return nullptr;
7278   }
7279   unsigned RecCode = MaybeRecCode.get();
7280 
7281   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7282     Error("malformed AST file: missing C++ base specifiers");
7283     return nullptr;
7284   }
7285 
7286   unsigned NumBases = Record.readInt();
7287   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7288   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7289   for (unsigned I = 0; I != NumBases; ++I)
7290     Bases[I] = Record.readCXXBaseSpecifier();
7291   return Bases;
7292 }
7293 
7294 serialization::DeclID
7295 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7296   if (LocalID < NUM_PREDEF_DECL_IDS)
7297     return LocalID;
7298 
7299   if (!F.ModuleOffsetMap.empty())
7300     ReadModuleOffsetMap(F);
7301 
7302   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7303     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7304   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7305 
7306   return LocalID + I->second;
7307 }
7308 
7309 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7310                                    ModuleFile &M) const {
7311   // Predefined decls aren't from any module.
7312   if (ID < NUM_PREDEF_DECL_IDS)
7313     return false;
7314 
7315   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7316          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7317 }
7318 
7319 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7320   if (!D->isFromASTFile())
7321     return nullptr;
7322   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7323   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7324   return I->second;
7325 }
7326 
7327 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7328   if (ID < NUM_PREDEF_DECL_IDS)
7329     return SourceLocation();
7330 
7331   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7332 
7333   if (Index > DeclsLoaded.size()) {
7334     Error("declaration ID out-of-range for AST file");
7335     return SourceLocation();
7336   }
7337 
7338   if (Decl *D = DeclsLoaded[Index])
7339     return D->getLocation();
7340 
7341   SourceLocation Loc;
7342   DeclCursorForID(ID, Loc);
7343   return Loc;
7344 }
7345 
7346 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7347   switch (ID) {
7348   case PREDEF_DECL_NULL_ID:
7349     return nullptr;
7350 
7351   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7352     return Context.getTranslationUnitDecl();
7353 
7354   case PREDEF_DECL_OBJC_ID_ID:
7355     return Context.getObjCIdDecl();
7356 
7357   case PREDEF_DECL_OBJC_SEL_ID:
7358     return Context.getObjCSelDecl();
7359 
7360   case PREDEF_DECL_OBJC_CLASS_ID:
7361     return Context.getObjCClassDecl();
7362 
7363   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7364     return Context.getObjCProtocolDecl();
7365 
7366   case PREDEF_DECL_INT_128_ID:
7367     return Context.getInt128Decl();
7368 
7369   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7370     return Context.getUInt128Decl();
7371 
7372   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7373     return Context.getObjCInstanceTypeDecl();
7374 
7375   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7376     return Context.getBuiltinVaListDecl();
7377 
7378   case PREDEF_DECL_VA_LIST_TAG:
7379     return Context.getVaListTagDecl();
7380 
7381   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7382     return Context.getBuiltinMSVaListDecl();
7383 
7384   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7385     return Context.getMSGuidTagDecl();
7386 
7387   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7388     return Context.getExternCContextDecl();
7389 
7390   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7391     return Context.getMakeIntegerSeqDecl();
7392 
7393   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7394     return Context.getCFConstantStringDecl();
7395 
7396   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7397     return Context.getCFConstantStringTagDecl();
7398 
7399   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7400     return Context.getTypePackElementDecl();
7401   }
7402   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7403 }
7404 
7405 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7406   assert(ContextObj && "reading decl with no AST context");
7407   if (ID < NUM_PREDEF_DECL_IDS) {
7408     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7409     if (D) {
7410       // Track that we have merged the declaration with ID \p ID into the
7411       // pre-existing predefined declaration \p D.
7412       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7413       if (Merged.empty())
7414         Merged.push_back(ID);
7415     }
7416     return D;
7417   }
7418 
7419   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7420 
7421   if (Index >= DeclsLoaded.size()) {
7422     assert(0 && "declaration ID out-of-range for AST file");
7423     Error("declaration ID out-of-range for AST file");
7424     return nullptr;
7425   }
7426 
7427   return DeclsLoaded[Index];
7428 }
7429 
7430 Decl *ASTReader::GetDecl(DeclID ID) {
7431   if (ID < NUM_PREDEF_DECL_IDS)
7432     return GetExistingDecl(ID);
7433 
7434   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7435 
7436   if (Index >= DeclsLoaded.size()) {
7437     assert(0 && "declaration ID out-of-range for AST file");
7438     Error("declaration ID out-of-range for AST file");
7439     return nullptr;
7440   }
7441 
7442   if (!DeclsLoaded[Index]) {
7443     ReadDeclRecord(ID);
7444     if (DeserializationListener)
7445       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7446   }
7447 
7448   return DeclsLoaded[Index];
7449 }
7450 
7451 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7452                                                   DeclID GlobalID) {
7453   if (GlobalID < NUM_PREDEF_DECL_IDS)
7454     return GlobalID;
7455 
7456   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7457   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7458   ModuleFile *Owner = I->second;
7459 
7460   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7461     = M.GlobalToLocalDeclIDs.find(Owner);
7462   if (Pos == M.GlobalToLocalDeclIDs.end())
7463     return 0;
7464 
7465   return GlobalID - Owner->BaseDeclID + Pos->second;
7466 }
7467 
7468 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7469                                             const RecordData &Record,
7470                                             unsigned &Idx) {
7471   if (Idx >= Record.size()) {
7472     Error("Corrupted AST file");
7473     return 0;
7474   }
7475 
7476   return getGlobalDeclID(F, Record[Idx++]);
7477 }
7478 
7479 /// Resolve the offset of a statement into a statement.
7480 ///
7481 /// This operation will read a new statement from the external
7482 /// source each time it is called, and is meant to be used via a
7483 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7484 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7485   // Switch case IDs are per Decl.
7486   ClearSwitchCaseIDs();
7487 
7488   // Offset here is a global offset across the entire chain.
7489   RecordLocation Loc = getLocalBitOffset(Offset);
7490   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7491     Error(std::move(Err));
7492     return nullptr;
7493   }
7494   assert(NumCurrentElementsDeserializing == 0 &&
7495          "should not be called while already deserializing");
7496   Deserializing D(this);
7497   return ReadStmtFromStream(*Loc.F);
7498 }
7499 
7500 void ASTReader::FindExternalLexicalDecls(
7501     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7502     SmallVectorImpl<Decl *> &Decls) {
7503   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7504 
7505   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7506     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7507     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7508       auto K = (Decl::Kind)+LexicalDecls[I];
7509       if (!IsKindWeWant(K))
7510         continue;
7511 
7512       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7513 
7514       // Don't add predefined declarations to the lexical context more
7515       // than once.
7516       if (ID < NUM_PREDEF_DECL_IDS) {
7517         if (PredefsVisited[ID])
7518           continue;
7519 
7520         PredefsVisited[ID] = true;
7521       }
7522 
7523       if (Decl *D = GetLocalDecl(*M, ID)) {
7524         assert(D->getKind() == K && "wrong kind for lexical decl");
7525         if (!DC->isDeclInLexicalTraversal(D))
7526           Decls.push_back(D);
7527       }
7528     }
7529   };
7530 
7531   if (isa<TranslationUnitDecl>(DC)) {
7532     for (auto Lexical : TULexicalDecls)
7533       Visit(Lexical.first, Lexical.second);
7534   } else {
7535     auto I = LexicalDecls.find(DC);
7536     if (I != LexicalDecls.end())
7537       Visit(I->second.first, I->second.second);
7538   }
7539 
7540   ++NumLexicalDeclContextsRead;
7541 }
7542 
7543 namespace {
7544 
7545 class DeclIDComp {
7546   ASTReader &Reader;
7547   ModuleFile &Mod;
7548 
7549 public:
7550   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7551 
7552   bool operator()(LocalDeclID L, LocalDeclID R) const {
7553     SourceLocation LHS = getLocation(L);
7554     SourceLocation RHS = getLocation(R);
7555     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7556   }
7557 
7558   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7559     SourceLocation RHS = getLocation(R);
7560     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7561   }
7562 
7563   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7564     SourceLocation LHS = getLocation(L);
7565     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7566   }
7567 
7568   SourceLocation getLocation(LocalDeclID ID) const {
7569     return Reader.getSourceManager().getFileLoc(
7570             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7571   }
7572 };
7573 
7574 } // namespace
7575 
7576 void ASTReader::FindFileRegionDecls(FileID File,
7577                                     unsigned Offset, unsigned Length,
7578                                     SmallVectorImpl<Decl *> &Decls) {
7579   SourceManager &SM = getSourceManager();
7580 
7581   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7582   if (I == FileDeclIDs.end())
7583     return;
7584 
7585   FileDeclsInfo &DInfo = I->second;
7586   if (DInfo.Decls.empty())
7587     return;
7588 
7589   SourceLocation
7590     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7591   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7592 
7593   DeclIDComp DIDComp(*this, *DInfo.Mod);
7594   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7595       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7596   if (BeginIt != DInfo.Decls.begin())
7597     --BeginIt;
7598 
7599   // If we are pointing at a top-level decl inside an objc container, we need
7600   // to backtrack until we find it otherwise we will fail to report that the
7601   // region overlaps with an objc container.
7602   while (BeginIt != DInfo.Decls.begin() &&
7603          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7604              ->isTopLevelDeclInObjCContainer())
7605     --BeginIt;
7606 
7607   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7608       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7609   if (EndIt != DInfo.Decls.end())
7610     ++EndIt;
7611 
7612   for (ArrayRef<serialization::LocalDeclID>::iterator
7613          DIt = BeginIt; DIt != EndIt; ++DIt)
7614     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7615 }
7616 
7617 bool
7618 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7619                                           DeclarationName Name) {
7620   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7621          "DeclContext has no visible decls in storage");
7622   if (!Name)
7623     return false;
7624 
7625   auto It = Lookups.find(DC);
7626   if (It == Lookups.end())
7627     return false;
7628 
7629   Deserializing LookupResults(this);
7630 
7631   // Load the list of declarations.
7632   SmallVector<NamedDecl *, 64> Decls;
7633   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7634   for (DeclID ID : It->second.Table.find(Name)) {
7635     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7636     if (ND->getDeclName() == Name && Found.insert(ND).second)
7637       Decls.push_back(ND);
7638   }
7639 
7640   ++NumVisibleDeclContextsRead;
7641   SetExternalVisibleDeclsForName(DC, Name, Decls);
7642   return !Decls.empty();
7643 }
7644 
7645 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7646   if (!DC->hasExternalVisibleStorage())
7647     return;
7648 
7649   auto It = Lookups.find(DC);
7650   assert(It != Lookups.end() &&
7651          "have external visible storage but no lookup tables");
7652 
7653   DeclsMap Decls;
7654 
7655   for (DeclID ID : It->second.Table.findAll()) {
7656     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7657     Decls[ND->getDeclName()].push_back(ND);
7658   }
7659 
7660   ++NumVisibleDeclContextsRead;
7661 
7662   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7663     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7664   }
7665   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7666 }
7667 
7668 const serialization::reader::DeclContextLookupTable *
7669 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7670   auto I = Lookups.find(Primary);
7671   return I == Lookups.end() ? nullptr : &I->second;
7672 }
7673 
7674 /// Under non-PCH compilation the consumer receives the objc methods
7675 /// before receiving the implementation, and codegen depends on this.
7676 /// We simulate this by deserializing and passing to consumer the methods of the
7677 /// implementation before passing the deserialized implementation decl.
7678 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7679                                        ASTConsumer *Consumer) {
7680   assert(ImplD && Consumer);
7681 
7682   for (auto *I : ImplD->methods())
7683     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7684 
7685   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7686 }
7687 
7688 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7689   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7690     PassObjCImplDeclToConsumer(ImplD, Consumer);
7691   else
7692     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7693 }
7694 
7695 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7696   this->Consumer = Consumer;
7697 
7698   if (Consumer)
7699     PassInterestingDeclsToConsumer();
7700 
7701   if (DeserializationListener)
7702     DeserializationListener->ReaderInitialized(this);
7703 }
7704 
7705 void ASTReader::PrintStats() {
7706   std::fprintf(stderr, "*** AST File Statistics:\n");
7707 
7708   unsigned NumTypesLoaded =
7709       TypesLoaded.size() - llvm::count(TypesLoaded, QualType());
7710   unsigned NumDeclsLoaded =
7711       DeclsLoaded.size() - llvm::count(DeclsLoaded, (Decl *)nullptr);
7712   unsigned NumIdentifiersLoaded =
7713       IdentifiersLoaded.size() -
7714       llvm::count(IdentifiersLoaded, (IdentifierInfo *)nullptr);
7715   unsigned NumMacrosLoaded =
7716       MacrosLoaded.size() - llvm::count(MacrosLoaded, (MacroInfo *)nullptr);
7717   unsigned NumSelectorsLoaded =
7718       SelectorsLoaded.size() - llvm::count(SelectorsLoaded, Selector());
7719 
7720   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7721     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7722                  NumSLocEntriesRead, TotalNumSLocEntries,
7723                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7724   if (!TypesLoaded.empty())
7725     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7726                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7727                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7728   if (!DeclsLoaded.empty())
7729     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7730                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7731                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7732   if (!IdentifiersLoaded.empty())
7733     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7734                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7735                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7736   if (!MacrosLoaded.empty())
7737     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7738                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7739                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7740   if (!SelectorsLoaded.empty())
7741     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7742                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7743                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7744   if (TotalNumStatements)
7745     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7746                  NumStatementsRead, TotalNumStatements,
7747                  ((float)NumStatementsRead/TotalNumStatements * 100));
7748   if (TotalNumMacros)
7749     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7750                  NumMacrosRead, TotalNumMacros,
7751                  ((float)NumMacrosRead/TotalNumMacros * 100));
7752   if (TotalLexicalDeclContexts)
7753     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7754                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7755                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7756                   * 100));
7757   if (TotalVisibleDeclContexts)
7758     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7759                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7760                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7761                   * 100));
7762   if (TotalNumMethodPoolEntries)
7763     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7764                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7765                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7766                   * 100));
7767   if (NumMethodPoolLookups)
7768     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7769                  NumMethodPoolHits, NumMethodPoolLookups,
7770                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7771   if (NumMethodPoolTableLookups)
7772     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7773                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7774                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7775                   * 100.0));
7776   if (NumIdentifierLookupHits)
7777     std::fprintf(stderr,
7778                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7779                  NumIdentifierLookupHits, NumIdentifierLookups,
7780                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7781 
7782   if (GlobalIndex) {
7783     std::fprintf(stderr, "\n");
7784     GlobalIndex->printStats();
7785   }
7786 
7787   std::fprintf(stderr, "\n");
7788   dump();
7789   std::fprintf(stderr, "\n");
7790 }
7791 
7792 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7793 LLVM_DUMP_METHOD static void
7794 dumpModuleIDMap(StringRef Name,
7795                 const ContinuousRangeMap<Key, ModuleFile *,
7796                                          InitialCapacity> &Map) {
7797   if (Map.begin() == Map.end())
7798     return;
7799 
7800   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7801 
7802   llvm::errs() << Name << ":\n";
7803   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7804        I != IEnd; ++I) {
7805     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7806       << "\n";
7807   }
7808 }
7809 
7810 LLVM_DUMP_METHOD void ASTReader::dump() {
7811   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7812   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7813   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7814   dumpModuleIDMap("Global type map", GlobalTypeMap);
7815   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7816   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7817   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7818   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7819   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7820   dumpModuleIDMap("Global preprocessed entity map",
7821                   GlobalPreprocessedEntityMap);
7822 
7823   llvm::errs() << "\n*** PCH/Modules Loaded:";
7824   for (ModuleFile &M : ModuleMgr)
7825     M.dump();
7826 }
7827 
7828 /// Return the amount of memory used by memory buffers, breaking down
7829 /// by heap-backed versus mmap'ed memory.
7830 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7831   for (ModuleFile &I : ModuleMgr) {
7832     if (llvm::MemoryBuffer *buf = I.Buffer) {
7833       size_t bytes = buf->getBufferSize();
7834       switch (buf->getBufferKind()) {
7835         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7836           sizes.malloc_bytes += bytes;
7837           break;
7838         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7839           sizes.mmap_bytes += bytes;
7840           break;
7841       }
7842     }
7843   }
7844 }
7845 
7846 void ASTReader::InitializeSema(Sema &S) {
7847   SemaObj = &S;
7848   S.addExternalSource(this);
7849 
7850   // Makes sure any declarations that were deserialized "too early"
7851   // still get added to the identifier's declaration chains.
7852   for (uint64_t ID : PreloadedDeclIDs) {
7853     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7854     pushExternalDeclIntoScope(D, D->getDeclName());
7855   }
7856   PreloadedDeclIDs.clear();
7857 
7858   // FIXME: What happens if these are changed by a module import?
7859   if (!FPPragmaOptions.empty()) {
7860     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7861     FPOptionsOverride NewOverrides =
7862         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7863     SemaObj->CurFPFeatures =
7864         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7865   }
7866 
7867   SemaObj->OpenCLFeatures = OpenCLExtensions;
7868 
7869   UpdateSema();
7870 }
7871 
7872 void ASTReader::UpdateSema() {
7873   assert(SemaObj && "no Sema to update");
7874 
7875   // Load the offsets of the declarations that Sema references.
7876   // They will be lazily deserialized when needed.
7877   if (!SemaDeclRefs.empty()) {
7878     assert(SemaDeclRefs.size() % 3 == 0);
7879     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7880       if (!SemaObj->StdNamespace)
7881         SemaObj->StdNamespace = SemaDeclRefs[I];
7882       if (!SemaObj->StdBadAlloc)
7883         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7884       if (!SemaObj->StdAlignValT)
7885         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7886     }
7887     SemaDeclRefs.clear();
7888   }
7889 
7890   // Update the state of pragmas. Use the same API as if we had encountered the
7891   // pragma in the source.
7892   if(OptimizeOffPragmaLocation.isValid())
7893     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7894   if (PragmaMSStructState != -1)
7895     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7896   if (PointersToMembersPragmaLocation.isValid()) {
7897     SemaObj->ActOnPragmaMSPointersToMembers(
7898         (LangOptions::PragmaMSPointersToMembersKind)
7899             PragmaMSPointersToMembersState,
7900         PointersToMembersPragmaLocation);
7901   }
7902   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7903 
7904   if (PragmaAlignPackCurrentValue) {
7905     // The bottom of the stack might have a default value. It must be adjusted
7906     // to the current value to ensure that the packing state is preserved after
7907     // popping entries that were included/imported from a PCH/module.
7908     bool DropFirst = false;
7909     if (!PragmaAlignPackStack.empty() &&
7910         PragmaAlignPackStack.front().Location.isInvalid()) {
7911       assert(PragmaAlignPackStack.front().Value ==
7912                  SemaObj->AlignPackStack.DefaultValue &&
7913              "Expected a default alignment value");
7914       SemaObj->AlignPackStack.Stack.emplace_back(
7915           PragmaAlignPackStack.front().SlotLabel,
7916           SemaObj->AlignPackStack.CurrentValue,
7917           SemaObj->AlignPackStack.CurrentPragmaLocation,
7918           PragmaAlignPackStack.front().PushLocation);
7919       DropFirst = true;
7920     }
7921     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7922                                  .drop_front(DropFirst ? 1 : 0)) {
7923       SemaObj->AlignPackStack.Stack.emplace_back(
7924           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7925     }
7926     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7927       assert(*PragmaAlignPackCurrentValue ==
7928                  SemaObj->AlignPackStack.DefaultValue &&
7929              "Expected a default align and pack value");
7930       // Keep the current values.
7931     } else {
7932       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7933       SemaObj->AlignPackStack.CurrentPragmaLocation =
7934           PragmaAlignPackCurrentLocation;
7935     }
7936   }
7937   if (FpPragmaCurrentValue) {
7938     // The bottom of the stack might have a default value. It must be adjusted
7939     // to the current value to ensure that fp-pragma state is preserved after
7940     // popping entries that were included/imported from a PCH/module.
7941     bool DropFirst = false;
7942     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7943       assert(FpPragmaStack.front().Value ==
7944                  SemaObj->FpPragmaStack.DefaultValue &&
7945              "Expected a default pragma float_control value");
7946       SemaObj->FpPragmaStack.Stack.emplace_back(
7947           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7948           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7949           FpPragmaStack.front().PushLocation);
7950       DropFirst = true;
7951     }
7952     for (const auto &Entry :
7953          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7954       SemaObj->FpPragmaStack.Stack.emplace_back(
7955           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7956     if (FpPragmaCurrentLocation.isInvalid()) {
7957       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7958              "Expected a default pragma float_control value");
7959       // Keep the current values.
7960     } else {
7961       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7962       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7963     }
7964   }
7965 
7966   // For non-modular AST files, restore visiblity of modules.
7967   for (auto &Import : ImportedModules) {
7968     if (Import.ImportLoc.isInvalid())
7969       continue;
7970     if (Module *Imported = getSubmodule(Import.ID)) {
7971       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7972     }
7973   }
7974 }
7975 
7976 IdentifierInfo *ASTReader::get(StringRef Name) {
7977   // Note that we are loading an identifier.
7978   Deserializing AnIdentifier(this);
7979 
7980   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7981                                   NumIdentifierLookups,
7982                                   NumIdentifierLookupHits);
7983 
7984   // We don't need to do identifier table lookups in C++ modules (we preload
7985   // all interesting declarations, and don't need to use the scope for name
7986   // lookups). Perform the lookup in PCH files, though, since we don't build
7987   // a complete initial identifier table if we're carrying on from a PCH.
7988   if (PP.getLangOpts().CPlusPlus) {
7989     for (auto F : ModuleMgr.pch_modules())
7990       if (Visitor(*F))
7991         break;
7992   } else {
7993     // If there is a global index, look there first to determine which modules
7994     // provably do not have any results for this identifier.
7995     GlobalModuleIndex::HitSet Hits;
7996     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7997     if (!loadGlobalIndex()) {
7998       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7999         HitsPtr = &Hits;
8000       }
8001     }
8002 
8003     ModuleMgr.visit(Visitor, HitsPtr);
8004   }
8005 
8006   IdentifierInfo *II = Visitor.getIdentifierInfo();
8007   markIdentifierUpToDate(II);
8008   return II;
8009 }
8010 
8011 namespace clang {
8012 
8013   /// An identifier-lookup iterator that enumerates all of the
8014   /// identifiers stored within a set of AST files.
8015   class ASTIdentifierIterator : public IdentifierIterator {
8016     /// The AST reader whose identifiers are being enumerated.
8017     const ASTReader &Reader;
8018 
8019     /// The current index into the chain of AST files stored in
8020     /// the AST reader.
8021     unsigned Index;
8022 
8023     /// The current position within the identifier lookup table
8024     /// of the current AST file.
8025     ASTIdentifierLookupTable::key_iterator Current;
8026 
8027     /// The end position within the identifier lookup table of
8028     /// the current AST file.
8029     ASTIdentifierLookupTable::key_iterator End;
8030 
8031     /// Whether to skip any modules in the ASTReader.
8032     bool SkipModules;
8033 
8034   public:
8035     explicit ASTIdentifierIterator(const ASTReader &Reader,
8036                                    bool SkipModules = false);
8037 
8038     StringRef Next() override;
8039   };
8040 
8041 } // namespace clang
8042 
8043 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8044                                              bool SkipModules)
8045     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8046 }
8047 
8048 StringRef ASTIdentifierIterator::Next() {
8049   while (Current == End) {
8050     // If we have exhausted all of our AST files, we're done.
8051     if (Index == 0)
8052       return StringRef();
8053 
8054     --Index;
8055     ModuleFile &F = Reader.ModuleMgr[Index];
8056     if (SkipModules && F.isModule())
8057       continue;
8058 
8059     ASTIdentifierLookupTable *IdTable =
8060         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8061     Current = IdTable->key_begin();
8062     End = IdTable->key_end();
8063   }
8064 
8065   // We have any identifiers remaining in the current AST file; return
8066   // the next one.
8067   StringRef Result = *Current;
8068   ++Current;
8069   return Result;
8070 }
8071 
8072 namespace {
8073 
8074 /// A utility for appending two IdentifierIterators.
8075 class ChainedIdentifierIterator : public IdentifierIterator {
8076   std::unique_ptr<IdentifierIterator> Current;
8077   std::unique_ptr<IdentifierIterator> Queued;
8078 
8079 public:
8080   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8081                             std::unique_ptr<IdentifierIterator> Second)
8082       : Current(std::move(First)), Queued(std::move(Second)) {}
8083 
8084   StringRef Next() override {
8085     if (!Current)
8086       return StringRef();
8087 
8088     StringRef result = Current->Next();
8089     if (!result.empty())
8090       return result;
8091 
8092     // Try the queued iterator, which may itself be empty.
8093     Current.reset();
8094     std::swap(Current, Queued);
8095     return Next();
8096   }
8097 };
8098 
8099 } // namespace
8100 
8101 IdentifierIterator *ASTReader::getIdentifiers() {
8102   if (!loadGlobalIndex()) {
8103     std::unique_ptr<IdentifierIterator> ReaderIter(
8104         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8105     std::unique_ptr<IdentifierIterator> ModulesIter(
8106         GlobalIndex->createIdentifierIterator());
8107     return new ChainedIdentifierIterator(std::move(ReaderIter),
8108                                          std::move(ModulesIter));
8109   }
8110 
8111   return new ASTIdentifierIterator(*this);
8112 }
8113 
8114 namespace clang {
8115 namespace serialization {
8116 
8117   class ReadMethodPoolVisitor {
8118     ASTReader &Reader;
8119     Selector Sel;
8120     unsigned PriorGeneration;
8121     unsigned InstanceBits = 0;
8122     unsigned FactoryBits = 0;
8123     bool InstanceHasMoreThanOneDecl = false;
8124     bool FactoryHasMoreThanOneDecl = false;
8125     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8126     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8127 
8128   public:
8129     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8130                           unsigned PriorGeneration)
8131         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8132 
8133     bool operator()(ModuleFile &M) {
8134       if (!M.SelectorLookupTable)
8135         return false;
8136 
8137       // If we've already searched this module file, skip it now.
8138       if (M.Generation <= PriorGeneration)
8139         return true;
8140 
8141       ++Reader.NumMethodPoolTableLookups;
8142       ASTSelectorLookupTable *PoolTable
8143         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8144       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8145       if (Pos == PoolTable->end())
8146         return false;
8147 
8148       ++Reader.NumMethodPoolTableHits;
8149       ++Reader.NumSelectorsRead;
8150       // FIXME: Not quite happy with the statistics here. We probably should
8151       // disable this tracking when called via LoadSelector.
8152       // Also, should entries without methods count as misses?
8153       ++Reader.NumMethodPoolEntriesRead;
8154       ASTSelectorLookupTrait::data_type Data = *Pos;
8155       if (Reader.DeserializationListener)
8156         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8157 
8158       // Append methods in the reverse order, so that later we can process them
8159       // in the order they appear in the source code by iterating through
8160       // the vector in the reverse order.
8161       InstanceMethods.append(Data.Instance.rbegin(), Data.Instance.rend());
8162       FactoryMethods.append(Data.Factory.rbegin(), Data.Factory.rend());
8163       InstanceBits = Data.InstanceBits;
8164       FactoryBits = Data.FactoryBits;
8165       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8166       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8167       return false;
8168     }
8169 
8170     /// Retrieve the instance methods found by this visitor.
8171     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8172       return InstanceMethods;
8173     }
8174 
8175     /// Retrieve the instance methods found by this visitor.
8176     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8177       return FactoryMethods;
8178     }
8179 
8180     unsigned getInstanceBits() const { return InstanceBits; }
8181     unsigned getFactoryBits() const { return FactoryBits; }
8182 
8183     bool instanceHasMoreThanOneDecl() const {
8184       return InstanceHasMoreThanOneDecl;
8185     }
8186 
8187     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8188   };
8189 
8190 } // namespace serialization
8191 } // namespace clang
8192 
8193 /// Add the given set of methods to the method list.
8194 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8195                              ObjCMethodList &List) {
8196   for (auto I = Methods.rbegin(), E = Methods.rend(); I != E; ++I)
8197     S.addMethodToGlobalList(&List, *I);
8198 }
8199 
8200 void ASTReader::ReadMethodPool(Selector Sel) {
8201   // Get the selector generation and update it to the current generation.
8202   unsigned &Generation = SelectorGeneration[Sel];
8203   unsigned PriorGeneration = Generation;
8204   Generation = getGeneration();
8205   SelectorOutOfDate[Sel] = false;
8206 
8207   // Search for methods defined with this selector.
8208   ++NumMethodPoolLookups;
8209   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8210   ModuleMgr.visit(Visitor);
8211 
8212   if (Visitor.getInstanceMethods().empty() &&
8213       Visitor.getFactoryMethods().empty())
8214     return;
8215 
8216   ++NumMethodPoolHits;
8217 
8218   if (!getSema())
8219     return;
8220 
8221   Sema &S = *getSema();
8222   Sema::GlobalMethodPool::iterator Pos =
8223       S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethodPool::Lists()))
8224           .first;
8225 
8226   Pos->second.first.setBits(Visitor.getInstanceBits());
8227   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8228   Pos->second.second.setBits(Visitor.getFactoryBits());
8229   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8230 
8231   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8232   // when building a module we keep every method individually and may need to
8233   // update hasMoreThanOneDecl as we add the methods.
8234   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8235   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8236 }
8237 
8238 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8239   if (SelectorOutOfDate[Sel])
8240     ReadMethodPool(Sel);
8241 }
8242 
8243 void ASTReader::ReadKnownNamespaces(
8244                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8245   Namespaces.clear();
8246 
8247   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8248     if (NamespaceDecl *Namespace
8249                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8250       Namespaces.push_back(Namespace);
8251   }
8252 }
8253 
8254 void ASTReader::ReadUndefinedButUsed(
8255     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8256   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8257     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8258     SourceLocation Loc =
8259         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8260     Undefined.insert(std::make_pair(D, Loc));
8261   }
8262 }
8263 
8264 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8265     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8266                                                      Exprs) {
8267   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8268     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8269     uint64_t Count = DelayedDeleteExprs[Idx++];
8270     for (uint64_t C = 0; C < Count; ++C) {
8271       SourceLocation DeleteLoc =
8272           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8273       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8274       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8275     }
8276   }
8277 }
8278 
8279 void ASTReader::ReadTentativeDefinitions(
8280                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8281   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8282     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8283     if (Var)
8284       TentativeDefs.push_back(Var);
8285   }
8286   TentativeDefinitions.clear();
8287 }
8288 
8289 void ASTReader::ReadUnusedFileScopedDecls(
8290                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8291   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8292     DeclaratorDecl *D
8293       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8294     if (D)
8295       Decls.push_back(D);
8296   }
8297   UnusedFileScopedDecls.clear();
8298 }
8299 
8300 void ASTReader::ReadDelegatingConstructors(
8301                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8302   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8303     CXXConstructorDecl *D
8304       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8305     if (D)
8306       Decls.push_back(D);
8307   }
8308   DelegatingCtorDecls.clear();
8309 }
8310 
8311 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8312   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8313     TypedefNameDecl *D
8314       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8315     if (D)
8316       Decls.push_back(D);
8317   }
8318   ExtVectorDecls.clear();
8319 }
8320 
8321 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8322     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8323   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8324        ++I) {
8325     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8326         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8327     if (D)
8328       Decls.insert(D);
8329   }
8330   UnusedLocalTypedefNameCandidates.clear();
8331 }
8332 
8333 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8334     llvm::SmallSetVector<Decl *, 4> &Decls) {
8335   for (auto I : DeclsToCheckForDeferredDiags) {
8336     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8337     if (D)
8338       Decls.insert(D);
8339   }
8340   DeclsToCheckForDeferredDiags.clear();
8341 }
8342 
8343 void ASTReader::ReadReferencedSelectors(
8344        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8345   if (ReferencedSelectorsData.empty())
8346     return;
8347 
8348   // If there are @selector references added them to its pool. This is for
8349   // implementation of -Wselector.
8350   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8351   unsigned I = 0;
8352   while (I < DataSize) {
8353     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8354     SourceLocation SelLoc
8355       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8356     Sels.push_back(std::make_pair(Sel, SelLoc));
8357   }
8358   ReferencedSelectorsData.clear();
8359 }
8360 
8361 void ASTReader::ReadWeakUndeclaredIdentifiers(
8362        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8363   if (WeakUndeclaredIdentifiers.empty())
8364     return;
8365 
8366   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8367     IdentifierInfo *WeakId
8368       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8369     IdentifierInfo *AliasId
8370       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8371     SourceLocation Loc
8372       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8373     bool Used = WeakUndeclaredIdentifiers[I++];
8374     WeakInfo WI(AliasId, Loc);
8375     WI.setUsed(Used);
8376     WeakIDs.push_back(std::make_pair(WeakId, WI));
8377   }
8378   WeakUndeclaredIdentifiers.clear();
8379 }
8380 
8381 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8382   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8383     ExternalVTableUse VT;
8384     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8385     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8386     VT.DefinitionRequired = VTableUses[Idx++];
8387     VTables.push_back(VT);
8388   }
8389 
8390   VTableUses.clear();
8391 }
8392 
8393 void ASTReader::ReadPendingInstantiations(
8394        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8395   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8396     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8397     SourceLocation Loc
8398       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8399 
8400     Pending.push_back(std::make_pair(D, Loc));
8401   }
8402   PendingInstantiations.clear();
8403 }
8404 
8405 void ASTReader::ReadLateParsedTemplates(
8406     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8407         &LPTMap) {
8408   for (auto &LPT : LateParsedTemplates) {
8409     ModuleFile *FMod = LPT.first;
8410     RecordDataImpl &LateParsed = LPT.second;
8411     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8412          /* In loop */) {
8413       FunctionDecl *FD =
8414           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8415 
8416       auto LT = std::make_unique<LateParsedTemplate>();
8417       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8418 
8419       ModuleFile *F = getOwningModuleFile(LT->D);
8420       assert(F && "No module");
8421 
8422       unsigned TokN = LateParsed[Idx++];
8423       LT->Toks.reserve(TokN);
8424       for (unsigned T = 0; T < TokN; ++T)
8425         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8426 
8427       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8428     }
8429   }
8430 
8431   LateParsedTemplates.clear();
8432 }
8433 
8434 void ASTReader::LoadSelector(Selector Sel) {
8435   // It would be complicated to avoid reading the methods anyway. So don't.
8436   ReadMethodPool(Sel);
8437 }
8438 
8439 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8440   assert(ID && "Non-zero identifier ID required");
8441   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8442   IdentifiersLoaded[ID - 1] = II;
8443   if (DeserializationListener)
8444     DeserializationListener->IdentifierRead(ID, II);
8445 }
8446 
8447 /// Set the globally-visible declarations associated with the given
8448 /// identifier.
8449 ///
8450 /// If the AST reader is currently in a state where the given declaration IDs
8451 /// cannot safely be resolved, they are queued until it is safe to resolve
8452 /// them.
8453 ///
8454 /// \param II an IdentifierInfo that refers to one or more globally-visible
8455 /// declarations.
8456 ///
8457 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8458 /// visible at global scope.
8459 ///
8460 /// \param Decls if non-null, this vector will be populated with the set of
8461 /// deserialized declarations. These declarations will not be pushed into
8462 /// scope.
8463 void
8464 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8465                               const SmallVectorImpl<uint32_t> &DeclIDs,
8466                                    SmallVectorImpl<Decl *> *Decls) {
8467   if (NumCurrentElementsDeserializing && !Decls) {
8468     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8469     return;
8470   }
8471 
8472   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8473     if (!SemaObj) {
8474       // Queue this declaration so that it will be added to the
8475       // translation unit scope and identifier's declaration chain
8476       // once a Sema object is known.
8477       PreloadedDeclIDs.push_back(DeclIDs[I]);
8478       continue;
8479     }
8480 
8481     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8482 
8483     // If we're simply supposed to record the declarations, do so now.
8484     if (Decls) {
8485       Decls->push_back(D);
8486       continue;
8487     }
8488 
8489     // Introduce this declaration into the translation-unit scope
8490     // and add it to the declaration chain for this identifier, so
8491     // that (unqualified) name lookup will find it.
8492     pushExternalDeclIntoScope(D, II);
8493   }
8494 }
8495 
8496 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8497   if (ID == 0)
8498     return nullptr;
8499 
8500   if (IdentifiersLoaded.empty()) {
8501     Error("no identifier table in AST file");
8502     return nullptr;
8503   }
8504 
8505   ID -= 1;
8506   if (!IdentifiersLoaded[ID]) {
8507     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8508     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8509     ModuleFile *M = I->second;
8510     unsigned Index = ID - M->BaseIdentifierID;
8511     const unsigned char *Data =
8512         M->IdentifierTableData + M->IdentifierOffsets[Index];
8513 
8514     ASTIdentifierLookupTrait Trait(*this, *M);
8515     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8516     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8517     auto &II = PP.getIdentifierTable().get(Key);
8518     IdentifiersLoaded[ID] = &II;
8519     markIdentifierFromAST(*this,  II);
8520     if (DeserializationListener)
8521       DeserializationListener->IdentifierRead(ID + 1, &II);
8522   }
8523 
8524   return IdentifiersLoaded[ID];
8525 }
8526 
8527 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8528   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8529 }
8530 
8531 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8532   if (LocalID < NUM_PREDEF_IDENT_IDS)
8533     return LocalID;
8534 
8535   if (!M.ModuleOffsetMap.empty())
8536     ReadModuleOffsetMap(M);
8537 
8538   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8539     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8540   assert(I != M.IdentifierRemap.end()
8541          && "Invalid index into identifier index remap");
8542 
8543   return LocalID + I->second;
8544 }
8545 
8546 MacroInfo *ASTReader::getMacro(MacroID ID) {
8547   if (ID == 0)
8548     return nullptr;
8549 
8550   if (MacrosLoaded.empty()) {
8551     Error("no macro table in AST file");
8552     return nullptr;
8553   }
8554 
8555   ID -= NUM_PREDEF_MACRO_IDS;
8556   if (!MacrosLoaded[ID]) {
8557     GlobalMacroMapType::iterator I
8558       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8559     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8560     ModuleFile *M = I->second;
8561     unsigned Index = ID - M->BaseMacroID;
8562     MacrosLoaded[ID] =
8563         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8564 
8565     if (DeserializationListener)
8566       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8567                                          MacrosLoaded[ID]);
8568   }
8569 
8570   return MacrosLoaded[ID];
8571 }
8572 
8573 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8574   if (LocalID < NUM_PREDEF_MACRO_IDS)
8575     return LocalID;
8576 
8577   if (!M.ModuleOffsetMap.empty())
8578     ReadModuleOffsetMap(M);
8579 
8580   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8581     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8582   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8583 
8584   return LocalID + I->second;
8585 }
8586 
8587 serialization::SubmoduleID
8588 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8589   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8590     return LocalID;
8591 
8592   if (!M.ModuleOffsetMap.empty())
8593     ReadModuleOffsetMap(M);
8594 
8595   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8596     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8597   assert(I != M.SubmoduleRemap.end()
8598          && "Invalid index into submodule index remap");
8599 
8600   return LocalID + I->second;
8601 }
8602 
8603 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8604   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8605     assert(GlobalID == 0 && "Unhandled global submodule ID");
8606     return nullptr;
8607   }
8608 
8609   if (GlobalID > SubmodulesLoaded.size()) {
8610     Error("submodule ID out of range in AST file");
8611     return nullptr;
8612   }
8613 
8614   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8615 }
8616 
8617 Module *ASTReader::getModule(unsigned ID) {
8618   return getSubmodule(ID);
8619 }
8620 
8621 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8622   if (ID & 1) {
8623     // It's a module, look it up by submodule ID.
8624     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8625     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8626   } else {
8627     // It's a prefix (preamble, PCH, ...). Look it up by index.
8628     unsigned IndexFromEnd = ID >> 1;
8629     assert(IndexFromEnd && "got reference to unknown module file");
8630     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8631   }
8632 }
8633 
8634 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8635   if (!F)
8636     return 1;
8637 
8638   // For a file representing a module, use the submodule ID of the top-level
8639   // module as the file ID. For any other kind of file, the number of such
8640   // files loaded beforehand will be the same on reload.
8641   // FIXME: Is this true even if we have an explicit module file and a PCH?
8642   if (F->isModule())
8643     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8644 
8645   auto PCHModules = getModuleManager().pch_modules();
8646   auto I = llvm::find(PCHModules, F);
8647   assert(I != PCHModules.end() && "emitting reference to unknown file");
8648   return (I - PCHModules.end()) << 1;
8649 }
8650 
8651 llvm::Optional<ASTSourceDescriptor>
8652 ASTReader::getSourceDescriptor(unsigned ID) {
8653   if (Module *M = getSubmodule(ID))
8654     return ASTSourceDescriptor(*M);
8655 
8656   // If there is only a single PCH, return it instead.
8657   // Chained PCH are not supported.
8658   const auto &PCHChain = ModuleMgr.pch_modules();
8659   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8660     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8661     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8662     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8663     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8664                                MF.Signature);
8665   }
8666   return None;
8667 }
8668 
8669 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8670   auto I = DefinitionSource.find(FD);
8671   if (I == DefinitionSource.end())
8672     return EK_ReplyHazy;
8673   return I->second ? EK_Never : EK_Always;
8674 }
8675 
8676 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8677   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8678 }
8679 
8680 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8681   if (ID == 0)
8682     return Selector();
8683 
8684   if (ID > SelectorsLoaded.size()) {
8685     Error("selector ID out of range in AST file");
8686     return Selector();
8687   }
8688 
8689   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8690     // Load this selector from the selector table.
8691     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8692     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8693     ModuleFile &M = *I->second;
8694     ASTSelectorLookupTrait Trait(*this, M);
8695     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8696     SelectorsLoaded[ID - 1] =
8697       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8698     if (DeserializationListener)
8699       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8700   }
8701 
8702   return SelectorsLoaded[ID - 1];
8703 }
8704 
8705 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8706   return DecodeSelector(ID);
8707 }
8708 
8709 uint32_t ASTReader::GetNumExternalSelectors() {
8710   // ID 0 (the null selector) is considered an external selector.
8711   return getTotalNumSelectors() + 1;
8712 }
8713 
8714 serialization::SelectorID
8715 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8716   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8717     return LocalID;
8718 
8719   if (!M.ModuleOffsetMap.empty())
8720     ReadModuleOffsetMap(M);
8721 
8722   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8723     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8724   assert(I != M.SelectorRemap.end()
8725          && "Invalid index into selector index remap");
8726 
8727   return LocalID + I->second;
8728 }
8729 
8730 DeclarationNameLoc
8731 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8732   switch (Name.getNameKind()) {
8733   case DeclarationName::CXXConstructorName:
8734   case DeclarationName::CXXDestructorName:
8735   case DeclarationName::CXXConversionFunctionName:
8736     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8737 
8738   case DeclarationName::CXXOperatorName:
8739     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8740 
8741   case DeclarationName::CXXLiteralOperatorName:
8742     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8743         readSourceLocation());
8744 
8745   case DeclarationName::Identifier:
8746   case DeclarationName::ObjCZeroArgSelector:
8747   case DeclarationName::ObjCOneArgSelector:
8748   case DeclarationName::ObjCMultiArgSelector:
8749   case DeclarationName::CXXUsingDirective:
8750   case DeclarationName::CXXDeductionGuideName:
8751     break;
8752   }
8753   return DeclarationNameLoc();
8754 }
8755 
8756 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8757   DeclarationNameInfo NameInfo;
8758   NameInfo.setName(readDeclarationName());
8759   NameInfo.setLoc(readSourceLocation());
8760   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8761   return NameInfo;
8762 }
8763 
8764 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8765   Info.QualifierLoc = readNestedNameSpecifierLoc();
8766   unsigned NumTPLists = readInt();
8767   Info.NumTemplParamLists = NumTPLists;
8768   if (NumTPLists) {
8769     Info.TemplParamLists =
8770         new (getContext()) TemplateParameterList *[NumTPLists];
8771     for (unsigned i = 0; i != NumTPLists; ++i)
8772       Info.TemplParamLists[i] = readTemplateParameterList();
8773   }
8774 }
8775 
8776 TemplateParameterList *
8777 ASTRecordReader::readTemplateParameterList() {
8778   SourceLocation TemplateLoc = readSourceLocation();
8779   SourceLocation LAngleLoc = readSourceLocation();
8780   SourceLocation RAngleLoc = readSourceLocation();
8781 
8782   unsigned NumParams = readInt();
8783   SmallVector<NamedDecl *, 16> Params;
8784   Params.reserve(NumParams);
8785   while (NumParams--)
8786     Params.push_back(readDeclAs<NamedDecl>());
8787 
8788   bool HasRequiresClause = readBool();
8789   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8790 
8791   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8792       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8793   return TemplateParams;
8794 }
8795 
8796 void ASTRecordReader::readTemplateArgumentList(
8797                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8798                         bool Canonicalize) {
8799   unsigned NumTemplateArgs = readInt();
8800   TemplArgs.reserve(NumTemplateArgs);
8801   while (NumTemplateArgs--)
8802     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8803 }
8804 
8805 /// Read a UnresolvedSet structure.
8806 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8807   unsigned NumDecls = readInt();
8808   Set.reserve(getContext(), NumDecls);
8809   while (NumDecls--) {
8810     DeclID ID = readDeclID();
8811     AccessSpecifier AS = (AccessSpecifier) readInt();
8812     Set.addLazyDecl(getContext(), ID, AS);
8813   }
8814 }
8815 
8816 CXXBaseSpecifier
8817 ASTRecordReader::readCXXBaseSpecifier() {
8818   bool isVirtual = readBool();
8819   bool isBaseOfClass = readBool();
8820   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8821   bool inheritConstructors = readBool();
8822   TypeSourceInfo *TInfo = readTypeSourceInfo();
8823   SourceRange Range = readSourceRange();
8824   SourceLocation EllipsisLoc = readSourceLocation();
8825   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8826                           EllipsisLoc);
8827   Result.setInheritConstructors(inheritConstructors);
8828   return Result;
8829 }
8830 
8831 CXXCtorInitializer **
8832 ASTRecordReader::readCXXCtorInitializers() {
8833   ASTContext &Context = getContext();
8834   unsigned NumInitializers = readInt();
8835   assert(NumInitializers && "wrote ctor initializers but have no inits");
8836   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8837   for (unsigned i = 0; i != NumInitializers; ++i) {
8838     TypeSourceInfo *TInfo = nullptr;
8839     bool IsBaseVirtual = false;
8840     FieldDecl *Member = nullptr;
8841     IndirectFieldDecl *IndirectMember = nullptr;
8842 
8843     CtorInitializerType Type = (CtorInitializerType) readInt();
8844     switch (Type) {
8845     case CTOR_INITIALIZER_BASE:
8846       TInfo = readTypeSourceInfo();
8847       IsBaseVirtual = readBool();
8848       break;
8849 
8850     case CTOR_INITIALIZER_DELEGATING:
8851       TInfo = readTypeSourceInfo();
8852       break;
8853 
8854      case CTOR_INITIALIZER_MEMBER:
8855       Member = readDeclAs<FieldDecl>();
8856       break;
8857 
8858      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8859       IndirectMember = readDeclAs<IndirectFieldDecl>();
8860       break;
8861     }
8862 
8863     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8864     Expr *Init = readExpr();
8865     SourceLocation LParenLoc = readSourceLocation();
8866     SourceLocation RParenLoc = readSourceLocation();
8867 
8868     CXXCtorInitializer *BOMInit;
8869     if (Type == CTOR_INITIALIZER_BASE)
8870       BOMInit = new (Context)
8871           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8872                              RParenLoc, MemberOrEllipsisLoc);
8873     else if (Type == CTOR_INITIALIZER_DELEGATING)
8874       BOMInit = new (Context)
8875           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8876     else if (Member)
8877       BOMInit = new (Context)
8878           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8879                              Init, RParenLoc);
8880     else
8881       BOMInit = new (Context)
8882           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8883                              LParenLoc, Init, RParenLoc);
8884 
8885     if (/*IsWritten*/readBool()) {
8886       unsigned SourceOrder = readInt();
8887       BOMInit->setSourceOrder(SourceOrder);
8888     }
8889 
8890     CtorInitializers[i] = BOMInit;
8891   }
8892 
8893   return CtorInitializers;
8894 }
8895 
8896 NestedNameSpecifierLoc
8897 ASTRecordReader::readNestedNameSpecifierLoc() {
8898   ASTContext &Context = getContext();
8899   unsigned N = readInt();
8900   NestedNameSpecifierLocBuilder Builder;
8901   for (unsigned I = 0; I != N; ++I) {
8902     auto Kind = readNestedNameSpecifierKind();
8903     switch (Kind) {
8904     case NestedNameSpecifier::Identifier: {
8905       IdentifierInfo *II = readIdentifier();
8906       SourceRange Range = readSourceRange();
8907       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8908       break;
8909     }
8910 
8911     case NestedNameSpecifier::Namespace: {
8912       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8913       SourceRange Range = readSourceRange();
8914       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8915       break;
8916     }
8917 
8918     case NestedNameSpecifier::NamespaceAlias: {
8919       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8920       SourceRange Range = readSourceRange();
8921       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8922       break;
8923     }
8924 
8925     case NestedNameSpecifier::TypeSpec:
8926     case NestedNameSpecifier::TypeSpecWithTemplate: {
8927       bool Template = readBool();
8928       TypeSourceInfo *T = readTypeSourceInfo();
8929       if (!T)
8930         return NestedNameSpecifierLoc();
8931       SourceLocation ColonColonLoc = readSourceLocation();
8932 
8933       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8934       Builder.Extend(Context,
8935                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8936                      T->getTypeLoc(), ColonColonLoc);
8937       break;
8938     }
8939 
8940     case NestedNameSpecifier::Global: {
8941       SourceLocation ColonColonLoc = readSourceLocation();
8942       Builder.MakeGlobal(Context, ColonColonLoc);
8943       break;
8944     }
8945 
8946     case NestedNameSpecifier::Super: {
8947       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8948       SourceRange Range = readSourceRange();
8949       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8950       break;
8951     }
8952     }
8953   }
8954 
8955   return Builder.getWithLocInContext(Context);
8956 }
8957 
8958 SourceRange
8959 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8960                            unsigned &Idx) {
8961   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8962   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8963   return SourceRange(beg, end);
8964 }
8965 
8966 /// Read a floating-point value
8967 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8968   return llvm::APFloat(Sem, readAPInt());
8969 }
8970 
8971 // Read a string
8972 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8973   unsigned Len = Record[Idx++];
8974   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8975   Idx += Len;
8976   return Result;
8977 }
8978 
8979 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8980                                 unsigned &Idx) {
8981   std::string Filename = ReadString(Record, Idx);
8982   ResolveImportedPath(F, Filename);
8983   return Filename;
8984 }
8985 
8986 std::string ASTReader::ReadPath(StringRef BaseDirectory,
8987                                 const RecordData &Record, unsigned &Idx) {
8988   std::string Filename = ReadString(Record, Idx);
8989   if (!BaseDirectory.empty())
8990     ResolveImportedPath(Filename, BaseDirectory);
8991   return Filename;
8992 }
8993 
8994 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8995                                          unsigned &Idx) {
8996   unsigned Major = Record[Idx++];
8997   unsigned Minor = Record[Idx++];
8998   unsigned Subminor = Record[Idx++];
8999   if (Minor == 0)
9000     return VersionTuple(Major);
9001   if (Subminor == 0)
9002     return VersionTuple(Major, Minor - 1);
9003   return VersionTuple(Major, Minor - 1, Subminor - 1);
9004 }
9005 
9006 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9007                                           const RecordData &Record,
9008                                           unsigned &Idx) {
9009   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9010   return CXXTemporary::Create(getContext(), Decl);
9011 }
9012 
9013 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9014   return Diag(CurrentImportLoc, DiagID);
9015 }
9016 
9017 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9018   return Diags.Report(Loc, DiagID);
9019 }
9020 
9021 /// Retrieve the identifier table associated with the
9022 /// preprocessor.
9023 IdentifierTable &ASTReader::getIdentifierTable() {
9024   return PP.getIdentifierTable();
9025 }
9026 
9027 /// Record that the given ID maps to the given switch-case
9028 /// statement.
9029 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9030   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9031          "Already have a SwitchCase with this ID");
9032   (*CurrSwitchCaseStmts)[ID] = SC;
9033 }
9034 
9035 /// Retrieve the switch-case statement with the given ID.
9036 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9037   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9038   return (*CurrSwitchCaseStmts)[ID];
9039 }
9040 
9041 void ASTReader::ClearSwitchCaseIDs() {
9042   CurrSwitchCaseStmts->clear();
9043 }
9044 
9045 void ASTReader::ReadComments() {
9046   ASTContext &Context = getContext();
9047   std::vector<RawComment *> Comments;
9048   for (SmallVectorImpl<std::pair<BitstreamCursor,
9049                                  serialization::ModuleFile *>>::iterator
9050        I = CommentsCursors.begin(),
9051        E = CommentsCursors.end();
9052        I != E; ++I) {
9053     Comments.clear();
9054     BitstreamCursor &Cursor = I->first;
9055     serialization::ModuleFile &F = *I->second;
9056     SavedStreamPosition SavedPosition(Cursor);
9057 
9058     RecordData Record;
9059     while (true) {
9060       Expected<llvm::BitstreamEntry> MaybeEntry =
9061           Cursor.advanceSkippingSubblocks(
9062               BitstreamCursor::AF_DontPopBlockAtEnd);
9063       if (!MaybeEntry) {
9064         Error(MaybeEntry.takeError());
9065         return;
9066       }
9067       llvm::BitstreamEntry Entry = MaybeEntry.get();
9068 
9069       switch (Entry.Kind) {
9070       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9071       case llvm::BitstreamEntry::Error:
9072         Error("malformed block record in AST file");
9073         return;
9074       case llvm::BitstreamEntry::EndBlock:
9075         goto NextCursor;
9076       case llvm::BitstreamEntry::Record:
9077         // The interesting case.
9078         break;
9079       }
9080 
9081       // Read a record.
9082       Record.clear();
9083       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9084       if (!MaybeComment) {
9085         Error(MaybeComment.takeError());
9086         return;
9087       }
9088       switch ((CommentRecordTypes)MaybeComment.get()) {
9089       case COMMENTS_RAW_COMMENT: {
9090         unsigned Idx = 0;
9091         SourceRange SR = ReadSourceRange(F, Record, Idx);
9092         RawComment::CommentKind Kind =
9093             (RawComment::CommentKind) Record[Idx++];
9094         bool IsTrailingComment = Record[Idx++];
9095         bool IsAlmostTrailingComment = Record[Idx++];
9096         Comments.push_back(new (Context) RawComment(
9097             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9098         break;
9099       }
9100       }
9101     }
9102   NextCursor:
9103     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9104         FileToOffsetToComment;
9105     for (RawComment *C : Comments) {
9106       SourceLocation CommentLoc = C->getBeginLoc();
9107       if (CommentLoc.isValid()) {
9108         std::pair<FileID, unsigned> Loc =
9109             SourceMgr.getDecomposedLoc(CommentLoc);
9110         if (Loc.first.isValid())
9111           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9112       }
9113     }
9114   }
9115 }
9116 
9117 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9118                                 bool IncludeSystem, bool Complain,
9119                     llvm::function_ref<void(const serialization::InputFile &IF,
9120                                             bool isSystem)> Visitor) {
9121   unsigned NumUserInputs = MF.NumUserInputFiles;
9122   unsigned NumInputs = MF.InputFilesLoaded.size();
9123   assert(NumUserInputs <= NumInputs);
9124   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9125   for (unsigned I = 0; I < N; ++I) {
9126     bool IsSystem = I >= NumUserInputs;
9127     InputFile IF = getInputFile(MF, I+1, Complain);
9128     Visitor(IF, IsSystem);
9129   }
9130 }
9131 
9132 void ASTReader::visitTopLevelModuleMaps(
9133     serialization::ModuleFile &MF,
9134     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9135   unsigned NumInputs = MF.InputFilesLoaded.size();
9136   for (unsigned I = 0; I < NumInputs; ++I) {
9137     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9138     if (IFI.TopLevelModuleMap)
9139       // FIXME: This unnecessarily re-reads the InputFileInfo.
9140       if (auto FE = getInputFile(MF, I + 1).getFile())
9141         Visitor(FE);
9142   }
9143 }
9144 
9145 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9146   // If we know the owning module, use it.
9147   if (Module *M = D->getImportedOwningModule())
9148     return M->getFullModuleName();
9149 
9150   // Otherwise, use the name of the top-level module the decl is within.
9151   if (ModuleFile *M = getOwningModuleFile(D))
9152     return M->ModuleName;
9153 
9154   // Not from a module.
9155   return {};
9156 }
9157 
9158 void ASTReader::finishPendingActions() {
9159   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9160          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9161          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9162          !PendingUpdateRecords.empty()) {
9163     // If any identifiers with corresponding top-level declarations have
9164     // been loaded, load those declarations now.
9165     using TopLevelDeclsMap =
9166         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9167     TopLevelDeclsMap TopLevelDecls;
9168 
9169     while (!PendingIdentifierInfos.empty()) {
9170       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9171       SmallVector<uint32_t, 4> DeclIDs =
9172           std::move(PendingIdentifierInfos.back().second);
9173       PendingIdentifierInfos.pop_back();
9174 
9175       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9176     }
9177 
9178     // Load each function type that we deferred loading because it was a
9179     // deduced type that might refer to a local type declared within itself.
9180     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9181       auto *FD = PendingFunctionTypes[I].first;
9182       FD->setType(GetType(PendingFunctionTypes[I].second));
9183 
9184       // If we gave a function a deduced return type, remember that we need to
9185       // propagate that along the redeclaration chain.
9186       auto *DT = FD->getReturnType()->getContainedDeducedType();
9187       if (DT && DT->isDeduced())
9188         PendingDeducedTypeUpdates.insert(
9189             {FD->getCanonicalDecl(), FD->getReturnType()});
9190     }
9191     PendingFunctionTypes.clear();
9192 
9193     // For each decl chain that we wanted to complete while deserializing, mark
9194     // it as "still needs to be completed".
9195     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9196       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9197     }
9198     PendingIncompleteDeclChains.clear();
9199 
9200     // Load pending declaration chains.
9201     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9202       loadPendingDeclChain(PendingDeclChains[I].first,
9203                            PendingDeclChains[I].second);
9204     PendingDeclChains.clear();
9205 
9206     // Make the most recent of the top-level declarations visible.
9207     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9208            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9209       IdentifierInfo *II = TLD->first;
9210       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9211         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9212       }
9213     }
9214 
9215     // Load any pending macro definitions.
9216     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9217       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9218       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9219       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9220       // Initialize the macro history from chained-PCHs ahead of module imports.
9221       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9222            ++IDIdx) {
9223         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9224         if (!Info.M->isModule())
9225           resolvePendingMacro(II, Info);
9226       }
9227       // Handle module imports.
9228       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9229            ++IDIdx) {
9230         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9231         if (Info.M->isModule())
9232           resolvePendingMacro(II, Info);
9233       }
9234     }
9235     PendingMacroIDs.clear();
9236 
9237     // Wire up the DeclContexts for Decls that we delayed setting until
9238     // recursive loading is completed.
9239     while (!PendingDeclContextInfos.empty()) {
9240       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9241       PendingDeclContextInfos.pop_front();
9242       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9243       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9244       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9245     }
9246 
9247     // Perform any pending declaration updates.
9248     while (!PendingUpdateRecords.empty()) {
9249       auto Update = PendingUpdateRecords.pop_back_val();
9250       ReadingKindTracker ReadingKind(Read_Decl, *this);
9251       loadDeclUpdateRecords(Update);
9252     }
9253   }
9254 
9255   // At this point, all update records for loaded decls are in place, so any
9256   // fake class definitions should have become real.
9257   assert(PendingFakeDefinitionData.empty() &&
9258          "faked up a class definition but never saw the real one");
9259 
9260   // If we deserialized any C++ or Objective-C class definitions, any
9261   // Objective-C protocol definitions, or any redeclarable templates, make sure
9262   // that all redeclarations point to the definitions. Note that this can only
9263   // happen now, after the redeclaration chains have been fully wired.
9264   for (Decl *D : PendingDefinitions) {
9265     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9266       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9267         // Make sure that the TagType points at the definition.
9268         const_cast<TagType*>(TagT)->decl = TD;
9269       }
9270 
9271       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9272         for (auto *R = getMostRecentExistingDecl(RD); R;
9273              R = R->getPreviousDecl()) {
9274           assert((R == D) ==
9275                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9276                  "declaration thinks it's the definition but it isn't");
9277           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9278         }
9279       }
9280 
9281       continue;
9282     }
9283 
9284     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9285       // Make sure that the ObjCInterfaceType points at the definition.
9286       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9287         ->Decl = ID;
9288 
9289       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9290         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9291 
9292       continue;
9293     }
9294 
9295     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9296       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9297         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9298 
9299       continue;
9300     }
9301 
9302     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9303     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9304       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9305   }
9306   PendingDefinitions.clear();
9307 
9308   // Load the bodies of any functions or methods we've encountered. We do
9309   // this now (delayed) so that we can be sure that the declaration chains
9310   // have been fully wired up (hasBody relies on this).
9311   // FIXME: We shouldn't require complete redeclaration chains here.
9312   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9313                                PBEnd = PendingBodies.end();
9314        PB != PBEnd; ++PB) {
9315     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9316       // For a function defined inline within a class template, force the
9317       // canonical definition to be the one inside the canonical definition of
9318       // the template. This ensures that we instantiate from a correct view
9319       // of the template.
9320       //
9321       // Sadly we can't do this more generally: we can't be sure that all
9322       // copies of an arbitrary class definition will have the same members
9323       // defined (eg, some member functions may not be instantiated, and some
9324       // special members may or may not have been implicitly defined).
9325       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9326         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9327           continue;
9328 
9329       // FIXME: Check for =delete/=default?
9330       // FIXME: Complain about ODR violations here?
9331       const FunctionDecl *Defn = nullptr;
9332       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9333         FD->setLazyBody(PB->second);
9334       } else {
9335         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9336         mergeDefinitionVisibility(NonConstDefn, FD);
9337 
9338         if (!FD->isLateTemplateParsed() &&
9339             !NonConstDefn->isLateTemplateParsed() &&
9340             FD->getODRHash() != NonConstDefn->getODRHash()) {
9341           if (!isa<CXXMethodDecl>(FD)) {
9342             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9343           } else if (FD->getLexicalParent()->isFileContext() &&
9344                      NonConstDefn->getLexicalParent()->isFileContext()) {
9345             // Only diagnose out-of-line method definitions.  If they are
9346             // in class definitions, then an error will be generated when
9347             // processing the class bodies.
9348             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9349           }
9350         }
9351       }
9352       continue;
9353     }
9354 
9355     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9356     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9357       MD->setLazyBody(PB->second);
9358   }
9359   PendingBodies.clear();
9360 
9361   // Do some cleanup.
9362   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9363     getContext().deduplicateMergedDefinitonsFor(ND);
9364   PendingMergedDefinitionsToDeduplicate.clear();
9365 }
9366 
9367 void ASTReader::diagnoseOdrViolations() {
9368   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9369       PendingFunctionOdrMergeFailures.empty() &&
9370       PendingEnumOdrMergeFailures.empty())
9371     return;
9372 
9373   // Trigger the import of the full definition of each class that had any
9374   // odr-merging problems, so we can produce better diagnostics for them.
9375   // These updates may in turn find and diagnose some ODR failures, so take
9376   // ownership of the set first.
9377   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9378   PendingOdrMergeFailures.clear();
9379   for (auto &Merge : OdrMergeFailures) {
9380     Merge.first->buildLookup();
9381     Merge.first->decls_begin();
9382     Merge.first->bases_begin();
9383     Merge.first->vbases_begin();
9384     for (auto &RecordPair : Merge.second) {
9385       auto *RD = RecordPair.first;
9386       RD->decls_begin();
9387       RD->bases_begin();
9388       RD->vbases_begin();
9389     }
9390   }
9391 
9392   // Trigger the import of functions.
9393   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9394   PendingFunctionOdrMergeFailures.clear();
9395   for (auto &Merge : FunctionOdrMergeFailures) {
9396     Merge.first->buildLookup();
9397     Merge.first->decls_begin();
9398     Merge.first->getBody();
9399     for (auto &FD : Merge.second) {
9400       FD->buildLookup();
9401       FD->decls_begin();
9402       FD->getBody();
9403     }
9404   }
9405 
9406   // Trigger the import of enums.
9407   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9408   PendingEnumOdrMergeFailures.clear();
9409   for (auto &Merge : EnumOdrMergeFailures) {
9410     Merge.first->decls_begin();
9411     for (auto &Enum : Merge.second) {
9412       Enum->decls_begin();
9413     }
9414   }
9415 
9416   // For each declaration from a merged context, check that the canonical
9417   // definition of that context also contains a declaration of the same
9418   // entity.
9419   //
9420   // Caution: this loop does things that might invalidate iterators into
9421   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9422   while (!PendingOdrMergeChecks.empty()) {
9423     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9424 
9425     // FIXME: Skip over implicit declarations for now. This matters for things
9426     // like implicitly-declared special member functions. This isn't entirely
9427     // correct; we can end up with multiple unmerged declarations of the same
9428     // implicit entity.
9429     if (D->isImplicit())
9430       continue;
9431 
9432     DeclContext *CanonDef = D->getDeclContext();
9433 
9434     bool Found = false;
9435     const Decl *DCanon = D->getCanonicalDecl();
9436 
9437     for (auto RI : D->redecls()) {
9438       if (RI->getLexicalDeclContext() == CanonDef) {
9439         Found = true;
9440         break;
9441       }
9442     }
9443     if (Found)
9444       continue;
9445 
9446     // Quick check failed, time to do the slow thing. Note, we can't just
9447     // look up the name of D in CanonDef here, because the member that is
9448     // in CanonDef might not be found by name lookup (it might have been
9449     // replaced by a more recent declaration in the lookup table), and we
9450     // can't necessarily find it in the redeclaration chain because it might
9451     // be merely mergeable, not redeclarable.
9452     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9453     for (auto *CanonMember : CanonDef->decls()) {
9454       if (CanonMember->getCanonicalDecl() == DCanon) {
9455         // This can happen if the declaration is merely mergeable and not
9456         // actually redeclarable (we looked for redeclarations earlier).
9457         //
9458         // FIXME: We should be able to detect this more efficiently, without
9459         // pulling in all of the members of CanonDef.
9460         Found = true;
9461         break;
9462       }
9463       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9464         if (ND->getDeclName() == D->getDeclName())
9465           Candidates.push_back(ND);
9466     }
9467 
9468     if (!Found) {
9469       // The AST doesn't like TagDecls becoming invalid after they've been
9470       // completed. We only really need to mark FieldDecls as invalid here.
9471       if (!isa<TagDecl>(D))
9472         D->setInvalidDecl();
9473 
9474       // Ensure we don't accidentally recursively enter deserialization while
9475       // we're producing our diagnostic.
9476       Deserializing RecursionGuard(this);
9477 
9478       std::string CanonDefModule =
9479           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9480       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9481         << D << getOwningModuleNameForDiagnostic(D)
9482         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9483 
9484       if (Candidates.empty())
9485         Diag(cast<Decl>(CanonDef)->getLocation(),
9486              diag::note_module_odr_violation_no_possible_decls) << D;
9487       else {
9488         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9489           Diag(Candidates[I]->getLocation(),
9490                diag::note_module_odr_violation_possible_decl)
9491             << Candidates[I];
9492       }
9493 
9494       DiagnosedOdrMergeFailures.insert(CanonDef);
9495     }
9496   }
9497 
9498   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9499       EnumOdrMergeFailures.empty())
9500     return;
9501 
9502   // Ensure we don't accidentally recursively enter deserialization while
9503   // we're producing our diagnostics.
9504   Deserializing RecursionGuard(this);
9505 
9506   // Common code for hashing helpers.
9507   ODRHash Hash;
9508   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9509     Hash.clear();
9510     Hash.AddQualType(Ty);
9511     return Hash.CalculateHash();
9512   };
9513 
9514   auto ComputeODRHash = [&Hash](const Stmt *S) {
9515     assert(S);
9516     Hash.clear();
9517     Hash.AddStmt(S);
9518     return Hash.CalculateHash();
9519   };
9520 
9521   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9522     assert(D);
9523     Hash.clear();
9524     Hash.AddSubDecl(D);
9525     return Hash.CalculateHash();
9526   };
9527 
9528   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9529     Hash.clear();
9530     Hash.AddTemplateArgument(TA);
9531     return Hash.CalculateHash();
9532   };
9533 
9534   auto ComputeTemplateParameterListODRHash =
9535       [&Hash](const TemplateParameterList *TPL) {
9536         assert(TPL);
9537         Hash.clear();
9538         Hash.AddTemplateParameterList(TPL);
9539         return Hash.CalculateHash();
9540       };
9541 
9542   // Used with err_module_odr_violation_mismatch_decl and
9543   // note_module_odr_violation_mismatch_decl
9544   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9545   enum ODRMismatchDecl {
9546     EndOfClass,
9547     PublicSpecifer,
9548     PrivateSpecifer,
9549     ProtectedSpecifer,
9550     StaticAssert,
9551     Field,
9552     CXXMethod,
9553     TypeAlias,
9554     TypeDef,
9555     Var,
9556     Friend,
9557     FunctionTemplate,
9558     Other
9559   };
9560 
9561   // Used with err_module_odr_violation_mismatch_decl_diff and
9562   // note_module_odr_violation_mismatch_decl_diff
9563   enum ODRMismatchDeclDifference {
9564     StaticAssertCondition,
9565     StaticAssertMessage,
9566     StaticAssertOnlyMessage,
9567     FieldName,
9568     FieldTypeName,
9569     FieldSingleBitField,
9570     FieldDifferentWidthBitField,
9571     FieldSingleMutable,
9572     FieldSingleInitializer,
9573     FieldDifferentInitializers,
9574     MethodName,
9575     MethodDeleted,
9576     MethodDefaulted,
9577     MethodVirtual,
9578     MethodStatic,
9579     MethodVolatile,
9580     MethodConst,
9581     MethodInline,
9582     MethodNumberParameters,
9583     MethodParameterType,
9584     MethodParameterName,
9585     MethodParameterSingleDefaultArgument,
9586     MethodParameterDifferentDefaultArgument,
9587     MethodNoTemplateArguments,
9588     MethodDifferentNumberTemplateArguments,
9589     MethodDifferentTemplateArgument,
9590     MethodSingleBody,
9591     MethodDifferentBody,
9592     TypedefName,
9593     TypedefType,
9594     VarName,
9595     VarType,
9596     VarSingleInitializer,
9597     VarDifferentInitializer,
9598     VarConstexpr,
9599     FriendTypeFunction,
9600     FriendType,
9601     FriendFunction,
9602     FunctionTemplateDifferentNumberParameters,
9603     FunctionTemplateParameterDifferentKind,
9604     FunctionTemplateParameterName,
9605     FunctionTemplateParameterSingleDefaultArgument,
9606     FunctionTemplateParameterDifferentDefaultArgument,
9607     FunctionTemplateParameterDifferentType,
9608     FunctionTemplatePackParameter,
9609   };
9610 
9611   // These lambdas have the common portions of the ODR diagnostics.  This
9612   // has the same return as Diag(), so addition parameters can be passed
9613   // in with operator<<
9614   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9615                                  SourceLocation Loc, SourceRange Range,
9616                                  ODRMismatchDeclDifference DiffType) {
9617     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9618            << FirstRecord << FirstModule.empty() << FirstModule << Range
9619            << DiffType;
9620   };
9621   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9622                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9623     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9624            << SecondModule << Range << DiffType;
9625   };
9626 
9627   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9628                        &ComputeQualTypeODRHash, &ComputeODRHash](
9629                           NamedDecl *FirstRecord, StringRef FirstModule,
9630                           StringRef SecondModule, FieldDecl *FirstField,
9631                           FieldDecl *SecondField) {
9632     IdentifierInfo *FirstII = FirstField->getIdentifier();
9633     IdentifierInfo *SecondII = SecondField->getIdentifier();
9634     if (FirstII->getName() != SecondII->getName()) {
9635       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9636                        FirstField->getSourceRange(), FieldName)
9637           << FirstII;
9638       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9639                       SecondField->getSourceRange(), FieldName)
9640           << SecondII;
9641 
9642       return true;
9643     }
9644 
9645     assert(getContext().hasSameType(FirstField->getType(),
9646                                     SecondField->getType()));
9647 
9648     QualType FirstType = FirstField->getType();
9649     QualType SecondType = SecondField->getType();
9650     if (ComputeQualTypeODRHash(FirstType) !=
9651         ComputeQualTypeODRHash(SecondType)) {
9652       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9653                        FirstField->getSourceRange(), FieldTypeName)
9654           << FirstII << FirstType;
9655       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9656                       SecondField->getSourceRange(), FieldTypeName)
9657           << SecondII << SecondType;
9658 
9659       return true;
9660     }
9661 
9662     const bool IsFirstBitField = FirstField->isBitField();
9663     const bool IsSecondBitField = SecondField->isBitField();
9664     if (IsFirstBitField != IsSecondBitField) {
9665       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9666                        FirstField->getSourceRange(), FieldSingleBitField)
9667           << FirstII << IsFirstBitField;
9668       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9669                       SecondField->getSourceRange(), FieldSingleBitField)
9670           << SecondII << IsSecondBitField;
9671       return true;
9672     }
9673 
9674     if (IsFirstBitField && IsSecondBitField) {
9675       unsigned FirstBitWidthHash =
9676           ComputeODRHash(FirstField->getBitWidth());
9677       unsigned SecondBitWidthHash =
9678           ComputeODRHash(SecondField->getBitWidth());
9679       if (FirstBitWidthHash != SecondBitWidthHash) {
9680         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9681                          FirstField->getSourceRange(),
9682                          FieldDifferentWidthBitField)
9683             << FirstII << FirstField->getBitWidth()->getSourceRange();
9684         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9685                         SecondField->getSourceRange(),
9686                         FieldDifferentWidthBitField)
9687             << SecondII << SecondField->getBitWidth()->getSourceRange();
9688         return true;
9689       }
9690     }
9691 
9692     if (!PP.getLangOpts().CPlusPlus)
9693       return false;
9694 
9695     const bool IsFirstMutable = FirstField->isMutable();
9696     const bool IsSecondMutable = SecondField->isMutable();
9697     if (IsFirstMutable != IsSecondMutable) {
9698       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9699                        FirstField->getSourceRange(), FieldSingleMutable)
9700           << FirstII << IsFirstMutable;
9701       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9702                       SecondField->getSourceRange(), FieldSingleMutable)
9703           << SecondII << IsSecondMutable;
9704       return true;
9705     }
9706 
9707     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9708     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9709     if ((!FirstInitializer && SecondInitializer) ||
9710         (FirstInitializer && !SecondInitializer)) {
9711       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9712                        FirstField->getSourceRange(), FieldSingleInitializer)
9713           << FirstII << (FirstInitializer != nullptr);
9714       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9715                       SecondField->getSourceRange(), FieldSingleInitializer)
9716           << SecondII << (SecondInitializer != nullptr);
9717       return true;
9718     }
9719 
9720     if (FirstInitializer && SecondInitializer) {
9721       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9722       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9723       if (FirstInitHash != SecondInitHash) {
9724         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9725                          FirstField->getSourceRange(),
9726                          FieldDifferentInitializers)
9727             << FirstII << FirstInitializer->getSourceRange();
9728         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9729                         SecondField->getSourceRange(),
9730                         FieldDifferentInitializers)
9731             << SecondII << SecondInitializer->getSourceRange();
9732         return true;
9733       }
9734     }
9735 
9736     return false;
9737   };
9738 
9739   auto ODRDiagTypeDefOrAlias =
9740       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9741           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9742           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9743           bool IsTypeAlias) {
9744         auto FirstName = FirstTD->getDeclName();
9745         auto SecondName = SecondTD->getDeclName();
9746         if (FirstName != SecondName) {
9747           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9748                            FirstTD->getSourceRange(), TypedefName)
9749               << IsTypeAlias << FirstName;
9750           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9751                           SecondTD->getSourceRange(), TypedefName)
9752               << IsTypeAlias << SecondName;
9753           return true;
9754         }
9755 
9756         QualType FirstType = FirstTD->getUnderlyingType();
9757         QualType SecondType = SecondTD->getUnderlyingType();
9758         if (ComputeQualTypeODRHash(FirstType) !=
9759             ComputeQualTypeODRHash(SecondType)) {
9760           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9761                            FirstTD->getSourceRange(), TypedefType)
9762               << IsTypeAlias << FirstName << FirstType;
9763           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9764                           SecondTD->getSourceRange(), TypedefType)
9765               << IsTypeAlias << SecondName << SecondType;
9766           return true;
9767         }
9768 
9769         return false;
9770   };
9771 
9772   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9773                      &ComputeQualTypeODRHash, &ComputeODRHash,
9774                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9775                            StringRef SecondModule, VarDecl *FirstVD,
9776                            VarDecl *SecondVD) {
9777     auto FirstName = FirstVD->getDeclName();
9778     auto SecondName = SecondVD->getDeclName();
9779     if (FirstName != SecondName) {
9780       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9781                        FirstVD->getSourceRange(), VarName)
9782           << FirstName;
9783       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9784                       SecondVD->getSourceRange(), VarName)
9785           << SecondName;
9786       return true;
9787     }
9788 
9789     QualType FirstType = FirstVD->getType();
9790     QualType SecondType = SecondVD->getType();
9791     if (ComputeQualTypeODRHash(FirstType) !=
9792         ComputeQualTypeODRHash(SecondType)) {
9793       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9794                        FirstVD->getSourceRange(), VarType)
9795           << FirstName << FirstType;
9796       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9797                       SecondVD->getSourceRange(), VarType)
9798           << SecondName << SecondType;
9799       return true;
9800     }
9801 
9802     if (!PP.getLangOpts().CPlusPlus)
9803       return false;
9804 
9805     const Expr *FirstInit = FirstVD->getInit();
9806     const Expr *SecondInit = SecondVD->getInit();
9807     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9808       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9809                        FirstVD->getSourceRange(), VarSingleInitializer)
9810           << FirstName << (FirstInit == nullptr)
9811           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9812       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9813                       SecondVD->getSourceRange(), VarSingleInitializer)
9814           << SecondName << (SecondInit == nullptr)
9815           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9816       return true;
9817     }
9818 
9819     if (FirstInit && SecondInit &&
9820         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9821       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9822                        FirstVD->getSourceRange(), VarDifferentInitializer)
9823           << FirstName << FirstInit->getSourceRange();
9824       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9825                       SecondVD->getSourceRange(), VarDifferentInitializer)
9826           << SecondName << SecondInit->getSourceRange();
9827       return true;
9828     }
9829 
9830     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9831     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9832     if (FirstIsConstexpr != SecondIsConstexpr) {
9833       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9834                        FirstVD->getSourceRange(), VarConstexpr)
9835           << FirstName << FirstIsConstexpr;
9836       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9837                       SecondVD->getSourceRange(), VarConstexpr)
9838           << SecondName << SecondIsConstexpr;
9839       return true;
9840     }
9841     return false;
9842   };
9843 
9844   auto DifferenceSelector = [](Decl *D) {
9845     assert(D && "valid Decl required");
9846     switch (D->getKind()) {
9847     default:
9848       return Other;
9849     case Decl::AccessSpec:
9850       switch (D->getAccess()) {
9851       case AS_public:
9852         return PublicSpecifer;
9853       case AS_private:
9854         return PrivateSpecifer;
9855       case AS_protected:
9856         return ProtectedSpecifer;
9857       case AS_none:
9858         break;
9859       }
9860       llvm_unreachable("Invalid access specifier");
9861     case Decl::StaticAssert:
9862       return StaticAssert;
9863     case Decl::Field:
9864       return Field;
9865     case Decl::CXXMethod:
9866     case Decl::CXXConstructor:
9867     case Decl::CXXDestructor:
9868       return CXXMethod;
9869     case Decl::TypeAlias:
9870       return TypeAlias;
9871     case Decl::Typedef:
9872       return TypeDef;
9873     case Decl::Var:
9874       return Var;
9875     case Decl::Friend:
9876       return Friend;
9877     case Decl::FunctionTemplate:
9878       return FunctionTemplate;
9879     }
9880   };
9881 
9882   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9883   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9884                                                  RecordDecl *Record,
9885                                                  const DeclContext *DC) {
9886     for (auto *D : Record->decls()) {
9887       if (!ODRHash::isDeclToBeProcessed(D, DC))
9888         continue;
9889       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9890     }
9891   };
9892 
9893   struct DiffResult {
9894     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9895     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9896   };
9897 
9898   // If there is a diagnoseable difference, FirstDiffType and
9899   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9900   // filled in if not EndOfClass.
9901   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9902                                              DeclHashes &SecondHashes) {
9903     DiffResult DR;
9904     auto FirstIt = FirstHashes.begin();
9905     auto SecondIt = SecondHashes.begin();
9906     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9907       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9908           FirstIt->second == SecondIt->second) {
9909         ++FirstIt;
9910         ++SecondIt;
9911         continue;
9912       }
9913 
9914       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9915       DR.SecondDecl =
9916           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9917 
9918       DR.FirstDiffType =
9919           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9920       DR.SecondDiffType =
9921           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9922       return DR;
9923     }
9924     return DR;
9925   };
9926 
9927   // Use this to diagnose that an unexpected Decl was encountered
9928   // or no difference was detected. This causes a generic error
9929   // message to be emitted.
9930   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9931                                       StringRef FirstModule,
9932                                       NamedDecl *SecondRecord,
9933                                       StringRef SecondModule) {
9934     Diag(FirstRecord->getLocation(),
9935          diag::err_module_odr_violation_different_definitions)
9936         << FirstRecord << FirstModule.empty() << FirstModule;
9937 
9938     if (DR.FirstDecl) {
9939       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9940           << FirstRecord << DR.FirstDecl->getSourceRange();
9941     }
9942 
9943     Diag(SecondRecord->getLocation(),
9944          diag::note_module_odr_violation_different_definitions)
9945         << SecondModule;
9946 
9947     if (DR.SecondDecl) {
9948       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9949           << DR.SecondDecl->getSourceRange();
9950     }
9951   };
9952 
9953   auto DiagnoseODRMismatch =
9954       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9955              NamedDecl *SecondRecord, StringRef SecondModule) {
9956         SourceLocation FirstLoc;
9957         SourceRange FirstRange;
9958         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9959         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9960           FirstLoc = FirstTag->getBraceRange().getEnd();
9961         } else {
9962           FirstLoc = DR.FirstDecl->getLocation();
9963           FirstRange = DR.FirstDecl->getSourceRange();
9964         }
9965         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9966             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9967             << DR.FirstDiffType;
9968 
9969         SourceLocation SecondLoc;
9970         SourceRange SecondRange;
9971         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9972         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9973           SecondLoc = SecondTag->getBraceRange().getEnd();
9974         } else {
9975           SecondLoc = DR.SecondDecl->getLocation();
9976           SecondRange = DR.SecondDecl->getSourceRange();
9977         }
9978         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9979             << SecondModule << SecondRange << DR.SecondDiffType;
9980       };
9981 
9982   // Issue any pending ODR-failure diagnostics.
9983   for (auto &Merge : OdrMergeFailures) {
9984     // If we've already pointed out a specific problem with this class, don't
9985     // bother issuing a general "something's different" diagnostic.
9986     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9987       continue;
9988 
9989     bool Diagnosed = false;
9990     CXXRecordDecl *FirstRecord = Merge.first;
9991     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9992     for (auto &RecordPair : Merge.second) {
9993       CXXRecordDecl *SecondRecord = RecordPair.first;
9994       // Multiple different declarations got merged together; tell the user
9995       // where they came from.
9996       if (FirstRecord == SecondRecord)
9997         continue;
9998 
9999       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10000 
10001       auto *FirstDD = FirstRecord->DefinitionData;
10002       auto *SecondDD = RecordPair.second;
10003 
10004       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10005 
10006       // Diagnostics from DefinitionData are emitted here.
10007       if (FirstDD != SecondDD) {
10008         enum ODRDefinitionDataDifference {
10009           NumBases,
10010           NumVBases,
10011           BaseType,
10012           BaseVirtual,
10013           BaseAccess,
10014         };
10015         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10016                                  this](SourceLocation Loc, SourceRange Range,
10017                                        ODRDefinitionDataDifference DiffType) {
10018           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10019                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10020                  << DiffType;
10021         };
10022         auto ODRDiagBaseNote = [&SecondModule,
10023                                 this](SourceLocation Loc, SourceRange Range,
10024                                       ODRDefinitionDataDifference DiffType) {
10025           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10026                  << SecondModule << Range << DiffType;
10027         };
10028 
10029         unsigned FirstNumBases = FirstDD->NumBases;
10030         unsigned FirstNumVBases = FirstDD->NumVBases;
10031         unsigned SecondNumBases = SecondDD->NumBases;
10032         unsigned SecondNumVBases = SecondDD->NumVBases;
10033 
10034         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10035           unsigned NumBases = DD->NumBases;
10036           if (NumBases == 0) return SourceRange();
10037           auto bases = DD->bases();
10038           return SourceRange(bases[0].getBeginLoc(),
10039                              bases[NumBases - 1].getEndLoc());
10040         };
10041 
10042         if (FirstNumBases != SecondNumBases) {
10043           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10044                            NumBases)
10045               << FirstNumBases;
10046           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10047                           NumBases)
10048               << SecondNumBases;
10049           Diagnosed = true;
10050           break;
10051         }
10052 
10053         if (FirstNumVBases != SecondNumVBases) {
10054           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10055                            NumVBases)
10056               << FirstNumVBases;
10057           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10058                           NumVBases)
10059               << SecondNumVBases;
10060           Diagnosed = true;
10061           break;
10062         }
10063 
10064         auto FirstBases = FirstDD->bases();
10065         auto SecondBases = SecondDD->bases();
10066         unsigned i = 0;
10067         for (i = 0; i < FirstNumBases; ++i) {
10068           auto FirstBase = FirstBases[i];
10069           auto SecondBase = SecondBases[i];
10070           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10071               ComputeQualTypeODRHash(SecondBase.getType())) {
10072             ODRDiagBaseError(FirstRecord->getLocation(),
10073                              FirstBase.getSourceRange(), BaseType)
10074                 << (i + 1) << FirstBase.getType();
10075             ODRDiagBaseNote(SecondRecord->getLocation(),
10076                             SecondBase.getSourceRange(), BaseType)
10077                 << (i + 1) << SecondBase.getType();
10078             break;
10079           }
10080 
10081           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10082             ODRDiagBaseError(FirstRecord->getLocation(),
10083                              FirstBase.getSourceRange(), BaseVirtual)
10084                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10085             ODRDiagBaseNote(SecondRecord->getLocation(),
10086                             SecondBase.getSourceRange(), BaseVirtual)
10087                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10088             break;
10089           }
10090 
10091           if (FirstBase.getAccessSpecifierAsWritten() !=
10092               SecondBase.getAccessSpecifierAsWritten()) {
10093             ODRDiagBaseError(FirstRecord->getLocation(),
10094                              FirstBase.getSourceRange(), BaseAccess)
10095                 << (i + 1) << FirstBase.getType()
10096                 << (int)FirstBase.getAccessSpecifierAsWritten();
10097             ODRDiagBaseNote(SecondRecord->getLocation(),
10098                             SecondBase.getSourceRange(), BaseAccess)
10099                 << (i + 1) << SecondBase.getType()
10100                 << (int)SecondBase.getAccessSpecifierAsWritten();
10101             break;
10102           }
10103         }
10104 
10105         if (i != FirstNumBases) {
10106           Diagnosed = true;
10107           break;
10108         }
10109       }
10110 
10111       const ClassTemplateDecl *FirstTemplate =
10112           FirstRecord->getDescribedClassTemplate();
10113       const ClassTemplateDecl *SecondTemplate =
10114           SecondRecord->getDescribedClassTemplate();
10115 
10116       assert(!FirstTemplate == !SecondTemplate &&
10117              "Both pointers should be null or non-null");
10118 
10119       enum ODRTemplateDifference {
10120         ParamEmptyName,
10121         ParamName,
10122         ParamSingleDefaultArgument,
10123         ParamDifferentDefaultArgument,
10124       };
10125 
10126       if (FirstTemplate && SecondTemplate) {
10127         DeclHashes FirstTemplateHashes;
10128         DeclHashes SecondTemplateHashes;
10129 
10130         auto PopulateTemplateParameterHashs =
10131             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10132                                      const ClassTemplateDecl *TD) {
10133               for (auto *D : TD->getTemplateParameters()->asArray()) {
10134                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10135               }
10136             };
10137 
10138         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10139         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10140 
10141         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10142                "Number of template parameters should be equal.");
10143 
10144         auto FirstIt = FirstTemplateHashes.begin();
10145         auto FirstEnd = FirstTemplateHashes.end();
10146         auto SecondIt = SecondTemplateHashes.begin();
10147         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10148           if (FirstIt->second == SecondIt->second)
10149             continue;
10150 
10151           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10152                                           SourceLocation Loc, SourceRange Range,
10153                                           ODRTemplateDifference DiffType) {
10154             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10155                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10156                    << DiffType;
10157           };
10158           auto ODRDiagTemplateNote = [&SecondModule, this](
10159                                          SourceLocation Loc, SourceRange Range,
10160                                          ODRTemplateDifference DiffType) {
10161             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10162                    << SecondModule << Range << DiffType;
10163           };
10164 
10165           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10166           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10167 
10168           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10169                  "Parameter Decl's should be the same kind.");
10170 
10171           DeclarationName FirstName = FirstDecl->getDeclName();
10172           DeclarationName SecondName = SecondDecl->getDeclName();
10173 
10174           if (FirstName != SecondName) {
10175             const bool FirstNameEmpty =
10176                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10177             const bool SecondNameEmpty =
10178                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10179             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10180                    "Both template parameters cannot be unnamed.");
10181             ODRDiagTemplateError(FirstDecl->getLocation(),
10182                                  FirstDecl->getSourceRange(),
10183                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10184                 << FirstName;
10185             ODRDiagTemplateNote(SecondDecl->getLocation(),
10186                                 SecondDecl->getSourceRange(),
10187                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10188                 << SecondName;
10189             break;
10190           }
10191 
10192           switch (FirstDecl->getKind()) {
10193           default:
10194             llvm_unreachable("Invalid template parameter type.");
10195           case Decl::TemplateTypeParm: {
10196             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10197             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10198             const bool HasFirstDefaultArgument =
10199                 FirstParam->hasDefaultArgument() &&
10200                 !FirstParam->defaultArgumentWasInherited();
10201             const bool HasSecondDefaultArgument =
10202                 SecondParam->hasDefaultArgument() &&
10203                 !SecondParam->defaultArgumentWasInherited();
10204 
10205             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10206               ODRDiagTemplateError(FirstDecl->getLocation(),
10207                                    FirstDecl->getSourceRange(),
10208                                    ParamSingleDefaultArgument)
10209                   << HasFirstDefaultArgument;
10210               ODRDiagTemplateNote(SecondDecl->getLocation(),
10211                                   SecondDecl->getSourceRange(),
10212                                   ParamSingleDefaultArgument)
10213                   << HasSecondDefaultArgument;
10214               break;
10215             }
10216 
10217             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10218                    "Expecting default arguments.");
10219 
10220             ODRDiagTemplateError(FirstDecl->getLocation(),
10221                                  FirstDecl->getSourceRange(),
10222                                  ParamDifferentDefaultArgument);
10223             ODRDiagTemplateNote(SecondDecl->getLocation(),
10224                                 SecondDecl->getSourceRange(),
10225                                 ParamDifferentDefaultArgument);
10226 
10227             break;
10228           }
10229           case Decl::NonTypeTemplateParm: {
10230             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10231             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10232             const bool HasFirstDefaultArgument =
10233                 FirstParam->hasDefaultArgument() &&
10234                 !FirstParam->defaultArgumentWasInherited();
10235             const bool HasSecondDefaultArgument =
10236                 SecondParam->hasDefaultArgument() &&
10237                 !SecondParam->defaultArgumentWasInherited();
10238 
10239             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10240               ODRDiagTemplateError(FirstDecl->getLocation(),
10241                                    FirstDecl->getSourceRange(),
10242                                    ParamSingleDefaultArgument)
10243                   << HasFirstDefaultArgument;
10244               ODRDiagTemplateNote(SecondDecl->getLocation(),
10245                                   SecondDecl->getSourceRange(),
10246                                   ParamSingleDefaultArgument)
10247                   << HasSecondDefaultArgument;
10248               break;
10249             }
10250 
10251             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10252                    "Expecting default arguments.");
10253 
10254             ODRDiagTemplateError(FirstDecl->getLocation(),
10255                                  FirstDecl->getSourceRange(),
10256                                  ParamDifferentDefaultArgument);
10257             ODRDiagTemplateNote(SecondDecl->getLocation(),
10258                                 SecondDecl->getSourceRange(),
10259                                 ParamDifferentDefaultArgument);
10260 
10261             break;
10262           }
10263           case Decl::TemplateTemplateParm: {
10264             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10265             const auto *SecondParam =
10266                 cast<TemplateTemplateParmDecl>(SecondDecl);
10267             const bool HasFirstDefaultArgument =
10268                 FirstParam->hasDefaultArgument() &&
10269                 !FirstParam->defaultArgumentWasInherited();
10270             const bool HasSecondDefaultArgument =
10271                 SecondParam->hasDefaultArgument() &&
10272                 !SecondParam->defaultArgumentWasInherited();
10273 
10274             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10275               ODRDiagTemplateError(FirstDecl->getLocation(),
10276                                    FirstDecl->getSourceRange(),
10277                                    ParamSingleDefaultArgument)
10278                   << HasFirstDefaultArgument;
10279               ODRDiagTemplateNote(SecondDecl->getLocation(),
10280                                   SecondDecl->getSourceRange(),
10281                                   ParamSingleDefaultArgument)
10282                   << HasSecondDefaultArgument;
10283               break;
10284             }
10285 
10286             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10287                    "Expecting default arguments.");
10288 
10289             ODRDiagTemplateError(FirstDecl->getLocation(),
10290                                  FirstDecl->getSourceRange(),
10291                                  ParamDifferentDefaultArgument);
10292             ODRDiagTemplateNote(SecondDecl->getLocation(),
10293                                 SecondDecl->getSourceRange(),
10294                                 ParamDifferentDefaultArgument);
10295 
10296             break;
10297           }
10298           }
10299 
10300           break;
10301         }
10302 
10303         if (FirstIt != FirstEnd) {
10304           Diagnosed = true;
10305           break;
10306         }
10307       }
10308 
10309       DeclHashes FirstHashes;
10310       DeclHashes SecondHashes;
10311       const DeclContext *DC = FirstRecord;
10312       PopulateHashes(FirstHashes, FirstRecord, DC);
10313       PopulateHashes(SecondHashes, SecondRecord, DC);
10314 
10315       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10316       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10317       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10318       Decl *FirstDecl = DR.FirstDecl;
10319       Decl *SecondDecl = DR.SecondDecl;
10320 
10321       if (FirstDiffType == Other || SecondDiffType == Other) {
10322         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10323                               SecondModule);
10324         Diagnosed = true;
10325         break;
10326       }
10327 
10328       if (FirstDiffType != SecondDiffType) {
10329         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10330                             SecondModule);
10331         Diagnosed = true;
10332         break;
10333       }
10334 
10335       assert(FirstDiffType == SecondDiffType);
10336 
10337       switch (FirstDiffType) {
10338       case Other:
10339       case EndOfClass:
10340       case PublicSpecifer:
10341       case PrivateSpecifer:
10342       case ProtectedSpecifer:
10343         llvm_unreachable("Invalid diff type");
10344 
10345       case StaticAssert: {
10346         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10347         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10348 
10349         Expr *FirstExpr = FirstSA->getAssertExpr();
10350         Expr *SecondExpr = SecondSA->getAssertExpr();
10351         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10352         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10353         if (FirstODRHash != SecondODRHash) {
10354           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10355                            FirstExpr->getSourceRange(), StaticAssertCondition);
10356           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10357                           SecondExpr->getSourceRange(), StaticAssertCondition);
10358           Diagnosed = true;
10359           break;
10360         }
10361 
10362         StringLiteral *FirstStr = FirstSA->getMessage();
10363         StringLiteral *SecondStr = SecondSA->getMessage();
10364         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10365         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10366           SourceLocation FirstLoc, SecondLoc;
10367           SourceRange FirstRange, SecondRange;
10368           if (FirstStr) {
10369             FirstLoc = FirstStr->getBeginLoc();
10370             FirstRange = FirstStr->getSourceRange();
10371           } else {
10372             FirstLoc = FirstSA->getBeginLoc();
10373             FirstRange = FirstSA->getSourceRange();
10374           }
10375           if (SecondStr) {
10376             SecondLoc = SecondStr->getBeginLoc();
10377             SecondRange = SecondStr->getSourceRange();
10378           } else {
10379             SecondLoc = SecondSA->getBeginLoc();
10380             SecondRange = SecondSA->getSourceRange();
10381           }
10382           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10383                            StaticAssertOnlyMessage)
10384               << (FirstStr == nullptr);
10385           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10386                           StaticAssertOnlyMessage)
10387               << (SecondStr == nullptr);
10388           Diagnosed = true;
10389           break;
10390         }
10391 
10392         if (FirstStr && SecondStr &&
10393             FirstStr->getString() != SecondStr->getString()) {
10394           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10395                            FirstStr->getSourceRange(), StaticAssertMessage);
10396           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10397                           SecondStr->getSourceRange(), StaticAssertMessage);
10398           Diagnosed = true;
10399           break;
10400         }
10401         break;
10402       }
10403       case Field: {
10404         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10405                                  cast<FieldDecl>(FirstDecl),
10406                                  cast<FieldDecl>(SecondDecl));
10407         break;
10408       }
10409       case CXXMethod: {
10410         enum {
10411           DiagMethod,
10412           DiagConstructor,
10413           DiagDestructor,
10414         } FirstMethodType,
10415             SecondMethodType;
10416         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10417           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10418           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10419           return DiagMethod;
10420         };
10421         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10422         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10423         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10424         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10425         auto FirstName = FirstMethod->getDeclName();
10426         auto SecondName = SecondMethod->getDeclName();
10427         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10428           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10429                            FirstMethod->getSourceRange(), MethodName)
10430               << FirstMethodType << FirstName;
10431           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10432                           SecondMethod->getSourceRange(), MethodName)
10433               << SecondMethodType << SecondName;
10434 
10435           Diagnosed = true;
10436           break;
10437         }
10438 
10439         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10440         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10441         if (FirstDeleted != SecondDeleted) {
10442           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10443                            FirstMethod->getSourceRange(), MethodDeleted)
10444               << FirstMethodType << FirstName << FirstDeleted;
10445 
10446           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10447                           SecondMethod->getSourceRange(), MethodDeleted)
10448               << SecondMethodType << SecondName << SecondDeleted;
10449           Diagnosed = true;
10450           break;
10451         }
10452 
10453         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10454         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10455         if (FirstDefaulted != SecondDefaulted) {
10456           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10457                            FirstMethod->getSourceRange(), MethodDefaulted)
10458               << FirstMethodType << FirstName << FirstDefaulted;
10459 
10460           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10461                           SecondMethod->getSourceRange(), MethodDefaulted)
10462               << SecondMethodType << SecondName << SecondDefaulted;
10463           Diagnosed = true;
10464           break;
10465         }
10466 
10467         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10468         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10469         const bool FirstPure = FirstMethod->isPure();
10470         const bool SecondPure = SecondMethod->isPure();
10471         if ((FirstVirtual || SecondVirtual) &&
10472             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10473           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10474                            FirstMethod->getSourceRange(), MethodVirtual)
10475               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10476           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10477                           SecondMethod->getSourceRange(), MethodVirtual)
10478               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10479           Diagnosed = true;
10480           break;
10481         }
10482 
10483         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10484         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10485         // class needs to be checked instead.
10486         const auto FirstStorage = FirstMethod->getStorageClass();
10487         const auto SecondStorage = SecondMethod->getStorageClass();
10488         const bool FirstStatic = FirstStorage == SC_Static;
10489         const bool SecondStatic = SecondStorage == SC_Static;
10490         if (FirstStatic != SecondStatic) {
10491           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10492                            FirstMethod->getSourceRange(), MethodStatic)
10493               << FirstMethodType << FirstName << FirstStatic;
10494           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10495                           SecondMethod->getSourceRange(), MethodStatic)
10496               << SecondMethodType << SecondName << SecondStatic;
10497           Diagnosed = true;
10498           break;
10499         }
10500 
10501         const bool FirstVolatile = FirstMethod->isVolatile();
10502         const bool SecondVolatile = SecondMethod->isVolatile();
10503         if (FirstVolatile != SecondVolatile) {
10504           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10505                            FirstMethod->getSourceRange(), MethodVolatile)
10506               << FirstMethodType << FirstName << FirstVolatile;
10507           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10508                           SecondMethod->getSourceRange(), MethodVolatile)
10509               << SecondMethodType << SecondName << SecondVolatile;
10510           Diagnosed = true;
10511           break;
10512         }
10513 
10514         const bool FirstConst = FirstMethod->isConst();
10515         const bool SecondConst = SecondMethod->isConst();
10516         if (FirstConst != SecondConst) {
10517           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10518                            FirstMethod->getSourceRange(), MethodConst)
10519               << FirstMethodType << FirstName << FirstConst;
10520           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10521                           SecondMethod->getSourceRange(), MethodConst)
10522               << SecondMethodType << SecondName << SecondConst;
10523           Diagnosed = true;
10524           break;
10525         }
10526 
10527         const bool FirstInline = FirstMethod->isInlineSpecified();
10528         const bool SecondInline = SecondMethod->isInlineSpecified();
10529         if (FirstInline != SecondInline) {
10530           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10531                            FirstMethod->getSourceRange(), MethodInline)
10532               << FirstMethodType << FirstName << FirstInline;
10533           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10534                           SecondMethod->getSourceRange(), MethodInline)
10535               << SecondMethodType << SecondName << SecondInline;
10536           Diagnosed = true;
10537           break;
10538         }
10539 
10540         const unsigned FirstNumParameters = FirstMethod->param_size();
10541         const unsigned SecondNumParameters = SecondMethod->param_size();
10542         if (FirstNumParameters != SecondNumParameters) {
10543           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10544                            FirstMethod->getSourceRange(),
10545                            MethodNumberParameters)
10546               << FirstMethodType << FirstName << FirstNumParameters;
10547           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10548                           SecondMethod->getSourceRange(),
10549                           MethodNumberParameters)
10550               << SecondMethodType << SecondName << SecondNumParameters;
10551           Diagnosed = true;
10552           break;
10553         }
10554 
10555         // Need this status boolean to know when break out of the switch.
10556         bool ParameterMismatch = false;
10557         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10558           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10559           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10560 
10561           QualType FirstParamType = FirstParam->getType();
10562           QualType SecondParamType = SecondParam->getType();
10563           if (FirstParamType != SecondParamType &&
10564               ComputeQualTypeODRHash(FirstParamType) !=
10565                   ComputeQualTypeODRHash(SecondParamType)) {
10566             if (const DecayedType *ParamDecayedType =
10567                     FirstParamType->getAs<DecayedType>()) {
10568               ODRDiagDeclError(
10569                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10570                   FirstMethod->getSourceRange(), MethodParameterType)
10571                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10572                   << true << ParamDecayedType->getOriginalType();
10573             } else {
10574               ODRDiagDeclError(
10575                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10576                   FirstMethod->getSourceRange(), MethodParameterType)
10577                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10578                   << false;
10579             }
10580 
10581             if (const DecayedType *ParamDecayedType =
10582                     SecondParamType->getAs<DecayedType>()) {
10583               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10584                               SecondMethod->getSourceRange(),
10585                               MethodParameterType)
10586                   << SecondMethodType << SecondName << (I + 1)
10587                   << SecondParamType << true
10588                   << ParamDecayedType->getOriginalType();
10589             } else {
10590               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10591                               SecondMethod->getSourceRange(),
10592                               MethodParameterType)
10593                   << SecondMethodType << SecondName << (I + 1)
10594                   << SecondParamType << false;
10595             }
10596             ParameterMismatch = true;
10597             break;
10598           }
10599 
10600           DeclarationName FirstParamName = FirstParam->getDeclName();
10601           DeclarationName SecondParamName = SecondParam->getDeclName();
10602           if (FirstParamName != SecondParamName) {
10603             ODRDiagDeclError(FirstRecord, FirstModule,
10604                              FirstMethod->getLocation(),
10605                              FirstMethod->getSourceRange(), MethodParameterName)
10606                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10607             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10608                             SecondMethod->getSourceRange(), MethodParameterName)
10609                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10610             ParameterMismatch = true;
10611             break;
10612           }
10613 
10614           const Expr *FirstInit = FirstParam->getInit();
10615           const Expr *SecondInit = SecondParam->getInit();
10616           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10617             ODRDiagDeclError(FirstRecord, FirstModule,
10618                              FirstMethod->getLocation(),
10619                              FirstMethod->getSourceRange(),
10620                              MethodParameterSingleDefaultArgument)
10621                 << FirstMethodType << FirstName << (I + 1)
10622                 << (FirstInit == nullptr)
10623                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10624             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10625                             SecondMethod->getSourceRange(),
10626                             MethodParameterSingleDefaultArgument)
10627                 << SecondMethodType << SecondName << (I + 1)
10628                 << (SecondInit == nullptr)
10629                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10630             ParameterMismatch = true;
10631             break;
10632           }
10633 
10634           if (FirstInit && SecondInit &&
10635               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10636             ODRDiagDeclError(FirstRecord, FirstModule,
10637                              FirstMethod->getLocation(),
10638                              FirstMethod->getSourceRange(),
10639                              MethodParameterDifferentDefaultArgument)
10640                 << FirstMethodType << FirstName << (I + 1)
10641                 << FirstInit->getSourceRange();
10642             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10643                             SecondMethod->getSourceRange(),
10644                             MethodParameterDifferentDefaultArgument)
10645                 << SecondMethodType << SecondName << (I + 1)
10646                 << SecondInit->getSourceRange();
10647             ParameterMismatch = true;
10648             break;
10649 
10650           }
10651         }
10652 
10653         if (ParameterMismatch) {
10654           Diagnosed = true;
10655           break;
10656         }
10657 
10658         const auto *FirstTemplateArgs =
10659             FirstMethod->getTemplateSpecializationArgs();
10660         const auto *SecondTemplateArgs =
10661             SecondMethod->getTemplateSpecializationArgs();
10662 
10663         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10664             (!FirstTemplateArgs && SecondTemplateArgs)) {
10665           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10666                            FirstMethod->getSourceRange(),
10667                            MethodNoTemplateArguments)
10668               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10669           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10670                           SecondMethod->getSourceRange(),
10671                           MethodNoTemplateArguments)
10672               << SecondMethodType << SecondName
10673               << (SecondTemplateArgs != nullptr);
10674 
10675           Diagnosed = true;
10676           break;
10677         }
10678 
10679         if (FirstTemplateArgs && SecondTemplateArgs) {
10680           // Remove pack expansions from argument list.
10681           auto ExpandTemplateArgumentList =
10682               [](const TemplateArgumentList *TAL) {
10683                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10684                 for (const TemplateArgument &TA : TAL->asArray()) {
10685                   if (TA.getKind() != TemplateArgument::Pack) {
10686                     ExpandedList.push_back(&TA);
10687                     continue;
10688                   }
10689                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10690                     ExpandedList.push_back(&PackTA);
10691                   }
10692                 }
10693                 return ExpandedList;
10694               };
10695           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10696               ExpandTemplateArgumentList(FirstTemplateArgs);
10697           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10698               ExpandTemplateArgumentList(SecondTemplateArgs);
10699 
10700           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10701             ODRDiagDeclError(FirstRecord, FirstModule,
10702                              FirstMethod->getLocation(),
10703                              FirstMethod->getSourceRange(),
10704                              MethodDifferentNumberTemplateArguments)
10705                 << FirstMethodType << FirstName
10706                 << (unsigned)FirstExpandedList.size();
10707             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10708                             SecondMethod->getSourceRange(),
10709                             MethodDifferentNumberTemplateArguments)
10710                 << SecondMethodType << SecondName
10711                 << (unsigned)SecondExpandedList.size();
10712 
10713             Diagnosed = true;
10714             break;
10715           }
10716 
10717           bool TemplateArgumentMismatch = false;
10718           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10719             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10720                                    &SecondTA = *SecondExpandedList[i];
10721             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10722                 ComputeTemplateArgumentODRHash(SecondTA)) {
10723               continue;
10724             }
10725 
10726             ODRDiagDeclError(
10727                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10728                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10729                 << FirstMethodType << FirstName << FirstTA << i + 1;
10730             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10731                             SecondMethod->getSourceRange(),
10732                             MethodDifferentTemplateArgument)
10733                 << SecondMethodType << SecondName << SecondTA << i + 1;
10734 
10735             TemplateArgumentMismatch = true;
10736             break;
10737           }
10738 
10739           if (TemplateArgumentMismatch) {
10740             Diagnosed = true;
10741             break;
10742           }
10743         }
10744 
10745         // Compute the hash of the method as if it has no body.
10746         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10747           Hash.clear();
10748           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10749           return Hash.CalculateHash();
10750         };
10751 
10752         // Compare the hash generated to the hash stored.  A difference means
10753         // that a body was present in the original source.  Due to merging,
10754         // the stardard way of detecting a body will not work.
10755         const bool HasFirstBody =
10756             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10757         const bool HasSecondBody =
10758             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10759 
10760         if (HasFirstBody != HasSecondBody) {
10761           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10762                            FirstMethod->getSourceRange(), MethodSingleBody)
10763               << FirstMethodType << FirstName << HasFirstBody;
10764           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10765                           SecondMethod->getSourceRange(), MethodSingleBody)
10766               << SecondMethodType << SecondName << HasSecondBody;
10767           Diagnosed = true;
10768           break;
10769         }
10770 
10771         if (HasFirstBody && HasSecondBody) {
10772           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10773                            FirstMethod->getSourceRange(), MethodDifferentBody)
10774               << FirstMethodType << FirstName;
10775           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10776                           SecondMethod->getSourceRange(), MethodDifferentBody)
10777               << SecondMethodType << SecondName;
10778           Diagnosed = true;
10779           break;
10780         }
10781 
10782         break;
10783       }
10784       case TypeAlias:
10785       case TypeDef: {
10786         Diagnosed = ODRDiagTypeDefOrAlias(
10787             FirstRecord, FirstModule, SecondModule,
10788             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10789             FirstDiffType == TypeAlias);
10790         break;
10791       }
10792       case Var: {
10793         Diagnosed =
10794             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10795                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10796         break;
10797       }
10798       case Friend: {
10799         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10800         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10801 
10802         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10803         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10804 
10805         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10806         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10807 
10808         if (FirstND && SecondND) {
10809           ODRDiagDeclError(FirstRecord, FirstModule,
10810                            FirstFriend->getFriendLoc(),
10811                            FirstFriend->getSourceRange(), FriendFunction)
10812               << FirstND;
10813           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10814                           SecondFriend->getSourceRange(), FriendFunction)
10815               << SecondND;
10816 
10817           Diagnosed = true;
10818           break;
10819         }
10820 
10821         if (FirstTSI && SecondTSI) {
10822           QualType FirstFriendType = FirstTSI->getType();
10823           QualType SecondFriendType = SecondTSI->getType();
10824           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10825                  ComputeQualTypeODRHash(SecondFriendType));
10826           ODRDiagDeclError(FirstRecord, FirstModule,
10827                            FirstFriend->getFriendLoc(),
10828                            FirstFriend->getSourceRange(), FriendType)
10829               << FirstFriendType;
10830           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10831                           SecondFriend->getSourceRange(), FriendType)
10832               << SecondFriendType;
10833           Diagnosed = true;
10834           break;
10835         }
10836 
10837         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10838                          FirstFriend->getSourceRange(), FriendTypeFunction)
10839             << (FirstTSI == nullptr);
10840         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10841                         SecondFriend->getSourceRange(), FriendTypeFunction)
10842             << (SecondTSI == nullptr);
10843 
10844         Diagnosed = true;
10845         break;
10846       }
10847       case FunctionTemplate: {
10848         FunctionTemplateDecl *FirstTemplate =
10849             cast<FunctionTemplateDecl>(FirstDecl);
10850         FunctionTemplateDecl *SecondTemplate =
10851             cast<FunctionTemplateDecl>(SecondDecl);
10852 
10853         TemplateParameterList *FirstTPL =
10854             FirstTemplate->getTemplateParameters();
10855         TemplateParameterList *SecondTPL =
10856             SecondTemplate->getTemplateParameters();
10857 
10858         if (FirstTPL->size() != SecondTPL->size()) {
10859           ODRDiagDeclError(FirstRecord, FirstModule,
10860                            FirstTemplate->getLocation(),
10861                            FirstTemplate->getSourceRange(),
10862                            FunctionTemplateDifferentNumberParameters)
10863               << FirstTemplate << FirstTPL->size();
10864           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10865                           SecondTemplate->getSourceRange(),
10866                           FunctionTemplateDifferentNumberParameters)
10867               << SecondTemplate << SecondTPL->size();
10868 
10869           Diagnosed = true;
10870           break;
10871         }
10872 
10873         bool ParameterMismatch = false;
10874         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10875           NamedDecl *FirstParam = FirstTPL->getParam(i);
10876           NamedDecl *SecondParam = SecondTPL->getParam(i);
10877 
10878           if (FirstParam->getKind() != SecondParam->getKind()) {
10879             enum {
10880               TemplateTypeParameter,
10881               NonTypeTemplateParameter,
10882               TemplateTemplateParameter,
10883             };
10884             auto GetParamType = [](NamedDecl *D) {
10885               switch (D->getKind()) {
10886                 default:
10887                   llvm_unreachable("Unexpected template parameter type");
10888                 case Decl::TemplateTypeParm:
10889                   return TemplateTypeParameter;
10890                 case Decl::NonTypeTemplateParm:
10891                   return NonTypeTemplateParameter;
10892                 case Decl::TemplateTemplateParm:
10893                   return TemplateTemplateParameter;
10894               }
10895             };
10896 
10897             ODRDiagDeclError(FirstRecord, FirstModule,
10898                              FirstTemplate->getLocation(),
10899                              FirstTemplate->getSourceRange(),
10900                              FunctionTemplateParameterDifferentKind)
10901                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10902             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10903                             SecondTemplate->getSourceRange(),
10904                             FunctionTemplateParameterDifferentKind)
10905                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10906 
10907             ParameterMismatch = true;
10908             break;
10909           }
10910 
10911           if (FirstParam->getName() != SecondParam->getName()) {
10912             ODRDiagDeclError(
10913                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10914                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10915                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10916                 << FirstParam;
10917             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10918                             SecondTemplate->getSourceRange(),
10919                             FunctionTemplateParameterName)
10920                 << SecondTemplate << (i + 1)
10921                 << (bool)SecondParam->getIdentifier() << SecondParam;
10922             ParameterMismatch = true;
10923             break;
10924           }
10925 
10926           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10927               isa<TemplateTypeParmDecl>(SecondParam)) {
10928             TemplateTypeParmDecl *FirstTTPD =
10929                 cast<TemplateTypeParmDecl>(FirstParam);
10930             TemplateTypeParmDecl *SecondTTPD =
10931                 cast<TemplateTypeParmDecl>(SecondParam);
10932             bool HasFirstDefaultArgument =
10933                 FirstTTPD->hasDefaultArgument() &&
10934                 !FirstTTPD->defaultArgumentWasInherited();
10935             bool HasSecondDefaultArgument =
10936                 SecondTTPD->hasDefaultArgument() &&
10937                 !SecondTTPD->defaultArgumentWasInherited();
10938             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10939               ODRDiagDeclError(FirstRecord, FirstModule,
10940                                FirstTemplate->getLocation(),
10941                                FirstTemplate->getSourceRange(),
10942                                FunctionTemplateParameterSingleDefaultArgument)
10943                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10944               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10945                               SecondTemplate->getSourceRange(),
10946                               FunctionTemplateParameterSingleDefaultArgument)
10947                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10948               ParameterMismatch = true;
10949               break;
10950             }
10951 
10952             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10953               QualType FirstType = FirstTTPD->getDefaultArgument();
10954               QualType SecondType = SecondTTPD->getDefaultArgument();
10955               if (ComputeQualTypeODRHash(FirstType) !=
10956                   ComputeQualTypeODRHash(SecondType)) {
10957                 ODRDiagDeclError(
10958                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10959                     FirstTemplate->getSourceRange(),
10960                     FunctionTemplateParameterDifferentDefaultArgument)
10961                     << FirstTemplate << (i + 1) << FirstType;
10962                 ODRDiagDeclNote(
10963                     SecondModule, SecondTemplate->getLocation(),
10964                     SecondTemplate->getSourceRange(),
10965                     FunctionTemplateParameterDifferentDefaultArgument)
10966                     << SecondTemplate << (i + 1) << SecondType;
10967                 ParameterMismatch = true;
10968                 break;
10969               }
10970             }
10971 
10972             if (FirstTTPD->isParameterPack() !=
10973                 SecondTTPD->isParameterPack()) {
10974               ODRDiagDeclError(FirstRecord, FirstModule,
10975                                FirstTemplate->getLocation(),
10976                                FirstTemplate->getSourceRange(),
10977                                FunctionTemplatePackParameter)
10978                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10979               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10980                               SecondTemplate->getSourceRange(),
10981                               FunctionTemplatePackParameter)
10982                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10983               ParameterMismatch = true;
10984               break;
10985             }
10986           }
10987 
10988           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10989               isa<TemplateTemplateParmDecl>(SecondParam)) {
10990             TemplateTemplateParmDecl *FirstTTPD =
10991                 cast<TemplateTemplateParmDecl>(FirstParam);
10992             TemplateTemplateParmDecl *SecondTTPD =
10993                 cast<TemplateTemplateParmDecl>(SecondParam);
10994 
10995             TemplateParameterList *FirstTPL =
10996                 FirstTTPD->getTemplateParameters();
10997             TemplateParameterList *SecondTPL =
10998                 SecondTTPD->getTemplateParameters();
10999 
11000             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11001                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11002               ODRDiagDeclError(FirstRecord, FirstModule,
11003                                FirstTemplate->getLocation(),
11004                                FirstTemplate->getSourceRange(),
11005                                FunctionTemplateParameterDifferentType)
11006                   << FirstTemplate << (i + 1);
11007               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11008                               SecondTemplate->getSourceRange(),
11009                               FunctionTemplateParameterDifferentType)
11010                   << SecondTemplate << (i + 1);
11011               ParameterMismatch = true;
11012               break;
11013             }
11014 
11015             bool HasFirstDefaultArgument =
11016                 FirstTTPD->hasDefaultArgument() &&
11017                 !FirstTTPD->defaultArgumentWasInherited();
11018             bool HasSecondDefaultArgument =
11019                 SecondTTPD->hasDefaultArgument() &&
11020                 !SecondTTPD->defaultArgumentWasInherited();
11021             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11022               ODRDiagDeclError(FirstRecord, FirstModule,
11023                                FirstTemplate->getLocation(),
11024                                FirstTemplate->getSourceRange(),
11025                                FunctionTemplateParameterSingleDefaultArgument)
11026                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11027               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11028                               SecondTemplate->getSourceRange(),
11029                               FunctionTemplateParameterSingleDefaultArgument)
11030                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11031               ParameterMismatch = true;
11032               break;
11033             }
11034 
11035             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11036               TemplateArgument FirstTA =
11037                   FirstTTPD->getDefaultArgument().getArgument();
11038               TemplateArgument SecondTA =
11039                   SecondTTPD->getDefaultArgument().getArgument();
11040               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11041                   ComputeTemplateArgumentODRHash(SecondTA)) {
11042                 ODRDiagDeclError(
11043                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11044                     FirstTemplate->getSourceRange(),
11045                     FunctionTemplateParameterDifferentDefaultArgument)
11046                     << FirstTemplate << (i + 1) << FirstTA;
11047                 ODRDiagDeclNote(
11048                     SecondModule, SecondTemplate->getLocation(),
11049                     SecondTemplate->getSourceRange(),
11050                     FunctionTemplateParameterDifferentDefaultArgument)
11051                     << SecondTemplate << (i + 1) << SecondTA;
11052                 ParameterMismatch = true;
11053                 break;
11054               }
11055             }
11056 
11057             if (FirstTTPD->isParameterPack() !=
11058                 SecondTTPD->isParameterPack()) {
11059               ODRDiagDeclError(FirstRecord, FirstModule,
11060                                FirstTemplate->getLocation(),
11061                                FirstTemplate->getSourceRange(),
11062                                FunctionTemplatePackParameter)
11063                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11064               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11065                               SecondTemplate->getSourceRange(),
11066                               FunctionTemplatePackParameter)
11067                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11068               ParameterMismatch = true;
11069               break;
11070             }
11071           }
11072 
11073           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11074               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11075             NonTypeTemplateParmDecl *FirstNTTPD =
11076                 cast<NonTypeTemplateParmDecl>(FirstParam);
11077             NonTypeTemplateParmDecl *SecondNTTPD =
11078                 cast<NonTypeTemplateParmDecl>(SecondParam);
11079 
11080             QualType FirstType = FirstNTTPD->getType();
11081             QualType SecondType = SecondNTTPD->getType();
11082             if (ComputeQualTypeODRHash(FirstType) !=
11083                 ComputeQualTypeODRHash(SecondType)) {
11084               ODRDiagDeclError(FirstRecord, FirstModule,
11085                                FirstTemplate->getLocation(),
11086                                FirstTemplate->getSourceRange(),
11087                                FunctionTemplateParameterDifferentType)
11088                   << FirstTemplate << (i + 1);
11089               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11090                               SecondTemplate->getSourceRange(),
11091                               FunctionTemplateParameterDifferentType)
11092                   << SecondTemplate << (i + 1);
11093               ParameterMismatch = true;
11094               break;
11095             }
11096 
11097             bool HasFirstDefaultArgument =
11098                 FirstNTTPD->hasDefaultArgument() &&
11099                 !FirstNTTPD->defaultArgumentWasInherited();
11100             bool HasSecondDefaultArgument =
11101                 SecondNTTPD->hasDefaultArgument() &&
11102                 !SecondNTTPD->defaultArgumentWasInherited();
11103             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11104               ODRDiagDeclError(FirstRecord, FirstModule,
11105                                FirstTemplate->getLocation(),
11106                                FirstTemplate->getSourceRange(),
11107                                FunctionTemplateParameterSingleDefaultArgument)
11108                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11109               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11110                               SecondTemplate->getSourceRange(),
11111                               FunctionTemplateParameterSingleDefaultArgument)
11112                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11113               ParameterMismatch = true;
11114               break;
11115             }
11116 
11117             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11118               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11119               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11120               if (ComputeODRHash(FirstDefaultArgument) !=
11121                   ComputeODRHash(SecondDefaultArgument)) {
11122                 ODRDiagDeclError(
11123                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11124                     FirstTemplate->getSourceRange(),
11125                     FunctionTemplateParameterDifferentDefaultArgument)
11126                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11127                 ODRDiagDeclNote(
11128                     SecondModule, SecondTemplate->getLocation(),
11129                     SecondTemplate->getSourceRange(),
11130                     FunctionTemplateParameterDifferentDefaultArgument)
11131                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11132                 ParameterMismatch = true;
11133                 break;
11134               }
11135             }
11136 
11137             if (FirstNTTPD->isParameterPack() !=
11138                 SecondNTTPD->isParameterPack()) {
11139               ODRDiagDeclError(FirstRecord, FirstModule,
11140                                FirstTemplate->getLocation(),
11141                                FirstTemplate->getSourceRange(),
11142                                FunctionTemplatePackParameter)
11143                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11144               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11145                               SecondTemplate->getSourceRange(),
11146                               FunctionTemplatePackParameter)
11147                   << SecondTemplate << (i + 1)
11148                   << SecondNTTPD->isParameterPack();
11149               ParameterMismatch = true;
11150               break;
11151             }
11152           }
11153         }
11154 
11155         if (ParameterMismatch) {
11156           Diagnosed = true;
11157           break;
11158         }
11159 
11160         break;
11161       }
11162       }
11163 
11164       if (Diagnosed)
11165         continue;
11166 
11167       Diag(FirstDecl->getLocation(),
11168            diag::err_module_odr_violation_mismatch_decl_unknown)
11169           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11170           << FirstDecl->getSourceRange();
11171       Diag(SecondDecl->getLocation(),
11172            diag::note_module_odr_violation_mismatch_decl_unknown)
11173           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11174       Diagnosed = true;
11175     }
11176 
11177     if (!Diagnosed) {
11178       // All definitions are updates to the same declaration. This happens if a
11179       // module instantiates the declaration of a class template specialization
11180       // and two or more other modules instantiate its definition.
11181       //
11182       // FIXME: Indicate which modules had instantiations of this definition.
11183       // FIXME: How can this even happen?
11184       Diag(Merge.first->getLocation(),
11185            diag::err_module_odr_violation_different_instantiations)
11186         << Merge.first;
11187     }
11188   }
11189 
11190   // Issue ODR failures diagnostics for functions.
11191   for (auto &Merge : FunctionOdrMergeFailures) {
11192     enum ODRFunctionDifference {
11193       ReturnType,
11194       ParameterName,
11195       ParameterType,
11196       ParameterSingleDefaultArgument,
11197       ParameterDifferentDefaultArgument,
11198       FunctionBody,
11199     };
11200 
11201     FunctionDecl *FirstFunction = Merge.first;
11202     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11203 
11204     bool Diagnosed = false;
11205     for (auto &SecondFunction : Merge.second) {
11206 
11207       if (FirstFunction == SecondFunction)
11208         continue;
11209 
11210       std::string SecondModule =
11211           getOwningModuleNameForDiagnostic(SecondFunction);
11212 
11213       auto ODRDiagError = [FirstFunction, &FirstModule,
11214                            this](SourceLocation Loc, SourceRange Range,
11215                                  ODRFunctionDifference DiffType) {
11216         return Diag(Loc, diag::err_module_odr_violation_function)
11217                << FirstFunction << FirstModule.empty() << FirstModule << Range
11218                << DiffType;
11219       };
11220       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11221                                                SourceRange Range,
11222                                                ODRFunctionDifference DiffType) {
11223         return Diag(Loc, diag::note_module_odr_violation_function)
11224                << SecondModule << Range << DiffType;
11225       };
11226 
11227       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11228           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11229         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11230                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11231             << FirstFunction->getReturnType();
11232         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11233                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11234             << SecondFunction->getReturnType();
11235         Diagnosed = true;
11236         break;
11237       }
11238 
11239       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11240              "Merged functions with different number of parameters");
11241 
11242       auto ParamSize = FirstFunction->param_size();
11243       bool ParameterMismatch = false;
11244       for (unsigned I = 0; I < ParamSize; ++I) {
11245         auto *FirstParam = FirstFunction->getParamDecl(I);
11246         auto *SecondParam = SecondFunction->getParamDecl(I);
11247 
11248         assert(getContext().hasSameType(FirstParam->getType(),
11249                                       SecondParam->getType()) &&
11250                "Merged function has different parameter types.");
11251 
11252         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11253           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11254                        ParameterName)
11255               << I + 1 << FirstParam->getDeclName();
11256           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11257                       ParameterName)
11258               << I + 1 << SecondParam->getDeclName();
11259           ParameterMismatch = true;
11260           break;
11261         };
11262 
11263         QualType FirstParamType = FirstParam->getType();
11264         QualType SecondParamType = SecondParam->getType();
11265         if (FirstParamType != SecondParamType &&
11266             ComputeQualTypeODRHash(FirstParamType) !=
11267                 ComputeQualTypeODRHash(SecondParamType)) {
11268           if (const DecayedType *ParamDecayedType =
11269                   FirstParamType->getAs<DecayedType>()) {
11270             ODRDiagError(FirstParam->getLocation(),
11271                          FirstParam->getSourceRange(), ParameterType)
11272                 << (I + 1) << FirstParamType << true
11273                 << ParamDecayedType->getOriginalType();
11274           } else {
11275             ODRDiagError(FirstParam->getLocation(),
11276                          FirstParam->getSourceRange(), ParameterType)
11277                 << (I + 1) << FirstParamType << false;
11278           }
11279 
11280           if (const DecayedType *ParamDecayedType =
11281                   SecondParamType->getAs<DecayedType>()) {
11282             ODRDiagNote(SecondParam->getLocation(),
11283                         SecondParam->getSourceRange(), ParameterType)
11284                 << (I + 1) << SecondParamType << true
11285                 << ParamDecayedType->getOriginalType();
11286           } else {
11287             ODRDiagNote(SecondParam->getLocation(),
11288                         SecondParam->getSourceRange(), ParameterType)
11289                 << (I + 1) << SecondParamType << false;
11290           }
11291           ParameterMismatch = true;
11292           break;
11293         }
11294 
11295         const Expr *FirstInit = FirstParam->getInit();
11296         const Expr *SecondInit = SecondParam->getInit();
11297         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11298           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11299                        ParameterSingleDefaultArgument)
11300               << (I + 1) << (FirstInit == nullptr)
11301               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11302           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11303                       ParameterSingleDefaultArgument)
11304               << (I + 1) << (SecondInit == nullptr)
11305               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11306           ParameterMismatch = true;
11307           break;
11308         }
11309 
11310         if (FirstInit && SecondInit &&
11311             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11312           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11313                        ParameterDifferentDefaultArgument)
11314               << (I + 1) << FirstInit->getSourceRange();
11315           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11316                       ParameterDifferentDefaultArgument)
11317               << (I + 1) << SecondInit->getSourceRange();
11318           ParameterMismatch = true;
11319           break;
11320         }
11321 
11322         assert(ComputeSubDeclODRHash(FirstParam) ==
11323                    ComputeSubDeclODRHash(SecondParam) &&
11324                "Undiagnosed parameter difference.");
11325       }
11326 
11327       if (ParameterMismatch) {
11328         Diagnosed = true;
11329         break;
11330       }
11331 
11332       // If no error has been generated before now, assume the problem is in
11333       // the body and generate a message.
11334       ODRDiagError(FirstFunction->getLocation(),
11335                    FirstFunction->getSourceRange(), FunctionBody);
11336       ODRDiagNote(SecondFunction->getLocation(),
11337                   SecondFunction->getSourceRange(), FunctionBody);
11338       Diagnosed = true;
11339       break;
11340     }
11341     (void)Diagnosed;
11342     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11343   }
11344 
11345   // Issue ODR failures diagnostics for enums.
11346   for (auto &Merge : EnumOdrMergeFailures) {
11347     enum ODREnumDifference {
11348       SingleScopedEnum,
11349       EnumTagKeywordMismatch,
11350       SingleSpecifiedType,
11351       DifferentSpecifiedTypes,
11352       DifferentNumberEnumConstants,
11353       EnumConstantName,
11354       EnumConstantSingleInitilizer,
11355       EnumConstantDifferentInitilizer,
11356     };
11357 
11358     // If we've already pointed out a specific problem with this enum, don't
11359     // bother issuing a general "something's different" diagnostic.
11360     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11361       continue;
11362 
11363     EnumDecl *FirstEnum = Merge.first;
11364     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11365 
11366     using DeclHashes =
11367         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11368     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11369                               DeclHashes &Hashes, EnumDecl *Enum) {
11370       for (auto *D : Enum->decls()) {
11371         // Due to decl merging, the first EnumDecl is the parent of
11372         // Decls in both records.
11373         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11374           continue;
11375         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11376         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11377                             ComputeSubDeclODRHash(D));
11378       }
11379     };
11380     DeclHashes FirstHashes;
11381     PopulateHashes(FirstHashes, FirstEnum);
11382     bool Diagnosed = false;
11383     for (auto &SecondEnum : Merge.second) {
11384 
11385       if (FirstEnum == SecondEnum)
11386         continue;
11387 
11388       std::string SecondModule =
11389           getOwningModuleNameForDiagnostic(SecondEnum);
11390 
11391       auto ODRDiagError = [FirstEnum, &FirstModule,
11392                            this](SourceLocation Loc, SourceRange Range,
11393                                  ODREnumDifference DiffType) {
11394         return Diag(Loc, diag::err_module_odr_violation_enum)
11395                << FirstEnum << FirstModule.empty() << FirstModule << Range
11396                << DiffType;
11397       };
11398       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11399                                                SourceRange Range,
11400                                                ODREnumDifference DiffType) {
11401         return Diag(Loc, diag::note_module_odr_violation_enum)
11402                << SecondModule << Range << DiffType;
11403       };
11404 
11405       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11406         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11407                      SingleScopedEnum)
11408             << FirstEnum->isScoped();
11409         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11410                     SingleScopedEnum)
11411             << SecondEnum->isScoped();
11412         Diagnosed = true;
11413         continue;
11414       }
11415 
11416       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11417         if (FirstEnum->isScopedUsingClassTag() !=
11418             SecondEnum->isScopedUsingClassTag()) {
11419           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11420                        EnumTagKeywordMismatch)
11421               << FirstEnum->isScopedUsingClassTag();
11422           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11423                       EnumTagKeywordMismatch)
11424               << SecondEnum->isScopedUsingClassTag();
11425           Diagnosed = true;
11426           continue;
11427         }
11428       }
11429 
11430       QualType FirstUnderlyingType =
11431           FirstEnum->getIntegerTypeSourceInfo()
11432               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11433               : QualType();
11434       QualType SecondUnderlyingType =
11435           SecondEnum->getIntegerTypeSourceInfo()
11436               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11437               : QualType();
11438       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11439           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11440                        SingleSpecifiedType)
11441               << !FirstUnderlyingType.isNull();
11442           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11443                       SingleSpecifiedType)
11444               << !SecondUnderlyingType.isNull();
11445           Diagnosed = true;
11446           continue;
11447       }
11448 
11449       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11450         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11451             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11452           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11453                        DifferentSpecifiedTypes)
11454               << FirstUnderlyingType;
11455           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11456                       DifferentSpecifiedTypes)
11457               << SecondUnderlyingType;
11458           Diagnosed = true;
11459           continue;
11460         }
11461       }
11462 
11463       DeclHashes SecondHashes;
11464       PopulateHashes(SecondHashes, SecondEnum);
11465 
11466       if (FirstHashes.size() != SecondHashes.size()) {
11467         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11468                      DifferentNumberEnumConstants)
11469             << (int)FirstHashes.size();
11470         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11471                     DifferentNumberEnumConstants)
11472             << (int)SecondHashes.size();
11473         Diagnosed = true;
11474         continue;
11475       }
11476 
11477       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11478         if (FirstHashes[I].second == SecondHashes[I].second)
11479           continue;
11480         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11481         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11482 
11483         if (FirstEnumConstant->getDeclName() !=
11484             SecondEnumConstant->getDeclName()) {
11485 
11486           ODRDiagError(FirstEnumConstant->getLocation(),
11487                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11488               << I + 1 << FirstEnumConstant;
11489           ODRDiagNote(SecondEnumConstant->getLocation(),
11490                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11491               << I + 1 << SecondEnumConstant;
11492           Diagnosed = true;
11493           break;
11494         }
11495 
11496         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11497         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11498         if (!FirstInit && !SecondInit)
11499           continue;
11500 
11501         if (!FirstInit || !SecondInit) {
11502           ODRDiagError(FirstEnumConstant->getLocation(),
11503                        FirstEnumConstant->getSourceRange(),
11504                        EnumConstantSingleInitilizer)
11505               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11506           ODRDiagNote(SecondEnumConstant->getLocation(),
11507                       SecondEnumConstant->getSourceRange(),
11508                       EnumConstantSingleInitilizer)
11509               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11510           Diagnosed = true;
11511           break;
11512         }
11513 
11514         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11515           ODRDiagError(FirstEnumConstant->getLocation(),
11516                        FirstEnumConstant->getSourceRange(),
11517                        EnumConstantDifferentInitilizer)
11518               << I + 1 << FirstEnumConstant;
11519           ODRDiagNote(SecondEnumConstant->getLocation(),
11520                       SecondEnumConstant->getSourceRange(),
11521                       EnumConstantDifferentInitilizer)
11522               << I + 1 << SecondEnumConstant;
11523           Diagnosed = true;
11524           break;
11525         }
11526       }
11527     }
11528 
11529     (void)Diagnosed;
11530     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11531   }
11532 }
11533 
11534 void ASTReader::StartedDeserializing() {
11535   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11536     ReadTimer->startTimer();
11537 }
11538 
11539 void ASTReader::FinishedDeserializing() {
11540   assert(NumCurrentElementsDeserializing &&
11541          "FinishedDeserializing not paired with StartedDeserializing");
11542   if (NumCurrentElementsDeserializing == 1) {
11543     // We decrease NumCurrentElementsDeserializing only after pending actions
11544     // are finished, to avoid recursively re-calling finishPendingActions().
11545     finishPendingActions();
11546   }
11547   --NumCurrentElementsDeserializing;
11548 
11549   if (NumCurrentElementsDeserializing == 0) {
11550     // Propagate exception specification and deduced type updates along
11551     // redeclaration chains.
11552     //
11553     // We do this now rather than in finishPendingActions because we want to
11554     // be able to walk the complete redeclaration chains of the updated decls.
11555     while (!PendingExceptionSpecUpdates.empty() ||
11556            !PendingDeducedTypeUpdates.empty()) {
11557       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11558       PendingExceptionSpecUpdates.clear();
11559       for (auto Update : ESUpdates) {
11560         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11561         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11562         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11563         if (auto *Listener = getContext().getASTMutationListener())
11564           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11565         for (auto *Redecl : Update.second->redecls())
11566           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11567       }
11568 
11569       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11570       PendingDeducedTypeUpdates.clear();
11571       for (auto Update : DTUpdates) {
11572         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11573         // FIXME: If the return type is already deduced, check that it matches.
11574         getContext().adjustDeducedFunctionResultType(Update.first,
11575                                                      Update.second);
11576       }
11577     }
11578 
11579     if (ReadTimer)
11580       ReadTimer->stopTimer();
11581 
11582     diagnoseOdrViolations();
11583 
11584     // We are not in recursive loading, so it's safe to pass the "interesting"
11585     // decls to the consumer.
11586     if (Consumer)
11587       PassInterestingDeclsToConsumer();
11588   }
11589 }
11590 
11591 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11592   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11593     // Remove any fake results before adding any real ones.
11594     auto It = PendingFakeLookupResults.find(II);
11595     if (It != PendingFakeLookupResults.end()) {
11596       for (auto *ND : It->second)
11597         SemaObj->IdResolver.RemoveDecl(ND);
11598       // FIXME: this works around module+PCH performance issue.
11599       // Rather than erase the result from the map, which is O(n), just clear
11600       // the vector of NamedDecls.
11601       It->second.clear();
11602     }
11603   }
11604 
11605   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11606     SemaObj->TUScope->AddDecl(D);
11607   } else if (SemaObj->TUScope) {
11608     // Adding the decl to IdResolver may have failed because it was already in
11609     // (even though it was not added in scope). If it is already in, make sure
11610     // it gets in the scope as well.
11611     if (std::find(SemaObj->IdResolver.begin(Name),
11612                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11613       SemaObj->TUScope->AddDecl(D);
11614   }
11615 }
11616 
11617 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11618                      ASTContext *Context,
11619                      const PCHContainerReader &PCHContainerRdr,
11620                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11621                      StringRef isysroot,
11622                      DisableValidationForModuleKind DisableValidationKind,
11623                      bool AllowASTWithCompilerErrors,
11624                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11625                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11626                      std::unique_ptr<llvm::Timer> ReadTimer)
11627     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11628                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11629                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11630       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11631       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11632       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11633                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11634       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11635       DisableValidationKind(DisableValidationKind),
11636       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11637       AllowConfigurationMismatch(AllowConfigurationMismatch),
11638       ValidateSystemInputs(ValidateSystemInputs),
11639       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11640       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11641   SourceMgr.setExternalSLocEntrySource(this);
11642 
11643   for (const auto &Ext : Extensions) {
11644     auto BlockName = Ext->getExtensionMetadata().BlockName;
11645     auto Known = ModuleFileExtensions.find(BlockName);
11646     if (Known != ModuleFileExtensions.end()) {
11647       Diags.Report(diag::warn_duplicate_module_file_extension)
11648         << BlockName;
11649       continue;
11650     }
11651 
11652     ModuleFileExtensions.insert({BlockName, Ext});
11653   }
11654 }
11655 
11656 ASTReader::~ASTReader() {
11657   if (OwnsDeserializationListener)
11658     delete DeserializationListener;
11659 }
11660 
11661 IdentifierResolver &ASTReader::getIdResolver() {
11662   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11663 }
11664 
11665 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11666                                                unsigned AbbrevID) {
11667   Idx = 0;
11668   Record.clear();
11669   return Cursor.readRecord(AbbrevID, Record);
11670 }
11671 //===----------------------------------------------------------------------===//
11672 //// OMPClauseReader implementation
11673 ////===----------------------------------------------------------------------===//
11674 
11675 // This has to be in namespace clang because it's friended by all
11676 // of the OMP clauses.
11677 namespace clang {
11678 
11679 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11680   ASTRecordReader &Record;
11681   ASTContext &Context;
11682 
11683 public:
11684   OMPClauseReader(ASTRecordReader &Record)
11685       : Record(Record), Context(Record.getContext()) {}
11686 #define GEN_CLANG_CLAUSE_CLASS
11687 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11688 #include "llvm/Frontend/OpenMP/OMP.inc"
11689   OMPClause *readClause();
11690   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11691   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11692 };
11693 
11694 } // end namespace clang
11695 
11696 OMPClause *ASTRecordReader::readOMPClause() {
11697   return OMPClauseReader(*this).readClause();
11698 }
11699 
11700 OMPClause *OMPClauseReader::readClause() {
11701   OMPClause *C = nullptr;
11702   switch (llvm::omp::Clause(Record.readInt())) {
11703   case llvm::omp::OMPC_if:
11704     C = new (Context) OMPIfClause();
11705     break;
11706   case llvm::omp::OMPC_final:
11707     C = new (Context) OMPFinalClause();
11708     break;
11709   case llvm::omp::OMPC_num_threads:
11710     C = new (Context) OMPNumThreadsClause();
11711     break;
11712   case llvm::omp::OMPC_safelen:
11713     C = new (Context) OMPSafelenClause();
11714     break;
11715   case llvm::omp::OMPC_simdlen:
11716     C = new (Context) OMPSimdlenClause();
11717     break;
11718   case llvm::omp::OMPC_sizes: {
11719     unsigned NumSizes = Record.readInt();
11720     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11721     break;
11722   }
11723   case llvm::omp::OMPC_full:
11724     C = OMPFullClause::CreateEmpty(Context);
11725     break;
11726   case llvm::omp::OMPC_partial:
11727     C = OMPPartialClause::CreateEmpty(Context);
11728     break;
11729   case llvm::omp::OMPC_allocator:
11730     C = new (Context) OMPAllocatorClause();
11731     break;
11732   case llvm::omp::OMPC_collapse:
11733     C = new (Context) OMPCollapseClause();
11734     break;
11735   case llvm::omp::OMPC_default:
11736     C = new (Context) OMPDefaultClause();
11737     break;
11738   case llvm::omp::OMPC_proc_bind:
11739     C = new (Context) OMPProcBindClause();
11740     break;
11741   case llvm::omp::OMPC_schedule:
11742     C = new (Context) OMPScheduleClause();
11743     break;
11744   case llvm::omp::OMPC_ordered:
11745     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11746     break;
11747   case llvm::omp::OMPC_nowait:
11748     C = new (Context) OMPNowaitClause();
11749     break;
11750   case llvm::omp::OMPC_untied:
11751     C = new (Context) OMPUntiedClause();
11752     break;
11753   case llvm::omp::OMPC_mergeable:
11754     C = new (Context) OMPMergeableClause();
11755     break;
11756   case llvm::omp::OMPC_read:
11757     C = new (Context) OMPReadClause();
11758     break;
11759   case llvm::omp::OMPC_write:
11760     C = new (Context) OMPWriteClause();
11761     break;
11762   case llvm::omp::OMPC_update:
11763     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11764     break;
11765   case llvm::omp::OMPC_capture:
11766     C = new (Context) OMPCaptureClause();
11767     break;
11768   case llvm::omp::OMPC_compare:
11769     C = new (Context) OMPCompareClause();
11770     break;
11771   case llvm::omp::OMPC_seq_cst:
11772     C = new (Context) OMPSeqCstClause();
11773     break;
11774   case llvm::omp::OMPC_acq_rel:
11775     C = new (Context) OMPAcqRelClause();
11776     break;
11777   case llvm::omp::OMPC_acquire:
11778     C = new (Context) OMPAcquireClause();
11779     break;
11780   case llvm::omp::OMPC_release:
11781     C = new (Context) OMPReleaseClause();
11782     break;
11783   case llvm::omp::OMPC_relaxed:
11784     C = new (Context) OMPRelaxedClause();
11785     break;
11786   case llvm::omp::OMPC_threads:
11787     C = new (Context) OMPThreadsClause();
11788     break;
11789   case llvm::omp::OMPC_simd:
11790     C = new (Context) OMPSIMDClause();
11791     break;
11792   case llvm::omp::OMPC_nogroup:
11793     C = new (Context) OMPNogroupClause();
11794     break;
11795   case llvm::omp::OMPC_unified_address:
11796     C = new (Context) OMPUnifiedAddressClause();
11797     break;
11798   case llvm::omp::OMPC_unified_shared_memory:
11799     C = new (Context) OMPUnifiedSharedMemoryClause();
11800     break;
11801   case llvm::omp::OMPC_reverse_offload:
11802     C = new (Context) OMPReverseOffloadClause();
11803     break;
11804   case llvm::omp::OMPC_dynamic_allocators:
11805     C = new (Context) OMPDynamicAllocatorsClause();
11806     break;
11807   case llvm::omp::OMPC_atomic_default_mem_order:
11808     C = new (Context) OMPAtomicDefaultMemOrderClause();
11809     break;
11810  case llvm::omp::OMPC_private:
11811     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11812     break;
11813   case llvm::omp::OMPC_firstprivate:
11814     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11815     break;
11816   case llvm::omp::OMPC_lastprivate:
11817     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11818     break;
11819   case llvm::omp::OMPC_shared:
11820     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11821     break;
11822   case llvm::omp::OMPC_reduction: {
11823     unsigned N = Record.readInt();
11824     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11825     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11826     break;
11827   }
11828   case llvm::omp::OMPC_task_reduction:
11829     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11830     break;
11831   case llvm::omp::OMPC_in_reduction:
11832     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11833     break;
11834   case llvm::omp::OMPC_linear:
11835     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11836     break;
11837   case llvm::omp::OMPC_aligned:
11838     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11839     break;
11840   case llvm::omp::OMPC_copyin:
11841     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11842     break;
11843   case llvm::omp::OMPC_copyprivate:
11844     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11845     break;
11846   case llvm::omp::OMPC_flush:
11847     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11848     break;
11849   case llvm::omp::OMPC_depobj:
11850     C = OMPDepobjClause::CreateEmpty(Context);
11851     break;
11852   case llvm::omp::OMPC_depend: {
11853     unsigned NumVars = Record.readInt();
11854     unsigned NumLoops = Record.readInt();
11855     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11856     break;
11857   }
11858   case llvm::omp::OMPC_device:
11859     C = new (Context) OMPDeviceClause();
11860     break;
11861   case llvm::omp::OMPC_map: {
11862     OMPMappableExprListSizeTy Sizes;
11863     Sizes.NumVars = Record.readInt();
11864     Sizes.NumUniqueDeclarations = Record.readInt();
11865     Sizes.NumComponentLists = Record.readInt();
11866     Sizes.NumComponents = Record.readInt();
11867     C = OMPMapClause::CreateEmpty(Context, Sizes);
11868     break;
11869   }
11870   case llvm::omp::OMPC_num_teams:
11871     C = new (Context) OMPNumTeamsClause();
11872     break;
11873   case llvm::omp::OMPC_thread_limit:
11874     C = new (Context) OMPThreadLimitClause();
11875     break;
11876   case llvm::omp::OMPC_priority:
11877     C = new (Context) OMPPriorityClause();
11878     break;
11879   case llvm::omp::OMPC_grainsize:
11880     C = new (Context) OMPGrainsizeClause();
11881     break;
11882   case llvm::omp::OMPC_num_tasks:
11883     C = new (Context) OMPNumTasksClause();
11884     break;
11885   case llvm::omp::OMPC_hint:
11886     C = new (Context) OMPHintClause();
11887     break;
11888   case llvm::omp::OMPC_dist_schedule:
11889     C = new (Context) OMPDistScheduleClause();
11890     break;
11891   case llvm::omp::OMPC_defaultmap:
11892     C = new (Context) OMPDefaultmapClause();
11893     break;
11894   case llvm::omp::OMPC_to: {
11895     OMPMappableExprListSizeTy Sizes;
11896     Sizes.NumVars = Record.readInt();
11897     Sizes.NumUniqueDeclarations = Record.readInt();
11898     Sizes.NumComponentLists = Record.readInt();
11899     Sizes.NumComponents = Record.readInt();
11900     C = OMPToClause::CreateEmpty(Context, Sizes);
11901     break;
11902   }
11903   case llvm::omp::OMPC_from: {
11904     OMPMappableExprListSizeTy Sizes;
11905     Sizes.NumVars = Record.readInt();
11906     Sizes.NumUniqueDeclarations = Record.readInt();
11907     Sizes.NumComponentLists = Record.readInt();
11908     Sizes.NumComponents = Record.readInt();
11909     C = OMPFromClause::CreateEmpty(Context, Sizes);
11910     break;
11911   }
11912   case llvm::omp::OMPC_use_device_ptr: {
11913     OMPMappableExprListSizeTy Sizes;
11914     Sizes.NumVars = Record.readInt();
11915     Sizes.NumUniqueDeclarations = Record.readInt();
11916     Sizes.NumComponentLists = Record.readInt();
11917     Sizes.NumComponents = Record.readInt();
11918     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11919     break;
11920   }
11921   case llvm::omp::OMPC_use_device_addr: {
11922     OMPMappableExprListSizeTy Sizes;
11923     Sizes.NumVars = Record.readInt();
11924     Sizes.NumUniqueDeclarations = Record.readInt();
11925     Sizes.NumComponentLists = Record.readInt();
11926     Sizes.NumComponents = Record.readInt();
11927     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11928     break;
11929   }
11930   case llvm::omp::OMPC_is_device_ptr: {
11931     OMPMappableExprListSizeTy Sizes;
11932     Sizes.NumVars = Record.readInt();
11933     Sizes.NumUniqueDeclarations = Record.readInt();
11934     Sizes.NumComponentLists = Record.readInt();
11935     Sizes.NumComponents = Record.readInt();
11936     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11937     break;
11938   }
11939   case llvm::omp::OMPC_allocate:
11940     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11941     break;
11942   case llvm::omp::OMPC_nontemporal:
11943     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11944     break;
11945   case llvm::omp::OMPC_inclusive:
11946     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11947     break;
11948   case llvm::omp::OMPC_exclusive:
11949     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11950     break;
11951   case llvm::omp::OMPC_order:
11952     C = new (Context) OMPOrderClause();
11953     break;
11954   case llvm::omp::OMPC_init:
11955     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11956     break;
11957   case llvm::omp::OMPC_use:
11958     C = new (Context) OMPUseClause();
11959     break;
11960   case llvm::omp::OMPC_destroy:
11961     C = new (Context) OMPDestroyClause();
11962     break;
11963   case llvm::omp::OMPC_novariants:
11964     C = new (Context) OMPNovariantsClause();
11965     break;
11966   case llvm::omp::OMPC_nocontext:
11967     C = new (Context) OMPNocontextClause();
11968     break;
11969   case llvm::omp::OMPC_detach:
11970     C = new (Context) OMPDetachClause();
11971     break;
11972   case llvm::omp::OMPC_uses_allocators:
11973     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11974     break;
11975   case llvm::omp::OMPC_affinity:
11976     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11977     break;
11978   case llvm::omp::OMPC_filter:
11979     C = new (Context) OMPFilterClause();
11980     break;
11981   case llvm::omp::OMPC_bind:
11982     C = OMPBindClause::CreateEmpty(Context);
11983     break;
11984   case llvm::omp::OMPC_align:
11985     C = new (Context) OMPAlignClause();
11986     break;
11987 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11988   case llvm::omp::Enum:                                                        \
11989     break;
11990 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11991   default:
11992     break;
11993   }
11994   assert(C && "Unknown OMPClause type");
11995 
11996   Visit(C);
11997   C->setLocStart(Record.readSourceLocation());
11998   C->setLocEnd(Record.readSourceLocation());
11999 
12000   return C;
12001 }
12002 
12003 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12004   C->setPreInitStmt(Record.readSubStmt(),
12005                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12006 }
12007 
12008 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12009   VisitOMPClauseWithPreInit(C);
12010   C->setPostUpdateExpr(Record.readSubExpr());
12011 }
12012 
12013 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12014   VisitOMPClauseWithPreInit(C);
12015   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12016   C->setNameModifierLoc(Record.readSourceLocation());
12017   C->setColonLoc(Record.readSourceLocation());
12018   C->setCondition(Record.readSubExpr());
12019   C->setLParenLoc(Record.readSourceLocation());
12020 }
12021 
12022 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12023   VisitOMPClauseWithPreInit(C);
12024   C->setCondition(Record.readSubExpr());
12025   C->setLParenLoc(Record.readSourceLocation());
12026 }
12027 
12028 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12029   VisitOMPClauseWithPreInit(C);
12030   C->setNumThreads(Record.readSubExpr());
12031   C->setLParenLoc(Record.readSourceLocation());
12032 }
12033 
12034 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12035   C->setSafelen(Record.readSubExpr());
12036   C->setLParenLoc(Record.readSourceLocation());
12037 }
12038 
12039 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12040   C->setSimdlen(Record.readSubExpr());
12041   C->setLParenLoc(Record.readSourceLocation());
12042 }
12043 
12044 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12045   for (Expr *&E : C->getSizesRefs())
12046     E = Record.readSubExpr();
12047   C->setLParenLoc(Record.readSourceLocation());
12048 }
12049 
12050 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12051 
12052 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12053   C->setFactor(Record.readSubExpr());
12054   C->setLParenLoc(Record.readSourceLocation());
12055 }
12056 
12057 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12058   C->setAllocator(Record.readExpr());
12059   C->setLParenLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12063   C->setNumForLoops(Record.readSubExpr());
12064   C->setLParenLoc(Record.readSourceLocation());
12065 }
12066 
12067 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12068   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12069   C->setLParenLoc(Record.readSourceLocation());
12070   C->setDefaultKindKwLoc(Record.readSourceLocation());
12071 }
12072 
12073 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12074   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12075   C->setLParenLoc(Record.readSourceLocation());
12076   C->setProcBindKindKwLoc(Record.readSourceLocation());
12077 }
12078 
12079 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12080   VisitOMPClauseWithPreInit(C);
12081   C->setScheduleKind(
12082        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12083   C->setFirstScheduleModifier(
12084       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12085   C->setSecondScheduleModifier(
12086       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12087   C->setChunkSize(Record.readSubExpr());
12088   C->setLParenLoc(Record.readSourceLocation());
12089   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12090   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12091   C->setScheduleKindLoc(Record.readSourceLocation());
12092   C->setCommaLoc(Record.readSourceLocation());
12093 }
12094 
12095 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12096   C->setNumForLoops(Record.readSubExpr());
12097   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12098     C->setLoopNumIterations(I, Record.readSubExpr());
12099   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12100     C->setLoopCounter(I, Record.readSubExpr());
12101   C->setLParenLoc(Record.readSourceLocation());
12102 }
12103 
12104 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12105   C->setEventHandler(Record.readSubExpr());
12106   C->setLParenLoc(Record.readSourceLocation());
12107 }
12108 
12109 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12110 
12111 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12112 
12113 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12114 
12115 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12116 
12117 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12118 
12119 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12120   if (C->isExtended()) {
12121     C->setLParenLoc(Record.readSourceLocation());
12122     C->setArgumentLoc(Record.readSourceLocation());
12123     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12124   }
12125 }
12126 
12127 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12128 
12129 void OMPClauseReader::VisitOMPCompareClause(OMPCompareClause *) {}
12130 
12131 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12132 
12133 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12134 
12135 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12136 
12137 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12138 
12139 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12140 
12141 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12142 
12143 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12144 
12145 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12146 
12147 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12148   unsigned NumVars = C->varlist_size();
12149   SmallVector<Expr *, 16> Vars;
12150   Vars.reserve(NumVars);
12151   for (unsigned I = 0; I != NumVars; ++I)
12152     Vars.push_back(Record.readSubExpr());
12153   C->setVarRefs(Vars);
12154   C->setIsTarget(Record.readBool());
12155   C->setIsTargetSync(Record.readBool());
12156   C->setLParenLoc(Record.readSourceLocation());
12157   C->setVarLoc(Record.readSourceLocation());
12158 }
12159 
12160 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12161   C->setInteropVar(Record.readSubExpr());
12162   C->setLParenLoc(Record.readSourceLocation());
12163   C->setVarLoc(Record.readSourceLocation());
12164 }
12165 
12166 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12167   C->setInteropVar(Record.readSubExpr());
12168   C->setLParenLoc(Record.readSourceLocation());
12169   C->setVarLoc(Record.readSourceLocation());
12170 }
12171 
12172 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12173   VisitOMPClauseWithPreInit(C);
12174   C->setCondition(Record.readSubExpr());
12175   C->setLParenLoc(Record.readSourceLocation());
12176 }
12177 
12178 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12179   VisitOMPClauseWithPreInit(C);
12180   C->setCondition(Record.readSubExpr());
12181   C->setLParenLoc(Record.readSourceLocation());
12182 }
12183 
12184 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12185 
12186 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12187     OMPUnifiedSharedMemoryClause *) {}
12188 
12189 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12190 
12191 void
12192 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12193 }
12194 
12195 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12196     OMPAtomicDefaultMemOrderClause *C) {
12197   C->setAtomicDefaultMemOrderKind(
12198       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12199   C->setLParenLoc(Record.readSourceLocation());
12200   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12201 }
12202 
12203 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12204   C->setLParenLoc(Record.readSourceLocation());
12205   unsigned NumVars = C->varlist_size();
12206   SmallVector<Expr *, 16> Vars;
12207   Vars.reserve(NumVars);
12208   for (unsigned i = 0; i != NumVars; ++i)
12209     Vars.push_back(Record.readSubExpr());
12210   C->setVarRefs(Vars);
12211   Vars.clear();
12212   for (unsigned i = 0; i != NumVars; ++i)
12213     Vars.push_back(Record.readSubExpr());
12214   C->setPrivateCopies(Vars);
12215 }
12216 
12217 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12218   VisitOMPClauseWithPreInit(C);
12219   C->setLParenLoc(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->setInits(Vars);
12234 }
12235 
12236 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12237   VisitOMPClauseWithPostUpdate(C);
12238   C->setLParenLoc(Record.readSourceLocation());
12239   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12240   C->setKindLoc(Record.readSourceLocation());
12241   C->setColonLoc(Record.readSourceLocation());
12242   unsigned NumVars = C->varlist_size();
12243   SmallVector<Expr *, 16> Vars;
12244   Vars.reserve(NumVars);
12245   for (unsigned i = 0; i != NumVars; ++i)
12246     Vars.push_back(Record.readSubExpr());
12247   C->setVarRefs(Vars);
12248   Vars.clear();
12249   for (unsigned i = 0; i != NumVars; ++i)
12250     Vars.push_back(Record.readSubExpr());
12251   C->setPrivateCopies(Vars);
12252   Vars.clear();
12253   for (unsigned i = 0; i != NumVars; ++i)
12254     Vars.push_back(Record.readSubExpr());
12255   C->setSourceExprs(Vars);
12256   Vars.clear();
12257   for (unsigned i = 0; i != NumVars; ++i)
12258     Vars.push_back(Record.readSubExpr());
12259   C->setDestinationExprs(Vars);
12260   Vars.clear();
12261   for (unsigned i = 0; i != NumVars; ++i)
12262     Vars.push_back(Record.readSubExpr());
12263   C->setAssignmentOps(Vars);
12264 }
12265 
12266 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12267   C->setLParenLoc(Record.readSourceLocation());
12268   unsigned NumVars = C->varlist_size();
12269   SmallVector<Expr *, 16> Vars;
12270   Vars.reserve(NumVars);
12271   for (unsigned i = 0; i != NumVars; ++i)
12272     Vars.push_back(Record.readSubExpr());
12273   C->setVarRefs(Vars);
12274 }
12275 
12276 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12277   VisitOMPClauseWithPostUpdate(C);
12278   C->setLParenLoc(Record.readSourceLocation());
12279   C->setModifierLoc(Record.readSourceLocation());
12280   C->setColonLoc(Record.readSourceLocation());
12281   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12282   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12283   C->setQualifierLoc(NNSL);
12284   C->setNameInfo(DNI);
12285 
12286   unsigned NumVars = C->varlist_size();
12287   SmallVector<Expr *, 16> Vars;
12288   Vars.reserve(NumVars);
12289   for (unsigned i = 0; i != NumVars; ++i)
12290     Vars.push_back(Record.readSubExpr());
12291   C->setVarRefs(Vars);
12292   Vars.clear();
12293   for (unsigned i = 0; i != NumVars; ++i)
12294     Vars.push_back(Record.readSubExpr());
12295   C->setPrivates(Vars);
12296   Vars.clear();
12297   for (unsigned i = 0; i != NumVars; ++i)
12298     Vars.push_back(Record.readSubExpr());
12299   C->setLHSExprs(Vars);
12300   Vars.clear();
12301   for (unsigned i = 0; i != NumVars; ++i)
12302     Vars.push_back(Record.readSubExpr());
12303   C->setRHSExprs(Vars);
12304   Vars.clear();
12305   for (unsigned i = 0; i != NumVars; ++i)
12306     Vars.push_back(Record.readSubExpr());
12307   C->setReductionOps(Vars);
12308   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12309     Vars.clear();
12310     for (unsigned i = 0; i != NumVars; ++i)
12311       Vars.push_back(Record.readSubExpr());
12312     C->setInscanCopyOps(Vars);
12313     Vars.clear();
12314     for (unsigned i = 0; i != NumVars; ++i)
12315       Vars.push_back(Record.readSubExpr());
12316     C->setInscanCopyArrayTemps(Vars);
12317     Vars.clear();
12318     for (unsigned i = 0; i != NumVars; ++i)
12319       Vars.push_back(Record.readSubExpr());
12320     C->setInscanCopyArrayElems(Vars);
12321   }
12322 }
12323 
12324 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12325   VisitOMPClauseWithPostUpdate(C);
12326   C->setLParenLoc(Record.readSourceLocation());
12327   C->setColonLoc(Record.readSourceLocation());
12328   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12329   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12330   C->setQualifierLoc(NNSL);
12331   C->setNameInfo(DNI);
12332 
12333   unsigned NumVars = C->varlist_size();
12334   SmallVector<Expr *, 16> Vars;
12335   Vars.reserve(NumVars);
12336   for (unsigned I = 0; I != NumVars; ++I)
12337     Vars.push_back(Record.readSubExpr());
12338   C->setVarRefs(Vars);
12339   Vars.clear();
12340   for (unsigned I = 0; I != NumVars; ++I)
12341     Vars.push_back(Record.readSubExpr());
12342   C->setPrivates(Vars);
12343   Vars.clear();
12344   for (unsigned I = 0; I != NumVars; ++I)
12345     Vars.push_back(Record.readSubExpr());
12346   C->setLHSExprs(Vars);
12347   Vars.clear();
12348   for (unsigned I = 0; I != NumVars; ++I)
12349     Vars.push_back(Record.readSubExpr());
12350   C->setRHSExprs(Vars);
12351   Vars.clear();
12352   for (unsigned I = 0; I != NumVars; ++I)
12353     Vars.push_back(Record.readSubExpr());
12354   C->setReductionOps(Vars);
12355 }
12356 
12357 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12358   VisitOMPClauseWithPostUpdate(C);
12359   C->setLParenLoc(Record.readSourceLocation());
12360   C->setColonLoc(Record.readSourceLocation());
12361   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12362   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12363   C->setQualifierLoc(NNSL);
12364   C->setNameInfo(DNI);
12365 
12366   unsigned NumVars = C->varlist_size();
12367   SmallVector<Expr *, 16> Vars;
12368   Vars.reserve(NumVars);
12369   for (unsigned I = 0; I != NumVars; ++I)
12370     Vars.push_back(Record.readSubExpr());
12371   C->setVarRefs(Vars);
12372   Vars.clear();
12373   for (unsigned I = 0; I != NumVars; ++I)
12374     Vars.push_back(Record.readSubExpr());
12375   C->setPrivates(Vars);
12376   Vars.clear();
12377   for (unsigned I = 0; I != NumVars; ++I)
12378     Vars.push_back(Record.readSubExpr());
12379   C->setLHSExprs(Vars);
12380   Vars.clear();
12381   for (unsigned I = 0; I != NumVars; ++I)
12382     Vars.push_back(Record.readSubExpr());
12383   C->setRHSExprs(Vars);
12384   Vars.clear();
12385   for (unsigned I = 0; I != NumVars; ++I)
12386     Vars.push_back(Record.readSubExpr());
12387   C->setReductionOps(Vars);
12388   Vars.clear();
12389   for (unsigned I = 0; I != NumVars; ++I)
12390     Vars.push_back(Record.readSubExpr());
12391   C->setTaskgroupDescriptors(Vars);
12392 }
12393 
12394 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12395   VisitOMPClauseWithPostUpdate(C);
12396   C->setLParenLoc(Record.readSourceLocation());
12397   C->setColonLoc(Record.readSourceLocation());
12398   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12399   C->setModifierLoc(Record.readSourceLocation());
12400   unsigned NumVars = C->varlist_size();
12401   SmallVector<Expr *, 16> Vars;
12402   Vars.reserve(NumVars);
12403   for (unsigned i = 0; i != NumVars; ++i)
12404     Vars.push_back(Record.readSubExpr());
12405   C->setVarRefs(Vars);
12406   Vars.clear();
12407   for (unsigned i = 0; i != NumVars; ++i)
12408     Vars.push_back(Record.readSubExpr());
12409   C->setPrivates(Vars);
12410   Vars.clear();
12411   for (unsigned i = 0; i != NumVars; ++i)
12412     Vars.push_back(Record.readSubExpr());
12413   C->setInits(Vars);
12414   Vars.clear();
12415   for (unsigned i = 0; i != NumVars; ++i)
12416     Vars.push_back(Record.readSubExpr());
12417   C->setUpdates(Vars);
12418   Vars.clear();
12419   for (unsigned i = 0; i != NumVars; ++i)
12420     Vars.push_back(Record.readSubExpr());
12421   C->setFinals(Vars);
12422   C->setStep(Record.readSubExpr());
12423   C->setCalcStep(Record.readSubExpr());
12424   Vars.clear();
12425   for (unsigned I = 0; I != NumVars + 1; ++I)
12426     Vars.push_back(Record.readSubExpr());
12427   C->setUsedExprs(Vars);
12428 }
12429 
12430 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12431   C->setLParenLoc(Record.readSourceLocation());
12432   C->setColonLoc(Record.readSourceLocation());
12433   unsigned NumVars = C->varlist_size();
12434   SmallVector<Expr *, 16> Vars;
12435   Vars.reserve(NumVars);
12436   for (unsigned i = 0; i != NumVars; ++i)
12437     Vars.push_back(Record.readSubExpr());
12438   C->setVarRefs(Vars);
12439   C->setAlignment(Record.readSubExpr());
12440 }
12441 
12442 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *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::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12465   C->setLParenLoc(Record.readSourceLocation());
12466   unsigned NumVars = C->varlist_size();
12467   SmallVector<Expr *, 16> Exprs;
12468   Exprs.reserve(NumVars);
12469   for (unsigned i = 0; i != NumVars; ++i)
12470     Exprs.push_back(Record.readSubExpr());
12471   C->setVarRefs(Exprs);
12472   Exprs.clear();
12473   for (unsigned i = 0; i != NumVars; ++i)
12474     Exprs.push_back(Record.readSubExpr());
12475   C->setSourceExprs(Exprs);
12476   Exprs.clear();
12477   for (unsigned i = 0; i != NumVars; ++i)
12478     Exprs.push_back(Record.readSubExpr());
12479   C->setDestinationExprs(Exprs);
12480   Exprs.clear();
12481   for (unsigned i = 0; i != NumVars; ++i)
12482     Exprs.push_back(Record.readSubExpr());
12483   C->setAssignmentOps(Exprs);
12484 }
12485 
12486 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12487   C->setLParenLoc(Record.readSourceLocation());
12488   unsigned NumVars = C->varlist_size();
12489   SmallVector<Expr *, 16> Vars;
12490   Vars.reserve(NumVars);
12491   for (unsigned i = 0; i != NumVars; ++i)
12492     Vars.push_back(Record.readSubExpr());
12493   C->setVarRefs(Vars);
12494 }
12495 
12496 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12497   C->setDepobj(Record.readSubExpr());
12498   C->setLParenLoc(Record.readSourceLocation());
12499 }
12500 
12501 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12502   C->setLParenLoc(Record.readSourceLocation());
12503   C->setModifier(Record.readSubExpr());
12504   C->setDependencyKind(
12505       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12506   C->setDependencyLoc(Record.readSourceLocation());
12507   C->setColonLoc(Record.readSourceLocation());
12508   unsigned NumVars = C->varlist_size();
12509   SmallVector<Expr *, 16> Vars;
12510   Vars.reserve(NumVars);
12511   for (unsigned I = 0; I != NumVars; ++I)
12512     Vars.push_back(Record.readSubExpr());
12513   C->setVarRefs(Vars);
12514   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12515     C->setLoopData(I, Record.readSubExpr());
12516 }
12517 
12518 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12519   VisitOMPClauseWithPreInit(C);
12520   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12521   C->setDevice(Record.readSubExpr());
12522   C->setModifierLoc(Record.readSourceLocation());
12523   C->setLParenLoc(Record.readSourceLocation());
12524 }
12525 
12526 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12527   C->setLParenLoc(Record.readSourceLocation());
12528   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12529     C->setMapTypeModifier(
12530         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12531     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12532   }
12533   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12534   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12535   C->setMapType(
12536      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12537   C->setMapLoc(Record.readSourceLocation());
12538   C->setColonLoc(Record.readSourceLocation());
12539   auto NumVars = C->varlist_size();
12540   auto UniqueDecls = C->getUniqueDeclarationsNum();
12541   auto TotalLists = C->getTotalComponentListNum();
12542   auto TotalComponents = C->getTotalComponentsNum();
12543 
12544   SmallVector<Expr *, 16> Vars;
12545   Vars.reserve(NumVars);
12546   for (unsigned i = 0; i != NumVars; ++i)
12547     Vars.push_back(Record.readExpr());
12548   C->setVarRefs(Vars);
12549 
12550   SmallVector<Expr *, 16> UDMappers;
12551   UDMappers.reserve(NumVars);
12552   for (unsigned I = 0; I < NumVars; ++I)
12553     UDMappers.push_back(Record.readExpr());
12554   C->setUDMapperRefs(UDMappers);
12555 
12556   SmallVector<ValueDecl *, 16> Decls;
12557   Decls.reserve(UniqueDecls);
12558   for (unsigned i = 0; i < UniqueDecls; ++i)
12559     Decls.push_back(Record.readDeclAs<ValueDecl>());
12560   C->setUniqueDecls(Decls);
12561 
12562   SmallVector<unsigned, 16> ListsPerDecl;
12563   ListsPerDecl.reserve(UniqueDecls);
12564   for (unsigned i = 0; i < UniqueDecls; ++i)
12565     ListsPerDecl.push_back(Record.readInt());
12566   C->setDeclNumLists(ListsPerDecl);
12567 
12568   SmallVector<unsigned, 32> ListSizes;
12569   ListSizes.reserve(TotalLists);
12570   for (unsigned i = 0; i < TotalLists; ++i)
12571     ListSizes.push_back(Record.readInt());
12572   C->setComponentListSizes(ListSizes);
12573 
12574   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12575   Components.reserve(TotalComponents);
12576   for (unsigned i = 0; i < TotalComponents; ++i) {
12577     Expr *AssociatedExprPr = Record.readExpr();
12578     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12579     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12580                             /*IsNonContiguous=*/false);
12581   }
12582   C->setComponents(Components, ListSizes);
12583 }
12584 
12585 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12586   C->setLParenLoc(Record.readSourceLocation());
12587   C->setColonLoc(Record.readSourceLocation());
12588   C->setAllocator(Record.readSubExpr());
12589   unsigned NumVars = C->varlist_size();
12590   SmallVector<Expr *, 16> Vars;
12591   Vars.reserve(NumVars);
12592   for (unsigned i = 0; i != NumVars; ++i)
12593     Vars.push_back(Record.readSubExpr());
12594   C->setVarRefs(Vars);
12595 }
12596 
12597 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12598   VisitOMPClauseWithPreInit(C);
12599   C->setNumTeams(Record.readSubExpr());
12600   C->setLParenLoc(Record.readSourceLocation());
12601 }
12602 
12603 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12604   VisitOMPClauseWithPreInit(C);
12605   C->setThreadLimit(Record.readSubExpr());
12606   C->setLParenLoc(Record.readSourceLocation());
12607 }
12608 
12609 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12610   VisitOMPClauseWithPreInit(C);
12611   C->setPriority(Record.readSubExpr());
12612   C->setLParenLoc(Record.readSourceLocation());
12613 }
12614 
12615 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12616   VisitOMPClauseWithPreInit(C);
12617   C->setGrainsize(Record.readSubExpr());
12618   C->setLParenLoc(Record.readSourceLocation());
12619 }
12620 
12621 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12622   VisitOMPClauseWithPreInit(C);
12623   C->setNumTasks(Record.readSubExpr());
12624   C->setLParenLoc(Record.readSourceLocation());
12625 }
12626 
12627 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12628   C->setHint(Record.readSubExpr());
12629   C->setLParenLoc(Record.readSourceLocation());
12630 }
12631 
12632 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12633   VisitOMPClauseWithPreInit(C);
12634   C->setDistScheduleKind(
12635       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12636   C->setChunkSize(Record.readSubExpr());
12637   C->setLParenLoc(Record.readSourceLocation());
12638   C->setDistScheduleKindLoc(Record.readSourceLocation());
12639   C->setCommaLoc(Record.readSourceLocation());
12640 }
12641 
12642 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12643   C->setDefaultmapKind(
12644        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12645   C->setDefaultmapModifier(
12646       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12647   C->setLParenLoc(Record.readSourceLocation());
12648   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12649   C->setDefaultmapKindLoc(Record.readSourceLocation());
12650 }
12651 
12652 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12653   C->setLParenLoc(Record.readSourceLocation());
12654   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12655     C->setMotionModifier(
12656         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12657     C->setMotionModifierLoc(I, Record.readSourceLocation());
12658   }
12659   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12660   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12661   C->setColonLoc(Record.readSourceLocation());
12662   auto NumVars = C->varlist_size();
12663   auto UniqueDecls = C->getUniqueDeclarationsNum();
12664   auto TotalLists = C->getTotalComponentListNum();
12665   auto TotalComponents = C->getTotalComponentsNum();
12666 
12667   SmallVector<Expr *, 16> Vars;
12668   Vars.reserve(NumVars);
12669   for (unsigned i = 0; i != NumVars; ++i)
12670     Vars.push_back(Record.readSubExpr());
12671   C->setVarRefs(Vars);
12672 
12673   SmallVector<Expr *, 16> UDMappers;
12674   UDMappers.reserve(NumVars);
12675   for (unsigned I = 0; I < NumVars; ++I)
12676     UDMappers.push_back(Record.readSubExpr());
12677   C->setUDMapperRefs(UDMappers);
12678 
12679   SmallVector<ValueDecl *, 16> Decls;
12680   Decls.reserve(UniqueDecls);
12681   for (unsigned i = 0; i < UniqueDecls; ++i)
12682     Decls.push_back(Record.readDeclAs<ValueDecl>());
12683   C->setUniqueDecls(Decls);
12684 
12685   SmallVector<unsigned, 16> ListsPerDecl;
12686   ListsPerDecl.reserve(UniqueDecls);
12687   for (unsigned i = 0; i < UniqueDecls; ++i)
12688     ListsPerDecl.push_back(Record.readInt());
12689   C->setDeclNumLists(ListsPerDecl);
12690 
12691   SmallVector<unsigned, 32> ListSizes;
12692   ListSizes.reserve(TotalLists);
12693   for (unsigned i = 0; i < TotalLists; ++i)
12694     ListSizes.push_back(Record.readInt());
12695   C->setComponentListSizes(ListSizes);
12696 
12697   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12698   Components.reserve(TotalComponents);
12699   for (unsigned i = 0; i < TotalComponents; ++i) {
12700     Expr *AssociatedExprPr = Record.readSubExpr();
12701     bool IsNonContiguous = Record.readBool();
12702     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12703     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12704   }
12705   C->setComponents(Components, ListSizes);
12706 }
12707 
12708 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12709   C->setLParenLoc(Record.readSourceLocation());
12710   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12711     C->setMotionModifier(
12712         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12713     C->setMotionModifierLoc(I, Record.readSourceLocation());
12714   }
12715   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12716   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12717   C->setColonLoc(Record.readSourceLocation());
12718   auto NumVars = C->varlist_size();
12719   auto UniqueDecls = C->getUniqueDeclarationsNum();
12720   auto TotalLists = C->getTotalComponentListNum();
12721   auto TotalComponents = C->getTotalComponentsNum();
12722 
12723   SmallVector<Expr *, 16> Vars;
12724   Vars.reserve(NumVars);
12725   for (unsigned i = 0; i != NumVars; ++i)
12726     Vars.push_back(Record.readSubExpr());
12727   C->setVarRefs(Vars);
12728 
12729   SmallVector<Expr *, 16> UDMappers;
12730   UDMappers.reserve(NumVars);
12731   for (unsigned I = 0; I < NumVars; ++I)
12732     UDMappers.push_back(Record.readSubExpr());
12733   C->setUDMapperRefs(UDMappers);
12734 
12735   SmallVector<ValueDecl *, 16> Decls;
12736   Decls.reserve(UniqueDecls);
12737   for (unsigned i = 0; i < UniqueDecls; ++i)
12738     Decls.push_back(Record.readDeclAs<ValueDecl>());
12739   C->setUniqueDecls(Decls);
12740 
12741   SmallVector<unsigned, 16> ListsPerDecl;
12742   ListsPerDecl.reserve(UniqueDecls);
12743   for (unsigned i = 0; i < UniqueDecls; ++i)
12744     ListsPerDecl.push_back(Record.readInt());
12745   C->setDeclNumLists(ListsPerDecl);
12746 
12747   SmallVector<unsigned, 32> ListSizes;
12748   ListSizes.reserve(TotalLists);
12749   for (unsigned i = 0; i < TotalLists; ++i)
12750     ListSizes.push_back(Record.readInt());
12751   C->setComponentListSizes(ListSizes);
12752 
12753   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12754   Components.reserve(TotalComponents);
12755   for (unsigned i = 0; i < TotalComponents; ++i) {
12756     Expr *AssociatedExprPr = Record.readSubExpr();
12757     bool IsNonContiguous = Record.readBool();
12758     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12759     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12760   }
12761   C->setComponents(Components, ListSizes);
12762 }
12763 
12764 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12765   C->setLParenLoc(Record.readSourceLocation());
12766   auto NumVars = C->varlist_size();
12767   auto UniqueDecls = C->getUniqueDeclarationsNum();
12768   auto TotalLists = C->getTotalComponentListNum();
12769   auto TotalComponents = C->getTotalComponentsNum();
12770 
12771   SmallVector<Expr *, 16> Vars;
12772   Vars.reserve(NumVars);
12773   for (unsigned i = 0; i != NumVars; ++i)
12774     Vars.push_back(Record.readSubExpr());
12775   C->setVarRefs(Vars);
12776   Vars.clear();
12777   for (unsigned i = 0; i != NumVars; ++i)
12778     Vars.push_back(Record.readSubExpr());
12779   C->setPrivateCopies(Vars);
12780   Vars.clear();
12781   for (unsigned i = 0; i != NumVars; ++i)
12782     Vars.push_back(Record.readSubExpr());
12783   C->setInits(Vars);
12784 
12785   SmallVector<ValueDecl *, 16> Decls;
12786   Decls.reserve(UniqueDecls);
12787   for (unsigned i = 0; i < UniqueDecls; ++i)
12788     Decls.push_back(Record.readDeclAs<ValueDecl>());
12789   C->setUniqueDecls(Decls);
12790 
12791   SmallVector<unsigned, 16> ListsPerDecl;
12792   ListsPerDecl.reserve(UniqueDecls);
12793   for (unsigned i = 0; i < UniqueDecls; ++i)
12794     ListsPerDecl.push_back(Record.readInt());
12795   C->setDeclNumLists(ListsPerDecl);
12796 
12797   SmallVector<unsigned, 32> ListSizes;
12798   ListSizes.reserve(TotalLists);
12799   for (unsigned i = 0; i < TotalLists; ++i)
12800     ListSizes.push_back(Record.readInt());
12801   C->setComponentListSizes(ListSizes);
12802 
12803   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12804   Components.reserve(TotalComponents);
12805   for (unsigned i = 0; i < TotalComponents; ++i) {
12806     auto *AssociatedExprPr = Record.readSubExpr();
12807     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12808     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12809                             /*IsNonContiguous=*/false);
12810   }
12811   C->setComponents(Components, ListSizes);
12812 }
12813 
12814 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12815   C->setLParenLoc(Record.readSourceLocation());
12816   auto NumVars = C->varlist_size();
12817   auto UniqueDecls = C->getUniqueDeclarationsNum();
12818   auto TotalLists = C->getTotalComponentListNum();
12819   auto TotalComponents = C->getTotalComponentsNum();
12820 
12821   SmallVector<Expr *, 16> Vars;
12822   Vars.reserve(NumVars);
12823   for (unsigned i = 0; i != NumVars; ++i)
12824     Vars.push_back(Record.readSubExpr());
12825   C->setVarRefs(Vars);
12826 
12827   SmallVector<ValueDecl *, 16> Decls;
12828   Decls.reserve(UniqueDecls);
12829   for (unsigned i = 0; i < UniqueDecls; ++i)
12830     Decls.push_back(Record.readDeclAs<ValueDecl>());
12831   C->setUniqueDecls(Decls);
12832 
12833   SmallVector<unsigned, 16> ListsPerDecl;
12834   ListsPerDecl.reserve(UniqueDecls);
12835   for (unsigned i = 0; i < UniqueDecls; ++i)
12836     ListsPerDecl.push_back(Record.readInt());
12837   C->setDeclNumLists(ListsPerDecl);
12838 
12839   SmallVector<unsigned, 32> ListSizes;
12840   ListSizes.reserve(TotalLists);
12841   for (unsigned i = 0; i < TotalLists; ++i)
12842     ListSizes.push_back(Record.readInt());
12843   C->setComponentListSizes(ListSizes);
12844 
12845   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12846   Components.reserve(TotalComponents);
12847   for (unsigned i = 0; i < TotalComponents; ++i) {
12848     Expr *AssociatedExpr = Record.readSubExpr();
12849     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12850     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12851                             /*IsNonContiguous*/ false);
12852   }
12853   C->setComponents(Components, ListSizes);
12854 }
12855 
12856 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12857   C->setLParenLoc(Record.readSourceLocation());
12858   auto NumVars = C->varlist_size();
12859   auto UniqueDecls = C->getUniqueDeclarationsNum();
12860   auto TotalLists = C->getTotalComponentListNum();
12861   auto TotalComponents = C->getTotalComponentsNum();
12862 
12863   SmallVector<Expr *, 16> Vars;
12864   Vars.reserve(NumVars);
12865   for (unsigned i = 0; i != NumVars; ++i)
12866     Vars.push_back(Record.readSubExpr());
12867   C->setVarRefs(Vars);
12868   Vars.clear();
12869 
12870   SmallVector<ValueDecl *, 16> Decls;
12871   Decls.reserve(UniqueDecls);
12872   for (unsigned i = 0; i < UniqueDecls; ++i)
12873     Decls.push_back(Record.readDeclAs<ValueDecl>());
12874   C->setUniqueDecls(Decls);
12875 
12876   SmallVector<unsigned, 16> ListsPerDecl;
12877   ListsPerDecl.reserve(UniqueDecls);
12878   for (unsigned i = 0; i < UniqueDecls; ++i)
12879     ListsPerDecl.push_back(Record.readInt());
12880   C->setDeclNumLists(ListsPerDecl);
12881 
12882   SmallVector<unsigned, 32> ListSizes;
12883   ListSizes.reserve(TotalLists);
12884   for (unsigned i = 0; i < TotalLists; ++i)
12885     ListSizes.push_back(Record.readInt());
12886   C->setComponentListSizes(ListSizes);
12887 
12888   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12889   Components.reserve(TotalComponents);
12890   for (unsigned i = 0; i < TotalComponents; ++i) {
12891     Expr *AssociatedExpr = Record.readSubExpr();
12892     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12893     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12894                             /*IsNonContiguous=*/false);
12895   }
12896   C->setComponents(Components, ListSizes);
12897 }
12898 
12899 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12900   C->setLParenLoc(Record.readSourceLocation());
12901   unsigned NumVars = C->varlist_size();
12902   SmallVector<Expr *, 16> Vars;
12903   Vars.reserve(NumVars);
12904   for (unsigned i = 0; i != NumVars; ++i)
12905     Vars.push_back(Record.readSubExpr());
12906   C->setVarRefs(Vars);
12907   Vars.clear();
12908   Vars.reserve(NumVars);
12909   for (unsigned i = 0; i != NumVars; ++i)
12910     Vars.push_back(Record.readSubExpr());
12911   C->setPrivateRefs(Vars);
12912 }
12913 
12914 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12915   C->setLParenLoc(Record.readSourceLocation());
12916   unsigned NumVars = C->varlist_size();
12917   SmallVector<Expr *, 16> Vars;
12918   Vars.reserve(NumVars);
12919   for (unsigned i = 0; i != NumVars; ++i)
12920     Vars.push_back(Record.readSubExpr());
12921   C->setVarRefs(Vars);
12922 }
12923 
12924 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12925   C->setLParenLoc(Record.readSourceLocation());
12926   unsigned NumVars = C->varlist_size();
12927   SmallVector<Expr *, 16> Vars;
12928   Vars.reserve(NumVars);
12929   for (unsigned i = 0; i != NumVars; ++i)
12930     Vars.push_back(Record.readSubExpr());
12931   C->setVarRefs(Vars);
12932 }
12933 
12934 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12935   C->setLParenLoc(Record.readSourceLocation());
12936   unsigned NumOfAllocators = C->getNumberOfAllocators();
12937   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12938   Data.reserve(NumOfAllocators);
12939   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12940     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12941     D.Allocator = Record.readSubExpr();
12942     D.AllocatorTraits = Record.readSubExpr();
12943     D.LParenLoc = Record.readSourceLocation();
12944     D.RParenLoc = Record.readSourceLocation();
12945   }
12946   C->setAllocatorsData(Data);
12947 }
12948 
12949 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12950   C->setLParenLoc(Record.readSourceLocation());
12951   C->setModifier(Record.readSubExpr());
12952   C->setColonLoc(Record.readSourceLocation());
12953   unsigned NumOfLocators = C->varlist_size();
12954   SmallVector<Expr *, 4> Locators;
12955   Locators.reserve(NumOfLocators);
12956   for (unsigned I = 0; I != NumOfLocators; ++I)
12957     Locators.push_back(Record.readSubExpr());
12958   C->setVarRefs(Locators);
12959 }
12960 
12961 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12962   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12963   C->setLParenLoc(Record.readSourceLocation());
12964   C->setKindKwLoc(Record.readSourceLocation());
12965 }
12966 
12967 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12968   VisitOMPClauseWithPreInit(C);
12969   C->setThreadID(Record.readSubExpr());
12970   C->setLParenLoc(Record.readSourceLocation());
12971 }
12972 
12973 void OMPClauseReader::VisitOMPBindClause(OMPBindClause *C) {
12974   C->setBindKind(Record.readEnum<OpenMPBindClauseKind>());
12975   C->setLParenLoc(Record.readSourceLocation());
12976   C->setBindKindLoc(Record.readSourceLocation());
12977 }
12978 
12979 void OMPClauseReader::VisitOMPAlignClause(OMPAlignClause *C) {
12980   C->setAlignment(Record.readExpr());
12981   C->setLParenLoc(Record.readSourceLocation());
12982 }
12983 
12984 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12985   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12986   TI.Sets.resize(readUInt32());
12987   for (auto &Set : TI.Sets) {
12988     Set.Kind = readEnum<llvm::omp::TraitSet>();
12989     Set.Selectors.resize(readUInt32());
12990     for (auto &Selector : Set.Selectors) {
12991       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12992       Selector.ScoreOrCondition = nullptr;
12993       if (readBool())
12994         Selector.ScoreOrCondition = readExprRef();
12995       Selector.Properties.resize(readUInt32());
12996       for (auto &Property : Selector.Properties)
12997         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12998     }
12999   }
13000   return &TI;
13001 }
13002 
13003 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
13004   if (!Data)
13005     return;
13006   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
13007     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13008     skipInts(3);
13009   }
13010   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13011   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13012     Clauses[I] = readOMPClause();
13013   Data->setClauses(Clauses);
13014   if (Data->hasAssociatedStmt())
13015     Data->setAssociatedStmt(readStmt());
13016   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13017     Data->getChildren()[I] = readStmt();
13018 }
13019