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 
146 //===----------------------------------------------------------------------===//
147 // ChainedASTReaderListener implementation
148 //===----------------------------------------------------------------------===//
149 
150 bool
151 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
152   return First->ReadFullVersionInformation(FullVersion) ||
153          Second->ReadFullVersionInformation(FullVersion);
154 }
155 
156 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
157   First->ReadModuleName(ModuleName);
158   Second->ReadModuleName(ModuleName);
159 }
160 
161 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
162   First->ReadModuleMapFile(ModuleMapPath);
163   Second->ReadModuleMapFile(ModuleMapPath);
164 }
165 
166 bool
167 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
168                                               bool Complain,
169                                               bool AllowCompatibleDifferences) {
170   return First->ReadLanguageOptions(LangOpts, Complain,
171                                     AllowCompatibleDifferences) ||
172          Second->ReadLanguageOptions(LangOpts, Complain,
173                                      AllowCompatibleDifferences);
174 }
175 
176 bool ChainedASTReaderListener::ReadTargetOptions(
177     const TargetOptions &TargetOpts, bool Complain,
178     bool AllowCompatibleDifferences) {
179   return First->ReadTargetOptions(TargetOpts, Complain,
180                                   AllowCompatibleDifferences) ||
181          Second->ReadTargetOptions(TargetOpts, Complain,
182                                    AllowCompatibleDifferences);
183 }
184 
185 bool ChainedASTReaderListener::ReadDiagnosticOptions(
186     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
187   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
188          Second->ReadDiagnosticOptions(DiagOpts, Complain);
189 }
190 
191 bool
192 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
193                                                 bool Complain) {
194   return First->ReadFileSystemOptions(FSOpts, Complain) ||
195          Second->ReadFileSystemOptions(FSOpts, Complain);
196 }
197 
198 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
199     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
200     bool Complain) {
201   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
202                                         Complain) ||
203          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
204                                          Complain);
205 }
206 
207 bool ChainedASTReaderListener::ReadPreprocessorOptions(
208     const PreprocessorOptions &PPOpts, bool Complain,
209     std::string &SuggestedPredefines) {
210   return First->ReadPreprocessorOptions(PPOpts, Complain,
211                                         SuggestedPredefines) ||
212          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
213 }
214 
215 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
216                                            unsigned Value) {
217   First->ReadCounter(M, Value);
218   Second->ReadCounter(M, Value);
219 }
220 
221 bool ChainedASTReaderListener::needsInputFileVisitation() {
222   return First->needsInputFileVisitation() ||
223          Second->needsInputFileVisitation();
224 }
225 
226 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
227   return First->needsSystemInputFileVisitation() ||
228   Second->needsSystemInputFileVisitation();
229 }
230 
231 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
232                                                ModuleKind Kind) {
233   First->visitModuleFile(Filename, Kind);
234   Second->visitModuleFile(Filename, Kind);
235 }
236 
237 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
238                                               bool isSystem,
239                                               bool isOverridden,
240                                               bool isExplicitModule) {
241   bool Continue = false;
242   if (First->needsInputFileVisitation() &&
243       (!isSystem || First->needsSystemInputFileVisitation()))
244     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
245                                       isExplicitModule);
246   if (Second->needsInputFileVisitation() &&
247       (!isSystem || Second->needsSystemInputFileVisitation()))
248     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
249                                        isExplicitModule);
250   return Continue;
251 }
252 
253 void ChainedASTReaderListener::readModuleFileExtension(
254        const ModuleFileExtensionMetadata &Metadata) {
255   First->readModuleFileExtension(Metadata);
256   Second->readModuleFileExtension(Metadata);
257 }
258 
259 //===----------------------------------------------------------------------===//
260 // PCH validator implementation
261 //===----------------------------------------------------------------------===//
262 
263 ASTReaderListener::~ASTReaderListener() = default;
264 
265 /// Compare the given set of language options against an existing set of
266 /// language options.
267 ///
268 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
269 /// \param AllowCompatibleDifferences If true, differences between compatible
270 ///        language options will be permitted.
271 ///
272 /// \returns true if the languagae options mis-match, false otherwise.
273 static bool checkLanguageOptions(const LangOptions &LangOpts,
274                                  const LangOptions &ExistingLangOpts,
275                                  DiagnosticsEngine *Diags,
276                                  bool AllowCompatibleDifferences = true) {
277 #define LANGOPT(Name, Bits, Default, Description)                 \
278   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
279     if (Diags)                                                    \
280       Diags->Report(diag::err_pch_langopt_mismatch)               \
281         << Description << LangOpts.Name << ExistingLangOpts.Name; \
282     return true;                                                  \
283   }
284 
285 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
286   if (ExistingLangOpts.Name != LangOpts.Name) {           \
287     if (Diags)                                            \
288       Diags->Report(diag::err_pch_langopt_value_mismatch) \
289         << Description;                                   \
290     return true;                                          \
291   }
292 
293 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
294   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
295     if (Diags)                                                 \
296       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
297         << Description;                                        \
298     return true;                                               \
299   }
300 
301 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
302   if (!AllowCompatibleDifferences)                            \
303     LANGOPT(Name, Bits, Default, Description)
304 
305 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
306   if (!AllowCompatibleDifferences)                                 \
307     ENUM_LANGOPT(Name, Bits, Default, Description)
308 
309 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
310   if (!AllowCompatibleDifferences)                                 \
311     VALUE_LANGOPT(Name, Bits, Default, Description)
312 
313 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
314 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
315 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
316 #include "clang/Basic/LangOptions.def"
317 
318   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
319     if (Diags)
320       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
321     return true;
322   }
323 
324   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
325     if (Diags)
326       Diags->Report(diag::err_pch_langopt_value_mismatch)
327       << "target Objective-C runtime";
328     return true;
329   }
330 
331   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
332       LangOpts.CommentOpts.BlockCommandNames) {
333     if (Diags)
334       Diags->Report(diag::err_pch_langopt_value_mismatch)
335         << "block command names";
336     return true;
337   }
338 
339   // Sanitizer feature mismatches are treated as compatible differences. If
340   // compatible differences aren't allowed, we still only want to check for
341   // mismatches of non-modular sanitizers (the only ones which can affect AST
342   // generation).
343   if (!AllowCompatibleDifferences) {
344     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
345     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
346     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
347     ExistingSanitizers.clear(ModularSanitizers);
348     ImportedSanitizers.clear(ModularSanitizers);
349     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
350       const std::string Flag = "-fsanitize=";
351       if (Diags) {
352 #define SANITIZER(NAME, ID)                                                    \
353   {                                                                            \
354     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
355     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
356     if (InExistingModule != InImportedModule)                                  \
357       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
358           << InExistingModule << (Flag + NAME);                                \
359   }
360 #include "clang/Basic/Sanitizers.def"
361       }
362       return true;
363     }
364   }
365 
366   return false;
367 }
368 
369 /// Compare the given set of target options against an existing set of
370 /// target options.
371 ///
372 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
373 ///
374 /// \returns true if the target options mis-match, false otherwise.
375 static bool checkTargetOptions(const TargetOptions &TargetOpts,
376                                const TargetOptions &ExistingTargetOpts,
377                                DiagnosticsEngine *Diags,
378                                bool AllowCompatibleDifferences = true) {
379 #define CHECK_TARGET_OPT(Field, Name)                             \
380   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
381     if (Diags)                                                    \
382       Diags->Report(diag::err_pch_targetopt_mismatch)             \
383         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
384     return true;                                                  \
385   }
386 
387   // The triple and ABI must match exactly.
388   CHECK_TARGET_OPT(Triple, "target");
389   CHECK_TARGET_OPT(ABI, "target ABI");
390 
391   // We can tolerate different CPUs in many cases, notably when one CPU
392   // supports a strict superset of another. When allowing compatible
393   // differences skip this check.
394   if (!AllowCompatibleDifferences) {
395     CHECK_TARGET_OPT(CPU, "target CPU");
396     CHECK_TARGET_OPT(TuneCPU, "tune CPU");
397   }
398 
399 #undef CHECK_TARGET_OPT
400 
401   // Compare feature sets.
402   SmallVector<StringRef, 4> ExistingFeatures(
403                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
404                                              ExistingTargetOpts.FeaturesAsWritten.end());
405   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
406                                          TargetOpts.FeaturesAsWritten.end());
407   llvm::sort(ExistingFeatures);
408   llvm::sort(ReadFeatures);
409 
410   // We compute the set difference in both directions explicitly so that we can
411   // diagnose the differences differently.
412   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
413   std::set_difference(
414       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
415       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
416   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
417                       ExistingFeatures.begin(), ExistingFeatures.end(),
418                       std::back_inserter(UnmatchedReadFeatures));
419 
420   // If we are allowing compatible differences and the read feature set is
421   // a strict subset of the existing feature set, there is nothing to diagnose.
422   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
423     return false;
424 
425   if (Diags) {
426     for (StringRef Feature : UnmatchedReadFeatures)
427       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
428           << /* is-existing-feature */ false << Feature;
429     for (StringRef Feature : UnmatchedExistingFeatures)
430       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
431           << /* is-existing-feature */ true << Feature;
432   }
433 
434   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
435 }
436 
437 bool
438 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
439                                   bool Complain,
440                                   bool AllowCompatibleDifferences) {
441   const LangOptions &ExistingLangOpts = PP.getLangOpts();
442   return checkLanguageOptions(LangOpts, ExistingLangOpts,
443                               Complain ? &Reader.Diags : nullptr,
444                               AllowCompatibleDifferences);
445 }
446 
447 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
448                                      bool Complain,
449                                      bool AllowCompatibleDifferences) {
450   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
451   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
452                             Complain ? &Reader.Diags : nullptr,
453                             AllowCompatibleDifferences);
454 }
455 
456 namespace {
457 
458 using MacroDefinitionsMap =
459     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
460 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
461 
462 } // namespace
463 
464 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
465                                          DiagnosticsEngine &Diags,
466                                          bool Complain) {
467   using Level = DiagnosticsEngine::Level;
468 
469   // Check current mappings for new -Werror mappings, and the stored mappings
470   // for cases that were explicitly mapped to *not* be errors that are now
471   // errors because of options like -Werror.
472   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
473 
474   for (DiagnosticsEngine *MappingSource : MappingSources) {
475     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
476       diag::kind DiagID = DiagIDMappingPair.first;
477       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
478       if (CurLevel < DiagnosticsEngine::Error)
479         continue; // not significant
480       Level StoredLevel =
481           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
482       if (StoredLevel < DiagnosticsEngine::Error) {
483         if (Complain)
484           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
485               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
486         return true;
487       }
488     }
489   }
490 
491   return false;
492 }
493 
494 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
495   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
496   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
497     return true;
498   return Ext >= diag::Severity::Error;
499 }
500 
501 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
502                                     DiagnosticsEngine &Diags,
503                                     bool IsSystem, bool Complain) {
504   // Top-level options
505   if (IsSystem) {
506     if (Diags.getSuppressSystemWarnings())
507       return false;
508     // If -Wsystem-headers was not enabled before, be conservative
509     if (StoredDiags.getSuppressSystemWarnings()) {
510       if (Complain)
511         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
512       return true;
513     }
514   }
515 
516   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
517     if (Complain)
518       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
519     return true;
520   }
521 
522   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
523       !StoredDiags.getEnableAllWarnings()) {
524     if (Complain)
525       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
526     return true;
527   }
528 
529   if (isExtHandlingFromDiagsError(Diags) &&
530       !isExtHandlingFromDiagsError(StoredDiags)) {
531     if (Complain)
532       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
533     return true;
534   }
535 
536   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
537 }
538 
539 /// Return the top import module if it is implicit, nullptr otherwise.
540 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
541                                           Preprocessor &PP) {
542   // If the original import came from a file explicitly generated by the user,
543   // don't check the diagnostic mappings.
544   // FIXME: currently this is approximated by checking whether this is not a
545   // module import of an implicitly-loaded module file.
546   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
547   // the transitive closure of its imports, since unrelated modules cannot be
548   // imported until after this module finishes validation.
549   ModuleFile *TopImport = &*ModuleMgr.rbegin();
550   while (!TopImport->ImportedBy.empty())
551     TopImport = TopImport->ImportedBy[0];
552   if (TopImport->Kind != MK_ImplicitModule)
553     return nullptr;
554 
555   StringRef ModuleName = TopImport->ModuleName;
556   assert(!ModuleName.empty() && "diagnostic options read before module name");
557 
558   Module *M =
559       PP.getHeaderSearchInfo().lookupModule(ModuleName, TopImport->ImportLoc);
560   assert(M && "missing module");
561   return M;
562 }
563 
564 bool PCHValidator::ReadDiagnosticOptions(
565     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
566   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
567   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
568   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
569       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
570   // This should never fail, because we would have processed these options
571   // before writing them to an ASTFile.
572   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
573 
574   ModuleManager &ModuleMgr = Reader.getModuleManager();
575   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
576 
577   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
578   if (!TopM)
579     return false;
580 
581   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
582   // contains the union of their flags.
583   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
584                                  Complain);
585 }
586 
587 /// Collect the macro definitions provided by the given preprocessor
588 /// options.
589 static void
590 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
591                         MacroDefinitionsMap &Macros,
592                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
593   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
594     StringRef Macro = PPOpts.Macros[I].first;
595     bool IsUndef = PPOpts.Macros[I].second;
596 
597     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
598     StringRef MacroName = MacroPair.first;
599     StringRef MacroBody = MacroPair.second;
600 
601     // For an #undef'd macro, we only care about the name.
602     if (IsUndef) {
603       if (MacroNames && !Macros.count(MacroName))
604         MacroNames->push_back(MacroName);
605 
606       Macros[MacroName] = std::make_pair("", true);
607       continue;
608     }
609 
610     // For a #define'd macro, figure out the actual definition.
611     if (MacroName.size() == Macro.size())
612       MacroBody = "1";
613     else {
614       // Note: GCC drops anything following an end-of-line character.
615       StringRef::size_type End = MacroBody.find_first_of("\n\r");
616       MacroBody = MacroBody.substr(0, End);
617     }
618 
619     if (MacroNames && !Macros.count(MacroName))
620       MacroNames->push_back(MacroName);
621     Macros[MacroName] = std::make_pair(MacroBody, false);
622   }
623 }
624 
625 /// Check the preprocessor options deserialized from the control block
626 /// against the preprocessor options in an existing preprocessor.
627 ///
628 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
629 /// \param Validate If true, validate preprocessor options. If false, allow
630 ///        macros defined by \p ExistingPPOpts to override those defined by
631 ///        \p PPOpts in SuggestedPredefines.
632 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
633                                      const PreprocessorOptions &ExistingPPOpts,
634                                      DiagnosticsEngine *Diags,
635                                      FileManager &FileMgr,
636                                      std::string &SuggestedPredefines,
637                                      const LangOptions &LangOpts,
638                                      bool Validate = true) {
639   // Check macro definitions.
640   MacroDefinitionsMap ASTFileMacros;
641   collectMacroDefinitions(PPOpts, ASTFileMacros);
642   MacroDefinitionsMap ExistingMacros;
643   SmallVector<StringRef, 4> ExistingMacroNames;
644   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
645 
646   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
647     // Dig out the macro definition in the existing preprocessor options.
648     StringRef MacroName = ExistingMacroNames[I];
649     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
650 
651     // Check whether we know anything about this macro name or not.
652     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
653         ASTFileMacros.find(MacroName);
654     if (!Validate || Known == ASTFileMacros.end()) {
655       // FIXME: Check whether this identifier was referenced anywhere in the
656       // AST file. If so, we should reject the AST file. Unfortunately, this
657       // information isn't in the control block. What shall we do about it?
658 
659       if (Existing.second) {
660         SuggestedPredefines += "#undef ";
661         SuggestedPredefines += MacroName.str();
662         SuggestedPredefines += '\n';
663       } else {
664         SuggestedPredefines += "#define ";
665         SuggestedPredefines += MacroName.str();
666         SuggestedPredefines += ' ';
667         SuggestedPredefines += Existing.first.str();
668         SuggestedPredefines += '\n';
669       }
670       continue;
671     }
672 
673     // If the macro was defined in one but undef'd in the other, we have a
674     // conflict.
675     if (Existing.second != Known->second.second) {
676       if (Diags) {
677         Diags->Report(diag::err_pch_macro_def_undef)
678           << MacroName << Known->second.second;
679       }
680       return true;
681     }
682 
683     // If the macro was #undef'd in both, or if the macro bodies are identical,
684     // it's fine.
685     if (Existing.second || Existing.first == Known->second.first)
686       continue;
687 
688     // The macro bodies differ; complain.
689     if (Diags) {
690       Diags->Report(diag::err_pch_macro_def_conflict)
691         << MacroName << Known->second.first << Existing.first;
692     }
693     return true;
694   }
695 
696   // Check whether we're using predefines.
697   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
698     if (Diags) {
699       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
700     }
701     return true;
702   }
703 
704   // Detailed record is important since it is used for the module cache hash.
705   if (LangOpts.Modules &&
706       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
707     if (Diags) {
708       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
709     }
710     return true;
711   }
712 
713   // Compute the #include and #include_macros lines we need.
714   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
715     StringRef File = ExistingPPOpts.Includes[I];
716 
717     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
718         !ExistingPPOpts.PCHThroughHeader.empty()) {
719       // In case the through header is an include, we must add all the includes
720       // to the predefines so the start point can be determined.
721       SuggestedPredefines += "#include \"";
722       SuggestedPredefines += File;
723       SuggestedPredefines += "\"\n";
724       continue;
725     }
726 
727     if (File == ExistingPPOpts.ImplicitPCHInclude)
728       continue;
729 
730     if (llvm::is_contained(PPOpts.Includes, File))
731       continue;
732 
733     SuggestedPredefines += "#include \"";
734     SuggestedPredefines += File;
735     SuggestedPredefines += "\"\n";
736   }
737 
738   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
739     StringRef File = ExistingPPOpts.MacroIncludes[I];
740     if (llvm::is_contained(PPOpts.MacroIncludes, File))
741       continue;
742 
743     SuggestedPredefines += "#__include_macros \"";
744     SuggestedPredefines += File;
745     SuggestedPredefines += "\"\n##\n";
746   }
747 
748   return false;
749 }
750 
751 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
752                                            bool Complain,
753                                            std::string &SuggestedPredefines) {
754   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
755 
756   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
757                                   Complain? &Reader.Diags : nullptr,
758                                   PP.getFileManager(),
759                                   SuggestedPredefines,
760                                   PP.getLangOpts());
761 }
762 
763 bool SimpleASTReaderListener::ReadPreprocessorOptions(
764                                   const PreprocessorOptions &PPOpts,
765                                   bool Complain,
766                                   std::string &SuggestedPredefines) {
767   return checkPreprocessorOptions(PPOpts,
768                                   PP.getPreprocessorOpts(),
769                                   nullptr,
770                                   PP.getFileManager(),
771                                   SuggestedPredefines,
772                                   PP.getLangOpts(),
773                                   false);
774 }
775 
776 /// Check the header search options deserialized from the control block
777 /// against the header search options in an existing preprocessor.
778 ///
779 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
780 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
781                                      StringRef SpecificModuleCachePath,
782                                      StringRef ExistingModuleCachePath,
783                                      DiagnosticsEngine *Diags,
784                                      const LangOptions &LangOpts,
785                                      const PreprocessorOptions &PPOpts) {
786   if (LangOpts.Modules) {
787     if (SpecificModuleCachePath != ExistingModuleCachePath &&
788         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
789       if (Diags)
790         Diags->Report(diag::err_pch_modulecache_mismatch)
791           << SpecificModuleCachePath << ExistingModuleCachePath;
792       return true;
793     }
794   }
795 
796   return false;
797 }
798 
799 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
800                                            StringRef SpecificModuleCachePath,
801                                            bool Complain) {
802   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
803                                   PP.getHeaderSearchInfo().getModuleCachePath(),
804                                   Complain ? &Reader.Diags : nullptr,
805                                   PP.getLangOpts(), PP.getPreprocessorOpts());
806 }
807 
808 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
809   PP.setCounterValue(Value);
810 }
811 
812 //===----------------------------------------------------------------------===//
813 // AST reader implementation
814 //===----------------------------------------------------------------------===//
815 
816 static uint64_t readULEB(const unsigned char *&P) {
817   unsigned Length = 0;
818   const char *Error = nullptr;
819 
820   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
821   if (Error)
822     llvm::report_fatal_error(Error);
823   P += Length;
824   return Val;
825 }
826 
827 /// Read ULEB-encoded key length and data length.
828 static std::pair<unsigned, unsigned>
829 readULEBKeyDataLength(const unsigned char *&P) {
830   unsigned KeyLen = readULEB(P);
831   if ((unsigned)KeyLen != KeyLen)
832     llvm::report_fatal_error("key too large");
833 
834   unsigned DataLen = readULEB(P);
835   if ((unsigned)DataLen != DataLen)
836     llvm::report_fatal_error("data too large");
837 
838   return std::make_pair(KeyLen, DataLen);
839 }
840 
841 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
842                                            bool TakeOwnership) {
843   DeserializationListener = Listener;
844   OwnsDeserializationListener = TakeOwnership;
845 }
846 
847 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
848   return serialization::ComputeHash(Sel);
849 }
850 
851 std::pair<unsigned, unsigned>
852 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
853   return readULEBKeyDataLength(d);
854 }
855 
856 ASTSelectorLookupTrait::internal_key_type
857 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
858   using namespace llvm::support;
859 
860   SelectorTable &SelTable = Reader.getContext().Selectors;
861   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
862   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
863       F, endian::readNext<uint32_t, little, unaligned>(d));
864   if (N == 0)
865     return SelTable.getNullarySelector(FirstII);
866   else if (N == 1)
867     return SelTable.getUnarySelector(FirstII);
868 
869   SmallVector<IdentifierInfo *, 16> Args;
870   Args.push_back(FirstII);
871   for (unsigned I = 1; I != N; ++I)
872     Args.push_back(Reader.getLocalIdentifier(
873         F, endian::readNext<uint32_t, little, unaligned>(d)));
874 
875   return SelTable.getSelector(N, Args.data());
876 }
877 
878 ASTSelectorLookupTrait::data_type
879 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
880                                  unsigned DataLen) {
881   using namespace llvm::support;
882 
883   data_type Result;
884 
885   Result.ID = Reader.getGlobalSelectorID(
886       F, endian::readNext<uint32_t, little, unaligned>(d));
887   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
888   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
889   Result.InstanceBits = FullInstanceBits & 0x3;
890   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
891   Result.FactoryBits = FullFactoryBits & 0x3;
892   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
893   unsigned NumInstanceMethods = FullInstanceBits >> 3;
894   unsigned NumFactoryMethods = FullFactoryBits >> 3;
895 
896   // Load instance methods
897   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
898     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
899             F, endian::readNext<uint32_t, little, unaligned>(d)))
900       Result.Instance.push_back(Method);
901   }
902 
903   // Load factory methods
904   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
905     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
906             F, endian::readNext<uint32_t, little, unaligned>(d)))
907       Result.Factory.push_back(Method);
908   }
909 
910   return Result;
911 }
912 
913 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
914   return llvm::djbHash(a);
915 }
916 
917 std::pair<unsigned, unsigned>
918 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
919   return readULEBKeyDataLength(d);
920 }
921 
922 ASTIdentifierLookupTraitBase::internal_key_type
923 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
924   assert(n >= 2 && d[n-1] == '\0');
925   return StringRef((const char*) d, n-1);
926 }
927 
928 /// Whether the given identifier is "interesting".
929 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
930                                     bool IsModule) {
931   return II.hadMacroDefinition() || II.isPoisoned() ||
932          (!IsModule && II.getObjCOrBuiltinID()) ||
933          II.hasRevertedTokenIDToIdentifier() ||
934          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
935           II.getFETokenInfo());
936 }
937 
938 static bool readBit(unsigned &Bits) {
939   bool Value = Bits & 0x1;
940   Bits >>= 1;
941   return Value;
942 }
943 
944 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
945   using namespace llvm::support;
946 
947   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
948   return Reader.getGlobalIdentifierID(F, RawID >> 1);
949 }
950 
951 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
952   if (!II.isFromAST()) {
953     II.setIsFromAST();
954     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
955     if (isInterestingIdentifier(Reader, II, IsModule))
956       II.setChangedSinceDeserialization();
957   }
958 }
959 
960 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
961                                                    const unsigned char* d,
962                                                    unsigned DataLen) {
963   using namespace llvm::support;
964 
965   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
966   bool IsInteresting = RawID & 0x01;
967 
968   // Wipe out the "is interesting" bit.
969   RawID = RawID >> 1;
970 
971   // Build the IdentifierInfo and link the identifier ID with it.
972   IdentifierInfo *II = KnownII;
973   if (!II) {
974     II = &Reader.getIdentifierTable().getOwn(k);
975     KnownII = II;
976   }
977   markIdentifierFromAST(Reader, *II);
978   Reader.markIdentifierUpToDate(II);
979 
980   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
981   if (!IsInteresting) {
982     // For uninteresting identifiers, there's nothing else to do. Just notify
983     // the reader that we've finished loading this identifier.
984     Reader.SetIdentifierInfo(ID, II);
985     return II;
986   }
987 
988   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
989   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
990   bool CPlusPlusOperatorKeyword = readBit(Bits);
991   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
992   bool Poisoned = readBit(Bits);
993   bool ExtensionToken = readBit(Bits);
994   bool HadMacroDefinition = readBit(Bits);
995 
996   assert(Bits == 0 && "Extra bits in the identifier?");
997   DataLen -= 8;
998 
999   // Set or check the various bits in the IdentifierInfo structure.
1000   // Token IDs are read-only.
1001   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1002     II->revertTokenIDToIdentifier();
1003   if (!F.isModule())
1004     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1005   assert(II->isExtensionToken() == ExtensionToken &&
1006          "Incorrect extension token flag");
1007   (void)ExtensionToken;
1008   if (Poisoned)
1009     II->setIsPoisoned(true);
1010   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1011          "Incorrect C++ operator keyword flag");
1012   (void)CPlusPlusOperatorKeyword;
1013 
1014   // If this identifier is a macro, deserialize the macro
1015   // definition.
1016   if (HadMacroDefinition) {
1017     uint32_t MacroDirectivesOffset =
1018         endian::readNext<uint32_t, little, unaligned>(d);
1019     DataLen -= 4;
1020 
1021     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1022   }
1023 
1024   Reader.SetIdentifierInfo(ID, II);
1025 
1026   // Read all of the declarations visible at global scope with this
1027   // name.
1028   if (DataLen > 0) {
1029     SmallVector<uint32_t, 4> DeclIDs;
1030     for (; DataLen > 0; DataLen -= 4)
1031       DeclIDs.push_back(Reader.getGlobalDeclID(
1032           F, endian::readNext<uint32_t, little, unaligned>(d)));
1033     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1034   }
1035 
1036   return II;
1037 }
1038 
1039 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1040     : Kind(Name.getNameKind()) {
1041   switch (Kind) {
1042   case DeclarationName::Identifier:
1043     Data = (uint64_t)Name.getAsIdentifierInfo();
1044     break;
1045   case DeclarationName::ObjCZeroArgSelector:
1046   case DeclarationName::ObjCOneArgSelector:
1047   case DeclarationName::ObjCMultiArgSelector:
1048     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1049     break;
1050   case DeclarationName::CXXOperatorName:
1051     Data = Name.getCXXOverloadedOperator();
1052     break;
1053   case DeclarationName::CXXLiteralOperatorName:
1054     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1055     break;
1056   case DeclarationName::CXXDeductionGuideName:
1057     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1058                ->getDeclName().getAsIdentifierInfo();
1059     break;
1060   case DeclarationName::CXXConstructorName:
1061   case DeclarationName::CXXDestructorName:
1062   case DeclarationName::CXXConversionFunctionName:
1063   case DeclarationName::CXXUsingDirective:
1064     Data = 0;
1065     break;
1066   }
1067 }
1068 
1069 unsigned DeclarationNameKey::getHash() const {
1070   llvm::FoldingSetNodeID ID;
1071   ID.AddInteger(Kind);
1072 
1073   switch (Kind) {
1074   case DeclarationName::Identifier:
1075   case DeclarationName::CXXLiteralOperatorName:
1076   case DeclarationName::CXXDeductionGuideName:
1077     ID.AddString(((IdentifierInfo*)Data)->getName());
1078     break;
1079   case DeclarationName::ObjCZeroArgSelector:
1080   case DeclarationName::ObjCOneArgSelector:
1081   case DeclarationName::ObjCMultiArgSelector:
1082     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1083     break;
1084   case DeclarationName::CXXOperatorName:
1085     ID.AddInteger((OverloadedOperatorKind)Data);
1086     break;
1087   case DeclarationName::CXXConstructorName:
1088   case DeclarationName::CXXDestructorName:
1089   case DeclarationName::CXXConversionFunctionName:
1090   case DeclarationName::CXXUsingDirective:
1091     break;
1092   }
1093 
1094   return ID.ComputeHash();
1095 }
1096 
1097 ModuleFile *
1098 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1099   using namespace llvm::support;
1100 
1101   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1102   return Reader.getLocalModuleFile(F, ModuleFileID);
1103 }
1104 
1105 std::pair<unsigned, unsigned>
1106 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1107   return readULEBKeyDataLength(d);
1108 }
1109 
1110 ASTDeclContextNameLookupTrait::internal_key_type
1111 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1112   using namespace llvm::support;
1113 
1114   auto Kind = (DeclarationName::NameKind)*d++;
1115   uint64_t Data;
1116   switch (Kind) {
1117   case DeclarationName::Identifier:
1118   case DeclarationName::CXXLiteralOperatorName:
1119   case DeclarationName::CXXDeductionGuideName:
1120     Data = (uint64_t)Reader.getLocalIdentifier(
1121         F, endian::readNext<uint32_t, little, unaligned>(d));
1122     break;
1123   case DeclarationName::ObjCZeroArgSelector:
1124   case DeclarationName::ObjCOneArgSelector:
1125   case DeclarationName::ObjCMultiArgSelector:
1126     Data =
1127         (uint64_t)Reader.getLocalSelector(
1128                              F, endian::readNext<uint32_t, little, unaligned>(
1129                                     d)).getAsOpaquePtr();
1130     break;
1131   case DeclarationName::CXXOperatorName:
1132     Data = *d++; // OverloadedOperatorKind
1133     break;
1134   case DeclarationName::CXXConstructorName:
1135   case DeclarationName::CXXDestructorName:
1136   case DeclarationName::CXXConversionFunctionName:
1137   case DeclarationName::CXXUsingDirective:
1138     Data = 0;
1139     break;
1140   }
1141 
1142   return DeclarationNameKey(Kind, Data);
1143 }
1144 
1145 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1146                                                  const unsigned char *d,
1147                                                  unsigned DataLen,
1148                                                  data_type_builder &Val) {
1149   using namespace llvm::support;
1150 
1151   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1152     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1153     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1154   }
1155 }
1156 
1157 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1158                                               BitstreamCursor &Cursor,
1159                                               uint64_t Offset,
1160                                               DeclContext *DC) {
1161   assert(Offset != 0);
1162 
1163   SavedStreamPosition SavedPosition(Cursor);
1164   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1165     Error(std::move(Err));
1166     return true;
1167   }
1168 
1169   RecordData Record;
1170   StringRef Blob;
1171   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1172   if (!MaybeCode) {
1173     Error(MaybeCode.takeError());
1174     return true;
1175   }
1176   unsigned Code = MaybeCode.get();
1177 
1178   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1179   if (!MaybeRecCode) {
1180     Error(MaybeRecCode.takeError());
1181     return true;
1182   }
1183   unsigned RecCode = MaybeRecCode.get();
1184   if (RecCode != DECL_CONTEXT_LEXICAL) {
1185     Error("Expected lexical block");
1186     return true;
1187   }
1188 
1189   assert(!isa<TranslationUnitDecl>(DC) &&
1190          "expected a TU_UPDATE_LEXICAL record for TU");
1191   // If we are handling a C++ class template instantiation, we can see multiple
1192   // lexical updates for the same record. It's important that we select only one
1193   // of them, so that field numbering works properly. Just pick the first one we
1194   // see.
1195   auto &Lex = LexicalDecls[DC];
1196   if (!Lex.first) {
1197     Lex = std::make_pair(
1198         &M, llvm::makeArrayRef(
1199                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1200                     Blob.data()),
1201                 Blob.size() / 4));
1202   }
1203   DC->setHasExternalLexicalStorage(true);
1204   return false;
1205 }
1206 
1207 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1208                                               BitstreamCursor &Cursor,
1209                                               uint64_t Offset,
1210                                               DeclID ID) {
1211   assert(Offset != 0);
1212 
1213   SavedStreamPosition SavedPosition(Cursor);
1214   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1215     Error(std::move(Err));
1216     return true;
1217   }
1218 
1219   RecordData Record;
1220   StringRef Blob;
1221   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1222   if (!MaybeCode) {
1223     Error(MaybeCode.takeError());
1224     return true;
1225   }
1226   unsigned Code = MaybeCode.get();
1227 
1228   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1229   if (!MaybeRecCode) {
1230     Error(MaybeRecCode.takeError());
1231     return true;
1232   }
1233   unsigned RecCode = MaybeRecCode.get();
1234   if (RecCode != DECL_CONTEXT_VISIBLE) {
1235     Error("Expected visible lookup table block");
1236     return true;
1237   }
1238 
1239   // We can't safely determine the primary context yet, so delay attaching the
1240   // lookup table until we're done with recursive deserialization.
1241   auto *Data = (const unsigned char*)Blob.data();
1242   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1243   return false;
1244 }
1245 
1246 void ASTReader::Error(StringRef Msg) const {
1247   Error(diag::err_fe_pch_malformed, Msg);
1248   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1249       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1250     Diag(diag::note_module_cache_path)
1251       << PP.getHeaderSearchInfo().getModuleCachePath();
1252   }
1253 }
1254 
1255 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1256                       StringRef Arg3) const {
1257   if (Diags.isDiagnosticInFlight())
1258     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1259   else
1260     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1261 }
1262 
1263 void ASTReader::Error(llvm::Error &&Err) const {
1264   llvm::Error RemainingErr =
1265       handleErrors(std::move(Err), [this](const DiagnosticError &E) {
1266         auto Diag = E.getDiagnostic().second;
1267 
1268         // Ideally we'd just emit it, but have to handle a possible in-flight
1269         // diagnostic. Note that the location is currently ignored as well.
1270         auto NumArgs = Diag.getStorage()->NumDiagArgs;
1271         assert(NumArgs <= 3 && "Can only have up to 3 arguments");
1272         StringRef Arg1, Arg2, Arg3;
1273         switch (NumArgs) {
1274         case 3:
1275           Arg3 = Diag.getStringArg(2);
1276           LLVM_FALLTHROUGH;
1277         case 2:
1278           Arg2 = Diag.getStringArg(1);
1279           LLVM_FALLTHROUGH;
1280         case 1:
1281           Arg1 = Diag.getStringArg(0);
1282         }
1283         Error(Diag.getDiagID(), Arg1, Arg2, Arg3);
1284       });
1285   if (RemainingErr)
1286     Error(toString(std::move(RemainingErr)));
1287 }
1288 
1289 //===----------------------------------------------------------------------===//
1290 // Source Manager Deserialization
1291 //===----------------------------------------------------------------------===//
1292 
1293 /// Read the line table in the source manager block.
1294 void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
1295   unsigned Idx = 0;
1296   LineTableInfo &LineTable = SourceMgr.getLineTable();
1297 
1298   // Parse the file names
1299   std::map<int, int> FileIDs;
1300   FileIDs[-1] = -1; // For unspecified filenames.
1301   for (unsigned I = 0; Record[Idx]; ++I) {
1302     // Extract the file name
1303     auto Filename = ReadPath(F, Record, Idx);
1304     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1305   }
1306   ++Idx;
1307 
1308   // Parse the line entries
1309   std::vector<LineEntry> Entries;
1310   while (Idx < Record.size()) {
1311     int FID = Record[Idx++];
1312     assert(FID >= 0 && "Serialized line entries for non-local file.");
1313     // Remap FileID from 1-based old view.
1314     FID += F.SLocEntryBaseID - 1;
1315 
1316     // Extract the line entries
1317     unsigned NumEntries = Record[Idx++];
1318     assert(NumEntries && "no line entries for file ID");
1319     Entries.clear();
1320     Entries.reserve(NumEntries);
1321     for (unsigned I = 0; I != NumEntries; ++I) {
1322       unsigned FileOffset = Record[Idx++];
1323       unsigned LineNo = Record[Idx++];
1324       int FilenameID = FileIDs[Record[Idx++]];
1325       SrcMgr::CharacteristicKind FileKind
1326         = (SrcMgr::CharacteristicKind)Record[Idx++];
1327       unsigned IncludeOffset = Record[Idx++];
1328       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1329                                        FileKind, IncludeOffset));
1330     }
1331     LineTable.AddEntry(FileID::get(FID), Entries);
1332   }
1333 }
1334 
1335 /// Read a source manager block
1336 llvm::Error ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1337   using namespace SrcMgr;
1338 
1339   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1340 
1341   // Set the source-location entry cursor to the current position in
1342   // the stream. This cursor will be used to read the contents of the
1343   // source manager block initially, and then lazily read
1344   // source-location entries as needed.
1345   SLocEntryCursor = F.Stream;
1346 
1347   // The stream itself is going to skip over the source manager block.
1348   if (llvm::Error Err = F.Stream.SkipBlock())
1349     return Err;
1350 
1351   // Enter the source manager block.
1352   if (llvm::Error Err = SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID))
1353     return Err;
1354   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1355 
1356   RecordData Record;
1357   while (true) {
1358     Expected<llvm::BitstreamEntry> MaybeE =
1359         SLocEntryCursor.advanceSkippingSubblocks();
1360     if (!MaybeE)
1361       return MaybeE.takeError();
1362     llvm::BitstreamEntry E = MaybeE.get();
1363 
1364     switch (E.Kind) {
1365     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1366     case llvm::BitstreamEntry::Error:
1367       return llvm::createStringError(std::errc::illegal_byte_sequence,
1368                                      "malformed block record in AST file");
1369     case llvm::BitstreamEntry::EndBlock:
1370       return llvm::Error::success();
1371     case llvm::BitstreamEntry::Record:
1372       // The interesting case.
1373       break;
1374     }
1375 
1376     // Read a record.
1377     Record.clear();
1378     StringRef Blob;
1379     Expected<unsigned> MaybeRecord =
1380         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1381     if (!MaybeRecord)
1382       return MaybeRecord.takeError();
1383     switch (MaybeRecord.get()) {
1384     default:  // Default behavior: ignore.
1385       break;
1386 
1387     case SM_SLOC_FILE_ENTRY:
1388     case SM_SLOC_BUFFER_ENTRY:
1389     case SM_SLOC_EXPANSION_ENTRY:
1390       // Once we hit one of the source location entries, we're done.
1391       return llvm::Error::success();
1392     }
1393   }
1394 }
1395 
1396 /// If a header file is not found at the path that we expect it to be
1397 /// and the PCH file was moved from its original location, try to resolve the
1398 /// file by assuming that header+PCH were moved together and the header is in
1399 /// the same place relative to the PCH.
1400 static std::string
1401 resolveFileRelativeToOriginalDir(const std::string &Filename,
1402                                  const std::string &OriginalDir,
1403                                  const std::string &CurrDir) {
1404   assert(OriginalDir != CurrDir &&
1405          "No point trying to resolve the file if the PCH dir didn't change");
1406 
1407   using namespace llvm::sys;
1408 
1409   SmallString<128> filePath(Filename);
1410   fs::make_absolute(filePath);
1411   assert(path::is_absolute(OriginalDir));
1412   SmallString<128> currPCHPath(CurrDir);
1413 
1414   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1415                        fileDirE = path::end(path::parent_path(filePath));
1416   path::const_iterator origDirI = path::begin(OriginalDir),
1417                        origDirE = path::end(OriginalDir);
1418   // Skip the common path components from filePath and OriginalDir.
1419   while (fileDirI != fileDirE && origDirI != origDirE &&
1420          *fileDirI == *origDirI) {
1421     ++fileDirI;
1422     ++origDirI;
1423   }
1424   for (; origDirI != origDirE; ++origDirI)
1425     path::append(currPCHPath, "..");
1426   path::append(currPCHPath, fileDirI, fileDirE);
1427   path::append(currPCHPath, path::filename(Filename));
1428   return std::string(currPCHPath.str());
1429 }
1430 
1431 bool ASTReader::ReadSLocEntry(int ID) {
1432   if (ID == 0)
1433     return false;
1434 
1435   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1436     Error("source location entry ID out-of-range for AST file");
1437     return true;
1438   }
1439 
1440   // Local helper to read the (possibly-compressed) buffer data following the
1441   // entry record.
1442   auto ReadBuffer = [this](
1443       BitstreamCursor &SLocEntryCursor,
1444       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1445     RecordData Record;
1446     StringRef Blob;
1447     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1448     if (!MaybeCode) {
1449       Error(MaybeCode.takeError());
1450       return nullptr;
1451     }
1452     unsigned Code = MaybeCode.get();
1453 
1454     Expected<unsigned> MaybeRecCode =
1455         SLocEntryCursor.readRecord(Code, Record, &Blob);
1456     if (!MaybeRecCode) {
1457       Error(MaybeRecCode.takeError());
1458       return nullptr;
1459     }
1460     unsigned RecCode = MaybeRecCode.get();
1461 
1462     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1463       if (!llvm::zlib::isAvailable()) {
1464         Error("zlib is not available");
1465         return nullptr;
1466       }
1467       SmallString<0> Uncompressed;
1468       if (llvm::Error E =
1469               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1470         Error("could not decompress embedded file contents: " +
1471               llvm::toString(std::move(E)));
1472         return nullptr;
1473       }
1474       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1475     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1476       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1477     } else {
1478       Error("AST record has invalid code");
1479       return nullptr;
1480     }
1481   };
1482 
1483   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1484   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1485           F->SLocEntryOffsetsBase +
1486           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1487     Error(std::move(Err));
1488     return true;
1489   }
1490 
1491   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1492   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1493 
1494   ++NumSLocEntriesRead;
1495   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1496   if (!MaybeEntry) {
1497     Error(MaybeEntry.takeError());
1498     return true;
1499   }
1500   llvm::BitstreamEntry Entry = MaybeEntry.get();
1501 
1502   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1503     Error("incorrectly-formatted source location entry in AST file");
1504     return true;
1505   }
1506 
1507   RecordData Record;
1508   StringRef Blob;
1509   Expected<unsigned> MaybeSLOC =
1510       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1511   if (!MaybeSLOC) {
1512     Error(MaybeSLOC.takeError());
1513     return true;
1514   }
1515   switch (MaybeSLOC.get()) {
1516   default:
1517     Error("incorrectly-formatted source location entry in AST file");
1518     return true;
1519 
1520   case SM_SLOC_FILE_ENTRY: {
1521     // We will detect whether a file changed and return 'Failure' for it, but
1522     // we will also try to fail gracefully by setting up the SLocEntry.
1523     unsigned InputID = Record[4];
1524     InputFile IF = getInputFile(*F, InputID);
1525     Optional<FileEntryRef> File = IF.getFile();
1526     bool OverriddenBuffer = IF.isOverridden();
1527 
1528     // Note that we only check if a File was returned. If it was out-of-date
1529     // we have complained but we will continue creating a FileID to recover
1530     // gracefully.
1531     if (!File)
1532       return true;
1533 
1534     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1535     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1536       // This is the module's main file.
1537       IncludeLoc = getImportLocation(F);
1538     }
1539     SrcMgr::CharacteristicKind
1540       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1541     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1542                                         BaseOffset + Record[0]);
1543     SrcMgr::FileInfo &FileInfo =
1544           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1545     FileInfo.NumCreatedFIDs = Record[5];
1546     if (Record[3])
1547       FileInfo.setHasLineDirectives();
1548 
1549     unsigned NumFileDecls = Record[7];
1550     if (NumFileDecls && ContextObj) {
1551       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1552       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1553       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1554                                                              NumFileDecls));
1555     }
1556 
1557     const SrcMgr::ContentCache &ContentCache =
1558         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1559     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1560         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1561         !ContentCache.getBufferIfLoaded()) {
1562       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1563       if (!Buffer)
1564         return true;
1565       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1566     }
1567 
1568     break;
1569   }
1570 
1571   case SM_SLOC_BUFFER_ENTRY: {
1572     const char *Name = Blob.data();
1573     unsigned Offset = Record[0];
1574     SrcMgr::CharacteristicKind
1575       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1576     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1577     if (IncludeLoc.isInvalid() && F->isModule()) {
1578       IncludeLoc = getImportLocation(F);
1579     }
1580 
1581     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1582     if (!Buffer)
1583       return true;
1584     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1585                            BaseOffset + Offset, IncludeLoc);
1586     break;
1587   }
1588 
1589   case SM_SLOC_EXPANSION_ENTRY: {
1590     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1591     SourceMgr.createExpansionLoc(SpellingLoc,
1592                                      ReadSourceLocation(*F, Record[2]),
1593                                      ReadSourceLocation(*F, Record[3]),
1594                                      Record[5],
1595                                      Record[4],
1596                                      ID,
1597                                      BaseOffset + Record[0]);
1598     break;
1599   }
1600   }
1601 
1602   return false;
1603 }
1604 
1605 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1606   if (ID == 0)
1607     return std::make_pair(SourceLocation(), "");
1608 
1609   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1610     Error("source location entry ID out-of-range for AST file");
1611     return std::make_pair(SourceLocation(), "");
1612   }
1613 
1614   // Find which module file this entry lands in.
1615   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1616   if (!M->isModule())
1617     return std::make_pair(SourceLocation(), "");
1618 
1619   // FIXME: Can we map this down to a particular submodule? That would be
1620   // ideal.
1621   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1622 }
1623 
1624 /// Find the location where the module F is imported.
1625 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1626   if (F->ImportLoc.isValid())
1627     return F->ImportLoc;
1628 
1629   // Otherwise we have a PCH. It's considered to be "imported" at the first
1630   // location of its includer.
1631   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1632     // Main file is the importer.
1633     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1634     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1635   }
1636   return F->ImportedBy[0]->FirstLoc;
1637 }
1638 
1639 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1640 /// the abbreviations that are at the top of the block and then leave the cursor
1641 /// pointing into the block.
1642 llvm::Error ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor,
1643                                         unsigned BlockID,
1644                                         uint64_t *StartOfBlockOffset) {
1645   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID))
1646     return Err;
1647 
1648   if (StartOfBlockOffset)
1649     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1650 
1651   while (true) {
1652     uint64_t Offset = Cursor.GetCurrentBitNo();
1653     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1654     if (!MaybeCode)
1655       return MaybeCode.takeError();
1656     unsigned Code = MaybeCode.get();
1657 
1658     // We expect all abbrevs to be at the start of the block.
1659     if (Code != llvm::bitc::DEFINE_ABBREV) {
1660       if (llvm::Error Err = Cursor.JumpToBit(Offset))
1661         return Err;
1662       return llvm::Error::success();
1663     }
1664     if (llvm::Error Err = Cursor.ReadAbbrevRecord())
1665       return Err;
1666   }
1667 }
1668 
1669 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1670                            unsigned &Idx) {
1671   Token Tok;
1672   Tok.startToken();
1673   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1674   Tok.setLength(Record[Idx++]);
1675   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1676     Tok.setIdentifierInfo(II);
1677   Tok.setKind((tok::TokenKind)Record[Idx++]);
1678   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1679   return Tok;
1680 }
1681 
1682 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1683   BitstreamCursor &Stream = F.MacroCursor;
1684 
1685   // Keep track of where we are in the stream, then jump back there
1686   // after reading this macro.
1687   SavedStreamPosition SavedPosition(Stream);
1688 
1689   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1690     // FIXME this drops errors on the floor.
1691     consumeError(std::move(Err));
1692     return nullptr;
1693   }
1694   RecordData Record;
1695   SmallVector<IdentifierInfo*, 16> MacroParams;
1696   MacroInfo *Macro = nullptr;
1697 
1698   while (true) {
1699     // Advance to the next record, but if we get to the end of the block, don't
1700     // pop it (removing all the abbreviations from the cursor) since we want to
1701     // be able to reseek within the block and read entries.
1702     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1703     Expected<llvm::BitstreamEntry> MaybeEntry =
1704         Stream.advanceSkippingSubblocks(Flags);
1705     if (!MaybeEntry) {
1706       Error(MaybeEntry.takeError());
1707       return Macro;
1708     }
1709     llvm::BitstreamEntry Entry = MaybeEntry.get();
1710 
1711     switch (Entry.Kind) {
1712     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1713     case llvm::BitstreamEntry::Error:
1714       Error("malformed block record in AST file");
1715       return Macro;
1716     case llvm::BitstreamEntry::EndBlock:
1717       return Macro;
1718     case llvm::BitstreamEntry::Record:
1719       // The interesting case.
1720       break;
1721     }
1722 
1723     // Read a record.
1724     Record.clear();
1725     PreprocessorRecordTypes RecType;
1726     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1727       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1728     else {
1729       Error(MaybeRecType.takeError());
1730       return Macro;
1731     }
1732     switch (RecType) {
1733     case PP_MODULE_MACRO:
1734     case PP_MACRO_DIRECTIVE_HISTORY:
1735       return Macro;
1736 
1737     case PP_MACRO_OBJECT_LIKE:
1738     case PP_MACRO_FUNCTION_LIKE: {
1739       // If we already have a macro, that means that we've hit the end
1740       // of the definition of the macro we were looking for. We're
1741       // done.
1742       if (Macro)
1743         return Macro;
1744 
1745       unsigned NextIndex = 1; // Skip identifier ID.
1746       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1747       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1748       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1749       MI->setIsUsed(Record[NextIndex++]);
1750       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1751 
1752       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1753         // Decode function-like macro info.
1754         bool isC99VarArgs = Record[NextIndex++];
1755         bool isGNUVarArgs = Record[NextIndex++];
1756         bool hasCommaPasting = Record[NextIndex++];
1757         MacroParams.clear();
1758         unsigned NumArgs = Record[NextIndex++];
1759         for (unsigned i = 0; i != NumArgs; ++i)
1760           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1761 
1762         // Install function-like macro info.
1763         MI->setIsFunctionLike();
1764         if (isC99VarArgs) MI->setIsC99Varargs();
1765         if (isGNUVarArgs) MI->setIsGNUVarargs();
1766         if (hasCommaPasting) MI->setHasCommaPasting();
1767         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1768       }
1769 
1770       // Remember that we saw this macro last so that we add the tokens that
1771       // form its body to it.
1772       Macro = MI;
1773 
1774       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1775           Record[NextIndex]) {
1776         // We have a macro definition. Register the association
1777         PreprocessedEntityID
1778             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1779         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1780         PreprocessingRecord::PPEntityID PPID =
1781             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1782         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1783             PPRec.getPreprocessedEntity(PPID));
1784         if (PPDef)
1785           PPRec.RegisterMacroDefinition(Macro, PPDef);
1786       }
1787 
1788       ++NumMacrosRead;
1789       break;
1790     }
1791 
1792     case PP_TOKEN: {
1793       // If we see a TOKEN before a PP_MACRO_*, then the file is
1794       // erroneous, just pretend we didn't see this.
1795       if (!Macro) break;
1796 
1797       unsigned Idx = 0;
1798       Token Tok = ReadToken(F, Record, Idx);
1799       Macro->AddTokenToBody(Tok);
1800       break;
1801     }
1802     }
1803   }
1804 }
1805 
1806 PreprocessedEntityID
1807 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1808                                          unsigned LocalID) const {
1809   if (!M.ModuleOffsetMap.empty())
1810     ReadModuleOffsetMap(M);
1811 
1812   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1813     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1814   assert(I != M.PreprocessedEntityRemap.end()
1815          && "Invalid index into preprocessed entity index remap");
1816 
1817   return LocalID + I->second;
1818 }
1819 
1820 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1821   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1822 }
1823 
1824 HeaderFileInfoTrait::internal_key_type
1825 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1826   internal_key_type ikey = {FE->getSize(),
1827                             M.HasTimestamps ? FE->getModificationTime() : 0,
1828                             FE->getName(), /*Imported*/ false};
1829   return ikey;
1830 }
1831 
1832 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1833   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1834     return false;
1835 
1836   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1837     return true;
1838 
1839   // Determine whether the actual files are equivalent.
1840   FileManager &FileMgr = Reader.getFileManager();
1841   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1842     if (!Key.Imported) {
1843       if (auto File = FileMgr.getFile(Key.Filename))
1844         return *File;
1845       return nullptr;
1846     }
1847 
1848     std::string Resolved = std::string(Key.Filename);
1849     Reader.ResolveImportedPath(M, Resolved);
1850     if (auto File = FileMgr.getFile(Resolved))
1851       return *File;
1852     return nullptr;
1853   };
1854 
1855   const FileEntry *FEA = GetFile(a);
1856   const FileEntry *FEB = GetFile(b);
1857   return FEA && FEA == FEB;
1858 }
1859 
1860 std::pair<unsigned, unsigned>
1861 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1862   return readULEBKeyDataLength(d);
1863 }
1864 
1865 HeaderFileInfoTrait::internal_key_type
1866 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1867   using namespace llvm::support;
1868 
1869   internal_key_type ikey;
1870   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1871   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1872   ikey.Filename = (const char *)d;
1873   ikey.Imported = true;
1874   return ikey;
1875 }
1876 
1877 HeaderFileInfoTrait::data_type
1878 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1879                               unsigned DataLen) {
1880   using namespace llvm::support;
1881 
1882   const unsigned char *End = d + DataLen;
1883   HeaderFileInfo HFI;
1884   unsigned Flags = *d++;
1885   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1886   HFI.isImport |= (Flags >> 5) & 0x01;
1887   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1888   HFI.DirInfo = (Flags >> 1) & 0x07;
1889   HFI.IndexHeaderMapHeader = Flags & 0x01;
1890   // FIXME: Find a better way to handle this. Maybe just store a
1891   // "has been included" flag?
1892   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1893                              HFI.NumIncludes);
1894   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1895       M, endian::readNext<uint32_t, little, unaligned>(d));
1896   if (unsigned FrameworkOffset =
1897           endian::readNext<uint32_t, little, unaligned>(d)) {
1898     // The framework offset is 1 greater than the actual offset,
1899     // since 0 is used as an indicator for "no framework name".
1900     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1901     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1902   }
1903 
1904   assert((End - d) % 4 == 0 &&
1905          "Wrong data length in HeaderFileInfo deserialization");
1906   while (d != End) {
1907     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1908     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1909     LocalSMID >>= 2;
1910 
1911     // This header is part of a module. Associate it with the module to enable
1912     // implicit module import.
1913     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1914     Module *Mod = Reader.getSubmodule(GlobalSMID);
1915     FileManager &FileMgr = Reader.getFileManager();
1916     ModuleMap &ModMap =
1917         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1918 
1919     std::string Filename = std::string(key.Filename);
1920     if (key.Imported)
1921       Reader.ResolveImportedPath(M, Filename);
1922     // FIXME: NameAsWritten
1923     Module::Header H = {std::string(key.Filename), "",
1924                         *FileMgr.getFile(Filename)};
1925     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1926     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1927   }
1928 
1929   // This HeaderFileInfo was externally loaded.
1930   HFI.External = true;
1931   HFI.IsValid = true;
1932   return HFI;
1933 }
1934 
1935 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1936                                 uint32_t MacroDirectivesOffset) {
1937   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1938   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1939 }
1940 
1941 void ASTReader::ReadDefinedMacros() {
1942   // Note that we are loading defined macros.
1943   Deserializing Macros(this);
1944 
1945   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1946     BitstreamCursor &MacroCursor = I.MacroCursor;
1947 
1948     // If there was no preprocessor block, skip this file.
1949     if (MacroCursor.getBitcodeBytes().empty())
1950       continue;
1951 
1952     BitstreamCursor Cursor = MacroCursor;
1953     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1954       Error(std::move(Err));
1955       return;
1956     }
1957 
1958     RecordData Record;
1959     while (true) {
1960       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1961       if (!MaybeE) {
1962         Error(MaybeE.takeError());
1963         return;
1964       }
1965       llvm::BitstreamEntry E = MaybeE.get();
1966 
1967       switch (E.Kind) {
1968       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1969       case llvm::BitstreamEntry::Error:
1970         Error("malformed block record in AST file");
1971         return;
1972       case llvm::BitstreamEntry::EndBlock:
1973         goto NextCursor;
1974 
1975       case llvm::BitstreamEntry::Record: {
1976         Record.clear();
1977         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1978         if (!MaybeRecord) {
1979           Error(MaybeRecord.takeError());
1980           return;
1981         }
1982         switch (MaybeRecord.get()) {
1983         default:  // Default behavior: ignore.
1984           break;
1985 
1986         case PP_MACRO_OBJECT_LIKE:
1987         case PP_MACRO_FUNCTION_LIKE: {
1988           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1989           if (II->isOutOfDate())
1990             updateOutOfDateIdentifier(*II);
1991           break;
1992         }
1993 
1994         case PP_TOKEN:
1995           // Ignore tokens.
1996           break;
1997         }
1998         break;
1999       }
2000       }
2001     }
2002     NextCursor:  ;
2003   }
2004 }
2005 
2006 namespace {
2007 
2008   /// Visitor class used to look up identifirs in an AST file.
2009   class IdentifierLookupVisitor {
2010     StringRef Name;
2011     unsigned NameHash;
2012     unsigned PriorGeneration;
2013     unsigned &NumIdentifierLookups;
2014     unsigned &NumIdentifierLookupHits;
2015     IdentifierInfo *Found = nullptr;
2016 
2017   public:
2018     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2019                             unsigned &NumIdentifierLookups,
2020                             unsigned &NumIdentifierLookupHits)
2021       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2022         PriorGeneration(PriorGeneration),
2023         NumIdentifierLookups(NumIdentifierLookups),
2024         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2025 
2026     bool operator()(ModuleFile &M) {
2027       // If we've already searched this module file, skip it now.
2028       if (M.Generation <= PriorGeneration)
2029         return true;
2030 
2031       ASTIdentifierLookupTable *IdTable
2032         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2033       if (!IdTable)
2034         return false;
2035 
2036       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2037                                      Found);
2038       ++NumIdentifierLookups;
2039       ASTIdentifierLookupTable::iterator Pos =
2040           IdTable->find_hashed(Name, NameHash, &Trait);
2041       if (Pos == IdTable->end())
2042         return false;
2043 
2044       // Dereferencing the iterator has the effect of building the
2045       // IdentifierInfo node and populating it with the various
2046       // declarations it needs.
2047       ++NumIdentifierLookupHits;
2048       Found = *Pos;
2049       return true;
2050     }
2051 
2052     // Retrieve the identifier info found within the module
2053     // files.
2054     IdentifierInfo *getIdentifierInfo() const { return Found; }
2055   };
2056 
2057 } // namespace
2058 
2059 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2060   // Note that we are loading an identifier.
2061   Deserializing AnIdentifier(this);
2062 
2063   unsigned PriorGeneration = 0;
2064   if (getContext().getLangOpts().Modules)
2065     PriorGeneration = IdentifierGeneration[&II];
2066 
2067   // If there is a global index, look there first to determine which modules
2068   // provably do not have any results for this identifier.
2069   GlobalModuleIndex::HitSet Hits;
2070   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2071   if (!loadGlobalIndex()) {
2072     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2073       HitsPtr = &Hits;
2074     }
2075   }
2076 
2077   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2078                                   NumIdentifierLookups,
2079                                   NumIdentifierLookupHits);
2080   ModuleMgr.visit(Visitor, HitsPtr);
2081   markIdentifierUpToDate(&II);
2082 }
2083 
2084 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2085   if (!II)
2086     return;
2087 
2088   II->setOutOfDate(false);
2089 
2090   // Update the generation for this identifier.
2091   if (getContext().getLangOpts().Modules)
2092     IdentifierGeneration[II] = getGeneration();
2093 }
2094 
2095 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2096                                     const PendingMacroInfo &PMInfo) {
2097   ModuleFile &M = *PMInfo.M;
2098 
2099   BitstreamCursor &Cursor = M.MacroCursor;
2100   SavedStreamPosition SavedPosition(Cursor);
2101   if (llvm::Error Err =
2102           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2103     Error(std::move(Err));
2104     return;
2105   }
2106 
2107   struct ModuleMacroRecord {
2108     SubmoduleID SubModID;
2109     MacroInfo *MI;
2110     SmallVector<SubmoduleID, 8> Overrides;
2111   };
2112   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2113 
2114   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2115   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2116   // macro histroy.
2117   RecordData Record;
2118   while (true) {
2119     Expected<llvm::BitstreamEntry> MaybeEntry =
2120         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2121     if (!MaybeEntry) {
2122       Error(MaybeEntry.takeError());
2123       return;
2124     }
2125     llvm::BitstreamEntry Entry = MaybeEntry.get();
2126 
2127     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2128       Error("malformed block record in AST file");
2129       return;
2130     }
2131 
2132     Record.clear();
2133     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2134     if (!MaybePP) {
2135       Error(MaybePP.takeError());
2136       return;
2137     }
2138     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2139     case PP_MACRO_DIRECTIVE_HISTORY:
2140       break;
2141 
2142     case PP_MODULE_MACRO: {
2143       ModuleMacros.push_back(ModuleMacroRecord());
2144       auto &Info = ModuleMacros.back();
2145       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2146       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2147       for (int I = 2, N = Record.size(); I != N; ++I)
2148         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2149       continue;
2150     }
2151 
2152     default:
2153       Error("malformed block record in AST file");
2154       return;
2155     }
2156 
2157     // We found the macro directive history; that's the last record
2158     // for this macro.
2159     break;
2160   }
2161 
2162   // Module macros are listed in reverse dependency order.
2163   {
2164     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2165     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2166     for (auto &MMR : ModuleMacros) {
2167       Overrides.clear();
2168       for (unsigned ModID : MMR.Overrides) {
2169         Module *Mod = getSubmodule(ModID);
2170         auto *Macro = PP.getModuleMacro(Mod, II);
2171         assert(Macro && "missing definition for overridden macro");
2172         Overrides.push_back(Macro);
2173       }
2174 
2175       bool Inserted = false;
2176       Module *Owner = getSubmodule(MMR.SubModID);
2177       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2178     }
2179   }
2180 
2181   // Don't read the directive history for a module; we don't have anywhere
2182   // to put it.
2183   if (M.isModule())
2184     return;
2185 
2186   // Deserialize the macro directives history in reverse source-order.
2187   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2188   unsigned Idx = 0, N = Record.size();
2189   while (Idx < N) {
2190     MacroDirective *MD = nullptr;
2191     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2192     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2193     switch (K) {
2194     case MacroDirective::MD_Define: {
2195       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2196       MD = PP.AllocateDefMacroDirective(MI, Loc);
2197       break;
2198     }
2199     case MacroDirective::MD_Undefine:
2200       MD = PP.AllocateUndefMacroDirective(Loc);
2201       break;
2202     case MacroDirective::MD_Visibility:
2203       bool isPublic = Record[Idx++];
2204       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2205       break;
2206     }
2207 
2208     if (!Latest)
2209       Latest = MD;
2210     if (Earliest)
2211       Earliest->setPrevious(MD);
2212     Earliest = MD;
2213   }
2214 
2215   if (Latest)
2216     PP.setLoadedMacroDirective(II, Earliest, Latest);
2217 }
2218 
2219 bool ASTReader::shouldDisableValidationForFile(
2220     const serialization::ModuleFile &M) const {
2221   if (DisableValidationKind == DisableValidationForModuleKind::None)
2222     return false;
2223 
2224   // If a PCH is loaded and validation is disabled for PCH then disable
2225   // validation for the PCH and the modules it loads.
2226   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2227 
2228   switch (K) {
2229   case MK_MainFile:
2230   case MK_Preamble:
2231   case MK_PCH:
2232     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2233   case MK_ImplicitModule:
2234   case MK_ExplicitModule:
2235   case MK_PrebuiltModule:
2236     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2237   }
2238 
2239   return false;
2240 }
2241 
2242 ASTReader::InputFileInfo
2243 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2244   // Go find this input file.
2245   BitstreamCursor &Cursor = F.InputFilesCursor;
2246   SavedStreamPosition SavedPosition(Cursor);
2247   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2248     // FIXME this drops errors on the floor.
2249     consumeError(std::move(Err));
2250   }
2251 
2252   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2253   if (!MaybeCode) {
2254     // FIXME this drops errors on the floor.
2255     consumeError(MaybeCode.takeError());
2256   }
2257   unsigned Code = MaybeCode.get();
2258   RecordData Record;
2259   StringRef Blob;
2260 
2261   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2262     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2263            "invalid record type for input file");
2264   else {
2265     // FIXME this drops errors on the floor.
2266     consumeError(Maybe.takeError());
2267   }
2268 
2269   assert(Record[0] == ID && "Bogus stored ID or offset");
2270   InputFileInfo R;
2271   R.StoredSize = static_cast<off_t>(Record[1]);
2272   R.StoredTime = static_cast<time_t>(Record[2]);
2273   R.Overridden = static_cast<bool>(Record[3]);
2274   R.Transient = static_cast<bool>(Record[4]);
2275   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2276   R.Filename = std::string(Blob);
2277   ResolveImportedPath(F, R.Filename);
2278 
2279   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2280   if (!MaybeEntry) // FIXME this drops errors on the floor.
2281     consumeError(MaybeEntry.takeError());
2282   llvm::BitstreamEntry Entry = MaybeEntry.get();
2283   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2284          "expected record type for input file hash");
2285 
2286   Record.clear();
2287   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2288     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2289            "invalid record type for input file hash");
2290   else {
2291     // FIXME this drops errors on the floor.
2292     consumeError(Maybe.takeError());
2293   }
2294   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2295                   static_cast<uint64_t>(Record[0]);
2296   return R;
2297 }
2298 
2299 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2300 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2301   // If this ID is bogus, just return an empty input file.
2302   if (ID == 0 || ID > F.InputFilesLoaded.size())
2303     return InputFile();
2304 
2305   // If we've already loaded this input file, return it.
2306   if (F.InputFilesLoaded[ID-1].getFile())
2307     return F.InputFilesLoaded[ID-1];
2308 
2309   if (F.InputFilesLoaded[ID-1].isNotFound())
2310     return InputFile();
2311 
2312   // Go find this input file.
2313   BitstreamCursor &Cursor = F.InputFilesCursor;
2314   SavedStreamPosition SavedPosition(Cursor);
2315   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2316     // FIXME this drops errors on the floor.
2317     consumeError(std::move(Err));
2318   }
2319 
2320   InputFileInfo FI = readInputFileInfo(F, ID);
2321   off_t StoredSize = FI.StoredSize;
2322   time_t StoredTime = FI.StoredTime;
2323   bool Overridden = FI.Overridden;
2324   bool Transient = FI.Transient;
2325   StringRef Filename = FI.Filename;
2326   uint64_t StoredContentHash = FI.ContentHash;
2327 
2328   OptionalFileEntryRefDegradesToFileEntryPtr File =
2329       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2330 
2331   // If we didn't find the file, resolve it relative to the
2332   // original directory from which this AST file was created.
2333   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2334       F.OriginalDir != F.BaseDirectory) {
2335     std::string Resolved = resolveFileRelativeToOriginalDir(
2336         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2337     if (!Resolved.empty())
2338       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2339   }
2340 
2341   // For an overridden file, create a virtual file with the stored
2342   // size/timestamp.
2343   if ((Overridden || Transient) && !File)
2344     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2345 
2346   if (!File) {
2347     if (Complain) {
2348       std::string ErrorStr = "could not find file '";
2349       ErrorStr += Filename;
2350       ErrorStr += "' referenced by AST file '";
2351       ErrorStr += F.FileName;
2352       ErrorStr += "'";
2353       Error(ErrorStr);
2354     }
2355     // Record that we didn't find the file.
2356     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2357     return InputFile();
2358   }
2359 
2360   // Check if there was a request to override the contents of the file
2361   // that was part of the precompiled header. Overriding such a file
2362   // can lead to problems when lexing using the source locations from the
2363   // PCH.
2364   SourceManager &SM = getSourceManager();
2365   // FIXME: Reject if the overrides are different.
2366   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2367     if (Complain)
2368       Error(diag::err_fe_pch_file_overridden, Filename);
2369 
2370     // After emitting the diagnostic, bypass the overriding file to recover
2371     // (this creates a separate FileEntry).
2372     File = SM.bypassFileContentsOverride(*File);
2373     if (!File) {
2374       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2375       return InputFile();
2376     }
2377   }
2378 
2379   struct Change {
2380     enum ModificationKind {
2381       Size,
2382       ModTime,
2383       Content,
2384       None,
2385     } Kind;
2386     llvm::Optional<int64_t> Old = llvm::None;
2387     llvm::Optional<int64_t> New = llvm::None;
2388   };
2389   auto HasInputFileChanged = [&]() {
2390     if (StoredSize != File->getSize())
2391       return Change{Change::Size, StoredSize, File->getSize()};
2392     if (!shouldDisableValidationForFile(F) && StoredTime &&
2393         StoredTime != File->getModificationTime()) {
2394       Change MTimeChange = {Change::ModTime, StoredTime,
2395                             File->getModificationTime()};
2396 
2397       // In case the modification time changes but not the content,
2398       // accept the cached file as legit.
2399       if (ValidateASTInputFilesContent &&
2400           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2401         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2402         if (!MemBuffOrError) {
2403           if (!Complain)
2404             return MTimeChange;
2405           std::string ErrorStr = "could not get buffer for file '";
2406           ErrorStr += File->getName();
2407           ErrorStr += "'";
2408           Error(ErrorStr);
2409           return MTimeChange;
2410         }
2411 
2412         // FIXME: hash_value is not guaranteed to be stable!
2413         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2414         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2415           return Change{Change::None};
2416 
2417         return Change{Change::Content};
2418       }
2419       return MTimeChange;
2420     }
2421     return Change{Change::None};
2422   };
2423 
2424   bool IsOutOfDate = false;
2425   auto FileChange = HasInputFileChanged();
2426   // For an overridden file, there is nothing to validate.
2427   if (!Overridden && FileChange.Kind != Change::None) {
2428     if (Complain && !Diags.isDiagnosticInFlight()) {
2429       // Build a list of the PCH imports that got us here (in reverse).
2430       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2431       while (!ImportStack.back()->ImportedBy.empty())
2432         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2433 
2434       // The top-level PCH is stale.
2435       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2436       Diag(diag::err_fe_ast_file_modified)
2437           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2438           << TopLevelPCHName << FileChange.Kind
2439           << (FileChange.Old && FileChange.New)
2440           << llvm::itostr(FileChange.Old.getValueOr(0))
2441           << llvm::itostr(FileChange.New.getValueOr(0));
2442 
2443       // Print the import stack.
2444       if (ImportStack.size() > 1) {
2445         Diag(diag::note_pch_required_by)
2446           << Filename << ImportStack[0]->FileName;
2447         for (unsigned I = 1; I < ImportStack.size(); ++I)
2448           Diag(diag::note_pch_required_by)
2449             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2450       }
2451 
2452       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2453     }
2454 
2455     IsOutOfDate = true;
2456   }
2457   // FIXME: If the file is overridden and we've already opened it,
2458   // issue an error (or split it into a separate FileEntry).
2459 
2460   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2461 
2462   // Note that we've loaded this input file.
2463   F.InputFilesLoaded[ID-1] = IF;
2464   return IF;
2465 }
2466 
2467 /// If we are loading a relocatable PCH or module file, and the filename
2468 /// is not an absolute path, add the system or module root to the beginning of
2469 /// the file name.
2470 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2471   // Resolve relative to the base directory, if we have one.
2472   if (!M.BaseDirectory.empty())
2473     return ResolveImportedPath(Filename, M.BaseDirectory);
2474 }
2475 
2476 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2477   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2478     return;
2479 
2480   SmallString<128> Buffer;
2481   llvm::sys::path::append(Buffer, Prefix, Filename);
2482   Filename.assign(Buffer.begin(), Buffer.end());
2483 }
2484 
2485 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2486   switch (ARR) {
2487   case ASTReader::Failure: return true;
2488   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2489   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2490   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2491   case ASTReader::ConfigurationMismatch:
2492     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2493   case ASTReader::HadErrors: return true;
2494   case ASTReader::Success: return false;
2495   }
2496 
2497   llvm_unreachable("unknown ASTReadResult");
2498 }
2499 
2500 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2501     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2502     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2503     std::string &SuggestedPredefines) {
2504   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2505     // FIXME this drops errors on the floor.
2506     consumeError(std::move(Err));
2507     return Failure;
2508   }
2509 
2510   // Read all of the records in the options block.
2511   RecordData Record;
2512   ASTReadResult Result = Success;
2513   while (true) {
2514     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2515     if (!MaybeEntry) {
2516       // FIXME this drops errors on the floor.
2517       consumeError(MaybeEntry.takeError());
2518       return Failure;
2519     }
2520     llvm::BitstreamEntry Entry = MaybeEntry.get();
2521 
2522     switch (Entry.Kind) {
2523     case llvm::BitstreamEntry::Error:
2524     case llvm::BitstreamEntry::SubBlock:
2525       return Failure;
2526 
2527     case llvm::BitstreamEntry::EndBlock:
2528       return Result;
2529 
2530     case llvm::BitstreamEntry::Record:
2531       // The interesting case.
2532       break;
2533     }
2534 
2535     // Read and process a record.
2536     Record.clear();
2537     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2538     if (!MaybeRecordType) {
2539       // FIXME this drops errors on the floor.
2540       consumeError(MaybeRecordType.takeError());
2541       return Failure;
2542     }
2543     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2544     case LANGUAGE_OPTIONS: {
2545       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2546       if (ParseLanguageOptions(Record, Complain, Listener,
2547                                AllowCompatibleConfigurationMismatch))
2548         Result = ConfigurationMismatch;
2549       break;
2550     }
2551 
2552     case TARGET_OPTIONS: {
2553       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2554       if (ParseTargetOptions(Record, Complain, Listener,
2555                              AllowCompatibleConfigurationMismatch))
2556         Result = ConfigurationMismatch;
2557       break;
2558     }
2559 
2560     case FILE_SYSTEM_OPTIONS: {
2561       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2562       if (!AllowCompatibleConfigurationMismatch &&
2563           ParseFileSystemOptions(Record, Complain, Listener))
2564         Result = ConfigurationMismatch;
2565       break;
2566     }
2567 
2568     case HEADER_SEARCH_OPTIONS: {
2569       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2570       if (!AllowCompatibleConfigurationMismatch &&
2571           ParseHeaderSearchOptions(Record, Complain, Listener))
2572         Result = ConfigurationMismatch;
2573       break;
2574     }
2575 
2576     case PREPROCESSOR_OPTIONS:
2577       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2578       if (!AllowCompatibleConfigurationMismatch &&
2579           ParsePreprocessorOptions(Record, Complain, Listener,
2580                                    SuggestedPredefines))
2581         Result = ConfigurationMismatch;
2582       break;
2583     }
2584   }
2585 }
2586 
2587 ASTReader::ASTReadResult
2588 ASTReader::ReadControlBlock(ModuleFile &F,
2589                             SmallVectorImpl<ImportedModule> &Loaded,
2590                             const ModuleFile *ImportedBy,
2591                             unsigned ClientLoadCapabilities) {
2592   BitstreamCursor &Stream = F.Stream;
2593 
2594   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2595     Error(std::move(Err));
2596     return Failure;
2597   }
2598 
2599   // Lambda to read the unhashed control block the first time it's called.
2600   //
2601   // For PCM files, the unhashed control block cannot be read until after the
2602   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2603   // need to look ahead before reading the IMPORTS record.  For consistency,
2604   // this block is always read somehow (see BitstreamEntry::EndBlock).
2605   bool HasReadUnhashedControlBlock = false;
2606   auto readUnhashedControlBlockOnce = [&]() {
2607     if (!HasReadUnhashedControlBlock) {
2608       HasReadUnhashedControlBlock = true;
2609       if (ASTReadResult Result =
2610               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2611         return Result;
2612     }
2613     return Success;
2614   };
2615 
2616   bool DisableValidation = shouldDisableValidationForFile(F);
2617 
2618   // Read all of the records and blocks in the control block.
2619   RecordData Record;
2620   unsigned NumInputs = 0;
2621   unsigned NumUserInputs = 0;
2622   StringRef BaseDirectoryAsWritten;
2623   while (true) {
2624     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2625     if (!MaybeEntry) {
2626       Error(MaybeEntry.takeError());
2627       return Failure;
2628     }
2629     llvm::BitstreamEntry Entry = MaybeEntry.get();
2630 
2631     switch (Entry.Kind) {
2632     case llvm::BitstreamEntry::Error:
2633       Error("malformed block record in AST file");
2634       return Failure;
2635     case llvm::BitstreamEntry::EndBlock: {
2636       // Validate the module before returning.  This call catches an AST with
2637       // no module name and no imports.
2638       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2639         return Result;
2640 
2641       // Validate input files.
2642       const HeaderSearchOptions &HSOpts =
2643           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2644 
2645       // All user input files reside at the index range [0, NumUserInputs), and
2646       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2647       // loaded module files, ignore missing inputs.
2648       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2649           F.Kind != MK_PrebuiltModule) {
2650         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2651 
2652         // If we are reading a module, we will create a verification timestamp,
2653         // so we verify all input files.  Otherwise, verify only user input
2654         // files.
2655 
2656         unsigned N = NumUserInputs;
2657         if (ValidateSystemInputs ||
2658             (HSOpts.ModulesValidateOncePerBuildSession &&
2659              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2660              F.Kind == MK_ImplicitModule))
2661           N = NumInputs;
2662 
2663         for (unsigned I = 0; I < N; ++I) {
2664           InputFile IF = getInputFile(F, I+1, Complain);
2665           if (!IF.getFile() || IF.isOutOfDate())
2666             return OutOfDate;
2667         }
2668       }
2669 
2670       if (Listener)
2671         Listener->visitModuleFile(F.FileName, F.Kind);
2672 
2673       if (Listener && Listener->needsInputFileVisitation()) {
2674         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2675                                                                 : NumUserInputs;
2676         for (unsigned I = 0; I < N; ++I) {
2677           bool IsSystem = I >= NumUserInputs;
2678           InputFileInfo FI = readInputFileInfo(F, I+1);
2679           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2680                                    F.Kind == MK_ExplicitModule ||
2681                                    F.Kind == MK_PrebuiltModule);
2682         }
2683       }
2684 
2685       return Success;
2686     }
2687 
2688     case llvm::BitstreamEntry::SubBlock:
2689       switch (Entry.ID) {
2690       case INPUT_FILES_BLOCK_ID:
2691         F.InputFilesCursor = Stream;
2692         if (llvm::Error Err = Stream.SkipBlock()) {
2693           Error(std::move(Err));
2694           return Failure;
2695         }
2696         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2697           Error("malformed block record in AST file");
2698           return Failure;
2699         }
2700         continue;
2701 
2702       case OPTIONS_BLOCK_ID:
2703         // If we're reading the first module for this group, check its options
2704         // are compatible with ours. For modules it imports, no further checking
2705         // is required, because we checked them when we built it.
2706         if (Listener && !ImportedBy) {
2707           // Should we allow the configuration of the module file to differ from
2708           // the configuration of the current translation unit in a compatible
2709           // way?
2710           //
2711           // FIXME: Allow this for files explicitly specified with -include-pch.
2712           bool AllowCompatibleConfigurationMismatch =
2713               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2714 
2715           ASTReadResult Result =
2716               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2717                                AllowCompatibleConfigurationMismatch, *Listener,
2718                                SuggestedPredefines);
2719           if (Result == Failure) {
2720             Error("malformed block record in AST file");
2721             return Result;
2722           }
2723 
2724           if (DisableValidation ||
2725               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2726             Result = Success;
2727 
2728           // If we can't load the module, exit early since we likely
2729           // will rebuild the module anyway. The stream may be in the
2730           // middle of a block.
2731           if (Result != Success)
2732             return Result;
2733         } else if (llvm::Error Err = Stream.SkipBlock()) {
2734           Error(std::move(Err));
2735           return Failure;
2736         }
2737         continue;
2738 
2739       default:
2740         if (llvm::Error Err = Stream.SkipBlock()) {
2741           Error(std::move(Err));
2742           return Failure;
2743         }
2744         continue;
2745       }
2746 
2747     case llvm::BitstreamEntry::Record:
2748       // The interesting case.
2749       break;
2750     }
2751 
2752     // Read and process a record.
2753     Record.clear();
2754     StringRef Blob;
2755     Expected<unsigned> MaybeRecordType =
2756         Stream.readRecord(Entry.ID, Record, &Blob);
2757     if (!MaybeRecordType) {
2758       Error(MaybeRecordType.takeError());
2759       return Failure;
2760     }
2761     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2762     case METADATA: {
2763       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2764         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2765           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2766                                         : diag::err_pch_version_too_new);
2767         return VersionMismatch;
2768       }
2769 
2770       bool hasErrors = Record[6];
2771       if (hasErrors && !DisableValidation) {
2772         // If requested by the caller and the module hasn't already been read
2773         // or compiled, mark modules on error as out-of-date.
2774         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2775             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2776           return OutOfDate;
2777 
2778         if (!AllowASTWithCompilerErrors) {
2779           Diag(diag::err_pch_with_compiler_errors);
2780           return HadErrors;
2781         }
2782       }
2783       if (hasErrors) {
2784         Diags.ErrorOccurred = true;
2785         Diags.UncompilableErrorOccurred = true;
2786         Diags.UnrecoverableErrorOccurred = true;
2787       }
2788 
2789       F.RelocatablePCH = Record[4];
2790       // Relative paths in a relocatable PCH are relative to our sysroot.
2791       if (F.RelocatablePCH)
2792         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2793 
2794       F.HasTimestamps = Record[5];
2795 
2796       const std::string &CurBranch = getClangFullRepositoryVersion();
2797       StringRef ASTBranch = Blob;
2798       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2799         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2800           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2801         return VersionMismatch;
2802       }
2803       break;
2804     }
2805 
2806     case IMPORTS: {
2807       // Validate the AST before processing any imports (otherwise, untangling
2808       // them can be error-prone and expensive).  A module will have a name and
2809       // will already have been validated, but this catches the PCH case.
2810       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2811         return Result;
2812 
2813       // Load each of the imported PCH files.
2814       unsigned Idx = 0, N = Record.size();
2815       while (Idx < N) {
2816         // Read information about the AST file.
2817         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2818         // The import location will be the local one for now; we will adjust
2819         // all import locations of module imports after the global source
2820         // location info are setup, in ReadAST.
2821         SourceLocation ImportLoc =
2822             ReadUntranslatedSourceLocation(Record[Idx++]);
2823         off_t StoredSize = (off_t)Record[Idx++];
2824         time_t StoredModTime = (time_t)Record[Idx++];
2825         auto FirstSignatureByte = Record.begin() + Idx;
2826         ASTFileSignature StoredSignature = ASTFileSignature::create(
2827             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2828         Idx += ASTFileSignature::size;
2829 
2830         std::string ImportedName = ReadString(Record, Idx);
2831         std::string ImportedFile;
2832 
2833         // For prebuilt and explicit modules first consult the file map for
2834         // an override. Note that here we don't search prebuilt module
2835         // directories, only the explicit name to file mappings. Also, we will
2836         // still verify the size/signature making sure it is essentially the
2837         // same file but perhaps in a different location.
2838         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2839           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2840             ImportedName, /*FileMapOnly*/ true);
2841 
2842         if (ImportedFile.empty())
2843           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2844           // ModuleCache as when writing.
2845           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2846         else
2847           SkipPath(Record, Idx);
2848 
2849         // If our client can't cope with us being out of date, we can't cope with
2850         // our dependency being missing.
2851         unsigned Capabilities = ClientLoadCapabilities;
2852         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2853           Capabilities &= ~ARR_Missing;
2854 
2855         // Load the AST file.
2856         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2857                                   Loaded, StoredSize, StoredModTime,
2858                                   StoredSignature, Capabilities);
2859 
2860         // If we diagnosed a problem, produce a backtrace.
2861         bool recompilingFinalized =
2862             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2863             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2864         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2865           Diag(diag::note_module_file_imported_by)
2866               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2867         if (recompilingFinalized)
2868           Diag(diag::note_module_file_conflict);
2869 
2870         switch (Result) {
2871         case Failure: return Failure;
2872           // If we have to ignore the dependency, we'll have to ignore this too.
2873         case Missing:
2874         case OutOfDate: return OutOfDate;
2875         case VersionMismatch: return VersionMismatch;
2876         case ConfigurationMismatch: return ConfigurationMismatch;
2877         case HadErrors: return HadErrors;
2878         case Success: break;
2879         }
2880       }
2881       break;
2882     }
2883 
2884     case ORIGINAL_FILE:
2885       F.OriginalSourceFileID = FileID::get(Record[0]);
2886       F.ActualOriginalSourceFileName = std::string(Blob);
2887       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2888       ResolveImportedPath(F, F.OriginalSourceFileName);
2889       break;
2890 
2891     case ORIGINAL_FILE_ID:
2892       F.OriginalSourceFileID = FileID::get(Record[0]);
2893       break;
2894 
2895     case ORIGINAL_PCH_DIR:
2896       F.OriginalDir = std::string(Blob);
2897       break;
2898 
2899     case MODULE_NAME:
2900       F.ModuleName = std::string(Blob);
2901       Diag(diag::remark_module_import)
2902           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2903           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2904       if (Listener)
2905         Listener->ReadModuleName(F.ModuleName);
2906 
2907       // Validate the AST as soon as we have a name so we can exit early on
2908       // failure.
2909       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2910         return Result;
2911 
2912       break;
2913 
2914     case MODULE_DIRECTORY: {
2915       // Save the BaseDirectory as written in the PCM for computing the module
2916       // filename for the ModuleCache.
2917       BaseDirectoryAsWritten = Blob;
2918       assert(!F.ModuleName.empty() &&
2919              "MODULE_DIRECTORY found before MODULE_NAME");
2920       // If we've already loaded a module map file covering this module, we may
2921       // have a better path for it (relative to the current build).
2922       Module *M = PP.getHeaderSearchInfo().lookupModule(
2923           F.ModuleName, SourceLocation(), /*AllowSearch*/ true,
2924           /*AllowExtraModuleMapSearch*/ true);
2925       if (M && M->Directory) {
2926         // If we're implicitly loading a module, the base directory can't
2927         // change between the build and use.
2928         // Don't emit module relocation error if we have -fno-validate-pch
2929         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2930                   DisableValidationForModuleKind::Module) &&
2931             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2932           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2933           if (!BuildDir || *BuildDir != M->Directory) {
2934             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2935               Diag(diag::err_imported_module_relocated)
2936                   << F.ModuleName << Blob << M->Directory->getName();
2937             return OutOfDate;
2938           }
2939         }
2940         F.BaseDirectory = std::string(M->Directory->getName());
2941       } else {
2942         F.BaseDirectory = std::string(Blob);
2943       }
2944       break;
2945     }
2946 
2947     case MODULE_MAP_FILE:
2948       if (ASTReadResult Result =
2949               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2950         return Result;
2951       break;
2952 
2953     case INPUT_FILE_OFFSETS:
2954       NumInputs = Record[0];
2955       NumUserInputs = Record[1];
2956       F.InputFileOffsets =
2957           (const llvm::support::unaligned_uint64_t *)Blob.data();
2958       F.InputFilesLoaded.resize(NumInputs);
2959       F.NumUserInputFiles = NumUserInputs;
2960       break;
2961     }
2962   }
2963 }
2964 
2965 llvm::Error ASTReader::ReadASTBlock(ModuleFile &F,
2966                                     unsigned ClientLoadCapabilities) {
2967   BitstreamCursor &Stream = F.Stream;
2968 
2969   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID))
2970     return Err;
2971   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2972 
2973   // Read all of the records and blocks for the AST file.
2974   RecordData Record;
2975   while (true) {
2976     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2977     if (!MaybeEntry)
2978       return MaybeEntry.takeError();
2979     llvm::BitstreamEntry Entry = MaybeEntry.get();
2980 
2981     switch (Entry.Kind) {
2982     case llvm::BitstreamEntry::Error:
2983       return llvm::createStringError(
2984           std::errc::illegal_byte_sequence,
2985           "error at end of module block in AST file");
2986     case llvm::BitstreamEntry::EndBlock:
2987       // Outside of C++, we do not store a lookup map for the translation unit.
2988       // Instead, mark it as needing a lookup map to be built if this module
2989       // contains any declarations lexically within it (which it always does!).
2990       // This usually has no cost, since we very rarely need the lookup map for
2991       // the translation unit outside C++.
2992       if (ASTContext *Ctx = ContextObj) {
2993         DeclContext *DC = Ctx->getTranslationUnitDecl();
2994         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2995           DC->setMustBuildLookupTable();
2996       }
2997 
2998       return llvm::Error::success();
2999     case llvm::BitstreamEntry::SubBlock:
3000       switch (Entry.ID) {
3001       case DECLTYPES_BLOCK_ID:
3002         // We lazily load the decls block, but we want to set up the
3003         // DeclsCursor cursor to point into it.  Clone our current bitcode
3004         // cursor to it, enter the block and read the abbrevs in that block.
3005         // With the main cursor, we just skip over it.
3006         F.DeclsCursor = Stream;
3007         if (llvm::Error Err = Stream.SkipBlock())
3008           return Err;
3009         if (llvm::Error Err = ReadBlockAbbrevs(
3010                 F.DeclsCursor, DECLTYPES_BLOCK_ID, &F.DeclsBlockStartOffset))
3011           return Err;
3012         break;
3013 
3014       case PREPROCESSOR_BLOCK_ID:
3015         F.MacroCursor = Stream;
3016         if (!PP.getExternalSource())
3017           PP.setExternalSource(this);
3018 
3019         if (llvm::Error Err = Stream.SkipBlock())
3020           return Err;
3021         if (llvm::Error Err =
3022                 ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID))
3023           return Err;
3024         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3025         break;
3026 
3027       case PREPROCESSOR_DETAIL_BLOCK_ID:
3028         F.PreprocessorDetailCursor = Stream;
3029 
3030         if (llvm::Error Err = Stream.SkipBlock()) {
3031           return Err;
3032         }
3033         if (llvm::Error Err = ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3034                                                PREPROCESSOR_DETAIL_BLOCK_ID))
3035           return Err;
3036         F.PreprocessorDetailStartOffset
3037         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3038 
3039         if (!PP.getPreprocessingRecord())
3040           PP.createPreprocessingRecord();
3041         if (!PP.getPreprocessingRecord()->getExternalSource())
3042           PP.getPreprocessingRecord()->SetExternalSource(*this);
3043         break;
3044 
3045       case SOURCE_MANAGER_BLOCK_ID:
3046         if (llvm::Error Err = ReadSourceManagerBlock(F))
3047           return Err;
3048         break;
3049 
3050       case SUBMODULE_BLOCK_ID:
3051         if (llvm::Error Err = ReadSubmoduleBlock(F, ClientLoadCapabilities))
3052           return Err;
3053         break;
3054 
3055       case COMMENTS_BLOCK_ID: {
3056         BitstreamCursor C = Stream;
3057 
3058         if (llvm::Error Err = Stream.SkipBlock())
3059           return Err;
3060         if (llvm::Error Err = ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID))
3061           return Err;
3062         CommentsCursors.push_back(std::make_pair(C, &F));
3063         break;
3064       }
3065 
3066       default:
3067         if (llvm::Error Err = Stream.SkipBlock())
3068           return Err;
3069         break;
3070       }
3071       continue;
3072 
3073     case llvm::BitstreamEntry::Record:
3074       // The interesting case.
3075       break;
3076     }
3077 
3078     // Read and process a record.
3079     Record.clear();
3080     StringRef Blob;
3081     Expected<unsigned> MaybeRecordType =
3082         Stream.readRecord(Entry.ID, Record, &Blob);
3083     if (!MaybeRecordType)
3084       return MaybeRecordType.takeError();
3085     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3086 
3087     // If we're not loading an AST context, we don't care about most records.
3088     if (!ContextObj) {
3089       switch (RecordType) {
3090       case IDENTIFIER_TABLE:
3091       case IDENTIFIER_OFFSET:
3092       case INTERESTING_IDENTIFIERS:
3093       case STATISTICS:
3094       case PP_CONDITIONAL_STACK:
3095       case PP_COUNTER_VALUE:
3096       case SOURCE_LOCATION_OFFSETS:
3097       case MODULE_OFFSET_MAP:
3098       case SOURCE_MANAGER_LINE_TABLE:
3099       case SOURCE_LOCATION_PRELOADS:
3100       case PPD_ENTITIES_OFFSETS:
3101       case HEADER_SEARCH_TABLE:
3102       case IMPORTED_MODULES:
3103       case MACRO_OFFSET:
3104         break;
3105       default:
3106         continue;
3107       }
3108     }
3109 
3110     switch (RecordType) {
3111     default:  // Default behavior: ignore.
3112       break;
3113 
3114     case TYPE_OFFSET: {
3115       if (F.LocalNumTypes != 0)
3116         return llvm::createStringError(
3117             std::errc::illegal_byte_sequence,
3118             "duplicate TYPE_OFFSET record in AST file");
3119       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3120       F.LocalNumTypes = Record[0];
3121       unsigned LocalBaseTypeIndex = Record[1];
3122       F.BaseTypeIndex = getTotalNumTypes();
3123 
3124       if (F.LocalNumTypes > 0) {
3125         // Introduce the global -> local mapping for types within this module.
3126         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3127 
3128         // Introduce the local -> global mapping for types within this module.
3129         F.TypeRemap.insertOrReplace(
3130           std::make_pair(LocalBaseTypeIndex,
3131                          F.BaseTypeIndex - LocalBaseTypeIndex));
3132 
3133         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3134       }
3135       break;
3136     }
3137 
3138     case DECL_OFFSET: {
3139       if (F.LocalNumDecls != 0)
3140         return llvm::createStringError(
3141             std::errc::illegal_byte_sequence,
3142             "duplicate DECL_OFFSET record in AST file");
3143       F.DeclOffsets = (const DeclOffset *)Blob.data();
3144       F.LocalNumDecls = Record[0];
3145       unsigned LocalBaseDeclID = Record[1];
3146       F.BaseDeclID = getTotalNumDecls();
3147 
3148       if (F.LocalNumDecls > 0) {
3149         // Introduce the global -> local mapping for declarations within this
3150         // module.
3151         GlobalDeclMap.insert(
3152           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3153 
3154         // Introduce the local -> global mapping for declarations within this
3155         // module.
3156         F.DeclRemap.insertOrReplace(
3157           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3158 
3159         // Introduce the global -> local mapping for declarations within this
3160         // module.
3161         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3162 
3163         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3164       }
3165       break;
3166     }
3167 
3168     case TU_UPDATE_LEXICAL: {
3169       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3170       LexicalContents Contents(
3171           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3172               Blob.data()),
3173           static_cast<unsigned int>(Blob.size() / 4));
3174       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3175       TU->setHasExternalLexicalStorage(true);
3176       break;
3177     }
3178 
3179     case UPDATE_VISIBLE: {
3180       unsigned Idx = 0;
3181       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3182       auto *Data = (const unsigned char*)Blob.data();
3183       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3184       // If we've already loaded the decl, perform the updates when we finish
3185       // loading this block.
3186       if (Decl *D = GetExistingDecl(ID))
3187         PendingUpdateRecords.push_back(
3188             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3189       break;
3190     }
3191 
3192     case IDENTIFIER_TABLE:
3193       F.IdentifierTableData =
3194           reinterpret_cast<const unsigned char *>(Blob.data());
3195       if (Record[0]) {
3196         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3197             F.IdentifierTableData + Record[0],
3198             F.IdentifierTableData + sizeof(uint32_t),
3199             F.IdentifierTableData,
3200             ASTIdentifierLookupTrait(*this, F));
3201 
3202         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3203       }
3204       break;
3205 
3206     case IDENTIFIER_OFFSET: {
3207       if (F.LocalNumIdentifiers != 0)
3208         return llvm::createStringError(
3209             std::errc::illegal_byte_sequence,
3210             "duplicate IDENTIFIER_OFFSET record in AST file");
3211       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3212       F.LocalNumIdentifiers = Record[0];
3213       unsigned LocalBaseIdentifierID = Record[1];
3214       F.BaseIdentifierID = getTotalNumIdentifiers();
3215 
3216       if (F.LocalNumIdentifiers > 0) {
3217         // Introduce the global -> local mapping for identifiers within this
3218         // module.
3219         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3220                                                   &F));
3221 
3222         // Introduce the local -> global mapping for identifiers within this
3223         // module.
3224         F.IdentifierRemap.insertOrReplace(
3225           std::make_pair(LocalBaseIdentifierID,
3226                          F.BaseIdentifierID - LocalBaseIdentifierID));
3227 
3228         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3229                                  + F.LocalNumIdentifiers);
3230       }
3231       break;
3232     }
3233 
3234     case INTERESTING_IDENTIFIERS:
3235       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3236       break;
3237 
3238     case EAGERLY_DESERIALIZED_DECLS:
3239       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3240       // about "interesting" decls (for instance, if we're building a module).
3241       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3242         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3243       break;
3244 
3245     case MODULAR_CODEGEN_DECLS:
3246       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3247       // them (ie: if we're not codegenerating this module).
3248       if (F.Kind == MK_MainFile ||
3249           getContext().getLangOpts().BuildingPCHWithObjectFile)
3250         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3251           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3252       break;
3253 
3254     case SPECIAL_TYPES:
3255       if (SpecialTypes.empty()) {
3256         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3257           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3258         break;
3259       }
3260 
3261       if (SpecialTypes.size() != Record.size())
3262         return llvm::createStringError(std::errc::illegal_byte_sequence,
3263                                        "invalid special-types record");
3264 
3265       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3266         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3267         if (!SpecialTypes[I])
3268           SpecialTypes[I] = ID;
3269         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3270         // merge step?
3271       }
3272       break;
3273 
3274     case STATISTICS:
3275       TotalNumStatements += Record[0];
3276       TotalNumMacros += Record[1];
3277       TotalLexicalDeclContexts += Record[2];
3278       TotalVisibleDeclContexts += Record[3];
3279       break;
3280 
3281     case UNUSED_FILESCOPED_DECLS:
3282       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3283         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3284       break;
3285 
3286     case DELEGATING_CTORS:
3287       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3288         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3289       break;
3290 
3291     case WEAK_UNDECLARED_IDENTIFIERS:
3292       if (Record.size() % 4 != 0)
3293         return llvm::createStringError(std::errc::illegal_byte_sequence,
3294                                        "invalid weak identifiers record");
3295 
3296       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3297       // files. This isn't the way to do it :)
3298       WeakUndeclaredIdentifiers.clear();
3299 
3300       // Translate the weak, undeclared identifiers into global IDs.
3301       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3302         WeakUndeclaredIdentifiers.push_back(
3303           getGlobalIdentifierID(F, Record[I++]));
3304         WeakUndeclaredIdentifiers.push_back(
3305           getGlobalIdentifierID(F, Record[I++]));
3306         WeakUndeclaredIdentifiers.push_back(
3307           ReadSourceLocation(F, Record, I).getRawEncoding());
3308         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3309       }
3310       break;
3311 
3312     case SELECTOR_OFFSETS: {
3313       F.SelectorOffsets = (const uint32_t *)Blob.data();
3314       F.LocalNumSelectors = Record[0];
3315       unsigned LocalBaseSelectorID = Record[1];
3316       F.BaseSelectorID = getTotalNumSelectors();
3317 
3318       if (F.LocalNumSelectors > 0) {
3319         // Introduce the global -> local mapping for selectors within this
3320         // module.
3321         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3322 
3323         // Introduce the local -> global mapping for selectors within this
3324         // module.
3325         F.SelectorRemap.insertOrReplace(
3326           std::make_pair(LocalBaseSelectorID,
3327                          F.BaseSelectorID - LocalBaseSelectorID));
3328 
3329         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3330       }
3331       break;
3332     }
3333 
3334     case METHOD_POOL:
3335       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3336       if (Record[0])
3337         F.SelectorLookupTable
3338           = ASTSelectorLookupTable::Create(
3339                         F.SelectorLookupTableData + Record[0],
3340                         F.SelectorLookupTableData,
3341                         ASTSelectorLookupTrait(*this, F));
3342       TotalNumMethodPoolEntries += Record[1];
3343       break;
3344 
3345     case REFERENCED_SELECTOR_POOL:
3346       if (!Record.empty()) {
3347         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3348           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3349                                                                 Record[Idx++]));
3350           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3351                                               getRawEncoding());
3352         }
3353       }
3354       break;
3355 
3356     case PP_CONDITIONAL_STACK:
3357       if (!Record.empty()) {
3358         unsigned Idx = 0, End = Record.size() - 1;
3359         bool ReachedEOFWhileSkipping = Record[Idx++];
3360         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3361         if (ReachedEOFWhileSkipping) {
3362           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3363           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3364           bool FoundNonSkipPortion = Record[Idx++];
3365           bool FoundElse = Record[Idx++];
3366           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3367           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3368                            FoundElse, ElseLoc);
3369         }
3370         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3371         while (Idx < End) {
3372           auto Loc = ReadSourceLocation(F, Record, Idx);
3373           bool WasSkipping = Record[Idx++];
3374           bool FoundNonSkip = Record[Idx++];
3375           bool FoundElse = Record[Idx++];
3376           ConditionalStack.push_back(
3377               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3378         }
3379         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3380       }
3381       break;
3382 
3383     case PP_COUNTER_VALUE:
3384       if (!Record.empty() && Listener)
3385         Listener->ReadCounter(F, Record[0]);
3386       break;
3387 
3388     case FILE_SORTED_DECLS:
3389       F.FileSortedDecls = (const DeclID *)Blob.data();
3390       F.NumFileSortedDecls = Record[0];
3391       break;
3392 
3393     case SOURCE_LOCATION_OFFSETS: {
3394       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3395       F.LocalNumSLocEntries = Record[0];
3396       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3397       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3398       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3399           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3400                                               SLocSpaceSize);
3401       if (!F.SLocEntryBaseID)
3402         return llvm::createStringError(std::errc::invalid_argument,
3403                                        "ran out of source locations");
3404       // Make our entry in the range map. BaseID is negative and growing, so
3405       // we invert it. Because we invert it, though, we need the other end of
3406       // the range.
3407       unsigned RangeStart =
3408           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3409       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3410       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3411 
3412       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3413       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3414       GlobalSLocOffsetMap.insert(
3415           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3416                            - SLocSpaceSize,&F));
3417 
3418       // Initialize the remapping table.
3419       // Invalid stays invalid.
3420       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3421       // This module. Base was 2 when being compiled.
3422       F.SLocRemap.insertOrReplace(std::make_pair(
3423           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3424 
3425       TotalNumSLocEntries += F.LocalNumSLocEntries;
3426       break;
3427     }
3428 
3429     case MODULE_OFFSET_MAP:
3430       F.ModuleOffsetMap = Blob;
3431       break;
3432 
3433     case SOURCE_MANAGER_LINE_TABLE:
3434       ParseLineTable(F, Record);
3435       break;
3436 
3437     case SOURCE_LOCATION_PRELOADS: {
3438       // Need to transform from the local view (1-based IDs) to the global view,
3439       // which is based off F.SLocEntryBaseID.
3440       if (!F.PreloadSLocEntries.empty())
3441         return llvm::createStringError(
3442             std::errc::illegal_byte_sequence,
3443             "Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3444 
3445       F.PreloadSLocEntries.swap(Record);
3446       break;
3447     }
3448 
3449     case EXT_VECTOR_DECLS:
3450       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3451         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3452       break;
3453 
3454     case VTABLE_USES:
3455       if (Record.size() % 3 != 0)
3456         return llvm::createStringError(std::errc::illegal_byte_sequence,
3457                                        "Invalid VTABLE_USES record");
3458 
3459       // Later tables overwrite earlier ones.
3460       // FIXME: Modules will have some trouble with this. This is clearly not
3461       // the right way to do this.
3462       VTableUses.clear();
3463 
3464       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3465         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3466         VTableUses.push_back(
3467           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3468         VTableUses.push_back(Record[Idx++]);
3469       }
3470       break;
3471 
3472     case PENDING_IMPLICIT_INSTANTIATIONS:
3473       if (PendingInstantiations.size() % 2 != 0)
3474         return llvm::createStringError(
3475             std::errc::illegal_byte_sequence,
3476             "Invalid existing PendingInstantiations");
3477 
3478       if (Record.size() % 2 != 0)
3479         return llvm::createStringError(
3480             std::errc::illegal_byte_sequence,
3481             "Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3482 
3483       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3484         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3485         PendingInstantiations.push_back(
3486           ReadSourceLocation(F, Record, I).getRawEncoding());
3487       }
3488       break;
3489 
3490     case SEMA_DECL_REFS:
3491       if (Record.size() != 3)
3492         return llvm::createStringError(std::errc::illegal_byte_sequence,
3493                                        "Invalid SEMA_DECL_REFS block");
3494       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3495         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3496       break;
3497 
3498     case PPD_ENTITIES_OFFSETS: {
3499       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3500       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3501       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3502 
3503       unsigned LocalBasePreprocessedEntityID = Record[0];
3504 
3505       unsigned StartingID;
3506       if (!PP.getPreprocessingRecord())
3507         PP.createPreprocessingRecord();
3508       if (!PP.getPreprocessingRecord()->getExternalSource())
3509         PP.getPreprocessingRecord()->SetExternalSource(*this);
3510       StartingID
3511         = PP.getPreprocessingRecord()
3512             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3513       F.BasePreprocessedEntityID = StartingID;
3514 
3515       if (F.NumPreprocessedEntities > 0) {
3516         // Introduce the global -> local mapping for preprocessed entities in
3517         // this module.
3518         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3519 
3520         // Introduce the local -> global mapping for preprocessed entities in
3521         // this module.
3522         F.PreprocessedEntityRemap.insertOrReplace(
3523           std::make_pair(LocalBasePreprocessedEntityID,
3524             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3525       }
3526 
3527       break;
3528     }
3529 
3530     case PPD_SKIPPED_RANGES: {
3531       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3532       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3533       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3534 
3535       if (!PP.getPreprocessingRecord())
3536         PP.createPreprocessingRecord();
3537       if (!PP.getPreprocessingRecord()->getExternalSource())
3538         PP.getPreprocessingRecord()->SetExternalSource(*this);
3539       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3540           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3541 
3542       if (F.NumPreprocessedSkippedRanges > 0)
3543         GlobalSkippedRangeMap.insert(
3544             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3545       break;
3546     }
3547 
3548     case DECL_UPDATE_OFFSETS:
3549       if (Record.size() % 2 != 0)
3550         return llvm::createStringError(
3551             std::errc::illegal_byte_sequence,
3552             "invalid DECL_UPDATE_OFFSETS block in AST file");
3553       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3554         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3555         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3556 
3557         // If we've already loaded the decl, perform the updates when we finish
3558         // loading this block.
3559         if (Decl *D = GetExistingDecl(ID))
3560           PendingUpdateRecords.push_back(
3561               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3562       }
3563       break;
3564 
3565     case OBJC_CATEGORIES_MAP:
3566       if (F.LocalNumObjCCategoriesInMap != 0)
3567         return llvm::createStringError(
3568             std::errc::illegal_byte_sequence,
3569             "duplicate OBJC_CATEGORIES_MAP record in AST file");
3570 
3571       F.LocalNumObjCCategoriesInMap = Record[0];
3572       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3573       break;
3574 
3575     case OBJC_CATEGORIES:
3576       F.ObjCCategories.swap(Record);
3577       break;
3578 
3579     case CUDA_SPECIAL_DECL_REFS:
3580       // Later tables overwrite earlier ones.
3581       // FIXME: Modules will have trouble with this.
3582       CUDASpecialDeclRefs.clear();
3583       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3584         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3585       break;
3586 
3587     case HEADER_SEARCH_TABLE:
3588       F.HeaderFileInfoTableData = Blob.data();
3589       F.LocalNumHeaderFileInfos = Record[1];
3590       if (Record[0]) {
3591         F.HeaderFileInfoTable
3592           = HeaderFileInfoLookupTable::Create(
3593                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3594                    (const unsigned char *)F.HeaderFileInfoTableData,
3595                    HeaderFileInfoTrait(*this, F,
3596                                        &PP.getHeaderSearchInfo(),
3597                                        Blob.data() + Record[2]));
3598 
3599         PP.getHeaderSearchInfo().SetExternalSource(this);
3600         if (!PP.getHeaderSearchInfo().getExternalLookup())
3601           PP.getHeaderSearchInfo().SetExternalLookup(this);
3602       }
3603       break;
3604 
3605     case FP_PRAGMA_OPTIONS:
3606       // Later tables overwrite earlier ones.
3607       FPPragmaOptions.swap(Record);
3608       break;
3609 
3610     case OPENCL_EXTENSIONS:
3611       for (unsigned I = 0, E = Record.size(); I != E; ) {
3612         auto Name = ReadString(Record, I);
3613         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3614         OptInfo.Supported = Record[I++] != 0;
3615         OptInfo.Enabled = Record[I++] != 0;
3616         OptInfo.WithPragma = Record[I++] != 0;
3617         OptInfo.Avail = Record[I++];
3618         OptInfo.Core = Record[I++];
3619         OptInfo.Opt = Record[I++];
3620       }
3621       break;
3622 
3623     case TENTATIVE_DEFINITIONS:
3624       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3625         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3626       break;
3627 
3628     case KNOWN_NAMESPACES:
3629       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3630         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3631       break;
3632 
3633     case UNDEFINED_BUT_USED:
3634       if (UndefinedButUsed.size() % 2 != 0)
3635         return llvm::createStringError(std::errc::illegal_byte_sequence,
3636                                        "Invalid existing UndefinedButUsed");
3637 
3638       if (Record.size() % 2 != 0)
3639         return llvm::createStringError(std::errc::illegal_byte_sequence,
3640                                        "invalid undefined-but-used record");
3641       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3642         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3643         UndefinedButUsed.push_back(
3644             ReadSourceLocation(F, Record, I).getRawEncoding());
3645       }
3646       break;
3647 
3648     case DELETE_EXPRS_TO_ANALYZE:
3649       for (unsigned I = 0, N = Record.size(); I != N;) {
3650         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3651         const uint64_t Count = Record[I++];
3652         DelayedDeleteExprs.push_back(Count);
3653         for (uint64_t C = 0; C < Count; ++C) {
3654           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3655           bool IsArrayForm = Record[I++] == 1;
3656           DelayedDeleteExprs.push_back(IsArrayForm);
3657         }
3658       }
3659       break;
3660 
3661     case IMPORTED_MODULES:
3662       if (!F.isModule()) {
3663         // If we aren't loading a module (which has its own exports), make
3664         // all of the imported modules visible.
3665         // FIXME: Deal with macros-only imports.
3666         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3667           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3668           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3669           if (GlobalID) {
3670             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3671             if (DeserializationListener)
3672               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3673           }
3674         }
3675       }
3676       break;
3677 
3678     case MACRO_OFFSET: {
3679       if (F.LocalNumMacros != 0)
3680         return llvm::createStringError(
3681             std::errc::illegal_byte_sequence,
3682             "duplicate MACRO_OFFSET record in AST file");
3683       F.MacroOffsets = (const uint32_t *)Blob.data();
3684       F.LocalNumMacros = Record[0];
3685       unsigned LocalBaseMacroID = Record[1];
3686       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3687       F.BaseMacroID = getTotalNumMacros();
3688 
3689       if (F.LocalNumMacros > 0) {
3690         // Introduce the global -> local mapping for macros within this module.
3691         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3692 
3693         // Introduce the local -> global mapping for macros within this module.
3694         F.MacroRemap.insertOrReplace(
3695           std::make_pair(LocalBaseMacroID,
3696                          F.BaseMacroID - LocalBaseMacroID));
3697 
3698         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3699       }
3700       break;
3701     }
3702 
3703     case LATE_PARSED_TEMPLATE:
3704       LateParsedTemplates.emplace_back(
3705           std::piecewise_construct, std::forward_as_tuple(&F),
3706           std::forward_as_tuple(Record.begin(), Record.end()));
3707       break;
3708 
3709     case OPTIMIZE_PRAGMA_OPTIONS:
3710       if (Record.size() != 1)
3711         return llvm::createStringError(std::errc::illegal_byte_sequence,
3712                                        "invalid pragma optimize record");
3713       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3714       break;
3715 
3716     case MSSTRUCT_PRAGMA_OPTIONS:
3717       if (Record.size() != 1)
3718         return llvm::createStringError(std::errc::illegal_byte_sequence,
3719                                        "invalid pragma ms_struct record");
3720       PragmaMSStructState = Record[0];
3721       break;
3722 
3723     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3724       if (Record.size() != 2)
3725         return llvm::createStringError(
3726             std::errc::illegal_byte_sequence,
3727             "invalid pragma pointers to members record");
3728       PragmaMSPointersToMembersState = Record[0];
3729       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3730       break;
3731 
3732     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3733       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3734         UnusedLocalTypedefNameCandidates.push_back(
3735             getGlobalDeclID(F, Record[I]));
3736       break;
3737 
3738     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3739       if (Record.size() != 1)
3740         return llvm::createStringError(std::errc::illegal_byte_sequence,
3741                                        "invalid cuda pragma options record");
3742       ForceCUDAHostDeviceDepth = Record[0];
3743       break;
3744 
3745     case ALIGN_PACK_PRAGMA_OPTIONS: {
3746       if (Record.size() < 3)
3747         return llvm::createStringError(std::errc::illegal_byte_sequence,
3748                                        "invalid pragma pack record");
3749       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3750       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3751       unsigned NumStackEntries = Record[2];
3752       unsigned Idx = 3;
3753       // Reset the stack when importing a new module.
3754       PragmaAlignPackStack.clear();
3755       for (unsigned I = 0; I < NumStackEntries; ++I) {
3756         PragmaAlignPackStackEntry Entry;
3757         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3758         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3759         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3760         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3761         Entry.SlotLabel = PragmaAlignPackStrings.back();
3762         PragmaAlignPackStack.push_back(Entry);
3763       }
3764       break;
3765     }
3766 
3767     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3768       if (Record.size() < 3)
3769         return llvm::createStringError(std::errc::illegal_byte_sequence,
3770                                        "invalid pragma float control record");
3771       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3772       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3773       unsigned NumStackEntries = Record[2];
3774       unsigned Idx = 3;
3775       // Reset the stack when importing a new module.
3776       FpPragmaStack.clear();
3777       for (unsigned I = 0; I < NumStackEntries; ++I) {
3778         FpPragmaStackEntry Entry;
3779         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3780         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3781         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3782         FpPragmaStrings.push_back(ReadString(Record, Idx));
3783         Entry.SlotLabel = FpPragmaStrings.back();
3784         FpPragmaStack.push_back(Entry);
3785       }
3786       break;
3787     }
3788 
3789     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3790       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3791         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3792       break;
3793     }
3794   }
3795 }
3796 
3797 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3798   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3799 
3800   // Additional remapping information.
3801   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3802   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3803   F.ModuleOffsetMap = StringRef();
3804 
3805   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3806   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3807     F.SLocRemap.insert(std::make_pair(0U, 0));
3808     F.SLocRemap.insert(std::make_pair(2U, 1));
3809   }
3810 
3811   // Continuous range maps we may be updating in our module.
3812   using SLocRemapBuilder =
3813       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3814                          2>::Builder;
3815   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3816   SLocRemapBuilder SLocRemap(F.SLocRemap);
3817   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3818   RemapBuilder MacroRemap(F.MacroRemap);
3819   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3820   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3821   RemapBuilder SelectorRemap(F.SelectorRemap);
3822   RemapBuilder DeclRemap(F.DeclRemap);
3823   RemapBuilder TypeRemap(F.TypeRemap);
3824 
3825   while (Data < DataEnd) {
3826     // FIXME: Looking up dependency modules by filename is horrible. Let's
3827     // start fixing this with prebuilt, explicit and implicit modules and see
3828     // how it goes...
3829     using namespace llvm::support;
3830     ModuleKind Kind = static_cast<ModuleKind>(
3831       endian::readNext<uint8_t, little, unaligned>(Data));
3832     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3833     StringRef Name = StringRef((const char*)Data, Len);
3834     Data += Len;
3835     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3836                               Kind == MK_ImplicitModule
3837                           ? ModuleMgr.lookupByModuleName(Name)
3838                           : ModuleMgr.lookupByFileName(Name));
3839     if (!OM) {
3840       std::string Msg =
3841           "SourceLocation remap refers to unknown module, cannot find ";
3842       Msg.append(std::string(Name));
3843       Error(Msg);
3844       return;
3845     }
3846 
3847     SourceLocation::UIntTy SLocOffset =
3848         endian::readNext<uint32_t, little, unaligned>(Data);
3849     uint32_t IdentifierIDOffset =
3850         endian::readNext<uint32_t, little, unaligned>(Data);
3851     uint32_t MacroIDOffset =
3852         endian::readNext<uint32_t, little, unaligned>(Data);
3853     uint32_t PreprocessedEntityIDOffset =
3854         endian::readNext<uint32_t, little, unaligned>(Data);
3855     uint32_t SubmoduleIDOffset =
3856         endian::readNext<uint32_t, little, unaligned>(Data);
3857     uint32_t SelectorIDOffset =
3858         endian::readNext<uint32_t, little, unaligned>(Data);
3859     uint32_t DeclIDOffset =
3860         endian::readNext<uint32_t, little, unaligned>(Data);
3861     uint32_t TypeIndexOffset =
3862         endian::readNext<uint32_t, little, unaligned>(Data);
3863 
3864     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3865                          RemapBuilder &Remap) {
3866       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3867       if (Offset != None)
3868         Remap.insert(std::make_pair(Offset,
3869                                     static_cast<int>(BaseOffset - Offset)));
3870     };
3871 
3872     constexpr SourceLocation::UIntTy SLocNone =
3873         std::numeric_limits<SourceLocation::UIntTy>::max();
3874     if (SLocOffset != SLocNone)
3875       SLocRemap.insert(std::make_pair(
3876           SLocOffset, static_cast<SourceLocation::IntTy>(
3877                           OM->SLocEntryBaseOffset - SLocOffset)));
3878 
3879     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3880     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3881     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3882               PreprocessedEntityRemap);
3883     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3884     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3885     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3886     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3887 
3888     // Global -> local mappings.
3889     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3890   }
3891 }
3892 
3893 ASTReader::ASTReadResult
3894 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3895                                   const ModuleFile *ImportedBy,
3896                                   unsigned ClientLoadCapabilities) {
3897   unsigned Idx = 0;
3898   F.ModuleMapPath = ReadPath(F, Record, Idx);
3899 
3900   // Try to resolve ModuleName in the current header search context and
3901   // verify that it is found in the same module map file as we saved. If the
3902   // top-level AST file is a main file, skip this check because there is no
3903   // usable header search context.
3904   assert(!F.ModuleName.empty() &&
3905          "MODULE_NAME should come before MODULE_MAP_FILE");
3906   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3907     // An implicitly-loaded module file should have its module listed in some
3908     // module map file that we've already loaded.
3909     Module *M =
3910         PP.getHeaderSearchInfo().lookupModule(F.ModuleName, F.ImportLoc);
3911     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3912     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3913     // Don't emit module relocation error if we have -fno-validate-pch
3914     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3915               DisableValidationForModuleKind::Module) &&
3916         !ModMap) {
3917       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3918         if (auto ASTFE = M ? M->getASTFile() : None) {
3919           // This module was defined by an imported (explicit) module.
3920           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3921                                                << ASTFE->getName();
3922         } else {
3923           // This module was built with a different module map.
3924           Diag(diag::err_imported_module_not_found)
3925               << F.ModuleName << F.FileName
3926               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3927               << !ImportedBy;
3928           // In case it was imported by a PCH, there's a chance the user is
3929           // just missing to include the search path to the directory containing
3930           // the modulemap.
3931           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3932             Diag(diag::note_imported_by_pch_module_not_found)
3933                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3934         }
3935       }
3936       return OutOfDate;
3937     }
3938 
3939     assert(M && M->Name == F.ModuleName && "found module with different name");
3940 
3941     // Check the primary module map file.
3942     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3943     if (!StoredModMap || *StoredModMap != ModMap) {
3944       assert(ModMap && "found module is missing module map file");
3945       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3946              "top-level import should be verified");
3947       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3948       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3949         Diag(diag::err_imported_module_modmap_changed)
3950             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3951             << ModMap->getName() << F.ModuleMapPath << NotImported;
3952       return OutOfDate;
3953     }
3954 
3955     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3956     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3957       // FIXME: we should use input files rather than storing names.
3958       std::string Filename = ReadPath(F, Record, Idx);
3959       auto SF = FileMgr.getFile(Filename, false, false);
3960       if (!SF) {
3961         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3962           Error("could not find file '" + Filename +"' referenced by AST file");
3963         return OutOfDate;
3964       }
3965       AdditionalStoredMaps.insert(*SF);
3966     }
3967 
3968     // Check any additional module map files (e.g. module.private.modulemap)
3969     // that are not in the pcm.
3970     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3971       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
3972         // Remove files that match
3973         // Note: SmallPtrSet::erase is really remove
3974         if (!AdditionalStoredMaps.erase(ModMap)) {
3975           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3976             Diag(diag::err_module_different_modmap)
3977               << F.ModuleName << /*new*/0 << ModMap->getName();
3978           return OutOfDate;
3979         }
3980       }
3981     }
3982 
3983     // Check any additional module map files that are in the pcm, but not
3984     // found in header search. Cases that match are already removed.
3985     for (const FileEntry *ModMap : AdditionalStoredMaps) {
3986       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3987         Diag(diag::err_module_different_modmap)
3988           << F.ModuleName << /*not new*/1 << ModMap->getName();
3989       return OutOfDate;
3990     }
3991   }
3992 
3993   if (Listener)
3994     Listener->ReadModuleMapFile(F.ModuleMapPath);
3995   return Success;
3996 }
3997 
3998 /// Move the given method to the back of the global list of methods.
3999 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4000   // Find the entry for this selector in the method pool.
4001   Sema::GlobalMethodPool::iterator Known
4002     = S.MethodPool.find(Method->getSelector());
4003   if (Known == S.MethodPool.end())
4004     return;
4005 
4006   // Retrieve the appropriate method list.
4007   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4008                                                     : Known->second.second;
4009   bool Found = false;
4010   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4011     if (!Found) {
4012       if (List->getMethod() == Method) {
4013         Found = true;
4014       } else {
4015         // Keep searching.
4016         continue;
4017       }
4018     }
4019 
4020     if (List->getNext())
4021       List->setMethod(List->getNext()->getMethod());
4022     else
4023       List->setMethod(Method);
4024   }
4025 }
4026 
4027 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4028   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4029   for (Decl *D : Names) {
4030     bool wasHidden = !D->isUnconditionallyVisible();
4031     D->setVisibleDespiteOwningModule();
4032 
4033     if (wasHidden && SemaObj) {
4034       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4035         moveMethodToBackOfGlobalList(*SemaObj, Method);
4036       }
4037     }
4038   }
4039 }
4040 
4041 void ASTReader::makeModuleVisible(Module *Mod,
4042                                   Module::NameVisibilityKind NameVisibility,
4043                                   SourceLocation ImportLoc) {
4044   llvm::SmallPtrSet<Module *, 4> Visited;
4045   SmallVector<Module *, 4> Stack;
4046   Stack.push_back(Mod);
4047   while (!Stack.empty()) {
4048     Mod = Stack.pop_back_val();
4049 
4050     if (NameVisibility <= Mod->NameVisibility) {
4051       // This module already has this level of visibility (or greater), so
4052       // there is nothing more to do.
4053       continue;
4054     }
4055 
4056     if (Mod->isUnimportable()) {
4057       // Modules that aren't importable cannot be made visible.
4058       continue;
4059     }
4060 
4061     // Update the module's name visibility.
4062     Mod->NameVisibility = NameVisibility;
4063 
4064     // If we've already deserialized any names from this module,
4065     // mark them as visible.
4066     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4067     if (Hidden != HiddenNamesMap.end()) {
4068       auto HiddenNames = std::move(*Hidden);
4069       HiddenNamesMap.erase(Hidden);
4070       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4071       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4072              "making names visible added hidden names");
4073     }
4074 
4075     // Push any exported modules onto the stack to be marked as visible.
4076     SmallVector<Module *, 16> Exports;
4077     Mod->getExportedModules(Exports);
4078     for (SmallVectorImpl<Module *>::iterator
4079            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4080       Module *Exported = *I;
4081       if (Visited.insert(Exported).second)
4082         Stack.push_back(Exported);
4083     }
4084   }
4085 }
4086 
4087 /// We've merged the definition \p MergedDef into the existing definition
4088 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4089 /// visible.
4090 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4091                                           NamedDecl *MergedDef) {
4092   if (!Def->isUnconditionallyVisible()) {
4093     // If MergedDef is visible or becomes visible, make the definition visible.
4094     if (MergedDef->isUnconditionallyVisible())
4095       Def->setVisibleDespiteOwningModule();
4096     else {
4097       getContext().mergeDefinitionIntoModule(
4098           Def, MergedDef->getImportedOwningModule(),
4099           /*NotifyListeners*/ false);
4100       PendingMergedDefinitionsToDeduplicate.insert(Def);
4101     }
4102   }
4103 }
4104 
4105 bool ASTReader::loadGlobalIndex() {
4106   if (GlobalIndex)
4107     return false;
4108 
4109   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4110       !PP.getLangOpts().Modules)
4111     return true;
4112 
4113   // Try to load the global index.
4114   TriedLoadingGlobalIndex = true;
4115   StringRef ModuleCachePath
4116     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4117   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4118       GlobalModuleIndex::readIndex(ModuleCachePath);
4119   if (llvm::Error Err = std::move(Result.second)) {
4120     assert(!Result.first);
4121     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4122     return true;
4123   }
4124 
4125   GlobalIndex.reset(Result.first);
4126   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4127   return false;
4128 }
4129 
4130 bool ASTReader::isGlobalIndexUnavailable() const {
4131   return PP.getLangOpts().Modules && UseGlobalIndex &&
4132          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4133 }
4134 
4135 static void updateModuleTimestamp(ModuleFile &MF) {
4136   // Overwrite the timestamp file contents so that file's mtime changes.
4137   std::string TimestampFilename = MF.getTimestampFilename();
4138   std::error_code EC;
4139   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4140                           llvm::sys::fs::OF_TextWithCRLF);
4141   if (EC)
4142     return;
4143   OS << "Timestamp file\n";
4144   OS.close();
4145   OS.clear_error(); // Avoid triggering a fatal error.
4146 }
4147 
4148 /// Given a cursor at the start of an AST file, scan ahead and drop the
4149 /// cursor into the start of the given block ID, returning false on success and
4150 /// true on failure.
4151 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4152   while (true) {
4153     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4154     if (!MaybeEntry) {
4155       // FIXME this drops errors on the floor.
4156       consumeError(MaybeEntry.takeError());
4157       return true;
4158     }
4159     llvm::BitstreamEntry Entry = MaybeEntry.get();
4160 
4161     switch (Entry.Kind) {
4162     case llvm::BitstreamEntry::Error:
4163     case llvm::BitstreamEntry::EndBlock:
4164       return true;
4165 
4166     case llvm::BitstreamEntry::Record:
4167       // Ignore top-level records.
4168       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4169         break;
4170       else {
4171         // FIXME this drops errors on the floor.
4172         consumeError(Skipped.takeError());
4173         return true;
4174       }
4175 
4176     case llvm::BitstreamEntry::SubBlock:
4177       if (Entry.ID == BlockID) {
4178         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4179           // FIXME this drops the error on the floor.
4180           consumeError(std::move(Err));
4181           return true;
4182         }
4183         // Found it!
4184         return false;
4185       }
4186 
4187       if (llvm::Error Err = Cursor.SkipBlock()) {
4188         // FIXME this drops the error on the floor.
4189         consumeError(std::move(Err));
4190         return true;
4191       }
4192     }
4193   }
4194 }
4195 
4196 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4197                                             ModuleKind Type,
4198                                             SourceLocation ImportLoc,
4199                                             unsigned ClientLoadCapabilities,
4200                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4201   llvm::SaveAndRestore<SourceLocation>
4202     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4203   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4204       CurrentDeserializingModuleKind, Type);
4205 
4206   // Defer any pending actions until we get to the end of reading the AST file.
4207   Deserializing AnASTFile(this);
4208 
4209   // Bump the generation number.
4210   unsigned PreviousGeneration = 0;
4211   if (ContextObj)
4212     PreviousGeneration = incrementGeneration(*ContextObj);
4213 
4214   unsigned NumModules = ModuleMgr.size();
4215   SmallVector<ImportedModule, 4> Loaded;
4216   if (ASTReadResult ReadResult =
4217           ReadASTCore(FileName, Type, ImportLoc,
4218                       /*ImportedBy=*/nullptr, Loaded, 0, 0, ASTFileSignature(),
4219                       ClientLoadCapabilities)) {
4220     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4221                             PP.getLangOpts().Modules
4222                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4223                                 : nullptr);
4224 
4225     // If we find that any modules are unusable, the global index is going
4226     // to be out-of-date. Just remove it.
4227     GlobalIndex.reset();
4228     ModuleMgr.setGlobalIndex(nullptr);
4229     return ReadResult;
4230   }
4231 
4232   // Here comes stuff that we only do once the entire chain is loaded. Do *not*
4233   // remove modules from this point. Various fields are updated during reading
4234   // the AST block and removing the modules would result in dangling pointers.
4235   // They are generally only incidentally dereferenced, ie. a binary search
4236   // runs over `GlobalSLocEntryMap`, which could cause an invalid module to
4237   // be dereferenced but it wouldn't actually be used.
4238 
4239   // Load the AST blocks of all of the modules that we loaded. We can still
4240   // hit errors parsing the ASTs at this point.
4241   for (ImportedModule &M : Loaded) {
4242     ModuleFile &F = *M.Mod;
4243 
4244     // Read the AST block.
4245     if (llvm::Error Err = ReadASTBlock(F, ClientLoadCapabilities)) {
4246       Error(std::move(Err));
4247       return Failure;
4248     }
4249 
4250     // The AST block should always have a definition for the main module.
4251     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4252       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4253       return Failure;
4254     }
4255 
4256     // Read the extension blocks.
4257     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4258       if (llvm::Error Err = ReadExtensionBlock(F)) {
4259         Error(std::move(Err));
4260         return Failure;
4261       }
4262     }
4263 
4264     // Once read, set the ModuleFile bit base offset and update the size in
4265     // bits of all files we've seen.
4266     F.GlobalBitOffset = TotalModulesSizeInBits;
4267     TotalModulesSizeInBits += F.SizeInBits;
4268     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4269   }
4270 
4271   // Preload source locations and interesting indentifiers.
4272   for (ImportedModule &M : Loaded) {
4273     ModuleFile &F = *M.Mod;
4274 
4275     // Preload SLocEntries.
4276     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4277       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4278       // Load it through the SourceManager and don't call ReadSLocEntry()
4279       // directly because the entry may have already been loaded in which case
4280       // calling ReadSLocEntry() directly would trigger an assertion in
4281       // SourceManager.
4282       SourceMgr.getLoadedSLocEntryByID(Index);
4283     }
4284 
4285     // Map the original source file ID into the ID space of the current
4286     // compilation.
4287     if (F.OriginalSourceFileID.isValid()) {
4288       F.OriginalSourceFileID = FileID::get(
4289           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4290     }
4291 
4292     // Preload all the pending interesting identifiers by marking them out of
4293     // date.
4294     for (auto Offset : F.PreloadIdentifierOffsets) {
4295       const unsigned char *Data = F.IdentifierTableData + Offset;
4296 
4297       ASTIdentifierLookupTrait Trait(*this, F);
4298       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4299       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4300       auto &II = PP.getIdentifierTable().getOwn(Key);
4301       II.setOutOfDate(true);
4302 
4303       // Mark this identifier as being from an AST file so that we can track
4304       // whether we need to serialize it.
4305       markIdentifierFromAST(*this, II);
4306 
4307       // Associate the ID with the identifier so that the writer can reuse it.
4308       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4309       SetIdentifierInfo(ID, &II);
4310     }
4311   }
4312 
4313   // Setup the import locations and notify the module manager that we've
4314   // committed to these module files.
4315   for (ImportedModule &M : Loaded) {
4316     ModuleFile &F = *M.Mod;
4317 
4318     ModuleMgr.moduleFileAccepted(&F);
4319 
4320     // Set the import location.
4321     F.DirectImportLoc = ImportLoc;
4322     // FIXME: We assume that locations from PCH / preamble do not need
4323     // any translation.
4324     if (!M.ImportedBy)
4325       F.ImportLoc = M.ImportLoc;
4326     else
4327       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4328   }
4329 
4330   if (!PP.getLangOpts().CPlusPlus ||
4331       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4332        Type != MK_PrebuiltModule)) {
4333     // Mark all of the identifiers in the identifier table as being out of date,
4334     // so that various accessors know to check the loaded modules when the
4335     // identifier is used.
4336     //
4337     // For C++ modules, we don't need information on many identifiers (just
4338     // those that provide macros or are poisoned), so we mark all of
4339     // the interesting ones via PreloadIdentifierOffsets.
4340     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4341                                 IdEnd = PP.getIdentifierTable().end();
4342          Id != IdEnd; ++Id)
4343       Id->second->setOutOfDate(true);
4344   }
4345   // Mark selectors as out of date.
4346   for (auto Sel : SelectorGeneration)
4347     SelectorOutOfDate[Sel.first] = true;
4348 
4349   // Resolve any unresolved module exports.
4350   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4351     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4352     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4353     Module *ResolvedMod = getSubmodule(GlobalID);
4354 
4355     switch (Unresolved.Kind) {
4356     case UnresolvedModuleRef::Conflict:
4357       if (ResolvedMod) {
4358         Module::Conflict Conflict;
4359         Conflict.Other = ResolvedMod;
4360         Conflict.Message = Unresolved.String.str();
4361         Unresolved.Mod->Conflicts.push_back(Conflict);
4362       }
4363       continue;
4364 
4365     case UnresolvedModuleRef::Import:
4366       if (ResolvedMod)
4367         Unresolved.Mod->Imports.insert(ResolvedMod);
4368       continue;
4369 
4370     case UnresolvedModuleRef::Export:
4371       if (ResolvedMod || Unresolved.IsWildcard)
4372         Unresolved.Mod->Exports.push_back(
4373           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4374       continue;
4375     }
4376   }
4377   UnresolvedModuleRefs.clear();
4378 
4379   if (Imported)
4380     Imported->append(ImportedModules.begin(),
4381                      ImportedModules.end());
4382 
4383   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4384   // Might be unnecessary as use declarations are only used to build the
4385   // module itself.
4386 
4387   if (ContextObj)
4388     InitializeContext();
4389 
4390   if (SemaObj)
4391     UpdateSema();
4392 
4393   if (DeserializationListener)
4394     DeserializationListener->ReaderInitialized(this);
4395 
4396   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4397   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4398     // If this AST file is a precompiled preamble, then set the
4399     // preamble file ID of the source manager to the file source file
4400     // from which the preamble was built.
4401     if (Type == MK_Preamble) {
4402       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4403     } else if (Type == MK_MainFile) {
4404       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4405     }
4406   }
4407 
4408   // For any Objective-C class definitions we have already loaded, make sure
4409   // that we load any additional categories.
4410   if (ContextObj) {
4411     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4412       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4413                          ObjCClassesLoaded[I],
4414                          PreviousGeneration);
4415     }
4416   }
4417 
4418   if (PP.getHeaderSearchInfo()
4419           .getHeaderSearchOpts()
4420           .ModulesValidateOncePerBuildSession) {
4421     // Now we are certain that the module and all modules it depends on are
4422     // up to date.  Create or update timestamp files for modules that are
4423     // located in the module cache (not for PCH files that could be anywhere
4424     // in the filesystem).
4425     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4426       ImportedModule &M = Loaded[I];
4427       if (M.Mod->Kind == MK_ImplicitModule) {
4428         updateModuleTimestamp(*M.Mod);
4429       }
4430     }
4431   }
4432 
4433   return Success;
4434 }
4435 
4436 static ASTFileSignature readASTFileSignature(StringRef PCH);
4437 
4438 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4439 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4440   // FIXME checking magic headers is done in other places such as
4441   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4442   // always done the same. Unify it all with a helper.
4443   if (!Stream.canSkipToPos(4))
4444     return llvm::createStringError(std::errc::illegal_byte_sequence,
4445                                    "file too small to contain AST file magic");
4446   for (unsigned C : {'C', 'P', 'C', 'H'})
4447     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4448       if (Res.get() != C)
4449         return llvm::createStringError(
4450             std::errc::illegal_byte_sequence,
4451             "file doesn't start with AST file magic");
4452     } else
4453       return Res.takeError();
4454   return llvm::Error::success();
4455 }
4456 
4457 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4458   switch (Kind) {
4459   case MK_PCH:
4460     return 0; // PCH
4461   case MK_ImplicitModule:
4462   case MK_ExplicitModule:
4463   case MK_PrebuiltModule:
4464     return 1; // module
4465   case MK_MainFile:
4466   case MK_Preamble:
4467     return 2; // main source file
4468   }
4469   llvm_unreachable("unknown module kind");
4470 }
4471 
4472 ASTReader::ASTReadResult
4473 ASTReader::ReadASTCore(StringRef FileName,
4474                        ModuleKind Type,
4475                        SourceLocation ImportLoc,
4476                        ModuleFile *ImportedBy,
4477                        SmallVectorImpl<ImportedModule> &Loaded,
4478                        off_t ExpectedSize, time_t ExpectedModTime,
4479                        ASTFileSignature ExpectedSignature,
4480                        unsigned ClientLoadCapabilities) {
4481   ModuleFile *M;
4482   std::string ErrorStr;
4483   ModuleManager::AddModuleResult AddResult
4484     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4485                           getGeneration(), ExpectedSize, ExpectedModTime,
4486                           ExpectedSignature, readASTFileSignature,
4487                           M, ErrorStr);
4488 
4489   switch (AddResult) {
4490   case ModuleManager::AlreadyLoaded:
4491     Diag(diag::remark_module_import)
4492         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4493         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4494     return Success;
4495 
4496   case ModuleManager::NewlyLoaded:
4497     // Load module file below.
4498     break;
4499 
4500   case ModuleManager::Missing:
4501     // The module file was missing; if the client can handle that, return
4502     // it.
4503     if (ClientLoadCapabilities & ARR_Missing)
4504       return Missing;
4505 
4506     // Otherwise, return an error.
4507     Diag(diag::err_ast_file_not_found)
4508         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4509         << ErrorStr;
4510     return Failure;
4511 
4512   case ModuleManager::OutOfDate:
4513     // We couldn't load the module file because it is out-of-date. If the
4514     // client can handle out-of-date, return it.
4515     if (ClientLoadCapabilities & ARR_OutOfDate)
4516       return OutOfDate;
4517 
4518     // Otherwise, return an error.
4519     Diag(diag::err_ast_file_out_of_date)
4520         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4521         << ErrorStr;
4522     return Failure;
4523   }
4524 
4525   assert(M && "Missing module file");
4526 
4527   bool ShouldFinalizePCM = false;
4528   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4529     auto &MC = getModuleManager().getModuleCache();
4530     if (ShouldFinalizePCM)
4531       MC.finalizePCM(FileName);
4532     else
4533       MC.tryToDropPCM(FileName);
4534   });
4535   ModuleFile &F = *M;
4536   BitstreamCursor &Stream = F.Stream;
4537   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4538   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4539 
4540   // Sniff for the signature.
4541   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4542     Diag(diag::err_ast_file_invalid)
4543         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4544     return Failure;
4545   }
4546 
4547   // This is used for compatibility with older PCH formats.
4548   bool HaveReadControlBlock = false;
4549   while (true) {
4550     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4551     if (!MaybeEntry) {
4552       Error(MaybeEntry.takeError());
4553       return Failure;
4554     }
4555     llvm::BitstreamEntry Entry = MaybeEntry.get();
4556 
4557     switch (Entry.Kind) {
4558     case llvm::BitstreamEntry::Error:
4559     case llvm::BitstreamEntry::Record:
4560     case llvm::BitstreamEntry::EndBlock:
4561       Error("invalid record at top-level of AST file");
4562       return Failure;
4563 
4564     case llvm::BitstreamEntry::SubBlock:
4565       break;
4566     }
4567 
4568     switch (Entry.ID) {
4569     case CONTROL_BLOCK_ID:
4570       HaveReadControlBlock = true;
4571       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4572       case Success:
4573         // Check that we didn't try to load a non-module AST file as a module.
4574         //
4575         // FIXME: Should we also perform the converse check? Loading a module as
4576         // a PCH file sort of works, but it's a bit wonky.
4577         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4578              Type == MK_PrebuiltModule) &&
4579             F.ModuleName.empty()) {
4580           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4581           if (Result != OutOfDate ||
4582               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4583             Diag(diag::err_module_file_not_module) << FileName;
4584           return Result;
4585         }
4586         break;
4587 
4588       case Failure: return Failure;
4589       case Missing: return Missing;
4590       case OutOfDate: return OutOfDate;
4591       case VersionMismatch: return VersionMismatch;
4592       case ConfigurationMismatch: return ConfigurationMismatch;
4593       case HadErrors: return HadErrors;
4594       }
4595       break;
4596 
4597     case AST_BLOCK_ID:
4598       if (!HaveReadControlBlock) {
4599         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4600           Diag(diag::err_pch_version_too_old);
4601         return VersionMismatch;
4602       }
4603 
4604       // Record that we've loaded this module.
4605       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4606       ShouldFinalizePCM = true;
4607       return Success;
4608 
4609     case UNHASHED_CONTROL_BLOCK_ID:
4610       // This block is handled using look-ahead during ReadControlBlock.  We
4611       // shouldn't get here!
4612       Error("malformed block record in AST file");
4613       return Failure;
4614 
4615     default:
4616       if (llvm::Error Err = Stream.SkipBlock()) {
4617         Error(std::move(Err));
4618         return Failure;
4619       }
4620       break;
4621     }
4622   }
4623 
4624   llvm_unreachable("unexpected break; expected return");
4625 }
4626 
4627 ASTReader::ASTReadResult
4628 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4629                                     unsigned ClientLoadCapabilities) {
4630   const HeaderSearchOptions &HSOpts =
4631       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4632   bool AllowCompatibleConfigurationMismatch =
4633       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4634   bool DisableValidation = shouldDisableValidationForFile(F);
4635 
4636   ASTReadResult Result = readUnhashedControlBlockImpl(
4637       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4638       Listener.get(),
4639       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4640 
4641   // If F was directly imported by another module, it's implicitly validated by
4642   // the importing module.
4643   if (DisableValidation || WasImportedBy ||
4644       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4645     return Success;
4646 
4647   if (Result == Failure) {
4648     Error("malformed block record in AST file");
4649     return Failure;
4650   }
4651 
4652   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4653     // If this module has already been finalized in the ModuleCache, we're stuck
4654     // with it; we can only load a single version of each module.
4655     //
4656     // This can happen when a module is imported in two contexts: in one, as a
4657     // user module; in another, as a system module (due to an import from
4658     // another module marked with the [system] flag).  It usually indicates a
4659     // bug in the module map: this module should also be marked with [system].
4660     //
4661     // If -Wno-system-headers (the default), and the first import is as a
4662     // system module, then validation will fail during the as-user import,
4663     // since -Werror flags won't have been validated.  However, it's reasonable
4664     // to treat this consistently as a system module.
4665     //
4666     // If -Wsystem-headers, the PCM on disk was built with
4667     // -Wno-system-headers, and the first import is as a user module, then
4668     // validation will fail during the as-system import since the PCM on disk
4669     // doesn't guarantee that -Werror was respected.  However, the -Werror
4670     // flags were checked during the initial as-user import.
4671     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4672       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4673       return Success;
4674     }
4675   }
4676 
4677   return Result;
4678 }
4679 
4680 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4681     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4682     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4683     bool ValidateDiagnosticOptions) {
4684   // Initialize a stream.
4685   BitstreamCursor Stream(StreamData);
4686 
4687   // Sniff for the signature.
4688   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4689     // FIXME this drops the error on the floor.
4690     consumeError(std::move(Err));
4691     return Failure;
4692   }
4693 
4694   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4695   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4696     return Failure;
4697 
4698   // Read all of the records in the options block.
4699   RecordData Record;
4700   ASTReadResult Result = Success;
4701   while (true) {
4702     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4703     if (!MaybeEntry) {
4704       // FIXME this drops the error on the floor.
4705       consumeError(MaybeEntry.takeError());
4706       return Failure;
4707     }
4708     llvm::BitstreamEntry Entry = MaybeEntry.get();
4709 
4710     switch (Entry.Kind) {
4711     case llvm::BitstreamEntry::Error:
4712     case llvm::BitstreamEntry::SubBlock:
4713       return Failure;
4714 
4715     case llvm::BitstreamEntry::EndBlock:
4716       return Result;
4717 
4718     case llvm::BitstreamEntry::Record:
4719       // The interesting case.
4720       break;
4721     }
4722 
4723     // Read and process a record.
4724     Record.clear();
4725     StringRef Blob;
4726     Expected<unsigned> MaybeRecordType =
4727         Stream.readRecord(Entry.ID, Record, &Blob);
4728     if (!MaybeRecordType) {
4729       // FIXME this drops the error.
4730       return Failure;
4731     }
4732     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4733     case SIGNATURE:
4734       if (F)
4735         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4736       break;
4737     case AST_BLOCK_HASH:
4738       if (F)
4739         F->ASTBlockHash =
4740             ASTFileSignature::create(Record.begin(), Record.end());
4741       break;
4742     case DIAGNOSTIC_OPTIONS: {
4743       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4744       if (Listener && ValidateDiagnosticOptions &&
4745           !AllowCompatibleConfigurationMismatch &&
4746           ParseDiagnosticOptions(Record, Complain, *Listener))
4747         Result = OutOfDate; // Don't return early.  Read the signature.
4748       break;
4749     }
4750     case DIAG_PRAGMA_MAPPINGS:
4751       if (!F)
4752         break;
4753       if (F->PragmaDiagMappings.empty())
4754         F->PragmaDiagMappings.swap(Record);
4755       else
4756         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4757                                      Record.begin(), Record.end());
4758       break;
4759     case HEADER_SEARCH_ENTRY_USAGE:
4760       if (!F)
4761         break;
4762       unsigned Count = Record[0];
4763       const char *Byte = Blob.data();
4764       F->SearchPathUsage = llvm::BitVector(Count, 0);
4765       for (unsigned I = 0; I < Count; ++Byte)
4766         for (unsigned Bit = 0; Bit < 8 && I < Count; ++Bit, ++I)
4767           if (*Byte & (1 << Bit))
4768             F->SearchPathUsage[I] = 1;
4769       break;
4770     }
4771   }
4772 }
4773 
4774 /// Parse a record and blob containing module file extension metadata.
4775 static bool parseModuleFileExtensionMetadata(
4776               const SmallVectorImpl<uint64_t> &Record,
4777               StringRef Blob,
4778               ModuleFileExtensionMetadata &Metadata) {
4779   if (Record.size() < 4) return true;
4780 
4781   Metadata.MajorVersion = Record[0];
4782   Metadata.MinorVersion = Record[1];
4783 
4784   unsigned BlockNameLen = Record[2];
4785   unsigned UserInfoLen = Record[3];
4786 
4787   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4788 
4789   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4790   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4791                                   Blob.data() + BlockNameLen + UserInfoLen);
4792   return false;
4793 }
4794 
4795 llvm::Error ASTReader::ReadExtensionBlock(ModuleFile &F) {
4796   BitstreamCursor &Stream = F.Stream;
4797 
4798   RecordData Record;
4799   while (true) {
4800     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4801     if (!MaybeEntry)
4802       return MaybeEntry.takeError();
4803     llvm::BitstreamEntry Entry = MaybeEntry.get();
4804 
4805     switch (Entry.Kind) {
4806     case llvm::BitstreamEntry::SubBlock:
4807       if (llvm::Error Err = Stream.SkipBlock())
4808         return Err;
4809       continue;
4810     case llvm::BitstreamEntry::EndBlock:
4811       return llvm::Error::success();
4812     case llvm::BitstreamEntry::Error:
4813       return llvm::createStringError(std::errc::illegal_byte_sequence,
4814                                      "malformed block record in AST file");
4815     case llvm::BitstreamEntry::Record:
4816       break;
4817     }
4818 
4819     Record.clear();
4820     StringRef Blob;
4821     Expected<unsigned> MaybeRecCode =
4822         Stream.readRecord(Entry.ID, Record, &Blob);
4823     if (!MaybeRecCode)
4824       return MaybeRecCode.takeError();
4825     switch (MaybeRecCode.get()) {
4826     case EXTENSION_METADATA: {
4827       ModuleFileExtensionMetadata Metadata;
4828       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
4829         return llvm::createStringError(
4830             std::errc::illegal_byte_sequence,
4831             "malformed EXTENSION_METADATA in AST file");
4832 
4833       // Find a module file extension with this block name.
4834       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4835       if (Known == ModuleFileExtensions.end()) break;
4836 
4837       // Form a reader.
4838       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4839                                                              F, Stream)) {
4840         F.ExtensionReaders.push_back(std::move(Reader));
4841       }
4842 
4843       break;
4844     }
4845     }
4846   }
4847 
4848   return llvm::Error::success();
4849 }
4850 
4851 void ASTReader::InitializeContext() {
4852   assert(ContextObj && "no context to initialize");
4853   ASTContext &Context = *ContextObj;
4854 
4855   // If there's a listener, notify them that we "read" the translation unit.
4856   if (DeserializationListener)
4857     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4858                                       Context.getTranslationUnitDecl());
4859 
4860   // FIXME: Find a better way to deal with collisions between these
4861   // built-in types. Right now, we just ignore the problem.
4862 
4863   // Load the special types.
4864   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4865     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4866       if (!Context.CFConstantStringTypeDecl)
4867         Context.setCFConstantStringType(GetType(String));
4868     }
4869 
4870     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4871       QualType FileType = GetType(File);
4872       if (FileType.isNull()) {
4873         Error("FILE type is NULL");
4874         return;
4875       }
4876 
4877       if (!Context.FILEDecl) {
4878         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4879           Context.setFILEDecl(Typedef->getDecl());
4880         else {
4881           const TagType *Tag = FileType->getAs<TagType>();
4882           if (!Tag) {
4883             Error("Invalid FILE type in AST file");
4884             return;
4885           }
4886           Context.setFILEDecl(Tag->getDecl());
4887         }
4888       }
4889     }
4890 
4891     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4892       QualType Jmp_bufType = GetType(Jmp_buf);
4893       if (Jmp_bufType.isNull()) {
4894         Error("jmp_buf type is NULL");
4895         return;
4896       }
4897 
4898       if (!Context.jmp_bufDecl) {
4899         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4900           Context.setjmp_bufDecl(Typedef->getDecl());
4901         else {
4902           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4903           if (!Tag) {
4904             Error("Invalid jmp_buf type in AST file");
4905             return;
4906           }
4907           Context.setjmp_bufDecl(Tag->getDecl());
4908         }
4909       }
4910     }
4911 
4912     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4913       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4914       if (Sigjmp_bufType.isNull()) {
4915         Error("sigjmp_buf type is NULL");
4916         return;
4917       }
4918 
4919       if (!Context.sigjmp_bufDecl) {
4920         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4921           Context.setsigjmp_bufDecl(Typedef->getDecl());
4922         else {
4923           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4924           assert(Tag && "Invalid sigjmp_buf type in AST file");
4925           Context.setsigjmp_bufDecl(Tag->getDecl());
4926         }
4927       }
4928     }
4929 
4930     if (unsigned ObjCIdRedef
4931           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4932       if (Context.ObjCIdRedefinitionType.isNull())
4933         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4934     }
4935 
4936     if (unsigned ObjCClassRedef
4937           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4938       if (Context.ObjCClassRedefinitionType.isNull())
4939         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4940     }
4941 
4942     if (unsigned ObjCSelRedef
4943           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4944       if (Context.ObjCSelRedefinitionType.isNull())
4945         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4946     }
4947 
4948     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4949       QualType Ucontext_tType = GetType(Ucontext_t);
4950       if (Ucontext_tType.isNull()) {
4951         Error("ucontext_t type is NULL");
4952         return;
4953       }
4954 
4955       if (!Context.ucontext_tDecl) {
4956         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4957           Context.setucontext_tDecl(Typedef->getDecl());
4958         else {
4959           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4960           assert(Tag && "Invalid ucontext_t type in AST file");
4961           Context.setucontext_tDecl(Tag->getDecl());
4962         }
4963       }
4964     }
4965   }
4966 
4967   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4968 
4969   // If there were any CUDA special declarations, deserialize them.
4970   if (!CUDASpecialDeclRefs.empty()) {
4971     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4972     Context.setcudaConfigureCallDecl(
4973                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4974   }
4975 
4976   // Re-export any modules that were imported by a non-module AST file.
4977   // FIXME: This does not make macro-only imports visible again.
4978   for (auto &Import : ImportedModules) {
4979     if (Module *Imported = getSubmodule(Import.ID)) {
4980       makeModuleVisible(Imported, Module::AllVisible,
4981                         /*ImportLoc=*/Import.ImportLoc);
4982       if (Import.ImportLoc.isValid())
4983         PP.makeModuleVisible(Imported, Import.ImportLoc);
4984       // This updates visibility for Preprocessor only. For Sema, which can be
4985       // nullptr here, we do the same later, in UpdateSema().
4986     }
4987   }
4988 }
4989 
4990 void ASTReader::finalizeForWriting() {
4991   // Nothing to do for now.
4992 }
4993 
4994 /// Reads and return the signature record from \p PCH's control block, or
4995 /// else returns 0.
4996 static ASTFileSignature readASTFileSignature(StringRef PCH) {
4997   BitstreamCursor Stream(PCH);
4998   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4999     // FIXME this drops the error on the floor.
5000     consumeError(std::move(Err));
5001     return ASTFileSignature();
5002   }
5003 
5004   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5005   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5006     return ASTFileSignature();
5007 
5008   // Scan for SIGNATURE inside the diagnostic options block.
5009   ASTReader::RecordData Record;
5010   while (true) {
5011     Expected<llvm::BitstreamEntry> MaybeEntry =
5012         Stream.advanceSkippingSubblocks();
5013     if (!MaybeEntry) {
5014       // FIXME this drops the error on the floor.
5015       consumeError(MaybeEntry.takeError());
5016       return ASTFileSignature();
5017     }
5018     llvm::BitstreamEntry Entry = MaybeEntry.get();
5019 
5020     if (Entry.Kind != llvm::BitstreamEntry::Record)
5021       return ASTFileSignature();
5022 
5023     Record.clear();
5024     StringRef Blob;
5025     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5026     if (!MaybeRecord) {
5027       // FIXME this drops the error on the floor.
5028       consumeError(MaybeRecord.takeError());
5029       return ASTFileSignature();
5030     }
5031     if (SIGNATURE == MaybeRecord.get())
5032       return ASTFileSignature::create(Record.begin(),
5033                                       Record.begin() + ASTFileSignature::size);
5034   }
5035 }
5036 
5037 /// Retrieve the name of the original source file name
5038 /// directly from the AST file, without actually loading the AST
5039 /// file.
5040 std::string ASTReader::getOriginalSourceFile(
5041     const std::string &ASTFileName, FileManager &FileMgr,
5042     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5043   // Open the AST file.
5044   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5045   if (!Buffer) {
5046     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5047         << ASTFileName << Buffer.getError().message();
5048     return std::string();
5049   }
5050 
5051   // Initialize the stream
5052   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5053 
5054   // Sniff for the signature.
5055   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5056     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5057     return std::string();
5058   }
5059 
5060   // Scan for the CONTROL_BLOCK_ID block.
5061   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5062     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5063     return std::string();
5064   }
5065 
5066   // Scan for ORIGINAL_FILE inside the control block.
5067   RecordData Record;
5068   while (true) {
5069     Expected<llvm::BitstreamEntry> MaybeEntry =
5070         Stream.advanceSkippingSubblocks();
5071     if (!MaybeEntry) {
5072       // FIXME this drops errors on the floor.
5073       consumeError(MaybeEntry.takeError());
5074       return std::string();
5075     }
5076     llvm::BitstreamEntry Entry = MaybeEntry.get();
5077 
5078     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5079       return std::string();
5080 
5081     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5082       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5083       return std::string();
5084     }
5085 
5086     Record.clear();
5087     StringRef Blob;
5088     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5089     if (!MaybeRecord) {
5090       // FIXME this drops the errors on the floor.
5091       consumeError(MaybeRecord.takeError());
5092       return std::string();
5093     }
5094     if (ORIGINAL_FILE == MaybeRecord.get())
5095       return Blob.str();
5096   }
5097 }
5098 
5099 namespace {
5100 
5101   class SimplePCHValidator : public ASTReaderListener {
5102     const LangOptions &ExistingLangOpts;
5103     const TargetOptions &ExistingTargetOpts;
5104     const PreprocessorOptions &ExistingPPOpts;
5105     std::string ExistingModuleCachePath;
5106     FileManager &FileMgr;
5107 
5108   public:
5109     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5110                        const TargetOptions &ExistingTargetOpts,
5111                        const PreprocessorOptions &ExistingPPOpts,
5112                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5113         : ExistingLangOpts(ExistingLangOpts),
5114           ExistingTargetOpts(ExistingTargetOpts),
5115           ExistingPPOpts(ExistingPPOpts),
5116           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5117 
5118     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5119                              bool AllowCompatibleDifferences) override {
5120       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5121                                   AllowCompatibleDifferences);
5122     }
5123 
5124     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5125                            bool AllowCompatibleDifferences) override {
5126       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5127                                 AllowCompatibleDifferences);
5128     }
5129 
5130     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5131                                  StringRef SpecificModuleCachePath,
5132                                  bool Complain) override {
5133       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5134                                       ExistingModuleCachePath, nullptr,
5135                                       ExistingLangOpts, ExistingPPOpts);
5136     }
5137 
5138     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5139                                  bool Complain,
5140                                  std::string &SuggestedPredefines) override {
5141       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5142                                       SuggestedPredefines, ExistingLangOpts);
5143     }
5144   };
5145 
5146 } // namespace
5147 
5148 bool ASTReader::readASTFileControlBlock(
5149     StringRef Filename, FileManager &FileMgr,
5150     const PCHContainerReader &PCHContainerRdr,
5151     bool FindModuleFileExtensions,
5152     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5153   // Open the AST file.
5154   // FIXME: This allows use of the VFS; we do not allow use of the
5155   // VFS when actually loading a module.
5156   auto Buffer = FileMgr.getBufferForFile(Filename);
5157   if (!Buffer) {
5158     return true;
5159   }
5160 
5161   // Initialize the stream
5162   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5163   BitstreamCursor Stream(Bytes);
5164 
5165   // Sniff for the signature.
5166   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5167     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5168     return true;
5169   }
5170 
5171   // Scan for the CONTROL_BLOCK_ID block.
5172   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5173     return true;
5174 
5175   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5176   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5177   bool NeedsImports = Listener.needsImportVisitation();
5178   BitstreamCursor InputFilesCursor;
5179 
5180   RecordData Record;
5181   std::string ModuleDir;
5182   bool DoneWithControlBlock = false;
5183   while (!DoneWithControlBlock) {
5184     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5185     if (!MaybeEntry) {
5186       // FIXME this drops the error on the floor.
5187       consumeError(MaybeEntry.takeError());
5188       return true;
5189     }
5190     llvm::BitstreamEntry Entry = MaybeEntry.get();
5191 
5192     switch (Entry.Kind) {
5193     case llvm::BitstreamEntry::SubBlock: {
5194       switch (Entry.ID) {
5195       case OPTIONS_BLOCK_ID: {
5196         std::string IgnoredSuggestedPredefines;
5197         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5198                              /*AllowCompatibleConfigurationMismatch*/ false,
5199                              Listener, IgnoredSuggestedPredefines) != Success)
5200           return true;
5201         break;
5202       }
5203 
5204       case INPUT_FILES_BLOCK_ID:
5205         InputFilesCursor = Stream;
5206         if (llvm::Error Err = Stream.SkipBlock()) {
5207           // FIXME this drops the error on the floor.
5208           consumeError(std::move(Err));
5209           return true;
5210         }
5211         if (NeedsInputFiles &&
5212             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5213           return true;
5214         break;
5215 
5216       default:
5217         if (llvm::Error Err = Stream.SkipBlock()) {
5218           // FIXME this drops the error on the floor.
5219           consumeError(std::move(Err));
5220           return true;
5221         }
5222         break;
5223       }
5224 
5225       continue;
5226     }
5227 
5228     case llvm::BitstreamEntry::EndBlock:
5229       DoneWithControlBlock = true;
5230       break;
5231 
5232     case llvm::BitstreamEntry::Error:
5233       return true;
5234 
5235     case llvm::BitstreamEntry::Record:
5236       break;
5237     }
5238 
5239     if (DoneWithControlBlock) break;
5240 
5241     Record.clear();
5242     StringRef Blob;
5243     Expected<unsigned> MaybeRecCode =
5244         Stream.readRecord(Entry.ID, Record, &Blob);
5245     if (!MaybeRecCode) {
5246       // FIXME this drops the error.
5247       return Failure;
5248     }
5249     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5250     case METADATA:
5251       if (Record[0] != VERSION_MAJOR)
5252         return true;
5253       if (Listener.ReadFullVersionInformation(Blob))
5254         return true;
5255       break;
5256     case MODULE_NAME:
5257       Listener.ReadModuleName(Blob);
5258       break;
5259     case MODULE_DIRECTORY:
5260       ModuleDir = std::string(Blob);
5261       break;
5262     case MODULE_MAP_FILE: {
5263       unsigned Idx = 0;
5264       auto Path = ReadString(Record, Idx);
5265       ResolveImportedPath(Path, ModuleDir);
5266       Listener.ReadModuleMapFile(Path);
5267       break;
5268     }
5269     case INPUT_FILE_OFFSETS: {
5270       if (!NeedsInputFiles)
5271         break;
5272 
5273       unsigned NumInputFiles = Record[0];
5274       unsigned NumUserFiles = Record[1];
5275       const llvm::support::unaligned_uint64_t *InputFileOffs =
5276           (const llvm::support::unaligned_uint64_t *)Blob.data();
5277       for (unsigned I = 0; I != NumInputFiles; ++I) {
5278         // Go find this input file.
5279         bool isSystemFile = I >= NumUserFiles;
5280 
5281         if (isSystemFile && !NeedsSystemInputFiles)
5282           break; // the rest are system input files
5283 
5284         BitstreamCursor &Cursor = InputFilesCursor;
5285         SavedStreamPosition SavedPosition(Cursor);
5286         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5287           // FIXME this drops errors on the floor.
5288           consumeError(std::move(Err));
5289         }
5290 
5291         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5292         if (!MaybeCode) {
5293           // FIXME this drops errors on the floor.
5294           consumeError(MaybeCode.takeError());
5295         }
5296         unsigned Code = MaybeCode.get();
5297 
5298         RecordData Record;
5299         StringRef Blob;
5300         bool shouldContinue = false;
5301         Expected<unsigned> MaybeRecordType =
5302             Cursor.readRecord(Code, Record, &Blob);
5303         if (!MaybeRecordType) {
5304           // FIXME this drops errors on the floor.
5305           consumeError(MaybeRecordType.takeError());
5306         }
5307         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5308         case INPUT_FILE_HASH:
5309           break;
5310         case INPUT_FILE:
5311           bool Overridden = static_cast<bool>(Record[3]);
5312           std::string Filename = std::string(Blob);
5313           ResolveImportedPath(Filename, ModuleDir);
5314           shouldContinue = Listener.visitInputFile(
5315               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5316           break;
5317         }
5318         if (!shouldContinue)
5319           break;
5320       }
5321       break;
5322     }
5323 
5324     case IMPORTS: {
5325       if (!NeedsImports)
5326         break;
5327 
5328       unsigned Idx = 0, N = Record.size();
5329       while (Idx < N) {
5330         // Read information about the AST file.
5331         Idx +=
5332             1 + 1 + 1 + 1 +
5333             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5334         std::string ModuleName = ReadString(Record, Idx);
5335         std::string Filename = ReadString(Record, Idx);
5336         ResolveImportedPath(Filename, ModuleDir);
5337         Listener.visitImport(ModuleName, Filename);
5338       }
5339       break;
5340     }
5341 
5342     default:
5343       // No other validation to perform.
5344       break;
5345     }
5346   }
5347 
5348   // Look for module file extension blocks, if requested.
5349   if (FindModuleFileExtensions) {
5350     BitstreamCursor SavedStream = Stream;
5351     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5352       bool DoneWithExtensionBlock = false;
5353       while (!DoneWithExtensionBlock) {
5354         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5355         if (!MaybeEntry) {
5356           // FIXME this drops the error.
5357           return true;
5358         }
5359         llvm::BitstreamEntry Entry = MaybeEntry.get();
5360 
5361         switch (Entry.Kind) {
5362         case llvm::BitstreamEntry::SubBlock:
5363           if (llvm::Error Err = Stream.SkipBlock()) {
5364             // FIXME this drops the error on the floor.
5365             consumeError(std::move(Err));
5366             return true;
5367           }
5368           continue;
5369 
5370         case llvm::BitstreamEntry::EndBlock:
5371           DoneWithExtensionBlock = true;
5372           continue;
5373 
5374         case llvm::BitstreamEntry::Error:
5375           return true;
5376 
5377         case llvm::BitstreamEntry::Record:
5378           break;
5379         }
5380 
5381        Record.clear();
5382        StringRef Blob;
5383        Expected<unsigned> MaybeRecCode =
5384            Stream.readRecord(Entry.ID, Record, &Blob);
5385        if (!MaybeRecCode) {
5386          // FIXME this drops the error.
5387          return true;
5388        }
5389        switch (MaybeRecCode.get()) {
5390        case EXTENSION_METADATA: {
5391          ModuleFileExtensionMetadata Metadata;
5392          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5393            return true;
5394 
5395          Listener.readModuleFileExtension(Metadata);
5396          break;
5397        }
5398        }
5399       }
5400     }
5401     Stream = SavedStream;
5402   }
5403 
5404   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5405   if (readUnhashedControlBlockImpl(
5406           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5407           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5408           ValidateDiagnosticOptions) != Success)
5409     return true;
5410 
5411   return false;
5412 }
5413 
5414 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5415                                     const PCHContainerReader &PCHContainerRdr,
5416                                     const LangOptions &LangOpts,
5417                                     const TargetOptions &TargetOpts,
5418                                     const PreprocessorOptions &PPOpts,
5419                                     StringRef ExistingModuleCachePath) {
5420   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5421                                ExistingModuleCachePath, FileMgr);
5422   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5423                                   /*FindModuleFileExtensions=*/false,
5424                                   validator,
5425                                   /*ValidateDiagnosticOptions=*/true);
5426 }
5427 
5428 llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F,
5429                                           unsigned ClientLoadCapabilities) {
5430   // Enter the submodule block.
5431   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID))
5432     return Err;
5433 
5434   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5435   bool First = true;
5436   Module *CurrentModule = nullptr;
5437   RecordData Record;
5438   while (true) {
5439     Expected<llvm::BitstreamEntry> MaybeEntry =
5440         F.Stream.advanceSkippingSubblocks();
5441     if (!MaybeEntry)
5442       return MaybeEntry.takeError();
5443     llvm::BitstreamEntry Entry = MaybeEntry.get();
5444 
5445     switch (Entry.Kind) {
5446     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5447     case llvm::BitstreamEntry::Error:
5448       return llvm::createStringError(std::errc::illegal_byte_sequence,
5449                                      "malformed block record in AST file");
5450     case llvm::BitstreamEntry::EndBlock:
5451       return llvm::Error::success();
5452     case llvm::BitstreamEntry::Record:
5453       // The interesting case.
5454       break;
5455     }
5456 
5457     // Read a record.
5458     StringRef Blob;
5459     Record.clear();
5460     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5461     if (!MaybeKind)
5462       return MaybeKind.takeError();
5463     unsigned Kind = MaybeKind.get();
5464 
5465     if ((Kind == SUBMODULE_METADATA) != First)
5466       return llvm::createStringError(
5467           std::errc::illegal_byte_sequence,
5468           "submodule metadata record should be at beginning of block");
5469     First = false;
5470 
5471     // Submodule information is only valid if we have a current module.
5472     // FIXME: Should we error on these cases?
5473     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5474         Kind != SUBMODULE_DEFINITION)
5475       continue;
5476 
5477     switch (Kind) {
5478     default:  // Default behavior: ignore.
5479       break;
5480 
5481     case SUBMODULE_DEFINITION: {
5482       if (Record.size() < 12)
5483         return llvm::createStringError(std::errc::illegal_byte_sequence,
5484                                        "malformed module definition");
5485 
5486       StringRef Name = Blob;
5487       unsigned Idx = 0;
5488       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5489       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5490       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5491       bool IsFramework = Record[Idx++];
5492       bool IsExplicit = Record[Idx++];
5493       bool IsSystem = Record[Idx++];
5494       bool IsExternC = Record[Idx++];
5495       bool InferSubmodules = Record[Idx++];
5496       bool InferExplicitSubmodules = Record[Idx++];
5497       bool InferExportWildcard = Record[Idx++];
5498       bool ConfigMacrosExhaustive = Record[Idx++];
5499       bool ModuleMapIsPrivate = Record[Idx++];
5500 
5501       Module *ParentModule = nullptr;
5502       if (Parent)
5503         ParentModule = getSubmodule(Parent);
5504 
5505       // Retrieve this (sub)module from the module map, creating it if
5506       // necessary.
5507       CurrentModule =
5508           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5509               .first;
5510 
5511       // FIXME: set the definition loc for CurrentModule, or call
5512       // ModMap.setInferredModuleAllowedBy()
5513 
5514       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5515       if (GlobalIndex >= SubmodulesLoaded.size() ||
5516           SubmodulesLoaded[GlobalIndex])
5517         return llvm::createStringError(std::errc::invalid_argument,
5518                                        "too many submodules");
5519 
5520       if (!ParentModule) {
5521         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5522           // Don't emit module relocation error if we have -fno-validate-pch
5523           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5524                     DisableValidationForModuleKind::Module) &&
5525               CurFile != F.File) {
5526             auto ConflictError =
5527                 PartialDiagnostic(diag::err_module_file_conflict,
5528                                   ContextObj->DiagAllocator)
5529                 << CurrentModule->getTopLevelModuleName() << CurFile->getName()
5530                 << F.File->getName();
5531             return DiagnosticError::create(CurrentImportLoc, ConflictError);
5532           }
5533         }
5534 
5535         F.DidReadTopLevelSubmodule = true;
5536         CurrentModule->setASTFile(F.File);
5537         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5538       }
5539 
5540       CurrentModule->Kind = Kind;
5541       CurrentModule->Signature = F.Signature;
5542       CurrentModule->IsFromModuleFile = true;
5543       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5544       CurrentModule->IsExternC = IsExternC;
5545       CurrentModule->InferSubmodules = InferSubmodules;
5546       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5547       CurrentModule->InferExportWildcard = InferExportWildcard;
5548       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5549       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5550       if (DeserializationListener)
5551         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5552 
5553       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5554 
5555       // Clear out data that will be replaced by what is in the module file.
5556       CurrentModule->LinkLibraries.clear();
5557       CurrentModule->ConfigMacros.clear();
5558       CurrentModule->UnresolvedConflicts.clear();
5559       CurrentModule->Conflicts.clear();
5560 
5561       // The module is available unless it's missing a requirement; relevant
5562       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5563       // Missing headers that were present when the module was built do not
5564       // make it unavailable -- if we got this far, this must be an explicitly
5565       // imported module file.
5566       CurrentModule->Requirements.clear();
5567       CurrentModule->MissingHeaders.clear();
5568       CurrentModule->IsUnimportable =
5569           ParentModule && ParentModule->IsUnimportable;
5570       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5571       break;
5572     }
5573 
5574     case SUBMODULE_UMBRELLA_HEADER: {
5575       // FIXME: This doesn't work for framework modules as `Filename` is the
5576       //        name as written in the module file and does not include
5577       //        `Headers/`, so this path will never exist.
5578       std::string Filename = std::string(Blob);
5579       ResolveImportedPath(F, Filename);
5580       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5581         if (!CurrentModule->getUmbrellaHeader()) {
5582           // FIXME: NameAsWritten
5583           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5584         }
5585         // Note that it's too late at this point to return out of date if the
5586         // name from the PCM doesn't match up with the one in the module map,
5587         // but also quite unlikely since we will have already checked the
5588         // modification time and size of the module map file itself.
5589       }
5590       break;
5591     }
5592 
5593     case SUBMODULE_HEADER:
5594     case SUBMODULE_EXCLUDED_HEADER:
5595     case SUBMODULE_PRIVATE_HEADER:
5596       // We lazily associate headers with their modules via the HeaderInfo table.
5597       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5598       // of complete filenames or remove it entirely.
5599       break;
5600 
5601     case SUBMODULE_TEXTUAL_HEADER:
5602     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5603       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5604       // them here.
5605       break;
5606 
5607     case SUBMODULE_TOPHEADER:
5608       CurrentModule->addTopHeaderFilename(Blob);
5609       break;
5610 
5611     case SUBMODULE_UMBRELLA_DIR: {
5612       // See comments in SUBMODULE_UMBRELLA_HEADER
5613       std::string Dirname = std::string(Blob);
5614       ResolveImportedPath(F, Dirname);
5615       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5616         if (!CurrentModule->getUmbrellaDir()) {
5617           // FIXME: NameAsWritten
5618           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5619         }
5620       }
5621       break;
5622     }
5623 
5624     case SUBMODULE_METADATA: {
5625       F.BaseSubmoduleID = getTotalNumSubmodules();
5626       F.LocalNumSubmodules = Record[0];
5627       unsigned LocalBaseSubmoduleID = Record[1];
5628       if (F.LocalNumSubmodules > 0) {
5629         // Introduce the global -> local mapping for submodules within this
5630         // module.
5631         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5632 
5633         // Introduce the local -> global mapping for submodules within this
5634         // module.
5635         F.SubmoduleRemap.insertOrReplace(
5636           std::make_pair(LocalBaseSubmoduleID,
5637                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5638 
5639         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5640       }
5641       break;
5642     }
5643 
5644     case SUBMODULE_IMPORTS:
5645       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5646         UnresolvedModuleRef Unresolved;
5647         Unresolved.File = &F;
5648         Unresolved.Mod = CurrentModule;
5649         Unresolved.ID = Record[Idx];
5650         Unresolved.Kind = UnresolvedModuleRef::Import;
5651         Unresolved.IsWildcard = false;
5652         UnresolvedModuleRefs.push_back(Unresolved);
5653       }
5654       break;
5655 
5656     case SUBMODULE_EXPORTS:
5657       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5658         UnresolvedModuleRef Unresolved;
5659         Unresolved.File = &F;
5660         Unresolved.Mod = CurrentModule;
5661         Unresolved.ID = Record[Idx];
5662         Unresolved.Kind = UnresolvedModuleRef::Export;
5663         Unresolved.IsWildcard = Record[Idx + 1];
5664         UnresolvedModuleRefs.push_back(Unresolved);
5665       }
5666 
5667       // Once we've loaded the set of exports, there's no reason to keep
5668       // the parsed, unresolved exports around.
5669       CurrentModule->UnresolvedExports.clear();
5670       break;
5671 
5672     case SUBMODULE_REQUIRES:
5673       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5674                                     PP.getTargetInfo());
5675       break;
5676 
5677     case SUBMODULE_LINK_LIBRARY:
5678       ModMap.resolveLinkAsDependencies(CurrentModule);
5679       CurrentModule->LinkLibraries.push_back(
5680           Module::LinkLibrary(std::string(Blob), Record[0]));
5681       break;
5682 
5683     case SUBMODULE_CONFIG_MACRO:
5684       CurrentModule->ConfigMacros.push_back(Blob.str());
5685       break;
5686 
5687     case SUBMODULE_CONFLICT: {
5688       UnresolvedModuleRef Unresolved;
5689       Unresolved.File = &F;
5690       Unresolved.Mod = CurrentModule;
5691       Unresolved.ID = Record[0];
5692       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5693       Unresolved.IsWildcard = false;
5694       Unresolved.String = Blob;
5695       UnresolvedModuleRefs.push_back(Unresolved);
5696       break;
5697     }
5698 
5699     case SUBMODULE_INITIALIZERS: {
5700       if (!ContextObj)
5701         break;
5702       SmallVector<uint32_t, 16> Inits;
5703       for (auto &ID : Record)
5704         Inits.push_back(getGlobalDeclID(F, ID));
5705       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5706       break;
5707     }
5708 
5709     case SUBMODULE_EXPORT_AS:
5710       CurrentModule->ExportAsModule = Blob.str();
5711       ModMap.addLinkAsDependency(CurrentModule);
5712       break;
5713     }
5714   }
5715 }
5716 
5717 /// Parse the record that corresponds to a LangOptions data
5718 /// structure.
5719 ///
5720 /// This routine parses the language options from the AST file and then gives
5721 /// them to the AST listener if one is set.
5722 ///
5723 /// \returns true if the listener deems the file unacceptable, false otherwise.
5724 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5725                                      bool Complain,
5726                                      ASTReaderListener &Listener,
5727                                      bool AllowCompatibleDifferences) {
5728   LangOptions LangOpts;
5729   unsigned Idx = 0;
5730 #define LANGOPT(Name, Bits, Default, Description) \
5731   LangOpts.Name = Record[Idx++];
5732 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5733   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5734 #include "clang/Basic/LangOptions.def"
5735 #define SANITIZER(NAME, ID)                                                    \
5736   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5737 #include "clang/Basic/Sanitizers.def"
5738 
5739   for (unsigned N = Record[Idx++]; N; --N)
5740     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5741 
5742   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5743   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5744   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5745 
5746   LangOpts.CurrentModule = ReadString(Record, Idx);
5747 
5748   // Comment options.
5749   for (unsigned N = Record[Idx++]; N; --N) {
5750     LangOpts.CommentOpts.BlockCommandNames.push_back(
5751       ReadString(Record, Idx));
5752   }
5753   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5754 
5755   // OpenMP offloading options.
5756   for (unsigned N = Record[Idx++]; N; --N) {
5757     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5758   }
5759 
5760   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5761 
5762   return Listener.ReadLanguageOptions(LangOpts, Complain,
5763                                       AllowCompatibleDifferences);
5764 }
5765 
5766 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5767                                    ASTReaderListener &Listener,
5768                                    bool AllowCompatibleDifferences) {
5769   unsigned Idx = 0;
5770   TargetOptions TargetOpts;
5771   TargetOpts.Triple = ReadString(Record, Idx);
5772   TargetOpts.CPU = ReadString(Record, Idx);
5773   TargetOpts.TuneCPU = ReadString(Record, Idx);
5774   TargetOpts.ABI = ReadString(Record, Idx);
5775   for (unsigned N = Record[Idx++]; N; --N) {
5776     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5777   }
5778   for (unsigned N = Record[Idx++]; N; --N) {
5779     TargetOpts.Features.push_back(ReadString(Record, Idx));
5780   }
5781 
5782   return Listener.ReadTargetOptions(TargetOpts, Complain,
5783                                     AllowCompatibleDifferences);
5784 }
5785 
5786 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5787                                        ASTReaderListener &Listener) {
5788   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5789   unsigned Idx = 0;
5790 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5791 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5792   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5793 #include "clang/Basic/DiagnosticOptions.def"
5794 
5795   for (unsigned N = Record[Idx++]; N; --N)
5796     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5797   for (unsigned N = Record[Idx++]; N; --N)
5798     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5799 
5800   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5801 }
5802 
5803 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5804                                        ASTReaderListener &Listener) {
5805   FileSystemOptions FSOpts;
5806   unsigned Idx = 0;
5807   FSOpts.WorkingDir = ReadString(Record, Idx);
5808   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5809 }
5810 
5811 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5812                                          bool Complain,
5813                                          ASTReaderListener &Listener) {
5814   HeaderSearchOptions HSOpts;
5815   unsigned Idx = 0;
5816   HSOpts.Sysroot = ReadString(Record, Idx);
5817 
5818   // Include entries.
5819   for (unsigned N = Record[Idx++]; N; --N) {
5820     std::string Path = ReadString(Record, Idx);
5821     frontend::IncludeDirGroup Group
5822       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5823     bool IsFramework = Record[Idx++];
5824     bool IgnoreSysRoot = Record[Idx++];
5825     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5826                                     IgnoreSysRoot);
5827   }
5828 
5829   // System header prefixes.
5830   for (unsigned N = Record[Idx++]; N; --N) {
5831     std::string Prefix = ReadString(Record, Idx);
5832     bool IsSystemHeader = Record[Idx++];
5833     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5834   }
5835 
5836   HSOpts.ResourceDir = ReadString(Record, Idx);
5837   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5838   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5839   HSOpts.DisableModuleHash = Record[Idx++];
5840   HSOpts.ImplicitModuleMaps = Record[Idx++];
5841   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5842   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5843   HSOpts.UseBuiltinIncludes = Record[Idx++];
5844   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5845   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5846   HSOpts.UseLibcxx = Record[Idx++];
5847   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5848 
5849   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5850                                           Complain);
5851 }
5852 
5853 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5854                                          bool Complain,
5855                                          ASTReaderListener &Listener,
5856                                          std::string &SuggestedPredefines) {
5857   PreprocessorOptions PPOpts;
5858   unsigned Idx = 0;
5859 
5860   // Macro definitions/undefs
5861   for (unsigned N = Record[Idx++]; N; --N) {
5862     std::string Macro = ReadString(Record, Idx);
5863     bool IsUndef = Record[Idx++];
5864     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5865   }
5866 
5867   // Includes
5868   for (unsigned N = Record[Idx++]; N; --N) {
5869     PPOpts.Includes.push_back(ReadString(Record, Idx));
5870   }
5871 
5872   // Macro Includes
5873   for (unsigned N = Record[Idx++]; N; --N) {
5874     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5875   }
5876 
5877   PPOpts.UsePredefines = Record[Idx++];
5878   PPOpts.DetailedRecord = Record[Idx++];
5879   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5880   PPOpts.ObjCXXARCStandardLibrary =
5881     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5882   SuggestedPredefines.clear();
5883   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5884                                           SuggestedPredefines);
5885 }
5886 
5887 std::pair<ModuleFile *, unsigned>
5888 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5889   GlobalPreprocessedEntityMapType::iterator
5890   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5891   assert(I != GlobalPreprocessedEntityMap.end() &&
5892          "Corrupted global preprocessed entity map");
5893   ModuleFile *M = I->second;
5894   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5895   return std::make_pair(M, LocalIndex);
5896 }
5897 
5898 llvm::iterator_range<PreprocessingRecord::iterator>
5899 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5900   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5901     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5902                                              Mod.NumPreprocessedEntities);
5903 
5904   return llvm::make_range(PreprocessingRecord::iterator(),
5905                           PreprocessingRecord::iterator());
5906 }
5907 
5908 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5909                                         unsigned int ClientLoadCapabilities) {
5910   return ClientLoadCapabilities & ARR_OutOfDate &&
5911          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
5912 }
5913 
5914 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5915 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5916   return llvm::make_range(
5917       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5918       ModuleDeclIterator(this, &Mod,
5919                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5920 }
5921 
5922 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5923   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5924   assert(I != GlobalSkippedRangeMap.end() &&
5925     "Corrupted global skipped range map");
5926   ModuleFile *M = I->second;
5927   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5928   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5929   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5930   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5931                     TranslateSourceLocation(*M, RawRange.getEnd()));
5932   assert(Range.isValid());
5933   return Range;
5934 }
5935 
5936 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5937   PreprocessedEntityID PPID = Index+1;
5938   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5939   ModuleFile &M = *PPInfo.first;
5940   unsigned LocalIndex = PPInfo.second;
5941   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5942 
5943   if (!PP.getPreprocessingRecord()) {
5944     Error("no preprocessing record");
5945     return nullptr;
5946   }
5947 
5948   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5949   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5950           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5951     Error(std::move(Err));
5952     return nullptr;
5953   }
5954 
5955   Expected<llvm::BitstreamEntry> MaybeEntry =
5956       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5957   if (!MaybeEntry) {
5958     Error(MaybeEntry.takeError());
5959     return nullptr;
5960   }
5961   llvm::BitstreamEntry Entry = MaybeEntry.get();
5962 
5963   if (Entry.Kind != llvm::BitstreamEntry::Record)
5964     return nullptr;
5965 
5966   // Read the record.
5967   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5968                     TranslateSourceLocation(M, PPOffs.getEnd()));
5969   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5970   StringRef Blob;
5971   RecordData Record;
5972   Expected<unsigned> MaybeRecType =
5973       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5974   if (!MaybeRecType) {
5975     Error(MaybeRecType.takeError());
5976     return nullptr;
5977   }
5978   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5979   case PPD_MACRO_EXPANSION: {
5980     bool isBuiltin = Record[0];
5981     IdentifierInfo *Name = nullptr;
5982     MacroDefinitionRecord *Def = nullptr;
5983     if (isBuiltin)
5984       Name = getLocalIdentifier(M, Record[1]);
5985     else {
5986       PreprocessedEntityID GlobalID =
5987           getGlobalPreprocessedEntityID(M, Record[1]);
5988       Def = cast<MacroDefinitionRecord>(
5989           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
5990     }
5991 
5992     MacroExpansion *ME;
5993     if (isBuiltin)
5994       ME = new (PPRec) MacroExpansion(Name, Range);
5995     else
5996       ME = new (PPRec) MacroExpansion(Def, Range);
5997 
5998     return ME;
5999   }
6000 
6001   case PPD_MACRO_DEFINITION: {
6002     // Decode the identifier info and then check again; if the macro is
6003     // still defined and associated with the identifier,
6004     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6005     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6006 
6007     if (DeserializationListener)
6008       DeserializationListener->MacroDefinitionRead(PPID, MD);
6009 
6010     return MD;
6011   }
6012 
6013   case PPD_INCLUSION_DIRECTIVE: {
6014     const char *FullFileNameStart = Blob.data() + Record[0];
6015     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6016     const FileEntry *File = nullptr;
6017     if (!FullFileName.empty())
6018       if (auto FE = PP.getFileManager().getFile(FullFileName))
6019         File = *FE;
6020 
6021     // FIXME: Stable encoding
6022     InclusionDirective::InclusionKind Kind
6023       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6024     InclusionDirective *ID
6025       = new (PPRec) InclusionDirective(PPRec, Kind,
6026                                        StringRef(Blob.data(), Record[0]),
6027                                        Record[1], Record[3],
6028                                        File,
6029                                        Range);
6030     return ID;
6031   }
6032   }
6033 
6034   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6035 }
6036 
6037 /// Find the next module that contains entities and return the ID
6038 /// of the first entry.
6039 ///
6040 /// \param SLocMapI points at a chunk of a module that contains no
6041 /// preprocessed entities or the entities it contains are not the ones we are
6042 /// looking for.
6043 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6044                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6045   ++SLocMapI;
6046   for (GlobalSLocOffsetMapType::const_iterator
6047          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6048     ModuleFile &M = *SLocMapI->second;
6049     if (M.NumPreprocessedEntities)
6050       return M.BasePreprocessedEntityID;
6051   }
6052 
6053   return getTotalNumPreprocessedEntities();
6054 }
6055 
6056 namespace {
6057 
6058 struct PPEntityComp {
6059   const ASTReader &Reader;
6060   ModuleFile &M;
6061 
6062   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6063 
6064   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6065     SourceLocation LHS = getLoc(L);
6066     SourceLocation RHS = getLoc(R);
6067     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6068   }
6069 
6070   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6071     SourceLocation LHS = getLoc(L);
6072     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6073   }
6074 
6075   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6076     SourceLocation RHS = getLoc(R);
6077     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6078   }
6079 
6080   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6081     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6082   }
6083 };
6084 
6085 } // namespace
6086 
6087 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6088                                                        bool EndsAfter) const {
6089   if (SourceMgr.isLocalSourceLocation(Loc))
6090     return getTotalNumPreprocessedEntities();
6091 
6092   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6093       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6094   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6095          "Corrupted global sloc offset map");
6096 
6097   if (SLocMapI->second->NumPreprocessedEntities == 0)
6098     return findNextPreprocessedEntity(SLocMapI);
6099 
6100   ModuleFile &M = *SLocMapI->second;
6101 
6102   using pp_iterator = const PPEntityOffset *;
6103 
6104   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6105   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6106 
6107   size_t Count = M.NumPreprocessedEntities;
6108   size_t Half;
6109   pp_iterator First = pp_begin;
6110   pp_iterator PPI;
6111 
6112   if (EndsAfter) {
6113     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6114                            PPEntityComp(*this, M));
6115   } else {
6116     // Do a binary search manually instead of using std::lower_bound because
6117     // The end locations of entities may be unordered (when a macro expansion
6118     // is inside another macro argument), but for this case it is not important
6119     // whether we get the first macro expansion or its containing macro.
6120     while (Count > 0) {
6121       Half = Count / 2;
6122       PPI = First;
6123       std::advance(PPI, Half);
6124       if (SourceMgr.isBeforeInTranslationUnit(
6125               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6126         First = PPI;
6127         ++First;
6128         Count = Count - Half - 1;
6129       } else
6130         Count = Half;
6131     }
6132   }
6133 
6134   if (PPI == pp_end)
6135     return findNextPreprocessedEntity(SLocMapI);
6136 
6137   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6138 }
6139 
6140 /// Returns a pair of [Begin, End) indices of preallocated
6141 /// preprocessed entities that \arg Range encompasses.
6142 std::pair<unsigned, unsigned>
6143     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6144   if (Range.isInvalid())
6145     return std::make_pair(0,0);
6146   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6147 
6148   PreprocessedEntityID BeginID =
6149       findPreprocessedEntity(Range.getBegin(), false);
6150   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6151   return std::make_pair(BeginID, EndID);
6152 }
6153 
6154 /// Optionally returns true or false if the preallocated preprocessed
6155 /// entity with index \arg Index came from file \arg FID.
6156 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6157                                                              FileID FID) {
6158   if (FID.isInvalid())
6159     return false;
6160 
6161   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6162   ModuleFile &M = *PPInfo.first;
6163   unsigned LocalIndex = PPInfo.second;
6164   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6165 
6166   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6167   if (Loc.isInvalid())
6168     return false;
6169 
6170   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6171     return true;
6172   else
6173     return false;
6174 }
6175 
6176 namespace {
6177 
6178   /// Visitor used to search for information about a header file.
6179   class HeaderFileInfoVisitor {
6180     const FileEntry *FE;
6181     Optional<HeaderFileInfo> HFI;
6182 
6183   public:
6184     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6185 
6186     bool operator()(ModuleFile &M) {
6187       HeaderFileInfoLookupTable *Table
6188         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6189       if (!Table)
6190         return false;
6191 
6192       // Look in the on-disk hash table for an entry for this file name.
6193       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6194       if (Pos == Table->end())
6195         return false;
6196 
6197       HFI = *Pos;
6198       return true;
6199     }
6200 
6201     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6202   };
6203 
6204 } // namespace
6205 
6206 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6207   HeaderFileInfoVisitor Visitor(FE);
6208   ModuleMgr.visit(Visitor);
6209   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6210     return *HFI;
6211 
6212   return HeaderFileInfo();
6213 }
6214 
6215 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6216   using DiagState = DiagnosticsEngine::DiagState;
6217   SmallVector<DiagState *, 32> DiagStates;
6218 
6219   for (ModuleFile &F : ModuleMgr) {
6220     unsigned Idx = 0;
6221     auto &Record = F.PragmaDiagMappings;
6222     if (Record.empty())
6223       continue;
6224 
6225     DiagStates.clear();
6226 
6227     auto ReadDiagState =
6228         [&](const DiagState &BasedOn, SourceLocation Loc,
6229             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6230       unsigned BackrefID = Record[Idx++];
6231       if (BackrefID != 0)
6232         return DiagStates[BackrefID - 1];
6233 
6234       // A new DiagState was created here.
6235       Diag.DiagStates.push_back(BasedOn);
6236       DiagState *NewState = &Diag.DiagStates.back();
6237       DiagStates.push_back(NewState);
6238       unsigned Size = Record[Idx++];
6239       assert(Idx + Size * 2 <= Record.size() &&
6240              "Invalid data, not enough diag/map pairs");
6241       while (Size--) {
6242         unsigned DiagID = Record[Idx++];
6243         DiagnosticMapping NewMapping =
6244             DiagnosticMapping::deserialize(Record[Idx++]);
6245         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6246           continue;
6247 
6248         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6249 
6250         // If this mapping was specified as a warning but the severity was
6251         // upgraded due to diagnostic settings, simulate the current diagnostic
6252         // settings (and use a warning).
6253         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6254           NewMapping.setSeverity(diag::Severity::Warning);
6255           NewMapping.setUpgradedFromWarning(false);
6256         }
6257 
6258         Mapping = NewMapping;
6259       }
6260       return NewState;
6261     };
6262 
6263     // Read the first state.
6264     DiagState *FirstState;
6265     if (F.Kind == MK_ImplicitModule) {
6266       // Implicitly-built modules are reused with different diagnostic
6267       // settings.  Use the initial diagnostic state from Diag to simulate this
6268       // compilation's diagnostic settings.
6269       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6270       DiagStates.push_back(FirstState);
6271 
6272       // Skip the initial diagnostic state from the serialized module.
6273       assert(Record[1] == 0 &&
6274              "Invalid data, unexpected backref in initial state");
6275       Idx = 3 + Record[2] * 2;
6276       assert(Idx < Record.size() &&
6277              "Invalid data, not enough state change pairs in initial state");
6278     } else if (F.isModule()) {
6279       // For an explicit module, preserve the flags from the module build
6280       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6281       // -Wblah flags.
6282       unsigned Flags = Record[Idx++];
6283       DiagState Initial;
6284       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6285       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6286       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6287       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6288       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6289       Initial.ExtBehavior = (diag::Severity)Flags;
6290       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6291 
6292       assert(F.OriginalSourceFileID.isValid());
6293 
6294       // Set up the root buffer of the module to start with the initial
6295       // diagnostic state of the module itself, to cover files that contain no
6296       // explicit transitions (for which we did not serialize anything).
6297       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6298           .StateTransitions.push_back({FirstState, 0});
6299     } else {
6300       // For prefix ASTs, start with whatever the user configured on the
6301       // command line.
6302       Idx++; // Skip flags.
6303       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6304                                  SourceLocation(), false);
6305     }
6306 
6307     // Read the state transitions.
6308     unsigned NumLocations = Record[Idx++];
6309     while (NumLocations--) {
6310       assert(Idx < Record.size() &&
6311              "Invalid data, missing pragma diagnostic states");
6312       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6313       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6314       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6315       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6316       unsigned Transitions = Record[Idx++];
6317 
6318       // Note that we don't need to set up Parent/ParentOffset here, because
6319       // we won't be changing the diagnostic state within imported FileIDs
6320       // (other than perhaps appending to the main source file, which has no
6321       // parent).
6322       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6323       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6324       for (unsigned I = 0; I != Transitions; ++I) {
6325         unsigned Offset = Record[Idx++];
6326         auto *State =
6327             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6328         F.StateTransitions.push_back({State, Offset});
6329       }
6330     }
6331 
6332     // Read the final state.
6333     assert(Idx < Record.size() &&
6334            "Invalid data, missing final pragma diagnostic state");
6335     SourceLocation CurStateLoc =
6336         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6337     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6338 
6339     if (!F.isModule()) {
6340       Diag.DiagStatesByLoc.CurDiagState = CurState;
6341       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6342 
6343       // Preserve the property that the imaginary root file describes the
6344       // current state.
6345       FileID NullFile;
6346       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6347       if (T.empty())
6348         T.push_back({CurState, 0});
6349       else
6350         T[0].State = CurState;
6351     }
6352 
6353     // Don't try to read these mappings again.
6354     Record.clear();
6355   }
6356 }
6357 
6358 /// Get the correct cursor and offset for loading a type.
6359 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6360   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6361   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6362   ModuleFile *M = I->second;
6363   return RecordLocation(
6364       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6365              M->DeclsBlockStartOffset);
6366 }
6367 
6368 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6369   switch (code) {
6370 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6371   case TYPE_##CODE_ID: return Type::CLASS_ID;
6372 #include "clang/Serialization/TypeBitCodes.def"
6373   default: return llvm::None;
6374   }
6375 }
6376 
6377 /// Read and return the type with the given index..
6378 ///
6379 /// The index is the type ID, shifted and minus the number of predefs. This
6380 /// routine actually reads the record corresponding to the type at the given
6381 /// location. It is a helper routine for GetType, which deals with reading type
6382 /// IDs.
6383 QualType ASTReader::readTypeRecord(unsigned Index) {
6384   assert(ContextObj && "reading type with no AST context");
6385   ASTContext &Context = *ContextObj;
6386   RecordLocation Loc = TypeCursorForIndex(Index);
6387   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6388 
6389   // Keep track of where we are in the stream, then jump back there
6390   // after reading this type.
6391   SavedStreamPosition SavedPosition(DeclsCursor);
6392 
6393   ReadingKindTracker ReadingKind(Read_Type, *this);
6394 
6395   // Note that we are loading a type record.
6396   Deserializing AType(this);
6397 
6398   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6399     Error(std::move(Err));
6400     return QualType();
6401   }
6402   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6403   if (!RawCode) {
6404     Error(RawCode.takeError());
6405     return QualType();
6406   }
6407 
6408   ASTRecordReader Record(*this, *Loc.F);
6409   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6410   if (!Code) {
6411     Error(Code.takeError());
6412     return QualType();
6413   }
6414   if (Code.get() == TYPE_EXT_QUAL) {
6415     QualType baseType = Record.readQualType();
6416     Qualifiers quals = Record.readQualifiers();
6417     return Context.getQualifiedType(baseType, quals);
6418   }
6419 
6420   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6421   if (!maybeClass) {
6422     Error("Unexpected code for type");
6423     return QualType();
6424   }
6425 
6426   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6427   return TypeReader.read(*maybeClass);
6428 }
6429 
6430 namespace clang {
6431 
6432 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6433   ASTRecordReader &Reader;
6434 
6435   SourceLocation readSourceLocation() {
6436     return Reader.readSourceLocation();
6437   }
6438 
6439   TypeSourceInfo *GetTypeSourceInfo() {
6440     return Reader.readTypeSourceInfo();
6441   }
6442 
6443   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6444     return Reader.readNestedNameSpecifierLoc();
6445   }
6446 
6447   Attr *ReadAttr() {
6448     return Reader.readAttr();
6449   }
6450 
6451 public:
6452   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6453 
6454   // We want compile-time assurance that we've enumerated all of
6455   // these, so unfortunately we have to declare them first, then
6456   // define them out-of-line.
6457 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6458 #define TYPELOC(CLASS, PARENT) \
6459   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6460 #include "clang/AST/TypeLocNodes.def"
6461 
6462   void VisitFunctionTypeLoc(FunctionTypeLoc);
6463   void VisitArrayTypeLoc(ArrayTypeLoc);
6464 };
6465 
6466 } // namespace clang
6467 
6468 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6469   // nothing to do
6470 }
6471 
6472 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6473   TL.setBuiltinLoc(readSourceLocation());
6474   if (TL.needsExtraLocalData()) {
6475     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6476     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6477     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6478     TL.setModeAttr(Reader.readInt());
6479   }
6480 }
6481 
6482 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6483   TL.setNameLoc(readSourceLocation());
6484 }
6485 
6486 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6487   TL.setStarLoc(readSourceLocation());
6488 }
6489 
6490 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6491   // nothing to do
6492 }
6493 
6494 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6495   // nothing to do
6496 }
6497 
6498 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6499   TL.setExpansionLoc(readSourceLocation());
6500 }
6501 
6502 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6503   TL.setCaretLoc(readSourceLocation());
6504 }
6505 
6506 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6507   TL.setAmpLoc(readSourceLocation());
6508 }
6509 
6510 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6511   TL.setAmpAmpLoc(readSourceLocation());
6512 }
6513 
6514 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6515   TL.setStarLoc(readSourceLocation());
6516   TL.setClassTInfo(GetTypeSourceInfo());
6517 }
6518 
6519 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6520   TL.setLBracketLoc(readSourceLocation());
6521   TL.setRBracketLoc(readSourceLocation());
6522   if (Reader.readBool())
6523     TL.setSizeExpr(Reader.readExpr());
6524   else
6525     TL.setSizeExpr(nullptr);
6526 }
6527 
6528 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6529   VisitArrayTypeLoc(TL);
6530 }
6531 
6532 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6533   VisitArrayTypeLoc(TL);
6534 }
6535 
6536 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6537   VisitArrayTypeLoc(TL);
6538 }
6539 
6540 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6541                                             DependentSizedArrayTypeLoc TL) {
6542   VisitArrayTypeLoc(TL);
6543 }
6544 
6545 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6546     DependentAddressSpaceTypeLoc TL) {
6547 
6548     TL.setAttrNameLoc(readSourceLocation());
6549     TL.setAttrOperandParensRange(Reader.readSourceRange());
6550     TL.setAttrExprOperand(Reader.readExpr());
6551 }
6552 
6553 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6554                                         DependentSizedExtVectorTypeLoc TL) {
6555   TL.setNameLoc(readSourceLocation());
6556 }
6557 
6558 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6559   TL.setNameLoc(readSourceLocation());
6560 }
6561 
6562 void TypeLocReader::VisitDependentVectorTypeLoc(
6563     DependentVectorTypeLoc TL) {
6564   TL.setNameLoc(readSourceLocation());
6565 }
6566 
6567 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6568   TL.setNameLoc(readSourceLocation());
6569 }
6570 
6571 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6572   TL.setAttrNameLoc(readSourceLocation());
6573   TL.setAttrOperandParensRange(Reader.readSourceRange());
6574   TL.setAttrRowOperand(Reader.readExpr());
6575   TL.setAttrColumnOperand(Reader.readExpr());
6576 }
6577 
6578 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6579     DependentSizedMatrixTypeLoc TL) {
6580   TL.setAttrNameLoc(readSourceLocation());
6581   TL.setAttrOperandParensRange(Reader.readSourceRange());
6582   TL.setAttrRowOperand(Reader.readExpr());
6583   TL.setAttrColumnOperand(Reader.readExpr());
6584 }
6585 
6586 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6587   TL.setLocalRangeBegin(readSourceLocation());
6588   TL.setLParenLoc(readSourceLocation());
6589   TL.setRParenLoc(readSourceLocation());
6590   TL.setExceptionSpecRange(Reader.readSourceRange());
6591   TL.setLocalRangeEnd(readSourceLocation());
6592   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6593     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6594   }
6595 }
6596 
6597 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6598   VisitFunctionTypeLoc(TL);
6599 }
6600 
6601 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6602   VisitFunctionTypeLoc(TL);
6603 }
6604 
6605 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6606   TL.setNameLoc(readSourceLocation());
6607 }
6608 
6609 void TypeLocReader::VisitUsingTypeLoc(UsingTypeLoc TL) {
6610   TL.setNameLoc(readSourceLocation());
6611 }
6612 
6613 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6614   TL.setNameLoc(readSourceLocation());
6615 }
6616 
6617 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6618   TL.setTypeofLoc(readSourceLocation());
6619   TL.setLParenLoc(readSourceLocation());
6620   TL.setRParenLoc(readSourceLocation());
6621 }
6622 
6623 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6624   TL.setTypeofLoc(readSourceLocation());
6625   TL.setLParenLoc(readSourceLocation());
6626   TL.setRParenLoc(readSourceLocation());
6627   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6628 }
6629 
6630 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6631   TL.setNameLoc(readSourceLocation());
6632 }
6633 
6634 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6635   TL.setKWLoc(readSourceLocation());
6636   TL.setLParenLoc(readSourceLocation());
6637   TL.setRParenLoc(readSourceLocation());
6638   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6639 }
6640 
6641 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6642   TL.setNameLoc(readSourceLocation());
6643   if (Reader.readBool()) {
6644     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6645     TL.setTemplateKWLoc(readSourceLocation());
6646     TL.setConceptNameLoc(readSourceLocation());
6647     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6648     TL.setLAngleLoc(readSourceLocation());
6649     TL.setRAngleLoc(readSourceLocation());
6650     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6651       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6652                               TL.getTypePtr()->getArg(i).getKind()));
6653   }
6654 }
6655 
6656 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6657     DeducedTemplateSpecializationTypeLoc TL) {
6658   TL.setTemplateNameLoc(readSourceLocation());
6659 }
6660 
6661 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6662   TL.setNameLoc(readSourceLocation());
6663 }
6664 
6665 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6666   TL.setNameLoc(readSourceLocation());
6667 }
6668 
6669 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6670   TL.setAttr(ReadAttr());
6671 }
6672 
6673 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6674   TL.setNameLoc(readSourceLocation());
6675 }
6676 
6677 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6678                                             SubstTemplateTypeParmTypeLoc TL) {
6679   TL.setNameLoc(readSourceLocation());
6680 }
6681 
6682 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6683                                           SubstTemplateTypeParmPackTypeLoc TL) {
6684   TL.setNameLoc(readSourceLocation());
6685 }
6686 
6687 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6688                                            TemplateSpecializationTypeLoc TL) {
6689   TL.setTemplateKeywordLoc(readSourceLocation());
6690   TL.setTemplateNameLoc(readSourceLocation());
6691   TL.setLAngleLoc(readSourceLocation());
6692   TL.setRAngleLoc(readSourceLocation());
6693   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6694     TL.setArgLocInfo(
6695         i,
6696         Reader.readTemplateArgumentLocInfo(
6697           TL.getTypePtr()->getArg(i).getKind()));
6698 }
6699 
6700 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6701   TL.setLParenLoc(readSourceLocation());
6702   TL.setRParenLoc(readSourceLocation());
6703 }
6704 
6705 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6706   TL.setElaboratedKeywordLoc(readSourceLocation());
6707   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6708 }
6709 
6710 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6711   TL.setNameLoc(readSourceLocation());
6712 }
6713 
6714 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6715   TL.setElaboratedKeywordLoc(readSourceLocation());
6716   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6717   TL.setNameLoc(readSourceLocation());
6718 }
6719 
6720 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6721        DependentTemplateSpecializationTypeLoc TL) {
6722   TL.setElaboratedKeywordLoc(readSourceLocation());
6723   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6724   TL.setTemplateKeywordLoc(readSourceLocation());
6725   TL.setTemplateNameLoc(readSourceLocation());
6726   TL.setLAngleLoc(readSourceLocation());
6727   TL.setRAngleLoc(readSourceLocation());
6728   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6729     TL.setArgLocInfo(
6730         I,
6731         Reader.readTemplateArgumentLocInfo(
6732             TL.getTypePtr()->getArg(I).getKind()));
6733 }
6734 
6735 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6736   TL.setEllipsisLoc(readSourceLocation());
6737 }
6738 
6739 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6740   TL.setNameLoc(readSourceLocation());
6741 }
6742 
6743 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6744   if (TL.getNumProtocols()) {
6745     TL.setProtocolLAngleLoc(readSourceLocation());
6746     TL.setProtocolRAngleLoc(readSourceLocation());
6747   }
6748   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6749     TL.setProtocolLoc(i, readSourceLocation());
6750 }
6751 
6752 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6753   TL.setHasBaseTypeAsWritten(Reader.readBool());
6754   TL.setTypeArgsLAngleLoc(readSourceLocation());
6755   TL.setTypeArgsRAngleLoc(readSourceLocation());
6756   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6757     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6758   TL.setProtocolLAngleLoc(readSourceLocation());
6759   TL.setProtocolRAngleLoc(readSourceLocation());
6760   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6761     TL.setProtocolLoc(i, readSourceLocation());
6762 }
6763 
6764 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6765   TL.setStarLoc(readSourceLocation());
6766 }
6767 
6768 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6769   TL.setKWLoc(readSourceLocation());
6770   TL.setLParenLoc(readSourceLocation());
6771   TL.setRParenLoc(readSourceLocation());
6772 }
6773 
6774 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6775   TL.setKWLoc(readSourceLocation());
6776 }
6777 
6778 void TypeLocReader::VisitBitIntTypeLoc(clang::BitIntTypeLoc TL) {
6779   TL.setNameLoc(readSourceLocation());
6780 }
6781 void TypeLocReader::VisitDependentBitIntTypeLoc(
6782     clang::DependentBitIntTypeLoc TL) {
6783   TL.setNameLoc(readSourceLocation());
6784 }
6785 
6786 
6787 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6788   TypeLocReader TLR(*this);
6789   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6790     TLR.Visit(TL);
6791 }
6792 
6793 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6794   QualType InfoTy = readType();
6795   if (InfoTy.isNull())
6796     return nullptr;
6797 
6798   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6799   readTypeLoc(TInfo->getTypeLoc());
6800   return TInfo;
6801 }
6802 
6803 QualType ASTReader::GetType(TypeID ID) {
6804   assert(ContextObj && "reading type with no AST context");
6805   ASTContext &Context = *ContextObj;
6806 
6807   unsigned FastQuals = ID & Qualifiers::FastMask;
6808   unsigned Index = ID >> Qualifiers::FastWidth;
6809 
6810   if (Index < NUM_PREDEF_TYPE_IDS) {
6811     QualType T;
6812     switch ((PredefinedTypeIDs)Index) {
6813     case PREDEF_TYPE_NULL_ID:
6814       return QualType();
6815     case PREDEF_TYPE_VOID_ID:
6816       T = Context.VoidTy;
6817       break;
6818     case PREDEF_TYPE_BOOL_ID:
6819       T = Context.BoolTy;
6820       break;
6821     case PREDEF_TYPE_CHAR_U_ID:
6822     case PREDEF_TYPE_CHAR_S_ID:
6823       // FIXME: Check that the signedness of CharTy is correct!
6824       T = Context.CharTy;
6825       break;
6826     case PREDEF_TYPE_UCHAR_ID:
6827       T = Context.UnsignedCharTy;
6828       break;
6829     case PREDEF_TYPE_USHORT_ID:
6830       T = Context.UnsignedShortTy;
6831       break;
6832     case PREDEF_TYPE_UINT_ID:
6833       T = Context.UnsignedIntTy;
6834       break;
6835     case PREDEF_TYPE_ULONG_ID:
6836       T = Context.UnsignedLongTy;
6837       break;
6838     case PREDEF_TYPE_ULONGLONG_ID:
6839       T = Context.UnsignedLongLongTy;
6840       break;
6841     case PREDEF_TYPE_UINT128_ID:
6842       T = Context.UnsignedInt128Ty;
6843       break;
6844     case PREDEF_TYPE_SCHAR_ID:
6845       T = Context.SignedCharTy;
6846       break;
6847     case PREDEF_TYPE_WCHAR_ID:
6848       T = Context.WCharTy;
6849       break;
6850     case PREDEF_TYPE_SHORT_ID:
6851       T = Context.ShortTy;
6852       break;
6853     case PREDEF_TYPE_INT_ID:
6854       T = Context.IntTy;
6855       break;
6856     case PREDEF_TYPE_LONG_ID:
6857       T = Context.LongTy;
6858       break;
6859     case PREDEF_TYPE_LONGLONG_ID:
6860       T = Context.LongLongTy;
6861       break;
6862     case PREDEF_TYPE_INT128_ID:
6863       T = Context.Int128Ty;
6864       break;
6865     case PREDEF_TYPE_BFLOAT16_ID:
6866       T = Context.BFloat16Ty;
6867       break;
6868     case PREDEF_TYPE_HALF_ID:
6869       T = Context.HalfTy;
6870       break;
6871     case PREDEF_TYPE_FLOAT_ID:
6872       T = Context.FloatTy;
6873       break;
6874     case PREDEF_TYPE_DOUBLE_ID:
6875       T = Context.DoubleTy;
6876       break;
6877     case PREDEF_TYPE_LONGDOUBLE_ID:
6878       T = Context.LongDoubleTy;
6879       break;
6880     case PREDEF_TYPE_SHORT_ACCUM_ID:
6881       T = Context.ShortAccumTy;
6882       break;
6883     case PREDEF_TYPE_ACCUM_ID:
6884       T = Context.AccumTy;
6885       break;
6886     case PREDEF_TYPE_LONG_ACCUM_ID:
6887       T = Context.LongAccumTy;
6888       break;
6889     case PREDEF_TYPE_USHORT_ACCUM_ID:
6890       T = Context.UnsignedShortAccumTy;
6891       break;
6892     case PREDEF_TYPE_UACCUM_ID:
6893       T = Context.UnsignedAccumTy;
6894       break;
6895     case PREDEF_TYPE_ULONG_ACCUM_ID:
6896       T = Context.UnsignedLongAccumTy;
6897       break;
6898     case PREDEF_TYPE_SHORT_FRACT_ID:
6899       T = Context.ShortFractTy;
6900       break;
6901     case PREDEF_TYPE_FRACT_ID:
6902       T = Context.FractTy;
6903       break;
6904     case PREDEF_TYPE_LONG_FRACT_ID:
6905       T = Context.LongFractTy;
6906       break;
6907     case PREDEF_TYPE_USHORT_FRACT_ID:
6908       T = Context.UnsignedShortFractTy;
6909       break;
6910     case PREDEF_TYPE_UFRACT_ID:
6911       T = Context.UnsignedFractTy;
6912       break;
6913     case PREDEF_TYPE_ULONG_FRACT_ID:
6914       T = Context.UnsignedLongFractTy;
6915       break;
6916     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6917       T = Context.SatShortAccumTy;
6918       break;
6919     case PREDEF_TYPE_SAT_ACCUM_ID:
6920       T = Context.SatAccumTy;
6921       break;
6922     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6923       T = Context.SatLongAccumTy;
6924       break;
6925     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6926       T = Context.SatUnsignedShortAccumTy;
6927       break;
6928     case PREDEF_TYPE_SAT_UACCUM_ID:
6929       T = Context.SatUnsignedAccumTy;
6930       break;
6931     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6932       T = Context.SatUnsignedLongAccumTy;
6933       break;
6934     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6935       T = Context.SatShortFractTy;
6936       break;
6937     case PREDEF_TYPE_SAT_FRACT_ID:
6938       T = Context.SatFractTy;
6939       break;
6940     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6941       T = Context.SatLongFractTy;
6942       break;
6943     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6944       T = Context.SatUnsignedShortFractTy;
6945       break;
6946     case PREDEF_TYPE_SAT_UFRACT_ID:
6947       T = Context.SatUnsignedFractTy;
6948       break;
6949     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6950       T = Context.SatUnsignedLongFractTy;
6951       break;
6952     case PREDEF_TYPE_FLOAT16_ID:
6953       T = Context.Float16Ty;
6954       break;
6955     case PREDEF_TYPE_FLOAT128_ID:
6956       T = Context.Float128Ty;
6957       break;
6958     case PREDEF_TYPE_IBM128_ID:
6959       T = Context.Ibm128Ty;
6960       break;
6961     case PREDEF_TYPE_OVERLOAD_ID:
6962       T = Context.OverloadTy;
6963       break;
6964     case PREDEF_TYPE_BOUND_MEMBER:
6965       T = Context.BoundMemberTy;
6966       break;
6967     case PREDEF_TYPE_PSEUDO_OBJECT:
6968       T = Context.PseudoObjectTy;
6969       break;
6970     case PREDEF_TYPE_DEPENDENT_ID:
6971       T = Context.DependentTy;
6972       break;
6973     case PREDEF_TYPE_UNKNOWN_ANY:
6974       T = Context.UnknownAnyTy;
6975       break;
6976     case PREDEF_TYPE_NULLPTR_ID:
6977       T = Context.NullPtrTy;
6978       break;
6979     case PREDEF_TYPE_CHAR8_ID:
6980       T = Context.Char8Ty;
6981       break;
6982     case PREDEF_TYPE_CHAR16_ID:
6983       T = Context.Char16Ty;
6984       break;
6985     case PREDEF_TYPE_CHAR32_ID:
6986       T = Context.Char32Ty;
6987       break;
6988     case PREDEF_TYPE_OBJC_ID:
6989       T = Context.ObjCBuiltinIdTy;
6990       break;
6991     case PREDEF_TYPE_OBJC_CLASS:
6992       T = Context.ObjCBuiltinClassTy;
6993       break;
6994     case PREDEF_TYPE_OBJC_SEL:
6995       T = Context.ObjCBuiltinSelTy;
6996       break;
6997 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6998     case PREDEF_TYPE_##Id##_ID: \
6999       T = Context.SingletonId; \
7000       break;
7001 #include "clang/Basic/OpenCLImageTypes.def"
7002 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7003     case PREDEF_TYPE_##Id##_ID: \
7004       T = Context.Id##Ty; \
7005       break;
7006 #include "clang/Basic/OpenCLExtensionTypes.def"
7007     case PREDEF_TYPE_SAMPLER_ID:
7008       T = Context.OCLSamplerTy;
7009       break;
7010     case PREDEF_TYPE_EVENT_ID:
7011       T = Context.OCLEventTy;
7012       break;
7013     case PREDEF_TYPE_CLK_EVENT_ID:
7014       T = Context.OCLClkEventTy;
7015       break;
7016     case PREDEF_TYPE_QUEUE_ID:
7017       T = Context.OCLQueueTy;
7018       break;
7019     case PREDEF_TYPE_RESERVE_ID_ID:
7020       T = Context.OCLReserveIDTy;
7021       break;
7022     case PREDEF_TYPE_AUTO_DEDUCT:
7023       T = Context.getAutoDeductType();
7024       break;
7025     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7026       T = Context.getAutoRRefDeductType();
7027       break;
7028     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7029       T = Context.ARCUnbridgedCastTy;
7030       break;
7031     case PREDEF_TYPE_BUILTIN_FN:
7032       T = Context.BuiltinFnTy;
7033       break;
7034     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7035       T = Context.IncompleteMatrixIdxTy;
7036       break;
7037     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7038       T = Context.OMPArraySectionTy;
7039       break;
7040     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7041       T = Context.OMPArraySectionTy;
7042       break;
7043     case PREDEF_TYPE_OMP_ITERATOR:
7044       T = Context.OMPIteratorTy;
7045       break;
7046 #define SVE_TYPE(Name, Id, SingletonId) \
7047     case PREDEF_TYPE_##Id##_ID: \
7048       T = Context.SingletonId; \
7049       break;
7050 #include "clang/Basic/AArch64SVEACLETypes.def"
7051 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7052     case PREDEF_TYPE_##Id##_ID: \
7053       T = Context.Id##Ty; \
7054       break;
7055 #include "clang/Basic/PPCTypes.def"
7056 #define RVV_TYPE(Name, Id, SingletonId) \
7057     case PREDEF_TYPE_##Id##_ID: \
7058       T = Context.SingletonId; \
7059       break;
7060 #include "clang/Basic/RISCVVTypes.def"
7061     }
7062 
7063     assert(!T.isNull() && "Unknown predefined type");
7064     return T.withFastQualifiers(FastQuals);
7065   }
7066 
7067   Index -= NUM_PREDEF_TYPE_IDS;
7068   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7069   if (TypesLoaded[Index].isNull()) {
7070     TypesLoaded[Index] = readTypeRecord(Index);
7071     if (TypesLoaded[Index].isNull())
7072       return QualType();
7073 
7074     TypesLoaded[Index]->setFromAST();
7075     if (DeserializationListener)
7076       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7077                                         TypesLoaded[Index]);
7078   }
7079 
7080   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7081 }
7082 
7083 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7084   return GetType(getGlobalTypeID(F, LocalID));
7085 }
7086 
7087 serialization::TypeID
7088 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7089   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7090   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7091 
7092   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7093     return LocalID;
7094 
7095   if (!F.ModuleOffsetMap.empty())
7096     ReadModuleOffsetMap(F);
7097 
7098   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7099     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7100   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7101 
7102   unsigned GlobalIndex = LocalIndex + I->second;
7103   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7104 }
7105 
7106 TemplateArgumentLocInfo
7107 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7108   switch (Kind) {
7109   case TemplateArgument::Expression:
7110     return readExpr();
7111   case TemplateArgument::Type:
7112     return readTypeSourceInfo();
7113   case TemplateArgument::Template: {
7114     NestedNameSpecifierLoc QualifierLoc =
7115       readNestedNameSpecifierLoc();
7116     SourceLocation TemplateNameLoc = readSourceLocation();
7117     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7118                                    TemplateNameLoc, SourceLocation());
7119   }
7120   case TemplateArgument::TemplateExpansion: {
7121     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7122     SourceLocation TemplateNameLoc = readSourceLocation();
7123     SourceLocation EllipsisLoc = readSourceLocation();
7124     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7125                                    TemplateNameLoc, EllipsisLoc);
7126   }
7127   case TemplateArgument::Null:
7128   case TemplateArgument::Integral:
7129   case TemplateArgument::Declaration:
7130   case TemplateArgument::NullPtr:
7131   case TemplateArgument::Pack:
7132     // FIXME: Is this right?
7133     return TemplateArgumentLocInfo();
7134   }
7135   llvm_unreachable("unexpected template argument loc");
7136 }
7137 
7138 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7139   TemplateArgument Arg = readTemplateArgument();
7140 
7141   if (Arg.getKind() == TemplateArgument::Expression) {
7142     if (readBool()) // bool InfoHasSameExpr.
7143       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7144   }
7145   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7146 }
7147 
7148 const ASTTemplateArgumentListInfo *
7149 ASTRecordReader::readASTTemplateArgumentListInfo() {
7150   SourceLocation LAngleLoc = readSourceLocation();
7151   SourceLocation RAngleLoc = readSourceLocation();
7152   unsigned NumArgsAsWritten = readInt();
7153   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7154   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7155     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7156   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7157 }
7158 
7159 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7160   return GetDecl(ID);
7161 }
7162 
7163 void ASTReader::CompleteRedeclChain(const Decl *D) {
7164   if (NumCurrentElementsDeserializing) {
7165     // We arrange to not care about the complete redeclaration chain while we're
7166     // deserializing. Just remember that the AST has marked this one as complete
7167     // but that it's not actually complete yet, so we know we still need to
7168     // complete it later.
7169     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7170     return;
7171   }
7172 
7173   if (!D->getDeclContext()) {
7174     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7175     return;
7176   }
7177 
7178   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7179 
7180   // If this is a named declaration, complete it by looking it up
7181   // within its context.
7182   //
7183   // FIXME: Merging a function definition should merge
7184   // all mergeable entities within it.
7185   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7186       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7187     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7188       if (!getContext().getLangOpts().CPlusPlus &&
7189           isa<TranslationUnitDecl>(DC)) {
7190         // Outside of C++, we don't have a lookup table for the TU, so update
7191         // the identifier instead. (For C++ modules, we don't store decls
7192         // in the serialized identifier table, so we do the lookup in the TU.)
7193         auto *II = Name.getAsIdentifierInfo();
7194         assert(II && "non-identifier name in C?");
7195         if (II->isOutOfDate())
7196           updateOutOfDateIdentifier(*II);
7197       } else
7198         DC->lookup(Name);
7199     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7200       // Find all declarations of this kind from the relevant context.
7201       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7202         auto *DC = cast<DeclContext>(DCDecl);
7203         SmallVector<Decl*, 8> Decls;
7204         FindExternalLexicalDecls(
7205             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7206       }
7207     }
7208   }
7209 
7210   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7211     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7212   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7213     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7214   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7215     if (auto *Template = FD->getPrimaryTemplate())
7216       Template->LoadLazySpecializations();
7217   }
7218 }
7219 
7220 CXXCtorInitializer **
7221 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7222   RecordLocation Loc = getLocalBitOffset(Offset);
7223   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7224   SavedStreamPosition SavedPosition(Cursor);
7225   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7226     Error(std::move(Err));
7227     return nullptr;
7228   }
7229   ReadingKindTracker ReadingKind(Read_Decl, *this);
7230 
7231   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7232   if (!MaybeCode) {
7233     Error(MaybeCode.takeError());
7234     return nullptr;
7235   }
7236   unsigned Code = MaybeCode.get();
7237 
7238   ASTRecordReader Record(*this, *Loc.F);
7239   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7240   if (!MaybeRecCode) {
7241     Error(MaybeRecCode.takeError());
7242     return nullptr;
7243   }
7244   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7245     Error("malformed AST file: missing C++ ctor initializers");
7246     return nullptr;
7247   }
7248 
7249   return Record.readCXXCtorInitializers();
7250 }
7251 
7252 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7253   assert(ContextObj && "reading base specifiers with no AST context");
7254   ASTContext &Context = *ContextObj;
7255 
7256   RecordLocation Loc = getLocalBitOffset(Offset);
7257   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7258   SavedStreamPosition SavedPosition(Cursor);
7259   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7260     Error(std::move(Err));
7261     return nullptr;
7262   }
7263   ReadingKindTracker ReadingKind(Read_Decl, *this);
7264 
7265   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7266   if (!MaybeCode) {
7267     Error(MaybeCode.takeError());
7268     return nullptr;
7269   }
7270   unsigned Code = MaybeCode.get();
7271 
7272   ASTRecordReader Record(*this, *Loc.F);
7273   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7274   if (!MaybeRecCode) {
7275     Error(MaybeCode.takeError());
7276     return nullptr;
7277   }
7278   unsigned RecCode = MaybeRecCode.get();
7279 
7280   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7281     Error("malformed AST file: missing C++ base specifiers");
7282     return nullptr;
7283   }
7284 
7285   unsigned NumBases = Record.readInt();
7286   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7287   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7288   for (unsigned I = 0; I != NumBases; ++I)
7289     Bases[I] = Record.readCXXBaseSpecifier();
7290   return Bases;
7291 }
7292 
7293 serialization::DeclID
7294 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7295   if (LocalID < NUM_PREDEF_DECL_IDS)
7296     return LocalID;
7297 
7298   if (!F.ModuleOffsetMap.empty())
7299     ReadModuleOffsetMap(F);
7300 
7301   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7302     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7303   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7304 
7305   return LocalID + I->second;
7306 }
7307 
7308 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7309                                    ModuleFile &M) const {
7310   // Predefined decls aren't from any module.
7311   if (ID < NUM_PREDEF_DECL_IDS)
7312     return false;
7313 
7314   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7315          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7316 }
7317 
7318 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7319   if (!D->isFromASTFile())
7320     return nullptr;
7321   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7322   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7323   return I->second;
7324 }
7325 
7326 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7327   if (ID < NUM_PREDEF_DECL_IDS)
7328     return SourceLocation();
7329 
7330   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7331 
7332   if (Index > DeclsLoaded.size()) {
7333     Error("declaration ID out-of-range for AST file");
7334     return SourceLocation();
7335   }
7336 
7337   if (Decl *D = DeclsLoaded[Index])
7338     return D->getLocation();
7339 
7340   SourceLocation Loc;
7341   DeclCursorForID(ID, Loc);
7342   return Loc;
7343 }
7344 
7345 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7346   switch (ID) {
7347   case PREDEF_DECL_NULL_ID:
7348     return nullptr;
7349 
7350   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7351     return Context.getTranslationUnitDecl();
7352 
7353   case PREDEF_DECL_OBJC_ID_ID:
7354     return Context.getObjCIdDecl();
7355 
7356   case PREDEF_DECL_OBJC_SEL_ID:
7357     return Context.getObjCSelDecl();
7358 
7359   case PREDEF_DECL_OBJC_CLASS_ID:
7360     return Context.getObjCClassDecl();
7361 
7362   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7363     return Context.getObjCProtocolDecl();
7364 
7365   case PREDEF_DECL_INT_128_ID:
7366     return Context.getInt128Decl();
7367 
7368   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7369     return Context.getUInt128Decl();
7370 
7371   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7372     return Context.getObjCInstanceTypeDecl();
7373 
7374   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7375     return Context.getBuiltinVaListDecl();
7376 
7377   case PREDEF_DECL_VA_LIST_TAG:
7378     return Context.getVaListTagDecl();
7379 
7380   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7381     return Context.getBuiltinMSVaListDecl();
7382 
7383   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7384     return Context.getMSGuidTagDecl();
7385 
7386   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7387     return Context.getExternCContextDecl();
7388 
7389   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7390     return Context.getMakeIntegerSeqDecl();
7391 
7392   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7393     return Context.getCFConstantStringDecl();
7394 
7395   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7396     return Context.getCFConstantStringTagDecl();
7397 
7398   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7399     return Context.getTypePackElementDecl();
7400   }
7401   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7402 }
7403 
7404 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7405   assert(ContextObj && "reading decl with no AST context");
7406   if (ID < NUM_PREDEF_DECL_IDS) {
7407     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7408     if (D) {
7409       // Track that we have merged the declaration with ID \p ID into the
7410       // pre-existing predefined declaration \p D.
7411       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7412       if (Merged.empty())
7413         Merged.push_back(ID);
7414     }
7415     return D;
7416   }
7417 
7418   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7419 
7420   if (Index >= DeclsLoaded.size()) {
7421     assert(0 && "declaration ID out-of-range for AST file");
7422     Error("declaration ID out-of-range for AST file");
7423     return nullptr;
7424   }
7425 
7426   return DeclsLoaded[Index];
7427 }
7428 
7429 Decl *ASTReader::GetDecl(DeclID ID) {
7430   if (ID < NUM_PREDEF_DECL_IDS)
7431     return GetExistingDecl(ID);
7432 
7433   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7434 
7435   if (Index >= DeclsLoaded.size()) {
7436     assert(0 && "declaration ID out-of-range for AST file");
7437     Error("declaration ID out-of-range for AST file");
7438     return nullptr;
7439   }
7440 
7441   if (!DeclsLoaded[Index]) {
7442     ReadDeclRecord(ID);
7443     if (DeserializationListener)
7444       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7445   }
7446 
7447   return DeclsLoaded[Index];
7448 }
7449 
7450 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7451                                                   DeclID GlobalID) {
7452   if (GlobalID < NUM_PREDEF_DECL_IDS)
7453     return GlobalID;
7454 
7455   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7456   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7457   ModuleFile *Owner = I->second;
7458 
7459   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7460     = M.GlobalToLocalDeclIDs.find(Owner);
7461   if (Pos == M.GlobalToLocalDeclIDs.end())
7462     return 0;
7463 
7464   return GlobalID - Owner->BaseDeclID + Pos->second;
7465 }
7466 
7467 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7468                                             const RecordData &Record,
7469                                             unsigned &Idx) {
7470   if (Idx >= Record.size()) {
7471     Error("Corrupted AST file");
7472     return 0;
7473   }
7474 
7475   return getGlobalDeclID(F, Record[Idx++]);
7476 }
7477 
7478 /// Resolve the offset of a statement into a statement.
7479 ///
7480 /// This operation will read a new statement from the external
7481 /// source each time it is called, and is meant to be used via a
7482 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7483 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7484   // Switch case IDs are per Decl.
7485   ClearSwitchCaseIDs();
7486 
7487   // Offset here is a global offset across the entire chain.
7488   RecordLocation Loc = getLocalBitOffset(Offset);
7489   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7490     Error(std::move(Err));
7491     return nullptr;
7492   }
7493   assert(NumCurrentElementsDeserializing == 0 &&
7494          "should not be called while already deserializing");
7495   Deserializing D(this);
7496   return ReadStmtFromStream(*Loc.F);
7497 }
7498 
7499 void ASTReader::FindExternalLexicalDecls(
7500     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7501     SmallVectorImpl<Decl *> &Decls) {
7502   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7503 
7504   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7505     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7506     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7507       auto K = (Decl::Kind)+LexicalDecls[I];
7508       if (!IsKindWeWant(K))
7509         continue;
7510 
7511       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7512 
7513       // Don't add predefined declarations to the lexical context more
7514       // than once.
7515       if (ID < NUM_PREDEF_DECL_IDS) {
7516         if (PredefsVisited[ID])
7517           continue;
7518 
7519         PredefsVisited[ID] = true;
7520       }
7521 
7522       if (Decl *D = GetLocalDecl(*M, ID)) {
7523         assert(D->getKind() == K && "wrong kind for lexical decl");
7524         if (!DC->isDeclInLexicalTraversal(D))
7525           Decls.push_back(D);
7526       }
7527     }
7528   };
7529 
7530   if (isa<TranslationUnitDecl>(DC)) {
7531     for (auto Lexical : TULexicalDecls)
7532       Visit(Lexical.first, Lexical.second);
7533   } else {
7534     auto I = LexicalDecls.find(DC);
7535     if (I != LexicalDecls.end())
7536       Visit(I->second.first, I->second.second);
7537   }
7538 
7539   ++NumLexicalDeclContextsRead;
7540 }
7541 
7542 namespace {
7543 
7544 class DeclIDComp {
7545   ASTReader &Reader;
7546   ModuleFile &Mod;
7547 
7548 public:
7549   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7550 
7551   bool operator()(LocalDeclID L, LocalDeclID R) const {
7552     SourceLocation LHS = getLocation(L);
7553     SourceLocation RHS = getLocation(R);
7554     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7555   }
7556 
7557   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7558     SourceLocation RHS = getLocation(R);
7559     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7560   }
7561 
7562   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7563     SourceLocation LHS = getLocation(L);
7564     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7565   }
7566 
7567   SourceLocation getLocation(LocalDeclID ID) const {
7568     return Reader.getSourceManager().getFileLoc(
7569             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7570   }
7571 };
7572 
7573 } // namespace
7574 
7575 void ASTReader::FindFileRegionDecls(FileID File,
7576                                     unsigned Offset, unsigned Length,
7577                                     SmallVectorImpl<Decl *> &Decls) {
7578   SourceManager &SM = getSourceManager();
7579 
7580   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7581   if (I == FileDeclIDs.end())
7582     return;
7583 
7584   FileDeclsInfo &DInfo = I->second;
7585   if (DInfo.Decls.empty())
7586     return;
7587 
7588   SourceLocation
7589     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7590   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7591 
7592   DeclIDComp DIDComp(*this, *DInfo.Mod);
7593   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7594       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7595   if (BeginIt != DInfo.Decls.begin())
7596     --BeginIt;
7597 
7598   // If we are pointing at a top-level decl inside an objc container, we need
7599   // to backtrack until we find it otherwise we will fail to report that the
7600   // region overlaps with an objc container.
7601   while (BeginIt != DInfo.Decls.begin() &&
7602          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7603              ->isTopLevelDeclInObjCContainer())
7604     --BeginIt;
7605 
7606   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7607       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7608   if (EndIt != DInfo.Decls.end())
7609     ++EndIt;
7610 
7611   for (ArrayRef<serialization::LocalDeclID>::iterator
7612          DIt = BeginIt; DIt != EndIt; ++DIt)
7613     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7614 }
7615 
7616 bool
7617 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7618                                           DeclarationName Name) {
7619   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7620          "DeclContext has no visible decls in storage");
7621   if (!Name)
7622     return false;
7623 
7624   auto It = Lookups.find(DC);
7625   if (It == Lookups.end())
7626     return false;
7627 
7628   Deserializing LookupResults(this);
7629 
7630   // Load the list of declarations.
7631   SmallVector<NamedDecl *, 64> Decls;
7632   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7633   for (DeclID ID : It->second.Table.find(Name)) {
7634     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7635     if (ND->getDeclName() == Name && Found.insert(ND).second)
7636       Decls.push_back(ND);
7637   }
7638 
7639   ++NumVisibleDeclContextsRead;
7640   SetExternalVisibleDeclsForName(DC, Name, Decls);
7641   return !Decls.empty();
7642 }
7643 
7644 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7645   if (!DC->hasExternalVisibleStorage())
7646     return;
7647 
7648   auto It = Lookups.find(DC);
7649   assert(It != Lookups.end() &&
7650          "have external visible storage but no lookup tables");
7651 
7652   DeclsMap Decls;
7653 
7654   for (DeclID ID : It->second.Table.findAll()) {
7655     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7656     Decls[ND->getDeclName()].push_back(ND);
7657   }
7658 
7659   ++NumVisibleDeclContextsRead;
7660 
7661   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7662     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7663   }
7664   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7665 }
7666 
7667 const serialization::reader::DeclContextLookupTable *
7668 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7669   auto I = Lookups.find(Primary);
7670   return I == Lookups.end() ? nullptr : &I->second;
7671 }
7672 
7673 /// Under non-PCH compilation the consumer receives the objc methods
7674 /// before receiving the implementation, and codegen depends on this.
7675 /// We simulate this by deserializing and passing to consumer the methods of the
7676 /// implementation before passing the deserialized implementation decl.
7677 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7678                                        ASTConsumer *Consumer) {
7679   assert(ImplD && Consumer);
7680 
7681   for (auto *I : ImplD->methods())
7682     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7683 
7684   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7685 }
7686 
7687 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7688   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7689     PassObjCImplDeclToConsumer(ImplD, Consumer);
7690   else
7691     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7692 }
7693 
7694 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7695   this->Consumer = Consumer;
7696 
7697   if (Consumer)
7698     PassInterestingDeclsToConsumer();
7699 
7700   if (DeserializationListener)
7701     DeserializationListener->ReaderInitialized(this);
7702 }
7703 
7704 void ASTReader::PrintStats() {
7705   std::fprintf(stderr, "*** AST File Statistics:\n");
7706 
7707   unsigned NumTypesLoaded =
7708       TypesLoaded.size() - llvm::count(TypesLoaded, QualType());
7709   unsigned NumDeclsLoaded =
7710       DeclsLoaded.size() - llvm::count(DeclsLoaded, (Decl *)nullptr);
7711   unsigned NumIdentifiersLoaded =
7712       IdentifiersLoaded.size() -
7713       llvm::count(IdentifiersLoaded, (IdentifierInfo *)nullptr);
7714   unsigned NumMacrosLoaded =
7715       MacrosLoaded.size() - llvm::count(MacrosLoaded, (MacroInfo *)nullptr);
7716   unsigned NumSelectorsLoaded =
7717       SelectorsLoaded.size() - llvm::count(SelectorsLoaded, Selector());
7718 
7719   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7720     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7721                  NumSLocEntriesRead, TotalNumSLocEntries,
7722                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7723   if (!TypesLoaded.empty())
7724     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7725                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7726                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7727   if (!DeclsLoaded.empty())
7728     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7729                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7730                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7731   if (!IdentifiersLoaded.empty())
7732     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7733                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7734                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7735   if (!MacrosLoaded.empty())
7736     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7737                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7738                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7739   if (!SelectorsLoaded.empty())
7740     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7741                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7742                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7743   if (TotalNumStatements)
7744     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7745                  NumStatementsRead, TotalNumStatements,
7746                  ((float)NumStatementsRead/TotalNumStatements * 100));
7747   if (TotalNumMacros)
7748     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7749                  NumMacrosRead, TotalNumMacros,
7750                  ((float)NumMacrosRead/TotalNumMacros * 100));
7751   if (TotalLexicalDeclContexts)
7752     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7753                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7754                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7755                   * 100));
7756   if (TotalVisibleDeclContexts)
7757     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7758                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7759                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7760                   * 100));
7761   if (TotalNumMethodPoolEntries)
7762     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7763                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7764                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7765                   * 100));
7766   if (NumMethodPoolLookups)
7767     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7768                  NumMethodPoolHits, NumMethodPoolLookups,
7769                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7770   if (NumMethodPoolTableLookups)
7771     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7772                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7773                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7774                   * 100.0));
7775   if (NumIdentifierLookupHits)
7776     std::fprintf(stderr,
7777                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7778                  NumIdentifierLookupHits, NumIdentifierLookups,
7779                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7780 
7781   if (GlobalIndex) {
7782     std::fprintf(stderr, "\n");
7783     GlobalIndex->printStats();
7784   }
7785 
7786   std::fprintf(stderr, "\n");
7787   dump();
7788   std::fprintf(stderr, "\n");
7789 }
7790 
7791 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7792 LLVM_DUMP_METHOD static void
7793 dumpModuleIDMap(StringRef Name,
7794                 const ContinuousRangeMap<Key, ModuleFile *,
7795                                          InitialCapacity> &Map) {
7796   if (Map.begin() == Map.end())
7797     return;
7798 
7799   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7800 
7801   llvm::errs() << Name << ":\n";
7802   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7803        I != IEnd; ++I) {
7804     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7805       << "\n";
7806   }
7807 }
7808 
7809 LLVM_DUMP_METHOD void ASTReader::dump() {
7810   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7811   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7812   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7813   dumpModuleIDMap("Global type map", GlobalTypeMap);
7814   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7815   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7816   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7817   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7818   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7819   dumpModuleIDMap("Global preprocessed entity map",
7820                   GlobalPreprocessedEntityMap);
7821 
7822   llvm::errs() << "\n*** PCH/Modules Loaded:";
7823   for (ModuleFile &M : ModuleMgr)
7824     M.dump();
7825 }
7826 
7827 /// Return the amount of memory used by memory buffers, breaking down
7828 /// by heap-backed versus mmap'ed memory.
7829 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7830   for (ModuleFile &I : ModuleMgr) {
7831     if (llvm::MemoryBuffer *buf = I.Buffer) {
7832       size_t bytes = buf->getBufferSize();
7833       switch (buf->getBufferKind()) {
7834         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7835           sizes.malloc_bytes += bytes;
7836           break;
7837         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7838           sizes.mmap_bytes += bytes;
7839           break;
7840       }
7841     }
7842   }
7843 }
7844 
7845 void ASTReader::InitializeSema(Sema &S) {
7846   SemaObj = &S;
7847   S.addExternalSource(this);
7848 
7849   // Makes sure any declarations that were deserialized "too early"
7850   // still get added to the identifier's declaration chains.
7851   for (uint64_t ID : PreloadedDeclIDs) {
7852     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7853     pushExternalDeclIntoScope(D, D->getDeclName());
7854   }
7855   PreloadedDeclIDs.clear();
7856 
7857   // FIXME: What happens if these are changed by a module import?
7858   if (!FPPragmaOptions.empty()) {
7859     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7860     FPOptionsOverride NewOverrides =
7861         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7862     SemaObj->CurFPFeatures =
7863         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7864   }
7865 
7866   SemaObj->OpenCLFeatures = OpenCLExtensions;
7867 
7868   UpdateSema();
7869 }
7870 
7871 void ASTReader::UpdateSema() {
7872   assert(SemaObj && "no Sema to update");
7873 
7874   // Load the offsets of the declarations that Sema references.
7875   // They will be lazily deserialized when needed.
7876   if (!SemaDeclRefs.empty()) {
7877     assert(SemaDeclRefs.size() % 3 == 0);
7878     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7879       if (!SemaObj->StdNamespace)
7880         SemaObj->StdNamespace = SemaDeclRefs[I];
7881       if (!SemaObj->StdBadAlloc)
7882         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7883       if (!SemaObj->StdAlignValT)
7884         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7885     }
7886     SemaDeclRefs.clear();
7887   }
7888 
7889   // Update the state of pragmas. Use the same API as if we had encountered the
7890   // pragma in the source.
7891   if(OptimizeOffPragmaLocation.isValid())
7892     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7893   if (PragmaMSStructState != -1)
7894     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7895   if (PointersToMembersPragmaLocation.isValid()) {
7896     SemaObj->ActOnPragmaMSPointersToMembers(
7897         (LangOptions::PragmaMSPointersToMembersKind)
7898             PragmaMSPointersToMembersState,
7899         PointersToMembersPragmaLocation);
7900   }
7901   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7902 
7903   if (PragmaAlignPackCurrentValue) {
7904     // The bottom of the stack might have a default value. It must be adjusted
7905     // to the current value to ensure that the packing state is preserved after
7906     // popping entries that were included/imported from a PCH/module.
7907     bool DropFirst = false;
7908     if (!PragmaAlignPackStack.empty() &&
7909         PragmaAlignPackStack.front().Location.isInvalid()) {
7910       assert(PragmaAlignPackStack.front().Value ==
7911                  SemaObj->AlignPackStack.DefaultValue &&
7912              "Expected a default alignment value");
7913       SemaObj->AlignPackStack.Stack.emplace_back(
7914           PragmaAlignPackStack.front().SlotLabel,
7915           SemaObj->AlignPackStack.CurrentValue,
7916           SemaObj->AlignPackStack.CurrentPragmaLocation,
7917           PragmaAlignPackStack.front().PushLocation);
7918       DropFirst = true;
7919     }
7920     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7921                                  .drop_front(DropFirst ? 1 : 0)) {
7922       SemaObj->AlignPackStack.Stack.emplace_back(
7923           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7924     }
7925     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7926       assert(*PragmaAlignPackCurrentValue ==
7927                  SemaObj->AlignPackStack.DefaultValue &&
7928              "Expected a default align and pack value");
7929       // Keep the current values.
7930     } else {
7931       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7932       SemaObj->AlignPackStack.CurrentPragmaLocation =
7933           PragmaAlignPackCurrentLocation;
7934     }
7935   }
7936   if (FpPragmaCurrentValue) {
7937     // The bottom of the stack might have a default value. It must be adjusted
7938     // to the current value to ensure that fp-pragma state is preserved after
7939     // popping entries that were included/imported from a PCH/module.
7940     bool DropFirst = false;
7941     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7942       assert(FpPragmaStack.front().Value ==
7943                  SemaObj->FpPragmaStack.DefaultValue &&
7944              "Expected a default pragma float_control value");
7945       SemaObj->FpPragmaStack.Stack.emplace_back(
7946           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7947           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7948           FpPragmaStack.front().PushLocation);
7949       DropFirst = true;
7950     }
7951     for (const auto &Entry :
7952          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7953       SemaObj->FpPragmaStack.Stack.emplace_back(
7954           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7955     if (FpPragmaCurrentLocation.isInvalid()) {
7956       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7957              "Expected a default pragma float_control value");
7958       // Keep the current values.
7959     } else {
7960       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7961       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7962     }
7963   }
7964 
7965   // For non-modular AST files, restore visiblity of modules.
7966   for (auto &Import : ImportedModules) {
7967     if (Import.ImportLoc.isInvalid())
7968       continue;
7969     if (Module *Imported = getSubmodule(Import.ID)) {
7970       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7971     }
7972   }
7973 }
7974 
7975 IdentifierInfo *ASTReader::get(StringRef Name) {
7976   // Note that we are loading an identifier.
7977   Deserializing AnIdentifier(this);
7978 
7979   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7980                                   NumIdentifierLookups,
7981                                   NumIdentifierLookupHits);
7982 
7983   // We don't need to do identifier table lookups in C++ modules (we preload
7984   // all interesting declarations, and don't need to use the scope for name
7985   // lookups). Perform the lookup in PCH files, though, since we don't build
7986   // a complete initial identifier table if we're carrying on from a PCH.
7987   if (PP.getLangOpts().CPlusPlus) {
7988     for (auto F : ModuleMgr.pch_modules())
7989       if (Visitor(*F))
7990         break;
7991   } else {
7992     // If there is a global index, look there first to determine which modules
7993     // provably do not have any results for this identifier.
7994     GlobalModuleIndex::HitSet Hits;
7995     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7996     if (!loadGlobalIndex()) {
7997       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7998         HitsPtr = &Hits;
7999       }
8000     }
8001 
8002     ModuleMgr.visit(Visitor, HitsPtr);
8003   }
8004 
8005   IdentifierInfo *II = Visitor.getIdentifierInfo();
8006   markIdentifierUpToDate(II);
8007   return II;
8008 }
8009 
8010 namespace clang {
8011 
8012   /// An identifier-lookup iterator that enumerates all of the
8013   /// identifiers stored within a set of AST files.
8014   class ASTIdentifierIterator : public IdentifierIterator {
8015     /// The AST reader whose identifiers are being enumerated.
8016     const ASTReader &Reader;
8017 
8018     /// The current index into the chain of AST files stored in
8019     /// the AST reader.
8020     unsigned Index;
8021 
8022     /// The current position within the identifier lookup table
8023     /// of the current AST file.
8024     ASTIdentifierLookupTable::key_iterator Current;
8025 
8026     /// The end position within the identifier lookup table of
8027     /// the current AST file.
8028     ASTIdentifierLookupTable::key_iterator End;
8029 
8030     /// Whether to skip any modules in the ASTReader.
8031     bool SkipModules;
8032 
8033   public:
8034     explicit ASTIdentifierIterator(const ASTReader &Reader,
8035                                    bool SkipModules = false);
8036 
8037     StringRef Next() override;
8038   };
8039 
8040 } // namespace clang
8041 
8042 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8043                                              bool SkipModules)
8044     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8045 }
8046 
8047 StringRef ASTIdentifierIterator::Next() {
8048   while (Current == End) {
8049     // If we have exhausted all of our AST files, we're done.
8050     if (Index == 0)
8051       return StringRef();
8052 
8053     --Index;
8054     ModuleFile &F = Reader.ModuleMgr[Index];
8055     if (SkipModules && F.isModule())
8056       continue;
8057 
8058     ASTIdentifierLookupTable *IdTable =
8059         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8060     Current = IdTable->key_begin();
8061     End = IdTable->key_end();
8062   }
8063 
8064   // We have any identifiers remaining in the current AST file; return
8065   // the next one.
8066   StringRef Result = *Current;
8067   ++Current;
8068   return Result;
8069 }
8070 
8071 namespace {
8072 
8073 /// A utility for appending two IdentifierIterators.
8074 class ChainedIdentifierIterator : public IdentifierIterator {
8075   std::unique_ptr<IdentifierIterator> Current;
8076   std::unique_ptr<IdentifierIterator> Queued;
8077 
8078 public:
8079   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8080                             std::unique_ptr<IdentifierIterator> Second)
8081       : Current(std::move(First)), Queued(std::move(Second)) {}
8082 
8083   StringRef Next() override {
8084     if (!Current)
8085       return StringRef();
8086 
8087     StringRef result = Current->Next();
8088     if (!result.empty())
8089       return result;
8090 
8091     // Try the queued iterator, which may itself be empty.
8092     Current.reset();
8093     std::swap(Current, Queued);
8094     return Next();
8095   }
8096 };
8097 
8098 } // namespace
8099 
8100 IdentifierIterator *ASTReader::getIdentifiers() {
8101   if (!loadGlobalIndex()) {
8102     std::unique_ptr<IdentifierIterator> ReaderIter(
8103         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8104     std::unique_ptr<IdentifierIterator> ModulesIter(
8105         GlobalIndex->createIdentifierIterator());
8106     return new ChainedIdentifierIterator(std::move(ReaderIter),
8107                                          std::move(ModulesIter));
8108   }
8109 
8110   return new ASTIdentifierIterator(*this);
8111 }
8112 
8113 namespace clang {
8114 namespace serialization {
8115 
8116   class ReadMethodPoolVisitor {
8117     ASTReader &Reader;
8118     Selector Sel;
8119     unsigned PriorGeneration;
8120     unsigned InstanceBits = 0;
8121     unsigned FactoryBits = 0;
8122     bool InstanceHasMoreThanOneDecl = false;
8123     bool FactoryHasMoreThanOneDecl = false;
8124     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8125     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8126 
8127   public:
8128     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8129                           unsigned PriorGeneration)
8130         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8131 
8132     bool operator()(ModuleFile &M) {
8133       if (!M.SelectorLookupTable)
8134         return false;
8135 
8136       // If we've already searched this module file, skip it now.
8137       if (M.Generation <= PriorGeneration)
8138         return true;
8139 
8140       ++Reader.NumMethodPoolTableLookups;
8141       ASTSelectorLookupTable *PoolTable
8142         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8143       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8144       if (Pos == PoolTable->end())
8145         return false;
8146 
8147       ++Reader.NumMethodPoolTableHits;
8148       ++Reader.NumSelectorsRead;
8149       // FIXME: Not quite happy with the statistics here. We probably should
8150       // disable this tracking when called via LoadSelector.
8151       // Also, should entries without methods count as misses?
8152       ++Reader.NumMethodPoolEntriesRead;
8153       ASTSelectorLookupTrait::data_type Data = *Pos;
8154       if (Reader.DeserializationListener)
8155         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8156 
8157       // Append methods in the reverse order, so that later we can process them
8158       // in the order they appear in the source code by iterating through
8159       // the vector in the reverse order.
8160       InstanceMethods.append(Data.Instance.rbegin(), Data.Instance.rend());
8161       FactoryMethods.append(Data.Factory.rbegin(), Data.Factory.rend());
8162       InstanceBits = Data.InstanceBits;
8163       FactoryBits = Data.FactoryBits;
8164       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8165       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8166       return false;
8167     }
8168 
8169     /// Retrieve the instance methods found by this visitor.
8170     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8171       return InstanceMethods;
8172     }
8173 
8174     /// Retrieve the instance methods found by this visitor.
8175     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8176       return FactoryMethods;
8177     }
8178 
8179     unsigned getInstanceBits() const { return InstanceBits; }
8180     unsigned getFactoryBits() const { return FactoryBits; }
8181 
8182     bool instanceHasMoreThanOneDecl() const {
8183       return InstanceHasMoreThanOneDecl;
8184     }
8185 
8186     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8187   };
8188 
8189 } // namespace serialization
8190 } // namespace clang
8191 
8192 /// Add the given set of methods to the method list.
8193 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8194                              ObjCMethodList &List) {
8195   for (auto I = Methods.rbegin(), E = Methods.rend(); I != E; ++I)
8196     S.addMethodToGlobalList(&List, *I);
8197 }
8198 
8199 void ASTReader::ReadMethodPool(Selector Sel) {
8200   // Get the selector generation and update it to the current generation.
8201   unsigned &Generation = SelectorGeneration[Sel];
8202   unsigned PriorGeneration = Generation;
8203   Generation = getGeneration();
8204   SelectorOutOfDate[Sel] = false;
8205 
8206   // Search for methods defined with this selector.
8207   ++NumMethodPoolLookups;
8208   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8209   ModuleMgr.visit(Visitor);
8210 
8211   if (Visitor.getInstanceMethods().empty() &&
8212       Visitor.getFactoryMethods().empty())
8213     return;
8214 
8215   ++NumMethodPoolHits;
8216 
8217   if (!getSema())
8218     return;
8219 
8220   Sema &S = *getSema();
8221   Sema::GlobalMethodPool::iterator Pos =
8222       S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethodPool::Lists()))
8223           .first;
8224 
8225   Pos->second.first.setBits(Visitor.getInstanceBits());
8226   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8227   Pos->second.second.setBits(Visitor.getFactoryBits());
8228   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8229 
8230   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8231   // when building a module we keep every method individually and may need to
8232   // update hasMoreThanOneDecl as we add the methods.
8233   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8234   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8235 }
8236 
8237 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8238   if (SelectorOutOfDate[Sel])
8239     ReadMethodPool(Sel);
8240 }
8241 
8242 void ASTReader::ReadKnownNamespaces(
8243                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8244   Namespaces.clear();
8245 
8246   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8247     if (NamespaceDecl *Namespace
8248                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8249       Namespaces.push_back(Namespace);
8250   }
8251 }
8252 
8253 void ASTReader::ReadUndefinedButUsed(
8254     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8255   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8256     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8257     SourceLocation Loc =
8258         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8259     Undefined.insert(std::make_pair(D, Loc));
8260   }
8261 }
8262 
8263 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8264     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8265                                                      Exprs) {
8266   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8267     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8268     uint64_t Count = DelayedDeleteExprs[Idx++];
8269     for (uint64_t C = 0; C < Count; ++C) {
8270       SourceLocation DeleteLoc =
8271           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8272       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8273       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8274     }
8275   }
8276 }
8277 
8278 void ASTReader::ReadTentativeDefinitions(
8279                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8280   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8281     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8282     if (Var)
8283       TentativeDefs.push_back(Var);
8284   }
8285   TentativeDefinitions.clear();
8286 }
8287 
8288 void ASTReader::ReadUnusedFileScopedDecls(
8289                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8290   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8291     DeclaratorDecl *D
8292       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8293     if (D)
8294       Decls.push_back(D);
8295   }
8296   UnusedFileScopedDecls.clear();
8297 }
8298 
8299 void ASTReader::ReadDelegatingConstructors(
8300                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8301   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8302     CXXConstructorDecl *D
8303       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8304     if (D)
8305       Decls.push_back(D);
8306   }
8307   DelegatingCtorDecls.clear();
8308 }
8309 
8310 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8311   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8312     TypedefNameDecl *D
8313       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8314     if (D)
8315       Decls.push_back(D);
8316   }
8317   ExtVectorDecls.clear();
8318 }
8319 
8320 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8321     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8322   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8323        ++I) {
8324     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8325         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8326     if (D)
8327       Decls.insert(D);
8328   }
8329   UnusedLocalTypedefNameCandidates.clear();
8330 }
8331 
8332 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8333     llvm::SmallSetVector<Decl *, 4> &Decls) {
8334   for (auto I : DeclsToCheckForDeferredDiags) {
8335     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8336     if (D)
8337       Decls.insert(D);
8338   }
8339   DeclsToCheckForDeferredDiags.clear();
8340 }
8341 
8342 void ASTReader::ReadReferencedSelectors(
8343        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8344   if (ReferencedSelectorsData.empty())
8345     return;
8346 
8347   // If there are @selector references added them to its pool. This is for
8348   // implementation of -Wselector.
8349   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8350   unsigned I = 0;
8351   while (I < DataSize) {
8352     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8353     SourceLocation SelLoc
8354       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8355     Sels.push_back(std::make_pair(Sel, SelLoc));
8356   }
8357   ReferencedSelectorsData.clear();
8358 }
8359 
8360 void ASTReader::ReadWeakUndeclaredIdentifiers(
8361        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8362   if (WeakUndeclaredIdentifiers.empty())
8363     return;
8364 
8365   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8366     IdentifierInfo *WeakId
8367       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8368     IdentifierInfo *AliasId
8369       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8370     SourceLocation Loc
8371       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8372     bool Used = WeakUndeclaredIdentifiers[I++];
8373     WeakInfo WI(AliasId, Loc);
8374     WI.setUsed(Used);
8375     WeakIDs.push_back(std::make_pair(WeakId, WI));
8376   }
8377   WeakUndeclaredIdentifiers.clear();
8378 }
8379 
8380 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8381   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8382     ExternalVTableUse VT;
8383     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8384     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8385     VT.DefinitionRequired = VTableUses[Idx++];
8386     VTables.push_back(VT);
8387   }
8388 
8389   VTableUses.clear();
8390 }
8391 
8392 void ASTReader::ReadPendingInstantiations(
8393        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8394   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8395     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8396     SourceLocation Loc
8397       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8398 
8399     Pending.push_back(std::make_pair(D, Loc));
8400   }
8401   PendingInstantiations.clear();
8402 }
8403 
8404 void ASTReader::ReadLateParsedTemplates(
8405     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8406         &LPTMap) {
8407   for (auto &LPT : LateParsedTemplates) {
8408     ModuleFile *FMod = LPT.first;
8409     RecordDataImpl &LateParsed = LPT.second;
8410     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8411          /* In loop */) {
8412       FunctionDecl *FD =
8413           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8414 
8415       auto LT = std::make_unique<LateParsedTemplate>();
8416       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8417 
8418       ModuleFile *F = getOwningModuleFile(LT->D);
8419       assert(F && "No module");
8420 
8421       unsigned TokN = LateParsed[Idx++];
8422       LT->Toks.reserve(TokN);
8423       for (unsigned T = 0; T < TokN; ++T)
8424         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8425 
8426       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8427     }
8428   }
8429 
8430   LateParsedTemplates.clear();
8431 }
8432 
8433 void ASTReader::LoadSelector(Selector Sel) {
8434   // It would be complicated to avoid reading the methods anyway. So don't.
8435   ReadMethodPool(Sel);
8436 }
8437 
8438 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8439   assert(ID && "Non-zero identifier ID required");
8440   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8441   IdentifiersLoaded[ID - 1] = II;
8442   if (DeserializationListener)
8443     DeserializationListener->IdentifierRead(ID, II);
8444 }
8445 
8446 /// Set the globally-visible declarations associated with the given
8447 /// identifier.
8448 ///
8449 /// If the AST reader is currently in a state where the given declaration IDs
8450 /// cannot safely be resolved, they are queued until it is safe to resolve
8451 /// them.
8452 ///
8453 /// \param II an IdentifierInfo that refers to one or more globally-visible
8454 /// declarations.
8455 ///
8456 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8457 /// visible at global scope.
8458 ///
8459 /// \param Decls if non-null, this vector will be populated with the set of
8460 /// deserialized declarations. These declarations will not be pushed into
8461 /// scope.
8462 void
8463 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8464                               const SmallVectorImpl<uint32_t> &DeclIDs,
8465                                    SmallVectorImpl<Decl *> *Decls) {
8466   if (NumCurrentElementsDeserializing && !Decls) {
8467     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8468     return;
8469   }
8470 
8471   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8472     if (!SemaObj) {
8473       // Queue this declaration so that it will be added to the
8474       // translation unit scope and identifier's declaration chain
8475       // once a Sema object is known.
8476       PreloadedDeclIDs.push_back(DeclIDs[I]);
8477       continue;
8478     }
8479 
8480     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8481 
8482     // If we're simply supposed to record the declarations, do so now.
8483     if (Decls) {
8484       Decls->push_back(D);
8485       continue;
8486     }
8487 
8488     // Introduce this declaration into the translation-unit scope
8489     // and add it to the declaration chain for this identifier, so
8490     // that (unqualified) name lookup will find it.
8491     pushExternalDeclIntoScope(D, II);
8492   }
8493 }
8494 
8495 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8496   if (ID == 0)
8497     return nullptr;
8498 
8499   if (IdentifiersLoaded.empty()) {
8500     Error("no identifier table in AST file");
8501     return nullptr;
8502   }
8503 
8504   ID -= 1;
8505   if (!IdentifiersLoaded[ID]) {
8506     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8507     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8508     ModuleFile *M = I->second;
8509     unsigned Index = ID - M->BaseIdentifierID;
8510     const unsigned char *Data =
8511         M->IdentifierTableData + M->IdentifierOffsets[Index];
8512 
8513     ASTIdentifierLookupTrait Trait(*this, *M);
8514     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8515     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8516     auto &II = PP.getIdentifierTable().get(Key);
8517     IdentifiersLoaded[ID] = &II;
8518     markIdentifierFromAST(*this,  II);
8519     if (DeserializationListener)
8520       DeserializationListener->IdentifierRead(ID + 1, &II);
8521   }
8522 
8523   return IdentifiersLoaded[ID];
8524 }
8525 
8526 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8527   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8528 }
8529 
8530 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8531   if (LocalID < NUM_PREDEF_IDENT_IDS)
8532     return LocalID;
8533 
8534   if (!M.ModuleOffsetMap.empty())
8535     ReadModuleOffsetMap(M);
8536 
8537   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8538     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8539   assert(I != M.IdentifierRemap.end()
8540          && "Invalid index into identifier index remap");
8541 
8542   return LocalID + I->second;
8543 }
8544 
8545 MacroInfo *ASTReader::getMacro(MacroID ID) {
8546   if (ID == 0)
8547     return nullptr;
8548 
8549   if (MacrosLoaded.empty()) {
8550     Error("no macro table in AST file");
8551     return nullptr;
8552   }
8553 
8554   ID -= NUM_PREDEF_MACRO_IDS;
8555   if (!MacrosLoaded[ID]) {
8556     GlobalMacroMapType::iterator I
8557       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8558     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8559     ModuleFile *M = I->second;
8560     unsigned Index = ID - M->BaseMacroID;
8561     MacrosLoaded[ID] =
8562         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8563 
8564     if (DeserializationListener)
8565       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8566                                          MacrosLoaded[ID]);
8567   }
8568 
8569   return MacrosLoaded[ID];
8570 }
8571 
8572 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8573   if (LocalID < NUM_PREDEF_MACRO_IDS)
8574     return LocalID;
8575 
8576   if (!M.ModuleOffsetMap.empty())
8577     ReadModuleOffsetMap(M);
8578 
8579   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8580     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8581   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8582 
8583   return LocalID + I->second;
8584 }
8585 
8586 serialization::SubmoduleID
8587 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8588   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8589     return LocalID;
8590 
8591   if (!M.ModuleOffsetMap.empty())
8592     ReadModuleOffsetMap(M);
8593 
8594   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8595     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8596   assert(I != M.SubmoduleRemap.end()
8597          && "Invalid index into submodule index remap");
8598 
8599   return LocalID + I->second;
8600 }
8601 
8602 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8603   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8604     assert(GlobalID == 0 && "Unhandled global submodule ID");
8605     return nullptr;
8606   }
8607 
8608   if (GlobalID > SubmodulesLoaded.size()) {
8609     Error("submodule ID out of range in AST file");
8610     return nullptr;
8611   }
8612 
8613   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8614 }
8615 
8616 Module *ASTReader::getModule(unsigned ID) {
8617   return getSubmodule(ID);
8618 }
8619 
8620 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8621   if (ID & 1) {
8622     // It's a module, look it up by submodule ID.
8623     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8624     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8625   } else {
8626     // It's a prefix (preamble, PCH, ...). Look it up by index.
8627     unsigned IndexFromEnd = ID >> 1;
8628     assert(IndexFromEnd && "got reference to unknown module file");
8629     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8630   }
8631 }
8632 
8633 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8634   if (!F)
8635     return 1;
8636 
8637   // For a file representing a module, use the submodule ID of the top-level
8638   // module as the file ID. For any other kind of file, the number of such
8639   // files loaded beforehand will be the same on reload.
8640   // FIXME: Is this true even if we have an explicit module file and a PCH?
8641   if (F->isModule())
8642     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8643 
8644   auto PCHModules = getModuleManager().pch_modules();
8645   auto I = llvm::find(PCHModules, F);
8646   assert(I != PCHModules.end() && "emitting reference to unknown file");
8647   return (I - PCHModules.end()) << 1;
8648 }
8649 
8650 llvm::Optional<ASTSourceDescriptor>
8651 ASTReader::getSourceDescriptor(unsigned ID) {
8652   if (Module *M = getSubmodule(ID))
8653     return ASTSourceDescriptor(*M);
8654 
8655   // If there is only a single PCH, return it instead.
8656   // Chained PCH are not supported.
8657   const auto &PCHChain = ModuleMgr.pch_modules();
8658   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8659     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8660     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8661     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8662     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8663                                MF.Signature);
8664   }
8665   return None;
8666 }
8667 
8668 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8669   auto I = DefinitionSource.find(FD);
8670   if (I == DefinitionSource.end())
8671     return EK_ReplyHazy;
8672   return I->second ? EK_Never : EK_Always;
8673 }
8674 
8675 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8676   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8677 }
8678 
8679 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8680   if (ID == 0)
8681     return Selector();
8682 
8683   if (ID > SelectorsLoaded.size()) {
8684     Error("selector ID out of range in AST file");
8685     return Selector();
8686   }
8687 
8688   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8689     // Load this selector from the selector table.
8690     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8691     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8692     ModuleFile &M = *I->second;
8693     ASTSelectorLookupTrait Trait(*this, M);
8694     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8695     SelectorsLoaded[ID - 1] =
8696       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8697     if (DeserializationListener)
8698       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8699   }
8700 
8701   return SelectorsLoaded[ID - 1];
8702 }
8703 
8704 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8705   return DecodeSelector(ID);
8706 }
8707 
8708 uint32_t ASTReader::GetNumExternalSelectors() {
8709   // ID 0 (the null selector) is considered an external selector.
8710   return getTotalNumSelectors() + 1;
8711 }
8712 
8713 serialization::SelectorID
8714 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8715   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8716     return LocalID;
8717 
8718   if (!M.ModuleOffsetMap.empty())
8719     ReadModuleOffsetMap(M);
8720 
8721   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8722     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8723   assert(I != M.SelectorRemap.end()
8724          && "Invalid index into selector index remap");
8725 
8726   return LocalID + I->second;
8727 }
8728 
8729 DeclarationNameLoc
8730 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8731   switch (Name.getNameKind()) {
8732   case DeclarationName::CXXConstructorName:
8733   case DeclarationName::CXXDestructorName:
8734   case DeclarationName::CXXConversionFunctionName:
8735     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8736 
8737   case DeclarationName::CXXOperatorName:
8738     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8739 
8740   case DeclarationName::CXXLiteralOperatorName:
8741     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8742         readSourceLocation());
8743 
8744   case DeclarationName::Identifier:
8745   case DeclarationName::ObjCZeroArgSelector:
8746   case DeclarationName::ObjCOneArgSelector:
8747   case DeclarationName::ObjCMultiArgSelector:
8748   case DeclarationName::CXXUsingDirective:
8749   case DeclarationName::CXXDeductionGuideName:
8750     break;
8751   }
8752   return DeclarationNameLoc();
8753 }
8754 
8755 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8756   DeclarationNameInfo NameInfo;
8757   NameInfo.setName(readDeclarationName());
8758   NameInfo.setLoc(readSourceLocation());
8759   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8760   return NameInfo;
8761 }
8762 
8763 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8764   Info.QualifierLoc = readNestedNameSpecifierLoc();
8765   unsigned NumTPLists = readInt();
8766   Info.NumTemplParamLists = NumTPLists;
8767   if (NumTPLists) {
8768     Info.TemplParamLists =
8769         new (getContext()) TemplateParameterList *[NumTPLists];
8770     for (unsigned i = 0; i != NumTPLists; ++i)
8771       Info.TemplParamLists[i] = readTemplateParameterList();
8772   }
8773 }
8774 
8775 TemplateParameterList *
8776 ASTRecordReader::readTemplateParameterList() {
8777   SourceLocation TemplateLoc = readSourceLocation();
8778   SourceLocation LAngleLoc = readSourceLocation();
8779   SourceLocation RAngleLoc = readSourceLocation();
8780 
8781   unsigned NumParams = readInt();
8782   SmallVector<NamedDecl *, 16> Params;
8783   Params.reserve(NumParams);
8784   while (NumParams--)
8785     Params.push_back(readDeclAs<NamedDecl>());
8786 
8787   bool HasRequiresClause = readBool();
8788   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8789 
8790   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8791       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8792   return TemplateParams;
8793 }
8794 
8795 void ASTRecordReader::readTemplateArgumentList(
8796                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8797                         bool Canonicalize) {
8798   unsigned NumTemplateArgs = readInt();
8799   TemplArgs.reserve(NumTemplateArgs);
8800   while (NumTemplateArgs--)
8801     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8802 }
8803 
8804 /// Read a UnresolvedSet structure.
8805 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8806   unsigned NumDecls = readInt();
8807   Set.reserve(getContext(), NumDecls);
8808   while (NumDecls--) {
8809     DeclID ID = readDeclID();
8810     AccessSpecifier AS = (AccessSpecifier) readInt();
8811     Set.addLazyDecl(getContext(), ID, AS);
8812   }
8813 }
8814 
8815 CXXBaseSpecifier
8816 ASTRecordReader::readCXXBaseSpecifier() {
8817   bool isVirtual = readBool();
8818   bool isBaseOfClass = readBool();
8819   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8820   bool inheritConstructors = readBool();
8821   TypeSourceInfo *TInfo = readTypeSourceInfo();
8822   SourceRange Range = readSourceRange();
8823   SourceLocation EllipsisLoc = readSourceLocation();
8824   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8825                           EllipsisLoc);
8826   Result.setInheritConstructors(inheritConstructors);
8827   return Result;
8828 }
8829 
8830 CXXCtorInitializer **
8831 ASTRecordReader::readCXXCtorInitializers() {
8832   ASTContext &Context = getContext();
8833   unsigned NumInitializers = readInt();
8834   assert(NumInitializers && "wrote ctor initializers but have no inits");
8835   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8836   for (unsigned i = 0; i != NumInitializers; ++i) {
8837     TypeSourceInfo *TInfo = nullptr;
8838     bool IsBaseVirtual = false;
8839     FieldDecl *Member = nullptr;
8840     IndirectFieldDecl *IndirectMember = nullptr;
8841 
8842     CtorInitializerType Type = (CtorInitializerType) readInt();
8843     switch (Type) {
8844     case CTOR_INITIALIZER_BASE:
8845       TInfo = readTypeSourceInfo();
8846       IsBaseVirtual = readBool();
8847       break;
8848 
8849     case CTOR_INITIALIZER_DELEGATING:
8850       TInfo = readTypeSourceInfo();
8851       break;
8852 
8853      case CTOR_INITIALIZER_MEMBER:
8854       Member = readDeclAs<FieldDecl>();
8855       break;
8856 
8857      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8858       IndirectMember = readDeclAs<IndirectFieldDecl>();
8859       break;
8860     }
8861 
8862     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8863     Expr *Init = readExpr();
8864     SourceLocation LParenLoc = readSourceLocation();
8865     SourceLocation RParenLoc = readSourceLocation();
8866 
8867     CXXCtorInitializer *BOMInit;
8868     if (Type == CTOR_INITIALIZER_BASE)
8869       BOMInit = new (Context)
8870           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8871                              RParenLoc, MemberOrEllipsisLoc);
8872     else if (Type == CTOR_INITIALIZER_DELEGATING)
8873       BOMInit = new (Context)
8874           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8875     else if (Member)
8876       BOMInit = new (Context)
8877           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8878                              Init, RParenLoc);
8879     else
8880       BOMInit = new (Context)
8881           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8882                              LParenLoc, Init, RParenLoc);
8883 
8884     if (/*IsWritten*/readBool()) {
8885       unsigned SourceOrder = readInt();
8886       BOMInit->setSourceOrder(SourceOrder);
8887     }
8888 
8889     CtorInitializers[i] = BOMInit;
8890   }
8891 
8892   return CtorInitializers;
8893 }
8894 
8895 NestedNameSpecifierLoc
8896 ASTRecordReader::readNestedNameSpecifierLoc() {
8897   ASTContext &Context = getContext();
8898   unsigned N = readInt();
8899   NestedNameSpecifierLocBuilder Builder;
8900   for (unsigned I = 0; I != N; ++I) {
8901     auto Kind = readNestedNameSpecifierKind();
8902     switch (Kind) {
8903     case NestedNameSpecifier::Identifier: {
8904       IdentifierInfo *II = readIdentifier();
8905       SourceRange Range = readSourceRange();
8906       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8907       break;
8908     }
8909 
8910     case NestedNameSpecifier::Namespace: {
8911       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8912       SourceRange Range = readSourceRange();
8913       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8914       break;
8915     }
8916 
8917     case NestedNameSpecifier::NamespaceAlias: {
8918       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8919       SourceRange Range = readSourceRange();
8920       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8921       break;
8922     }
8923 
8924     case NestedNameSpecifier::TypeSpec:
8925     case NestedNameSpecifier::TypeSpecWithTemplate: {
8926       bool Template = readBool();
8927       TypeSourceInfo *T = readTypeSourceInfo();
8928       if (!T)
8929         return NestedNameSpecifierLoc();
8930       SourceLocation ColonColonLoc = readSourceLocation();
8931 
8932       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8933       Builder.Extend(Context,
8934                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8935                      T->getTypeLoc(), ColonColonLoc);
8936       break;
8937     }
8938 
8939     case NestedNameSpecifier::Global: {
8940       SourceLocation ColonColonLoc = readSourceLocation();
8941       Builder.MakeGlobal(Context, ColonColonLoc);
8942       break;
8943     }
8944 
8945     case NestedNameSpecifier::Super: {
8946       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8947       SourceRange Range = readSourceRange();
8948       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8949       break;
8950     }
8951     }
8952   }
8953 
8954   return Builder.getWithLocInContext(Context);
8955 }
8956 
8957 SourceRange
8958 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8959                            unsigned &Idx) {
8960   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8961   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8962   return SourceRange(beg, end);
8963 }
8964 
8965 /// Read a floating-point value
8966 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8967   return llvm::APFloat(Sem, readAPInt());
8968 }
8969 
8970 // Read a string
8971 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8972   unsigned Len = Record[Idx++];
8973   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8974   Idx += Len;
8975   return Result;
8976 }
8977 
8978 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8979                                 unsigned &Idx) {
8980   std::string Filename = ReadString(Record, Idx);
8981   ResolveImportedPath(F, Filename);
8982   return Filename;
8983 }
8984 
8985 std::string ASTReader::ReadPath(StringRef BaseDirectory,
8986                                 const RecordData &Record, unsigned &Idx) {
8987   std::string Filename = ReadString(Record, Idx);
8988   if (!BaseDirectory.empty())
8989     ResolveImportedPath(Filename, BaseDirectory);
8990   return Filename;
8991 }
8992 
8993 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8994                                          unsigned &Idx) {
8995   unsigned Major = Record[Idx++];
8996   unsigned Minor = Record[Idx++];
8997   unsigned Subminor = Record[Idx++];
8998   if (Minor == 0)
8999     return VersionTuple(Major);
9000   if (Subminor == 0)
9001     return VersionTuple(Major, Minor - 1);
9002   return VersionTuple(Major, Minor - 1, Subminor - 1);
9003 }
9004 
9005 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9006                                           const RecordData &Record,
9007                                           unsigned &Idx) {
9008   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9009   return CXXTemporary::Create(getContext(), Decl);
9010 }
9011 
9012 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9013   return Diag(CurrentImportLoc, DiagID);
9014 }
9015 
9016 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9017   return Diags.Report(Loc, DiagID);
9018 }
9019 
9020 /// Retrieve the identifier table associated with the
9021 /// preprocessor.
9022 IdentifierTable &ASTReader::getIdentifierTable() {
9023   return PP.getIdentifierTable();
9024 }
9025 
9026 /// Record that the given ID maps to the given switch-case
9027 /// statement.
9028 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9029   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9030          "Already have a SwitchCase with this ID");
9031   (*CurrSwitchCaseStmts)[ID] = SC;
9032 }
9033 
9034 /// Retrieve the switch-case statement with the given ID.
9035 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9036   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9037   return (*CurrSwitchCaseStmts)[ID];
9038 }
9039 
9040 void ASTReader::ClearSwitchCaseIDs() {
9041   CurrSwitchCaseStmts->clear();
9042 }
9043 
9044 void ASTReader::ReadComments() {
9045   ASTContext &Context = getContext();
9046   std::vector<RawComment *> Comments;
9047   for (SmallVectorImpl<std::pair<BitstreamCursor,
9048                                  serialization::ModuleFile *>>::iterator
9049        I = CommentsCursors.begin(),
9050        E = CommentsCursors.end();
9051        I != E; ++I) {
9052     Comments.clear();
9053     BitstreamCursor &Cursor = I->first;
9054     serialization::ModuleFile &F = *I->second;
9055     SavedStreamPosition SavedPosition(Cursor);
9056 
9057     RecordData Record;
9058     while (true) {
9059       Expected<llvm::BitstreamEntry> MaybeEntry =
9060           Cursor.advanceSkippingSubblocks(
9061               BitstreamCursor::AF_DontPopBlockAtEnd);
9062       if (!MaybeEntry) {
9063         Error(MaybeEntry.takeError());
9064         return;
9065       }
9066       llvm::BitstreamEntry Entry = MaybeEntry.get();
9067 
9068       switch (Entry.Kind) {
9069       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9070       case llvm::BitstreamEntry::Error:
9071         Error("malformed block record in AST file");
9072         return;
9073       case llvm::BitstreamEntry::EndBlock:
9074         goto NextCursor;
9075       case llvm::BitstreamEntry::Record:
9076         // The interesting case.
9077         break;
9078       }
9079 
9080       // Read a record.
9081       Record.clear();
9082       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9083       if (!MaybeComment) {
9084         Error(MaybeComment.takeError());
9085         return;
9086       }
9087       switch ((CommentRecordTypes)MaybeComment.get()) {
9088       case COMMENTS_RAW_COMMENT: {
9089         unsigned Idx = 0;
9090         SourceRange SR = ReadSourceRange(F, Record, Idx);
9091         RawComment::CommentKind Kind =
9092             (RawComment::CommentKind) Record[Idx++];
9093         bool IsTrailingComment = Record[Idx++];
9094         bool IsAlmostTrailingComment = Record[Idx++];
9095         Comments.push_back(new (Context) RawComment(
9096             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9097         break;
9098       }
9099       }
9100     }
9101   NextCursor:
9102     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9103         FileToOffsetToComment;
9104     for (RawComment *C : Comments) {
9105       SourceLocation CommentLoc = C->getBeginLoc();
9106       if (CommentLoc.isValid()) {
9107         std::pair<FileID, unsigned> Loc =
9108             SourceMgr.getDecomposedLoc(CommentLoc);
9109         if (Loc.first.isValid())
9110           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9111       }
9112     }
9113   }
9114 }
9115 
9116 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9117                                 bool IncludeSystem, bool Complain,
9118                     llvm::function_ref<void(const serialization::InputFile &IF,
9119                                             bool isSystem)> Visitor) {
9120   unsigned NumUserInputs = MF.NumUserInputFiles;
9121   unsigned NumInputs = MF.InputFilesLoaded.size();
9122   assert(NumUserInputs <= NumInputs);
9123   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9124   for (unsigned I = 0; I < N; ++I) {
9125     bool IsSystem = I >= NumUserInputs;
9126     InputFile IF = getInputFile(MF, I+1, Complain);
9127     Visitor(IF, IsSystem);
9128   }
9129 }
9130 
9131 void ASTReader::visitTopLevelModuleMaps(
9132     serialization::ModuleFile &MF,
9133     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9134   unsigned NumInputs = MF.InputFilesLoaded.size();
9135   for (unsigned I = 0; I < NumInputs; ++I) {
9136     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9137     if (IFI.TopLevelModuleMap)
9138       // FIXME: This unnecessarily re-reads the InputFileInfo.
9139       if (auto FE = getInputFile(MF, I + 1).getFile())
9140         Visitor(FE);
9141   }
9142 }
9143 
9144 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9145   // If we know the owning module, use it.
9146   if (Module *M = D->getImportedOwningModule())
9147     return M->getFullModuleName();
9148 
9149   // Otherwise, use the name of the top-level module the decl is within.
9150   if (ModuleFile *M = getOwningModuleFile(D))
9151     return M->ModuleName;
9152 
9153   // Not from a module.
9154   return {};
9155 }
9156 
9157 void ASTReader::finishPendingActions() {
9158   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9159          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9160          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9161          !PendingUpdateRecords.empty()) {
9162     // If any identifiers with corresponding top-level declarations have
9163     // been loaded, load those declarations now.
9164     using TopLevelDeclsMap =
9165         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9166     TopLevelDeclsMap TopLevelDecls;
9167 
9168     while (!PendingIdentifierInfos.empty()) {
9169       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9170       SmallVector<uint32_t, 4> DeclIDs =
9171           std::move(PendingIdentifierInfos.back().second);
9172       PendingIdentifierInfos.pop_back();
9173 
9174       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9175     }
9176 
9177     // Load each function type that we deferred loading because it was a
9178     // deduced type that might refer to a local type declared within itself.
9179     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9180       auto *FD = PendingFunctionTypes[I].first;
9181       FD->setType(GetType(PendingFunctionTypes[I].second));
9182 
9183       // If we gave a function a deduced return type, remember that we need to
9184       // propagate that along the redeclaration chain.
9185       auto *DT = FD->getReturnType()->getContainedDeducedType();
9186       if (DT && DT->isDeduced())
9187         PendingDeducedTypeUpdates.insert(
9188             {FD->getCanonicalDecl(), FD->getReturnType()});
9189     }
9190     PendingFunctionTypes.clear();
9191 
9192     // For each decl chain that we wanted to complete while deserializing, mark
9193     // it as "still needs to be completed".
9194     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9195       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9196     }
9197     PendingIncompleteDeclChains.clear();
9198 
9199     // Load pending declaration chains.
9200     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9201       loadPendingDeclChain(PendingDeclChains[I].first,
9202                            PendingDeclChains[I].second);
9203     PendingDeclChains.clear();
9204 
9205     // Make the most recent of the top-level declarations visible.
9206     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9207            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9208       IdentifierInfo *II = TLD->first;
9209       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9210         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9211       }
9212     }
9213 
9214     // Load any pending macro definitions.
9215     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9216       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9217       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9218       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9219       // Initialize the macro history from chained-PCHs ahead of module imports.
9220       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9221            ++IDIdx) {
9222         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9223         if (!Info.M->isModule())
9224           resolvePendingMacro(II, Info);
9225       }
9226       // Handle module imports.
9227       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9228            ++IDIdx) {
9229         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9230         if (Info.M->isModule())
9231           resolvePendingMacro(II, Info);
9232       }
9233     }
9234     PendingMacroIDs.clear();
9235 
9236     // Wire up the DeclContexts for Decls that we delayed setting until
9237     // recursive loading is completed.
9238     while (!PendingDeclContextInfos.empty()) {
9239       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9240       PendingDeclContextInfos.pop_front();
9241       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9242       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9243       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9244     }
9245 
9246     // Perform any pending declaration updates.
9247     while (!PendingUpdateRecords.empty()) {
9248       auto Update = PendingUpdateRecords.pop_back_val();
9249       ReadingKindTracker ReadingKind(Read_Decl, *this);
9250       loadDeclUpdateRecords(Update);
9251     }
9252   }
9253 
9254   // At this point, all update records for loaded decls are in place, so any
9255   // fake class definitions should have become real.
9256   assert(PendingFakeDefinitionData.empty() &&
9257          "faked up a class definition but never saw the real one");
9258 
9259   // If we deserialized any C++ or Objective-C class definitions, any
9260   // Objective-C protocol definitions, or any redeclarable templates, make sure
9261   // that all redeclarations point to the definitions. Note that this can only
9262   // happen now, after the redeclaration chains have been fully wired.
9263   for (Decl *D : PendingDefinitions) {
9264     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9265       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9266         // Make sure that the TagType points at the definition.
9267         const_cast<TagType*>(TagT)->decl = TD;
9268       }
9269 
9270       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9271         for (auto *R = getMostRecentExistingDecl(RD); R;
9272              R = R->getPreviousDecl()) {
9273           assert((R == D) ==
9274                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9275                  "declaration thinks it's the definition but it isn't");
9276           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9277         }
9278       }
9279 
9280       continue;
9281     }
9282 
9283     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9284       // Make sure that the ObjCInterfaceType points at the definition.
9285       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9286         ->Decl = ID;
9287 
9288       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9289         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9290 
9291       continue;
9292     }
9293 
9294     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9295       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9296         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9297 
9298       continue;
9299     }
9300 
9301     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9302     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9303       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9304   }
9305   PendingDefinitions.clear();
9306 
9307   // Load the bodies of any functions or methods we've encountered. We do
9308   // this now (delayed) so that we can be sure that the declaration chains
9309   // have been fully wired up (hasBody relies on this).
9310   // FIXME: We shouldn't require complete redeclaration chains here.
9311   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9312                                PBEnd = PendingBodies.end();
9313        PB != PBEnd; ++PB) {
9314     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9315       // For a function defined inline within a class template, force the
9316       // canonical definition to be the one inside the canonical definition of
9317       // the template. This ensures that we instantiate from a correct view
9318       // of the template.
9319       //
9320       // Sadly we can't do this more generally: we can't be sure that all
9321       // copies of an arbitrary class definition will have the same members
9322       // defined (eg, some member functions may not be instantiated, and some
9323       // special members may or may not have been implicitly defined).
9324       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9325         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9326           continue;
9327 
9328       // FIXME: Check for =delete/=default?
9329       // FIXME: Complain about ODR violations here?
9330       const FunctionDecl *Defn = nullptr;
9331       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9332         FD->setLazyBody(PB->second);
9333       } else {
9334         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9335         mergeDefinitionVisibility(NonConstDefn, FD);
9336 
9337         if (!FD->isLateTemplateParsed() &&
9338             !NonConstDefn->isLateTemplateParsed() &&
9339             FD->getODRHash() != NonConstDefn->getODRHash()) {
9340           if (!isa<CXXMethodDecl>(FD)) {
9341             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9342           } else if (FD->getLexicalParent()->isFileContext() &&
9343                      NonConstDefn->getLexicalParent()->isFileContext()) {
9344             // Only diagnose out-of-line method definitions.  If they are
9345             // in class definitions, then an error will be generated when
9346             // processing the class bodies.
9347             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9348           }
9349         }
9350       }
9351       continue;
9352     }
9353 
9354     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9355     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9356       MD->setLazyBody(PB->second);
9357   }
9358   PendingBodies.clear();
9359 
9360   // Do some cleanup.
9361   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9362     getContext().deduplicateMergedDefinitonsFor(ND);
9363   PendingMergedDefinitionsToDeduplicate.clear();
9364 }
9365 
9366 void ASTReader::diagnoseOdrViolations() {
9367   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9368       PendingFunctionOdrMergeFailures.empty() &&
9369       PendingEnumOdrMergeFailures.empty())
9370     return;
9371 
9372   // Trigger the import of the full definition of each class that had any
9373   // odr-merging problems, so we can produce better diagnostics for them.
9374   // These updates may in turn find and diagnose some ODR failures, so take
9375   // ownership of the set first.
9376   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9377   PendingOdrMergeFailures.clear();
9378   for (auto &Merge : OdrMergeFailures) {
9379     Merge.first->buildLookup();
9380     Merge.first->decls_begin();
9381     Merge.first->bases_begin();
9382     Merge.first->vbases_begin();
9383     for (auto &RecordPair : Merge.second) {
9384       auto *RD = RecordPair.first;
9385       RD->decls_begin();
9386       RD->bases_begin();
9387       RD->vbases_begin();
9388     }
9389   }
9390 
9391   // Trigger the import of functions.
9392   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9393   PendingFunctionOdrMergeFailures.clear();
9394   for (auto &Merge : FunctionOdrMergeFailures) {
9395     Merge.first->buildLookup();
9396     Merge.first->decls_begin();
9397     Merge.first->getBody();
9398     for (auto &FD : Merge.second) {
9399       FD->buildLookup();
9400       FD->decls_begin();
9401       FD->getBody();
9402     }
9403   }
9404 
9405   // Trigger the import of enums.
9406   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9407   PendingEnumOdrMergeFailures.clear();
9408   for (auto &Merge : EnumOdrMergeFailures) {
9409     Merge.first->decls_begin();
9410     for (auto &Enum : Merge.second) {
9411       Enum->decls_begin();
9412     }
9413   }
9414 
9415   // For each declaration from a merged context, check that the canonical
9416   // definition of that context also contains a declaration of the same
9417   // entity.
9418   //
9419   // Caution: this loop does things that might invalidate iterators into
9420   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9421   while (!PendingOdrMergeChecks.empty()) {
9422     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9423 
9424     // FIXME: Skip over implicit declarations for now. This matters for things
9425     // like implicitly-declared special member functions. This isn't entirely
9426     // correct; we can end up with multiple unmerged declarations of the same
9427     // implicit entity.
9428     if (D->isImplicit())
9429       continue;
9430 
9431     DeclContext *CanonDef = D->getDeclContext();
9432 
9433     bool Found = false;
9434     const Decl *DCanon = D->getCanonicalDecl();
9435 
9436     for (auto RI : D->redecls()) {
9437       if (RI->getLexicalDeclContext() == CanonDef) {
9438         Found = true;
9439         break;
9440       }
9441     }
9442     if (Found)
9443       continue;
9444 
9445     // Quick check failed, time to do the slow thing. Note, we can't just
9446     // look up the name of D in CanonDef here, because the member that is
9447     // in CanonDef might not be found by name lookup (it might have been
9448     // replaced by a more recent declaration in the lookup table), and we
9449     // can't necessarily find it in the redeclaration chain because it might
9450     // be merely mergeable, not redeclarable.
9451     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9452     for (auto *CanonMember : CanonDef->decls()) {
9453       if (CanonMember->getCanonicalDecl() == DCanon) {
9454         // This can happen if the declaration is merely mergeable and not
9455         // actually redeclarable (we looked for redeclarations earlier).
9456         //
9457         // FIXME: We should be able to detect this more efficiently, without
9458         // pulling in all of the members of CanonDef.
9459         Found = true;
9460         break;
9461       }
9462       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9463         if (ND->getDeclName() == D->getDeclName())
9464           Candidates.push_back(ND);
9465     }
9466 
9467     if (!Found) {
9468       // The AST doesn't like TagDecls becoming invalid after they've been
9469       // completed. We only really need to mark FieldDecls as invalid here.
9470       if (!isa<TagDecl>(D))
9471         D->setInvalidDecl();
9472 
9473       // Ensure we don't accidentally recursively enter deserialization while
9474       // we're producing our diagnostic.
9475       Deserializing RecursionGuard(this);
9476 
9477       std::string CanonDefModule =
9478           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9479       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9480         << D << getOwningModuleNameForDiagnostic(D)
9481         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9482 
9483       if (Candidates.empty())
9484         Diag(cast<Decl>(CanonDef)->getLocation(),
9485              diag::note_module_odr_violation_no_possible_decls) << D;
9486       else {
9487         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9488           Diag(Candidates[I]->getLocation(),
9489                diag::note_module_odr_violation_possible_decl)
9490             << Candidates[I];
9491       }
9492 
9493       DiagnosedOdrMergeFailures.insert(CanonDef);
9494     }
9495   }
9496 
9497   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9498       EnumOdrMergeFailures.empty())
9499     return;
9500 
9501   // Ensure we don't accidentally recursively enter deserialization while
9502   // we're producing our diagnostics.
9503   Deserializing RecursionGuard(this);
9504 
9505   // Common code for hashing helpers.
9506   ODRHash Hash;
9507   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9508     Hash.clear();
9509     Hash.AddQualType(Ty);
9510     return Hash.CalculateHash();
9511   };
9512 
9513   auto ComputeODRHash = [&Hash](const Stmt *S) {
9514     assert(S);
9515     Hash.clear();
9516     Hash.AddStmt(S);
9517     return Hash.CalculateHash();
9518   };
9519 
9520   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9521     assert(D);
9522     Hash.clear();
9523     Hash.AddSubDecl(D);
9524     return Hash.CalculateHash();
9525   };
9526 
9527   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9528     Hash.clear();
9529     Hash.AddTemplateArgument(TA);
9530     return Hash.CalculateHash();
9531   };
9532 
9533   auto ComputeTemplateParameterListODRHash =
9534       [&Hash](const TemplateParameterList *TPL) {
9535         assert(TPL);
9536         Hash.clear();
9537         Hash.AddTemplateParameterList(TPL);
9538         return Hash.CalculateHash();
9539       };
9540 
9541   // Used with err_module_odr_violation_mismatch_decl and
9542   // note_module_odr_violation_mismatch_decl
9543   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9544   enum ODRMismatchDecl {
9545     EndOfClass,
9546     PublicSpecifer,
9547     PrivateSpecifer,
9548     ProtectedSpecifer,
9549     StaticAssert,
9550     Field,
9551     CXXMethod,
9552     TypeAlias,
9553     TypeDef,
9554     Var,
9555     Friend,
9556     FunctionTemplate,
9557     Other
9558   };
9559 
9560   // Used with err_module_odr_violation_mismatch_decl_diff and
9561   // note_module_odr_violation_mismatch_decl_diff
9562   enum ODRMismatchDeclDifference {
9563     StaticAssertCondition,
9564     StaticAssertMessage,
9565     StaticAssertOnlyMessage,
9566     FieldName,
9567     FieldTypeName,
9568     FieldSingleBitField,
9569     FieldDifferentWidthBitField,
9570     FieldSingleMutable,
9571     FieldSingleInitializer,
9572     FieldDifferentInitializers,
9573     MethodName,
9574     MethodDeleted,
9575     MethodDefaulted,
9576     MethodVirtual,
9577     MethodStatic,
9578     MethodVolatile,
9579     MethodConst,
9580     MethodInline,
9581     MethodNumberParameters,
9582     MethodParameterType,
9583     MethodParameterName,
9584     MethodParameterSingleDefaultArgument,
9585     MethodParameterDifferentDefaultArgument,
9586     MethodNoTemplateArguments,
9587     MethodDifferentNumberTemplateArguments,
9588     MethodDifferentTemplateArgument,
9589     MethodSingleBody,
9590     MethodDifferentBody,
9591     TypedefName,
9592     TypedefType,
9593     VarName,
9594     VarType,
9595     VarSingleInitializer,
9596     VarDifferentInitializer,
9597     VarConstexpr,
9598     FriendTypeFunction,
9599     FriendType,
9600     FriendFunction,
9601     FunctionTemplateDifferentNumberParameters,
9602     FunctionTemplateParameterDifferentKind,
9603     FunctionTemplateParameterName,
9604     FunctionTemplateParameterSingleDefaultArgument,
9605     FunctionTemplateParameterDifferentDefaultArgument,
9606     FunctionTemplateParameterDifferentType,
9607     FunctionTemplatePackParameter,
9608   };
9609 
9610   // These lambdas have the common portions of the ODR diagnostics.  This
9611   // has the same return as Diag(), so addition parameters can be passed
9612   // in with operator<<
9613   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9614                                  SourceLocation Loc, SourceRange Range,
9615                                  ODRMismatchDeclDifference DiffType) {
9616     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9617            << FirstRecord << FirstModule.empty() << FirstModule << Range
9618            << DiffType;
9619   };
9620   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9621                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9622     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9623            << SecondModule << Range << DiffType;
9624   };
9625 
9626   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9627                        &ComputeQualTypeODRHash, &ComputeODRHash](
9628                           NamedDecl *FirstRecord, StringRef FirstModule,
9629                           StringRef SecondModule, FieldDecl *FirstField,
9630                           FieldDecl *SecondField) {
9631     IdentifierInfo *FirstII = FirstField->getIdentifier();
9632     IdentifierInfo *SecondII = SecondField->getIdentifier();
9633     if (FirstII->getName() != SecondII->getName()) {
9634       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9635                        FirstField->getSourceRange(), FieldName)
9636           << FirstII;
9637       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9638                       SecondField->getSourceRange(), FieldName)
9639           << SecondII;
9640 
9641       return true;
9642     }
9643 
9644     assert(getContext().hasSameType(FirstField->getType(),
9645                                     SecondField->getType()));
9646 
9647     QualType FirstType = FirstField->getType();
9648     QualType SecondType = SecondField->getType();
9649     if (ComputeQualTypeODRHash(FirstType) !=
9650         ComputeQualTypeODRHash(SecondType)) {
9651       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9652                        FirstField->getSourceRange(), FieldTypeName)
9653           << FirstII << FirstType;
9654       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9655                       SecondField->getSourceRange(), FieldTypeName)
9656           << SecondII << SecondType;
9657 
9658       return true;
9659     }
9660 
9661     const bool IsFirstBitField = FirstField->isBitField();
9662     const bool IsSecondBitField = SecondField->isBitField();
9663     if (IsFirstBitField != IsSecondBitField) {
9664       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9665                        FirstField->getSourceRange(), FieldSingleBitField)
9666           << FirstII << IsFirstBitField;
9667       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9668                       SecondField->getSourceRange(), FieldSingleBitField)
9669           << SecondII << IsSecondBitField;
9670       return true;
9671     }
9672 
9673     if (IsFirstBitField && IsSecondBitField) {
9674       unsigned FirstBitWidthHash =
9675           ComputeODRHash(FirstField->getBitWidth());
9676       unsigned SecondBitWidthHash =
9677           ComputeODRHash(SecondField->getBitWidth());
9678       if (FirstBitWidthHash != SecondBitWidthHash) {
9679         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9680                          FirstField->getSourceRange(),
9681                          FieldDifferentWidthBitField)
9682             << FirstII << FirstField->getBitWidth()->getSourceRange();
9683         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9684                         SecondField->getSourceRange(),
9685                         FieldDifferentWidthBitField)
9686             << SecondII << SecondField->getBitWidth()->getSourceRange();
9687         return true;
9688       }
9689     }
9690 
9691     if (!PP.getLangOpts().CPlusPlus)
9692       return false;
9693 
9694     const bool IsFirstMutable = FirstField->isMutable();
9695     const bool IsSecondMutable = SecondField->isMutable();
9696     if (IsFirstMutable != IsSecondMutable) {
9697       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9698                        FirstField->getSourceRange(), FieldSingleMutable)
9699           << FirstII << IsFirstMutable;
9700       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9701                       SecondField->getSourceRange(), FieldSingleMutable)
9702           << SecondII << IsSecondMutable;
9703       return true;
9704     }
9705 
9706     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9707     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9708     if ((!FirstInitializer && SecondInitializer) ||
9709         (FirstInitializer && !SecondInitializer)) {
9710       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9711                        FirstField->getSourceRange(), FieldSingleInitializer)
9712           << FirstII << (FirstInitializer != nullptr);
9713       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9714                       SecondField->getSourceRange(), FieldSingleInitializer)
9715           << SecondII << (SecondInitializer != nullptr);
9716       return true;
9717     }
9718 
9719     if (FirstInitializer && SecondInitializer) {
9720       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9721       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9722       if (FirstInitHash != SecondInitHash) {
9723         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9724                          FirstField->getSourceRange(),
9725                          FieldDifferentInitializers)
9726             << FirstII << FirstInitializer->getSourceRange();
9727         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9728                         SecondField->getSourceRange(),
9729                         FieldDifferentInitializers)
9730             << SecondII << SecondInitializer->getSourceRange();
9731         return true;
9732       }
9733     }
9734 
9735     return false;
9736   };
9737 
9738   auto ODRDiagTypeDefOrAlias =
9739       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9740           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9741           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9742           bool IsTypeAlias) {
9743         auto FirstName = FirstTD->getDeclName();
9744         auto SecondName = SecondTD->getDeclName();
9745         if (FirstName != SecondName) {
9746           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9747                            FirstTD->getSourceRange(), TypedefName)
9748               << IsTypeAlias << FirstName;
9749           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9750                           SecondTD->getSourceRange(), TypedefName)
9751               << IsTypeAlias << SecondName;
9752           return true;
9753         }
9754 
9755         QualType FirstType = FirstTD->getUnderlyingType();
9756         QualType SecondType = SecondTD->getUnderlyingType();
9757         if (ComputeQualTypeODRHash(FirstType) !=
9758             ComputeQualTypeODRHash(SecondType)) {
9759           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9760                            FirstTD->getSourceRange(), TypedefType)
9761               << IsTypeAlias << FirstName << FirstType;
9762           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9763                           SecondTD->getSourceRange(), TypedefType)
9764               << IsTypeAlias << SecondName << SecondType;
9765           return true;
9766         }
9767 
9768         return false;
9769   };
9770 
9771   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9772                      &ComputeQualTypeODRHash, &ComputeODRHash,
9773                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9774                            StringRef SecondModule, VarDecl *FirstVD,
9775                            VarDecl *SecondVD) {
9776     auto FirstName = FirstVD->getDeclName();
9777     auto SecondName = SecondVD->getDeclName();
9778     if (FirstName != SecondName) {
9779       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9780                        FirstVD->getSourceRange(), VarName)
9781           << FirstName;
9782       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9783                       SecondVD->getSourceRange(), VarName)
9784           << SecondName;
9785       return true;
9786     }
9787 
9788     QualType FirstType = FirstVD->getType();
9789     QualType SecondType = SecondVD->getType();
9790     if (ComputeQualTypeODRHash(FirstType) !=
9791         ComputeQualTypeODRHash(SecondType)) {
9792       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9793                        FirstVD->getSourceRange(), VarType)
9794           << FirstName << FirstType;
9795       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9796                       SecondVD->getSourceRange(), VarType)
9797           << SecondName << SecondType;
9798       return true;
9799     }
9800 
9801     if (!PP.getLangOpts().CPlusPlus)
9802       return false;
9803 
9804     const Expr *FirstInit = FirstVD->getInit();
9805     const Expr *SecondInit = SecondVD->getInit();
9806     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9807       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9808                        FirstVD->getSourceRange(), VarSingleInitializer)
9809           << FirstName << (FirstInit == nullptr)
9810           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9811       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9812                       SecondVD->getSourceRange(), VarSingleInitializer)
9813           << SecondName << (SecondInit == nullptr)
9814           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9815       return true;
9816     }
9817 
9818     if (FirstInit && SecondInit &&
9819         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9820       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9821                        FirstVD->getSourceRange(), VarDifferentInitializer)
9822           << FirstName << FirstInit->getSourceRange();
9823       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9824                       SecondVD->getSourceRange(), VarDifferentInitializer)
9825           << SecondName << SecondInit->getSourceRange();
9826       return true;
9827     }
9828 
9829     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9830     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9831     if (FirstIsConstexpr != SecondIsConstexpr) {
9832       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9833                        FirstVD->getSourceRange(), VarConstexpr)
9834           << FirstName << FirstIsConstexpr;
9835       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9836                       SecondVD->getSourceRange(), VarConstexpr)
9837           << SecondName << SecondIsConstexpr;
9838       return true;
9839     }
9840     return false;
9841   };
9842 
9843   auto DifferenceSelector = [](Decl *D) {
9844     assert(D && "valid Decl required");
9845     switch (D->getKind()) {
9846     default:
9847       return Other;
9848     case Decl::AccessSpec:
9849       switch (D->getAccess()) {
9850       case AS_public:
9851         return PublicSpecifer;
9852       case AS_private:
9853         return PrivateSpecifer;
9854       case AS_protected:
9855         return ProtectedSpecifer;
9856       case AS_none:
9857         break;
9858       }
9859       llvm_unreachable("Invalid access specifier");
9860     case Decl::StaticAssert:
9861       return StaticAssert;
9862     case Decl::Field:
9863       return Field;
9864     case Decl::CXXMethod:
9865     case Decl::CXXConstructor:
9866     case Decl::CXXDestructor:
9867       return CXXMethod;
9868     case Decl::TypeAlias:
9869       return TypeAlias;
9870     case Decl::Typedef:
9871       return TypeDef;
9872     case Decl::Var:
9873       return Var;
9874     case Decl::Friend:
9875       return Friend;
9876     case Decl::FunctionTemplate:
9877       return FunctionTemplate;
9878     }
9879   };
9880 
9881   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9882   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9883                                                  RecordDecl *Record,
9884                                                  const DeclContext *DC) {
9885     for (auto *D : Record->decls()) {
9886       if (!ODRHash::isDeclToBeProcessed(D, DC))
9887         continue;
9888       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9889     }
9890   };
9891 
9892   struct DiffResult {
9893     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9894     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9895   };
9896 
9897   // If there is a diagnoseable difference, FirstDiffType and
9898   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9899   // filled in if not EndOfClass.
9900   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9901                                              DeclHashes &SecondHashes) {
9902     DiffResult DR;
9903     auto FirstIt = FirstHashes.begin();
9904     auto SecondIt = SecondHashes.begin();
9905     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9906       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9907           FirstIt->second == SecondIt->second) {
9908         ++FirstIt;
9909         ++SecondIt;
9910         continue;
9911       }
9912 
9913       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9914       DR.SecondDecl =
9915           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9916 
9917       DR.FirstDiffType =
9918           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9919       DR.SecondDiffType =
9920           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9921       return DR;
9922     }
9923     return DR;
9924   };
9925 
9926   // Use this to diagnose that an unexpected Decl was encountered
9927   // or no difference was detected. This causes a generic error
9928   // message to be emitted.
9929   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9930                                       StringRef FirstModule,
9931                                       NamedDecl *SecondRecord,
9932                                       StringRef SecondModule) {
9933     Diag(FirstRecord->getLocation(),
9934          diag::err_module_odr_violation_different_definitions)
9935         << FirstRecord << FirstModule.empty() << FirstModule;
9936 
9937     if (DR.FirstDecl) {
9938       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9939           << FirstRecord << DR.FirstDecl->getSourceRange();
9940     }
9941 
9942     Diag(SecondRecord->getLocation(),
9943          diag::note_module_odr_violation_different_definitions)
9944         << SecondModule;
9945 
9946     if (DR.SecondDecl) {
9947       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9948           << DR.SecondDecl->getSourceRange();
9949     }
9950   };
9951 
9952   auto DiagnoseODRMismatch =
9953       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9954              NamedDecl *SecondRecord, StringRef SecondModule) {
9955         SourceLocation FirstLoc;
9956         SourceRange FirstRange;
9957         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9958         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9959           FirstLoc = FirstTag->getBraceRange().getEnd();
9960         } else {
9961           FirstLoc = DR.FirstDecl->getLocation();
9962           FirstRange = DR.FirstDecl->getSourceRange();
9963         }
9964         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9965             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9966             << DR.FirstDiffType;
9967 
9968         SourceLocation SecondLoc;
9969         SourceRange SecondRange;
9970         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9971         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9972           SecondLoc = SecondTag->getBraceRange().getEnd();
9973         } else {
9974           SecondLoc = DR.SecondDecl->getLocation();
9975           SecondRange = DR.SecondDecl->getSourceRange();
9976         }
9977         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9978             << SecondModule << SecondRange << DR.SecondDiffType;
9979       };
9980 
9981   // Issue any pending ODR-failure diagnostics.
9982   for (auto &Merge : OdrMergeFailures) {
9983     // If we've already pointed out a specific problem with this class, don't
9984     // bother issuing a general "something's different" diagnostic.
9985     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9986       continue;
9987 
9988     bool Diagnosed = false;
9989     CXXRecordDecl *FirstRecord = Merge.first;
9990     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9991     for (auto &RecordPair : Merge.second) {
9992       CXXRecordDecl *SecondRecord = RecordPair.first;
9993       // Multiple different declarations got merged together; tell the user
9994       // where they came from.
9995       if (FirstRecord == SecondRecord)
9996         continue;
9997 
9998       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
9999 
10000       auto *FirstDD = FirstRecord->DefinitionData;
10001       auto *SecondDD = RecordPair.second;
10002 
10003       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10004 
10005       // Diagnostics from DefinitionData are emitted here.
10006       if (FirstDD != SecondDD) {
10007         enum ODRDefinitionDataDifference {
10008           NumBases,
10009           NumVBases,
10010           BaseType,
10011           BaseVirtual,
10012           BaseAccess,
10013         };
10014         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10015                                  this](SourceLocation Loc, SourceRange Range,
10016                                        ODRDefinitionDataDifference DiffType) {
10017           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10018                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10019                  << DiffType;
10020         };
10021         auto ODRDiagBaseNote = [&SecondModule,
10022                                 this](SourceLocation Loc, SourceRange Range,
10023                                       ODRDefinitionDataDifference DiffType) {
10024           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10025                  << SecondModule << Range << DiffType;
10026         };
10027 
10028         unsigned FirstNumBases = FirstDD->NumBases;
10029         unsigned FirstNumVBases = FirstDD->NumVBases;
10030         unsigned SecondNumBases = SecondDD->NumBases;
10031         unsigned SecondNumVBases = SecondDD->NumVBases;
10032 
10033         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10034           unsigned NumBases = DD->NumBases;
10035           if (NumBases == 0) return SourceRange();
10036           auto bases = DD->bases();
10037           return SourceRange(bases[0].getBeginLoc(),
10038                              bases[NumBases - 1].getEndLoc());
10039         };
10040 
10041         if (FirstNumBases != SecondNumBases) {
10042           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10043                            NumBases)
10044               << FirstNumBases;
10045           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10046                           NumBases)
10047               << SecondNumBases;
10048           Diagnosed = true;
10049           break;
10050         }
10051 
10052         if (FirstNumVBases != SecondNumVBases) {
10053           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10054                            NumVBases)
10055               << FirstNumVBases;
10056           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10057                           NumVBases)
10058               << SecondNumVBases;
10059           Diagnosed = true;
10060           break;
10061         }
10062 
10063         auto FirstBases = FirstDD->bases();
10064         auto SecondBases = SecondDD->bases();
10065         unsigned i = 0;
10066         for (i = 0; i < FirstNumBases; ++i) {
10067           auto FirstBase = FirstBases[i];
10068           auto SecondBase = SecondBases[i];
10069           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10070               ComputeQualTypeODRHash(SecondBase.getType())) {
10071             ODRDiagBaseError(FirstRecord->getLocation(),
10072                              FirstBase.getSourceRange(), BaseType)
10073                 << (i + 1) << FirstBase.getType();
10074             ODRDiagBaseNote(SecondRecord->getLocation(),
10075                             SecondBase.getSourceRange(), BaseType)
10076                 << (i + 1) << SecondBase.getType();
10077             break;
10078           }
10079 
10080           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10081             ODRDiagBaseError(FirstRecord->getLocation(),
10082                              FirstBase.getSourceRange(), BaseVirtual)
10083                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10084             ODRDiagBaseNote(SecondRecord->getLocation(),
10085                             SecondBase.getSourceRange(), BaseVirtual)
10086                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10087             break;
10088           }
10089 
10090           if (FirstBase.getAccessSpecifierAsWritten() !=
10091               SecondBase.getAccessSpecifierAsWritten()) {
10092             ODRDiagBaseError(FirstRecord->getLocation(),
10093                              FirstBase.getSourceRange(), BaseAccess)
10094                 << (i + 1) << FirstBase.getType()
10095                 << (int)FirstBase.getAccessSpecifierAsWritten();
10096             ODRDiagBaseNote(SecondRecord->getLocation(),
10097                             SecondBase.getSourceRange(), BaseAccess)
10098                 << (i + 1) << SecondBase.getType()
10099                 << (int)SecondBase.getAccessSpecifierAsWritten();
10100             break;
10101           }
10102         }
10103 
10104         if (i != FirstNumBases) {
10105           Diagnosed = true;
10106           break;
10107         }
10108       }
10109 
10110       const ClassTemplateDecl *FirstTemplate =
10111           FirstRecord->getDescribedClassTemplate();
10112       const ClassTemplateDecl *SecondTemplate =
10113           SecondRecord->getDescribedClassTemplate();
10114 
10115       assert(!FirstTemplate == !SecondTemplate &&
10116              "Both pointers should be null or non-null");
10117 
10118       enum ODRTemplateDifference {
10119         ParamEmptyName,
10120         ParamName,
10121         ParamSingleDefaultArgument,
10122         ParamDifferentDefaultArgument,
10123       };
10124 
10125       if (FirstTemplate && SecondTemplate) {
10126         DeclHashes FirstTemplateHashes;
10127         DeclHashes SecondTemplateHashes;
10128 
10129         auto PopulateTemplateParameterHashs =
10130             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10131                                      const ClassTemplateDecl *TD) {
10132               for (auto *D : TD->getTemplateParameters()->asArray()) {
10133                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10134               }
10135             };
10136 
10137         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10138         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10139 
10140         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10141                "Number of template parameters should be equal.");
10142 
10143         auto FirstIt = FirstTemplateHashes.begin();
10144         auto FirstEnd = FirstTemplateHashes.end();
10145         auto SecondIt = SecondTemplateHashes.begin();
10146         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10147           if (FirstIt->second == SecondIt->second)
10148             continue;
10149 
10150           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10151                                           SourceLocation Loc, SourceRange Range,
10152                                           ODRTemplateDifference DiffType) {
10153             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10154                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10155                    << DiffType;
10156           };
10157           auto ODRDiagTemplateNote = [&SecondModule, this](
10158                                          SourceLocation Loc, SourceRange Range,
10159                                          ODRTemplateDifference DiffType) {
10160             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10161                    << SecondModule << Range << DiffType;
10162           };
10163 
10164           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10165           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10166 
10167           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10168                  "Parameter Decl's should be the same kind.");
10169 
10170           DeclarationName FirstName = FirstDecl->getDeclName();
10171           DeclarationName SecondName = SecondDecl->getDeclName();
10172 
10173           if (FirstName != SecondName) {
10174             const bool FirstNameEmpty =
10175                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10176             const bool SecondNameEmpty =
10177                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10178             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10179                    "Both template parameters cannot be unnamed.");
10180             ODRDiagTemplateError(FirstDecl->getLocation(),
10181                                  FirstDecl->getSourceRange(),
10182                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10183                 << FirstName;
10184             ODRDiagTemplateNote(SecondDecl->getLocation(),
10185                                 SecondDecl->getSourceRange(),
10186                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10187                 << SecondName;
10188             break;
10189           }
10190 
10191           switch (FirstDecl->getKind()) {
10192           default:
10193             llvm_unreachable("Invalid template parameter type.");
10194           case Decl::TemplateTypeParm: {
10195             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10196             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10197             const bool HasFirstDefaultArgument =
10198                 FirstParam->hasDefaultArgument() &&
10199                 !FirstParam->defaultArgumentWasInherited();
10200             const bool HasSecondDefaultArgument =
10201                 SecondParam->hasDefaultArgument() &&
10202                 !SecondParam->defaultArgumentWasInherited();
10203 
10204             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10205               ODRDiagTemplateError(FirstDecl->getLocation(),
10206                                    FirstDecl->getSourceRange(),
10207                                    ParamSingleDefaultArgument)
10208                   << HasFirstDefaultArgument;
10209               ODRDiagTemplateNote(SecondDecl->getLocation(),
10210                                   SecondDecl->getSourceRange(),
10211                                   ParamSingleDefaultArgument)
10212                   << HasSecondDefaultArgument;
10213               break;
10214             }
10215 
10216             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10217                    "Expecting default arguments.");
10218 
10219             ODRDiagTemplateError(FirstDecl->getLocation(),
10220                                  FirstDecl->getSourceRange(),
10221                                  ParamDifferentDefaultArgument);
10222             ODRDiagTemplateNote(SecondDecl->getLocation(),
10223                                 SecondDecl->getSourceRange(),
10224                                 ParamDifferentDefaultArgument);
10225 
10226             break;
10227           }
10228           case Decl::NonTypeTemplateParm: {
10229             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10230             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10231             const bool HasFirstDefaultArgument =
10232                 FirstParam->hasDefaultArgument() &&
10233                 !FirstParam->defaultArgumentWasInherited();
10234             const bool HasSecondDefaultArgument =
10235                 SecondParam->hasDefaultArgument() &&
10236                 !SecondParam->defaultArgumentWasInherited();
10237 
10238             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10239               ODRDiagTemplateError(FirstDecl->getLocation(),
10240                                    FirstDecl->getSourceRange(),
10241                                    ParamSingleDefaultArgument)
10242                   << HasFirstDefaultArgument;
10243               ODRDiagTemplateNote(SecondDecl->getLocation(),
10244                                   SecondDecl->getSourceRange(),
10245                                   ParamSingleDefaultArgument)
10246                   << HasSecondDefaultArgument;
10247               break;
10248             }
10249 
10250             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10251                    "Expecting default arguments.");
10252 
10253             ODRDiagTemplateError(FirstDecl->getLocation(),
10254                                  FirstDecl->getSourceRange(),
10255                                  ParamDifferentDefaultArgument);
10256             ODRDiagTemplateNote(SecondDecl->getLocation(),
10257                                 SecondDecl->getSourceRange(),
10258                                 ParamDifferentDefaultArgument);
10259 
10260             break;
10261           }
10262           case Decl::TemplateTemplateParm: {
10263             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10264             const auto *SecondParam =
10265                 cast<TemplateTemplateParmDecl>(SecondDecl);
10266             const bool HasFirstDefaultArgument =
10267                 FirstParam->hasDefaultArgument() &&
10268                 !FirstParam->defaultArgumentWasInherited();
10269             const bool HasSecondDefaultArgument =
10270                 SecondParam->hasDefaultArgument() &&
10271                 !SecondParam->defaultArgumentWasInherited();
10272 
10273             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10274               ODRDiagTemplateError(FirstDecl->getLocation(),
10275                                    FirstDecl->getSourceRange(),
10276                                    ParamSingleDefaultArgument)
10277                   << HasFirstDefaultArgument;
10278               ODRDiagTemplateNote(SecondDecl->getLocation(),
10279                                   SecondDecl->getSourceRange(),
10280                                   ParamSingleDefaultArgument)
10281                   << HasSecondDefaultArgument;
10282               break;
10283             }
10284 
10285             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10286                    "Expecting default arguments.");
10287 
10288             ODRDiagTemplateError(FirstDecl->getLocation(),
10289                                  FirstDecl->getSourceRange(),
10290                                  ParamDifferentDefaultArgument);
10291             ODRDiagTemplateNote(SecondDecl->getLocation(),
10292                                 SecondDecl->getSourceRange(),
10293                                 ParamDifferentDefaultArgument);
10294 
10295             break;
10296           }
10297           }
10298 
10299           break;
10300         }
10301 
10302         if (FirstIt != FirstEnd) {
10303           Diagnosed = true;
10304           break;
10305         }
10306       }
10307 
10308       DeclHashes FirstHashes;
10309       DeclHashes SecondHashes;
10310       const DeclContext *DC = FirstRecord;
10311       PopulateHashes(FirstHashes, FirstRecord, DC);
10312       PopulateHashes(SecondHashes, SecondRecord, DC);
10313 
10314       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10315       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10316       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10317       Decl *FirstDecl = DR.FirstDecl;
10318       Decl *SecondDecl = DR.SecondDecl;
10319 
10320       if (FirstDiffType == Other || SecondDiffType == Other) {
10321         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10322                               SecondModule);
10323         Diagnosed = true;
10324         break;
10325       }
10326 
10327       if (FirstDiffType != SecondDiffType) {
10328         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10329                             SecondModule);
10330         Diagnosed = true;
10331         break;
10332       }
10333 
10334       assert(FirstDiffType == SecondDiffType);
10335 
10336       switch (FirstDiffType) {
10337       case Other:
10338       case EndOfClass:
10339       case PublicSpecifer:
10340       case PrivateSpecifer:
10341       case ProtectedSpecifer:
10342         llvm_unreachable("Invalid diff type");
10343 
10344       case StaticAssert: {
10345         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10346         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10347 
10348         Expr *FirstExpr = FirstSA->getAssertExpr();
10349         Expr *SecondExpr = SecondSA->getAssertExpr();
10350         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10351         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10352         if (FirstODRHash != SecondODRHash) {
10353           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10354                            FirstExpr->getSourceRange(), StaticAssertCondition);
10355           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10356                           SecondExpr->getSourceRange(), StaticAssertCondition);
10357           Diagnosed = true;
10358           break;
10359         }
10360 
10361         StringLiteral *FirstStr = FirstSA->getMessage();
10362         StringLiteral *SecondStr = SecondSA->getMessage();
10363         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10364         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10365           SourceLocation FirstLoc, SecondLoc;
10366           SourceRange FirstRange, SecondRange;
10367           if (FirstStr) {
10368             FirstLoc = FirstStr->getBeginLoc();
10369             FirstRange = FirstStr->getSourceRange();
10370           } else {
10371             FirstLoc = FirstSA->getBeginLoc();
10372             FirstRange = FirstSA->getSourceRange();
10373           }
10374           if (SecondStr) {
10375             SecondLoc = SecondStr->getBeginLoc();
10376             SecondRange = SecondStr->getSourceRange();
10377           } else {
10378             SecondLoc = SecondSA->getBeginLoc();
10379             SecondRange = SecondSA->getSourceRange();
10380           }
10381           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10382                            StaticAssertOnlyMessage)
10383               << (FirstStr == nullptr);
10384           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10385                           StaticAssertOnlyMessage)
10386               << (SecondStr == nullptr);
10387           Diagnosed = true;
10388           break;
10389         }
10390 
10391         if (FirstStr && SecondStr &&
10392             FirstStr->getString() != SecondStr->getString()) {
10393           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10394                            FirstStr->getSourceRange(), StaticAssertMessage);
10395           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10396                           SecondStr->getSourceRange(), StaticAssertMessage);
10397           Diagnosed = true;
10398           break;
10399         }
10400         break;
10401       }
10402       case Field: {
10403         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10404                                  cast<FieldDecl>(FirstDecl),
10405                                  cast<FieldDecl>(SecondDecl));
10406         break;
10407       }
10408       case CXXMethod: {
10409         enum {
10410           DiagMethod,
10411           DiagConstructor,
10412           DiagDestructor,
10413         } FirstMethodType,
10414             SecondMethodType;
10415         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10416           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10417           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10418           return DiagMethod;
10419         };
10420         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10421         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10422         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10423         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10424         auto FirstName = FirstMethod->getDeclName();
10425         auto SecondName = SecondMethod->getDeclName();
10426         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10427           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10428                            FirstMethod->getSourceRange(), MethodName)
10429               << FirstMethodType << FirstName;
10430           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10431                           SecondMethod->getSourceRange(), MethodName)
10432               << SecondMethodType << SecondName;
10433 
10434           Diagnosed = true;
10435           break;
10436         }
10437 
10438         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10439         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10440         if (FirstDeleted != SecondDeleted) {
10441           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10442                            FirstMethod->getSourceRange(), MethodDeleted)
10443               << FirstMethodType << FirstName << FirstDeleted;
10444 
10445           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10446                           SecondMethod->getSourceRange(), MethodDeleted)
10447               << SecondMethodType << SecondName << SecondDeleted;
10448           Diagnosed = true;
10449           break;
10450         }
10451 
10452         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10453         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10454         if (FirstDefaulted != SecondDefaulted) {
10455           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10456                            FirstMethod->getSourceRange(), MethodDefaulted)
10457               << FirstMethodType << FirstName << FirstDefaulted;
10458 
10459           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10460                           SecondMethod->getSourceRange(), MethodDefaulted)
10461               << SecondMethodType << SecondName << SecondDefaulted;
10462           Diagnosed = true;
10463           break;
10464         }
10465 
10466         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10467         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10468         const bool FirstPure = FirstMethod->isPure();
10469         const bool SecondPure = SecondMethod->isPure();
10470         if ((FirstVirtual || SecondVirtual) &&
10471             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10472           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10473                            FirstMethod->getSourceRange(), MethodVirtual)
10474               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10475           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10476                           SecondMethod->getSourceRange(), MethodVirtual)
10477               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10478           Diagnosed = true;
10479           break;
10480         }
10481 
10482         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10483         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10484         // class needs to be checked instead.
10485         const auto FirstStorage = FirstMethod->getStorageClass();
10486         const auto SecondStorage = SecondMethod->getStorageClass();
10487         const bool FirstStatic = FirstStorage == SC_Static;
10488         const bool SecondStatic = SecondStorage == SC_Static;
10489         if (FirstStatic != SecondStatic) {
10490           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10491                            FirstMethod->getSourceRange(), MethodStatic)
10492               << FirstMethodType << FirstName << FirstStatic;
10493           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10494                           SecondMethod->getSourceRange(), MethodStatic)
10495               << SecondMethodType << SecondName << SecondStatic;
10496           Diagnosed = true;
10497           break;
10498         }
10499 
10500         const bool FirstVolatile = FirstMethod->isVolatile();
10501         const bool SecondVolatile = SecondMethod->isVolatile();
10502         if (FirstVolatile != SecondVolatile) {
10503           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10504                            FirstMethod->getSourceRange(), MethodVolatile)
10505               << FirstMethodType << FirstName << FirstVolatile;
10506           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10507                           SecondMethod->getSourceRange(), MethodVolatile)
10508               << SecondMethodType << SecondName << SecondVolatile;
10509           Diagnosed = true;
10510           break;
10511         }
10512 
10513         const bool FirstConst = FirstMethod->isConst();
10514         const bool SecondConst = SecondMethod->isConst();
10515         if (FirstConst != SecondConst) {
10516           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10517                            FirstMethod->getSourceRange(), MethodConst)
10518               << FirstMethodType << FirstName << FirstConst;
10519           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10520                           SecondMethod->getSourceRange(), MethodConst)
10521               << SecondMethodType << SecondName << SecondConst;
10522           Diagnosed = true;
10523           break;
10524         }
10525 
10526         const bool FirstInline = FirstMethod->isInlineSpecified();
10527         const bool SecondInline = SecondMethod->isInlineSpecified();
10528         if (FirstInline != SecondInline) {
10529           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10530                            FirstMethod->getSourceRange(), MethodInline)
10531               << FirstMethodType << FirstName << FirstInline;
10532           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10533                           SecondMethod->getSourceRange(), MethodInline)
10534               << SecondMethodType << SecondName << SecondInline;
10535           Diagnosed = true;
10536           break;
10537         }
10538 
10539         const unsigned FirstNumParameters = FirstMethod->param_size();
10540         const unsigned SecondNumParameters = SecondMethod->param_size();
10541         if (FirstNumParameters != SecondNumParameters) {
10542           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10543                            FirstMethod->getSourceRange(),
10544                            MethodNumberParameters)
10545               << FirstMethodType << FirstName << FirstNumParameters;
10546           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10547                           SecondMethod->getSourceRange(),
10548                           MethodNumberParameters)
10549               << SecondMethodType << SecondName << SecondNumParameters;
10550           Diagnosed = true;
10551           break;
10552         }
10553 
10554         // Need this status boolean to know when break out of the switch.
10555         bool ParameterMismatch = false;
10556         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10557           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10558           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10559 
10560           QualType FirstParamType = FirstParam->getType();
10561           QualType SecondParamType = SecondParam->getType();
10562           if (FirstParamType != SecondParamType &&
10563               ComputeQualTypeODRHash(FirstParamType) !=
10564                   ComputeQualTypeODRHash(SecondParamType)) {
10565             if (const DecayedType *ParamDecayedType =
10566                     FirstParamType->getAs<DecayedType>()) {
10567               ODRDiagDeclError(
10568                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10569                   FirstMethod->getSourceRange(), MethodParameterType)
10570                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10571                   << true << ParamDecayedType->getOriginalType();
10572             } else {
10573               ODRDiagDeclError(
10574                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10575                   FirstMethod->getSourceRange(), MethodParameterType)
10576                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10577                   << false;
10578             }
10579 
10580             if (const DecayedType *ParamDecayedType =
10581                     SecondParamType->getAs<DecayedType>()) {
10582               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10583                               SecondMethod->getSourceRange(),
10584                               MethodParameterType)
10585                   << SecondMethodType << SecondName << (I + 1)
10586                   << SecondParamType << true
10587                   << ParamDecayedType->getOriginalType();
10588             } else {
10589               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10590                               SecondMethod->getSourceRange(),
10591                               MethodParameterType)
10592                   << SecondMethodType << SecondName << (I + 1)
10593                   << SecondParamType << false;
10594             }
10595             ParameterMismatch = true;
10596             break;
10597           }
10598 
10599           DeclarationName FirstParamName = FirstParam->getDeclName();
10600           DeclarationName SecondParamName = SecondParam->getDeclName();
10601           if (FirstParamName != SecondParamName) {
10602             ODRDiagDeclError(FirstRecord, FirstModule,
10603                              FirstMethod->getLocation(),
10604                              FirstMethod->getSourceRange(), MethodParameterName)
10605                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10606             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10607                             SecondMethod->getSourceRange(), MethodParameterName)
10608                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10609             ParameterMismatch = true;
10610             break;
10611           }
10612 
10613           const Expr *FirstInit = FirstParam->getInit();
10614           const Expr *SecondInit = SecondParam->getInit();
10615           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10616             ODRDiagDeclError(FirstRecord, FirstModule,
10617                              FirstMethod->getLocation(),
10618                              FirstMethod->getSourceRange(),
10619                              MethodParameterSingleDefaultArgument)
10620                 << FirstMethodType << FirstName << (I + 1)
10621                 << (FirstInit == nullptr)
10622                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10623             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10624                             SecondMethod->getSourceRange(),
10625                             MethodParameterSingleDefaultArgument)
10626                 << SecondMethodType << SecondName << (I + 1)
10627                 << (SecondInit == nullptr)
10628                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10629             ParameterMismatch = true;
10630             break;
10631           }
10632 
10633           if (FirstInit && SecondInit &&
10634               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10635             ODRDiagDeclError(FirstRecord, FirstModule,
10636                              FirstMethod->getLocation(),
10637                              FirstMethod->getSourceRange(),
10638                              MethodParameterDifferentDefaultArgument)
10639                 << FirstMethodType << FirstName << (I + 1)
10640                 << FirstInit->getSourceRange();
10641             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10642                             SecondMethod->getSourceRange(),
10643                             MethodParameterDifferentDefaultArgument)
10644                 << SecondMethodType << SecondName << (I + 1)
10645                 << SecondInit->getSourceRange();
10646             ParameterMismatch = true;
10647             break;
10648 
10649           }
10650         }
10651 
10652         if (ParameterMismatch) {
10653           Diagnosed = true;
10654           break;
10655         }
10656 
10657         const auto *FirstTemplateArgs =
10658             FirstMethod->getTemplateSpecializationArgs();
10659         const auto *SecondTemplateArgs =
10660             SecondMethod->getTemplateSpecializationArgs();
10661 
10662         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10663             (!FirstTemplateArgs && SecondTemplateArgs)) {
10664           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10665                            FirstMethod->getSourceRange(),
10666                            MethodNoTemplateArguments)
10667               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10668           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10669                           SecondMethod->getSourceRange(),
10670                           MethodNoTemplateArguments)
10671               << SecondMethodType << SecondName
10672               << (SecondTemplateArgs != nullptr);
10673 
10674           Diagnosed = true;
10675           break;
10676         }
10677 
10678         if (FirstTemplateArgs && SecondTemplateArgs) {
10679           // Remove pack expansions from argument list.
10680           auto ExpandTemplateArgumentList =
10681               [](const TemplateArgumentList *TAL) {
10682                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10683                 for (const TemplateArgument &TA : TAL->asArray()) {
10684                   if (TA.getKind() != TemplateArgument::Pack) {
10685                     ExpandedList.push_back(&TA);
10686                     continue;
10687                   }
10688                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10689                     ExpandedList.push_back(&PackTA);
10690                   }
10691                 }
10692                 return ExpandedList;
10693               };
10694           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10695               ExpandTemplateArgumentList(FirstTemplateArgs);
10696           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10697               ExpandTemplateArgumentList(SecondTemplateArgs);
10698 
10699           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10700             ODRDiagDeclError(FirstRecord, FirstModule,
10701                              FirstMethod->getLocation(),
10702                              FirstMethod->getSourceRange(),
10703                              MethodDifferentNumberTemplateArguments)
10704                 << FirstMethodType << FirstName
10705                 << (unsigned)FirstExpandedList.size();
10706             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10707                             SecondMethod->getSourceRange(),
10708                             MethodDifferentNumberTemplateArguments)
10709                 << SecondMethodType << SecondName
10710                 << (unsigned)SecondExpandedList.size();
10711 
10712             Diagnosed = true;
10713             break;
10714           }
10715 
10716           bool TemplateArgumentMismatch = false;
10717           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10718             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10719                                    &SecondTA = *SecondExpandedList[i];
10720             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10721                 ComputeTemplateArgumentODRHash(SecondTA)) {
10722               continue;
10723             }
10724 
10725             ODRDiagDeclError(
10726                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10727                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10728                 << FirstMethodType << FirstName << FirstTA << i + 1;
10729             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10730                             SecondMethod->getSourceRange(),
10731                             MethodDifferentTemplateArgument)
10732                 << SecondMethodType << SecondName << SecondTA << i + 1;
10733 
10734             TemplateArgumentMismatch = true;
10735             break;
10736           }
10737 
10738           if (TemplateArgumentMismatch) {
10739             Diagnosed = true;
10740             break;
10741           }
10742         }
10743 
10744         // Compute the hash of the method as if it has no body.
10745         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10746           Hash.clear();
10747           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10748           return Hash.CalculateHash();
10749         };
10750 
10751         // Compare the hash generated to the hash stored.  A difference means
10752         // that a body was present in the original source.  Due to merging,
10753         // the stardard way of detecting a body will not work.
10754         const bool HasFirstBody =
10755             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10756         const bool HasSecondBody =
10757             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10758 
10759         if (HasFirstBody != HasSecondBody) {
10760           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10761                            FirstMethod->getSourceRange(), MethodSingleBody)
10762               << FirstMethodType << FirstName << HasFirstBody;
10763           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10764                           SecondMethod->getSourceRange(), MethodSingleBody)
10765               << SecondMethodType << SecondName << HasSecondBody;
10766           Diagnosed = true;
10767           break;
10768         }
10769 
10770         if (HasFirstBody && HasSecondBody) {
10771           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10772                            FirstMethod->getSourceRange(), MethodDifferentBody)
10773               << FirstMethodType << FirstName;
10774           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10775                           SecondMethod->getSourceRange(), MethodDifferentBody)
10776               << SecondMethodType << SecondName;
10777           Diagnosed = true;
10778           break;
10779         }
10780 
10781         break;
10782       }
10783       case TypeAlias:
10784       case TypeDef: {
10785         Diagnosed = ODRDiagTypeDefOrAlias(
10786             FirstRecord, FirstModule, SecondModule,
10787             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10788             FirstDiffType == TypeAlias);
10789         break;
10790       }
10791       case Var: {
10792         Diagnosed =
10793             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10794                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10795         break;
10796       }
10797       case Friend: {
10798         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10799         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10800 
10801         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10802         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10803 
10804         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10805         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10806 
10807         if (FirstND && SecondND) {
10808           ODRDiagDeclError(FirstRecord, FirstModule,
10809                            FirstFriend->getFriendLoc(),
10810                            FirstFriend->getSourceRange(), FriendFunction)
10811               << FirstND;
10812           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10813                           SecondFriend->getSourceRange(), FriendFunction)
10814               << SecondND;
10815 
10816           Diagnosed = true;
10817           break;
10818         }
10819 
10820         if (FirstTSI && SecondTSI) {
10821           QualType FirstFriendType = FirstTSI->getType();
10822           QualType SecondFriendType = SecondTSI->getType();
10823           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10824                  ComputeQualTypeODRHash(SecondFriendType));
10825           ODRDiagDeclError(FirstRecord, FirstModule,
10826                            FirstFriend->getFriendLoc(),
10827                            FirstFriend->getSourceRange(), FriendType)
10828               << FirstFriendType;
10829           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10830                           SecondFriend->getSourceRange(), FriendType)
10831               << SecondFriendType;
10832           Diagnosed = true;
10833           break;
10834         }
10835 
10836         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10837                          FirstFriend->getSourceRange(), FriendTypeFunction)
10838             << (FirstTSI == nullptr);
10839         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10840                         SecondFriend->getSourceRange(), FriendTypeFunction)
10841             << (SecondTSI == nullptr);
10842 
10843         Diagnosed = true;
10844         break;
10845       }
10846       case FunctionTemplate: {
10847         FunctionTemplateDecl *FirstTemplate =
10848             cast<FunctionTemplateDecl>(FirstDecl);
10849         FunctionTemplateDecl *SecondTemplate =
10850             cast<FunctionTemplateDecl>(SecondDecl);
10851 
10852         TemplateParameterList *FirstTPL =
10853             FirstTemplate->getTemplateParameters();
10854         TemplateParameterList *SecondTPL =
10855             SecondTemplate->getTemplateParameters();
10856 
10857         if (FirstTPL->size() != SecondTPL->size()) {
10858           ODRDiagDeclError(FirstRecord, FirstModule,
10859                            FirstTemplate->getLocation(),
10860                            FirstTemplate->getSourceRange(),
10861                            FunctionTemplateDifferentNumberParameters)
10862               << FirstTemplate << FirstTPL->size();
10863           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10864                           SecondTemplate->getSourceRange(),
10865                           FunctionTemplateDifferentNumberParameters)
10866               << SecondTemplate << SecondTPL->size();
10867 
10868           Diagnosed = true;
10869           break;
10870         }
10871 
10872         bool ParameterMismatch = false;
10873         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10874           NamedDecl *FirstParam = FirstTPL->getParam(i);
10875           NamedDecl *SecondParam = SecondTPL->getParam(i);
10876 
10877           if (FirstParam->getKind() != SecondParam->getKind()) {
10878             enum {
10879               TemplateTypeParameter,
10880               NonTypeTemplateParameter,
10881               TemplateTemplateParameter,
10882             };
10883             auto GetParamType = [](NamedDecl *D) {
10884               switch (D->getKind()) {
10885                 default:
10886                   llvm_unreachable("Unexpected template parameter type");
10887                 case Decl::TemplateTypeParm:
10888                   return TemplateTypeParameter;
10889                 case Decl::NonTypeTemplateParm:
10890                   return NonTypeTemplateParameter;
10891                 case Decl::TemplateTemplateParm:
10892                   return TemplateTemplateParameter;
10893               }
10894             };
10895 
10896             ODRDiagDeclError(FirstRecord, FirstModule,
10897                              FirstTemplate->getLocation(),
10898                              FirstTemplate->getSourceRange(),
10899                              FunctionTemplateParameterDifferentKind)
10900                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10901             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10902                             SecondTemplate->getSourceRange(),
10903                             FunctionTemplateParameterDifferentKind)
10904                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10905 
10906             ParameterMismatch = true;
10907             break;
10908           }
10909 
10910           if (FirstParam->getName() != SecondParam->getName()) {
10911             ODRDiagDeclError(
10912                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10913                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10914                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10915                 << FirstParam;
10916             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10917                             SecondTemplate->getSourceRange(),
10918                             FunctionTemplateParameterName)
10919                 << SecondTemplate << (i + 1)
10920                 << (bool)SecondParam->getIdentifier() << SecondParam;
10921             ParameterMismatch = true;
10922             break;
10923           }
10924 
10925           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10926               isa<TemplateTypeParmDecl>(SecondParam)) {
10927             TemplateTypeParmDecl *FirstTTPD =
10928                 cast<TemplateTypeParmDecl>(FirstParam);
10929             TemplateTypeParmDecl *SecondTTPD =
10930                 cast<TemplateTypeParmDecl>(SecondParam);
10931             bool HasFirstDefaultArgument =
10932                 FirstTTPD->hasDefaultArgument() &&
10933                 !FirstTTPD->defaultArgumentWasInherited();
10934             bool HasSecondDefaultArgument =
10935                 SecondTTPD->hasDefaultArgument() &&
10936                 !SecondTTPD->defaultArgumentWasInherited();
10937             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10938               ODRDiagDeclError(FirstRecord, FirstModule,
10939                                FirstTemplate->getLocation(),
10940                                FirstTemplate->getSourceRange(),
10941                                FunctionTemplateParameterSingleDefaultArgument)
10942                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10943               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10944                               SecondTemplate->getSourceRange(),
10945                               FunctionTemplateParameterSingleDefaultArgument)
10946                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10947               ParameterMismatch = true;
10948               break;
10949             }
10950 
10951             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10952               QualType FirstType = FirstTTPD->getDefaultArgument();
10953               QualType SecondType = SecondTTPD->getDefaultArgument();
10954               if (ComputeQualTypeODRHash(FirstType) !=
10955                   ComputeQualTypeODRHash(SecondType)) {
10956                 ODRDiagDeclError(
10957                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10958                     FirstTemplate->getSourceRange(),
10959                     FunctionTemplateParameterDifferentDefaultArgument)
10960                     << FirstTemplate << (i + 1) << FirstType;
10961                 ODRDiagDeclNote(
10962                     SecondModule, SecondTemplate->getLocation(),
10963                     SecondTemplate->getSourceRange(),
10964                     FunctionTemplateParameterDifferentDefaultArgument)
10965                     << SecondTemplate << (i + 1) << SecondType;
10966                 ParameterMismatch = true;
10967                 break;
10968               }
10969             }
10970 
10971             if (FirstTTPD->isParameterPack() !=
10972                 SecondTTPD->isParameterPack()) {
10973               ODRDiagDeclError(FirstRecord, FirstModule,
10974                                FirstTemplate->getLocation(),
10975                                FirstTemplate->getSourceRange(),
10976                                FunctionTemplatePackParameter)
10977                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10978               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10979                               SecondTemplate->getSourceRange(),
10980                               FunctionTemplatePackParameter)
10981                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10982               ParameterMismatch = true;
10983               break;
10984             }
10985           }
10986 
10987           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10988               isa<TemplateTemplateParmDecl>(SecondParam)) {
10989             TemplateTemplateParmDecl *FirstTTPD =
10990                 cast<TemplateTemplateParmDecl>(FirstParam);
10991             TemplateTemplateParmDecl *SecondTTPD =
10992                 cast<TemplateTemplateParmDecl>(SecondParam);
10993 
10994             TemplateParameterList *FirstTPL =
10995                 FirstTTPD->getTemplateParameters();
10996             TemplateParameterList *SecondTPL =
10997                 SecondTTPD->getTemplateParameters();
10998 
10999             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11000                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11001               ODRDiagDeclError(FirstRecord, FirstModule,
11002                                FirstTemplate->getLocation(),
11003                                FirstTemplate->getSourceRange(),
11004                                FunctionTemplateParameterDifferentType)
11005                   << FirstTemplate << (i + 1);
11006               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11007                               SecondTemplate->getSourceRange(),
11008                               FunctionTemplateParameterDifferentType)
11009                   << SecondTemplate << (i + 1);
11010               ParameterMismatch = true;
11011               break;
11012             }
11013 
11014             bool HasFirstDefaultArgument =
11015                 FirstTTPD->hasDefaultArgument() &&
11016                 !FirstTTPD->defaultArgumentWasInherited();
11017             bool HasSecondDefaultArgument =
11018                 SecondTTPD->hasDefaultArgument() &&
11019                 !SecondTTPD->defaultArgumentWasInherited();
11020             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11021               ODRDiagDeclError(FirstRecord, FirstModule,
11022                                FirstTemplate->getLocation(),
11023                                FirstTemplate->getSourceRange(),
11024                                FunctionTemplateParameterSingleDefaultArgument)
11025                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11026               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11027                               SecondTemplate->getSourceRange(),
11028                               FunctionTemplateParameterSingleDefaultArgument)
11029                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11030               ParameterMismatch = true;
11031               break;
11032             }
11033 
11034             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11035               TemplateArgument FirstTA =
11036                   FirstTTPD->getDefaultArgument().getArgument();
11037               TemplateArgument SecondTA =
11038                   SecondTTPD->getDefaultArgument().getArgument();
11039               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11040                   ComputeTemplateArgumentODRHash(SecondTA)) {
11041                 ODRDiagDeclError(
11042                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11043                     FirstTemplate->getSourceRange(),
11044                     FunctionTemplateParameterDifferentDefaultArgument)
11045                     << FirstTemplate << (i + 1) << FirstTA;
11046                 ODRDiagDeclNote(
11047                     SecondModule, SecondTemplate->getLocation(),
11048                     SecondTemplate->getSourceRange(),
11049                     FunctionTemplateParameterDifferentDefaultArgument)
11050                     << SecondTemplate << (i + 1) << SecondTA;
11051                 ParameterMismatch = true;
11052                 break;
11053               }
11054             }
11055 
11056             if (FirstTTPD->isParameterPack() !=
11057                 SecondTTPD->isParameterPack()) {
11058               ODRDiagDeclError(FirstRecord, FirstModule,
11059                                FirstTemplate->getLocation(),
11060                                FirstTemplate->getSourceRange(),
11061                                FunctionTemplatePackParameter)
11062                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11063               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11064                               SecondTemplate->getSourceRange(),
11065                               FunctionTemplatePackParameter)
11066                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11067               ParameterMismatch = true;
11068               break;
11069             }
11070           }
11071 
11072           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11073               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11074             NonTypeTemplateParmDecl *FirstNTTPD =
11075                 cast<NonTypeTemplateParmDecl>(FirstParam);
11076             NonTypeTemplateParmDecl *SecondNTTPD =
11077                 cast<NonTypeTemplateParmDecl>(SecondParam);
11078 
11079             QualType FirstType = FirstNTTPD->getType();
11080             QualType SecondType = SecondNTTPD->getType();
11081             if (ComputeQualTypeODRHash(FirstType) !=
11082                 ComputeQualTypeODRHash(SecondType)) {
11083               ODRDiagDeclError(FirstRecord, FirstModule,
11084                                FirstTemplate->getLocation(),
11085                                FirstTemplate->getSourceRange(),
11086                                FunctionTemplateParameterDifferentType)
11087                   << FirstTemplate << (i + 1);
11088               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11089                               SecondTemplate->getSourceRange(),
11090                               FunctionTemplateParameterDifferentType)
11091                   << SecondTemplate << (i + 1);
11092               ParameterMismatch = true;
11093               break;
11094             }
11095 
11096             bool HasFirstDefaultArgument =
11097                 FirstNTTPD->hasDefaultArgument() &&
11098                 !FirstNTTPD->defaultArgumentWasInherited();
11099             bool HasSecondDefaultArgument =
11100                 SecondNTTPD->hasDefaultArgument() &&
11101                 !SecondNTTPD->defaultArgumentWasInherited();
11102             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11103               ODRDiagDeclError(FirstRecord, FirstModule,
11104                                FirstTemplate->getLocation(),
11105                                FirstTemplate->getSourceRange(),
11106                                FunctionTemplateParameterSingleDefaultArgument)
11107                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11108               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11109                               SecondTemplate->getSourceRange(),
11110                               FunctionTemplateParameterSingleDefaultArgument)
11111                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11112               ParameterMismatch = true;
11113               break;
11114             }
11115 
11116             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11117               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11118               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11119               if (ComputeODRHash(FirstDefaultArgument) !=
11120                   ComputeODRHash(SecondDefaultArgument)) {
11121                 ODRDiagDeclError(
11122                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11123                     FirstTemplate->getSourceRange(),
11124                     FunctionTemplateParameterDifferentDefaultArgument)
11125                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11126                 ODRDiagDeclNote(
11127                     SecondModule, SecondTemplate->getLocation(),
11128                     SecondTemplate->getSourceRange(),
11129                     FunctionTemplateParameterDifferentDefaultArgument)
11130                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11131                 ParameterMismatch = true;
11132                 break;
11133               }
11134             }
11135 
11136             if (FirstNTTPD->isParameterPack() !=
11137                 SecondNTTPD->isParameterPack()) {
11138               ODRDiagDeclError(FirstRecord, FirstModule,
11139                                FirstTemplate->getLocation(),
11140                                FirstTemplate->getSourceRange(),
11141                                FunctionTemplatePackParameter)
11142                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11143               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11144                               SecondTemplate->getSourceRange(),
11145                               FunctionTemplatePackParameter)
11146                   << SecondTemplate << (i + 1)
11147                   << SecondNTTPD->isParameterPack();
11148               ParameterMismatch = true;
11149               break;
11150             }
11151           }
11152         }
11153 
11154         if (ParameterMismatch) {
11155           Diagnosed = true;
11156           break;
11157         }
11158 
11159         break;
11160       }
11161       }
11162 
11163       if (Diagnosed)
11164         continue;
11165 
11166       Diag(FirstDecl->getLocation(),
11167            diag::err_module_odr_violation_mismatch_decl_unknown)
11168           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11169           << FirstDecl->getSourceRange();
11170       Diag(SecondDecl->getLocation(),
11171            diag::note_module_odr_violation_mismatch_decl_unknown)
11172           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11173       Diagnosed = true;
11174     }
11175 
11176     if (!Diagnosed) {
11177       // All definitions are updates to the same declaration. This happens if a
11178       // module instantiates the declaration of a class template specialization
11179       // and two or more other modules instantiate its definition.
11180       //
11181       // FIXME: Indicate which modules had instantiations of this definition.
11182       // FIXME: How can this even happen?
11183       Diag(Merge.first->getLocation(),
11184            diag::err_module_odr_violation_different_instantiations)
11185         << Merge.first;
11186     }
11187   }
11188 
11189   // Issue ODR failures diagnostics for functions.
11190   for (auto &Merge : FunctionOdrMergeFailures) {
11191     enum ODRFunctionDifference {
11192       ReturnType,
11193       ParameterName,
11194       ParameterType,
11195       ParameterSingleDefaultArgument,
11196       ParameterDifferentDefaultArgument,
11197       FunctionBody,
11198     };
11199 
11200     FunctionDecl *FirstFunction = Merge.first;
11201     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11202 
11203     bool Diagnosed = false;
11204     for (auto &SecondFunction : Merge.second) {
11205 
11206       if (FirstFunction == SecondFunction)
11207         continue;
11208 
11209       std::string SecondModule =
11210           getOwningModuleNameForDiagnostic(SecondFunction);
11211 
11212       auto ODRDiagError = [FirstFunction, &FirstModule,
11213                            this](SourceLocation Loc, SourceRange Range,
11214                                  ODRFunctionDifference DiffType) {
11215         return Diag(Loc, diag::err_module_odr_violation_function)
11216                << FirstFunction << FirstModule.empty() << FirstModule << Range
11217                << DiffType;
11218       };
11219       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11220                                                SourceRange Range,
11221                                                ODRFunctionDifference DiffType) {
11222         return Diag(Loc, diag::note_module_odr_violation_function)
11223                << SecondModule << Range << DiffType;
11224       };
11225 
11226       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11227           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11228         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11229                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11230             << FirstFunction->getReturnType();
11231         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11232                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11233             << SecondFunction->getReturnType();
11234         Diagnosed = true;
11235         break;
11236       }
11237 
11238       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11239              "Merged functions with different number of parameters");
11240 
11241       auto ParamSize = FirstFunction->param_size();
11242       bool ParameterMismatch = false;
11243       for (unsigned I = 0; I < ParamSize; ++I) {
11244         auto *FirstParam = FirstFunction->getParamDecl(I);
11245         auto *SecondParam = SecondFunction->getParamDecl(I);
11246 
11247         assert(getContext().hasSameType(FirstParam->getType(),
11248                                       SecondParam->getType()) &&
11249                "Merged function has different parameter types.");
11250 
11251         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11252           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11253                        ParameterName)
11254               << I + 1 << FirstParam->getDeclName();
11255           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11256                       ParameterName)
11257               << I + 1 << SecondParam->getDeclName();
11258           ParameterMismatch = true;
11259           break;
11260         };
11261 
11262         QualType FirstParamType = FirstParam->getType();
11263         QualType SecondParamType = SecondParam->getType();
11264         if (FirstParamType != SecondParamType &&
11265             ComputeQualTypeODRHash(FirstParamType) !=
11266                 ComputeQualTypeODRHash(SecondParamType)) {
11267           if (const DecayedType *ParamDecayedType =
11268                   FirstParamType->getAs<DecayedType>()) {
11269             ODRDiagError(FirstParam->getLocation(),
11270                          FirstParam->getSourceRange(), ParameterType)
11271                 << (I + 1) << FirstParamType << true
11272                 << ParamDecayedType->getOriginalType();
11273           } else {
11274             ODRDiagError(FirstParam->getLocation(),
11275                          FirstParam->getSourceRange(), ParameterType)
11276                 << (I + 1) << FirstParamType << false;
11277           }
11278 
11279           if (const DecayedType *ParamDecayedType =
11280                   SecondParamType->getAs<DecayedType>()) {
11281             ODRDiagNote(SecondParam->getLocation(),
11282                         SecondParam->getSourceRange(), ParameterType)
11283                 << (I + 1) << SecondParamType << true
11284                 << ParamDecayedType->getOriginalType();
11285           } else {
11286             ODRDiagNote(SecondParam->getLocation(),
11287                         SecondParam->getSourceRange(), ParameterType)
11288                 << (I + 1) << SecondParamType << false;
11289           }
11290           ParameterMismatch = true;
11291           break;
11292         }
11293 
11294         const Expr *FirstInit = FirstParam->getInit();
11295         const Expr *SecondInit = SecondParam->getInit();
11296         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11297           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11298                        ParameterSingleDefaultArgument)
11299               << (I + 1) << (FirstInit == nullptr)
11300               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11301           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11302                       ParameterSingleDefaultArgument)
11303               << (I + 1) << (SecondInit == nullptr)
11304               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11305           ParameterMismatch = true;
11306           break;
11307         }
11308 
11309         if (FirstInit && SecondInit &&
11310             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11311           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11312                        ParameterDifferentDefaultArgument)
11313               << (I + 1) << FirstInit->getSourceRange();
11314           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11315                       ParameterDifferentDefaultArgument)
11316               << (I + 1) << SecondInit->getSourceRange();
11317           ParameterMismatch = true;
11318           break;
11319         }
11320 
11321         assert(ComputeSubDeclODRHash(FirstParam) ==
11322                    ComputeSubDeclODRHash(SecondParam) &&
11323                "Undiagnosed parameter difference.");
11324       }
11325 
11326       if (ParameterMismatch) {
11327         Diagnosed = true;
11328         break;
11329       }
11330 
11331       // If no error has been generated before now, assume the problem is in
11332       // the body and generate a message.
11333       ODRDiagError(FirstFunction->getLocation(),
11334                    FirstFunction->getSourceRange(), FunctionBody);
11335       ODRDiagNote(SecondFunction->getLocation(),
11336                   SecondFunction->getSourceRange(), FunctionBody);
11337       Diagnosed = true;
11338       break;
11339     }
11340     (void)Diagnosed;
11341     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11342   }
11343 
11344   // Issue ODR failures diagnostics for enums.
11345   for (auto &Merge : EnumOdrMergeFailures) {
11346     enum ODREnumDifference {
11347       SingleScopedEnum,
11348       EnumTagKeywordMismatch,
11349       SingleSpecifiedType,
11350       DifferentSpecifiedTypes,
11351       DifferentNumberEnumConstants,
11352       EnumConstantName,
11353       EnumConstantSingleInitilizer,
11354       EnumConstantDifferentInitilizer,
11355     };
11356 
11357     // If we've already pointed out a specific problem with this enum, don't
11358     // bother issuing a general "something's different" diagnostic.
11359     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11360       continue;
11361 
11362     EnumDecl *FirstEnum = Merge.first;
11363     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11364 
11365     using DeclHashes =
11366         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11367     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11368                               DeclHashes &Hashes, EnumDecl *Enum) {
11369       for (auto *D : Enum->decls()) {
11370         // Due to decl merging, the first EnumDecl is the parent of
11371         // Decls in both records.
11372         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11373           continue;
11374         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11375         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11376                             ComputeSubDeclODRHash(D));
11377       }
11378     };
11379     DeclHashes FirstHashes;
11380     PopulateHashes(FirstHashes, FirstEnum);
11381     bool Diagnosed = false;
11382     for (auto &SecondEnum : Merge.second) {
11383 
11384       if (FirstEnum == SecondEnum)
11385         continue;
11386 
11387       std::string SecondModule =
11388           getOwningModuleNameForDiagnostic(SecondEnum);
11389 
11390       auto ODRDiagError = [FirstEnum, &FirstModule,
11391                            this](SourceLocation Loc, SourceRange Range,
11392                                  ODREnumDifference DiffType) {
11393         return Diag(Loc, diag::err_module_odr_violation_enum)
11394                << FirstEnum << FirstModule.empty() << FirstModule << Range
11395                << DiffType;
11396       };
11397       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11398                                                SourceRange Range,
11399                                                ODREnumDifference DiffType) {
11400         return Diag(Loc, diag::note_module_odr_violation_enum)
11401                << SecondModule << Range << DiffType;
11402       };
11403 
11404       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11405         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11406                      SingleScopedEnum)
11407             << FirstEnum->isScoped();
11408         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11409                     SingleScopedEnum)
11410             << SecondEnum->isScoped();
11411         Diagnosed = true;
11412         continue;
11413       }
11414 
11415       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11416         if (FirstEnum->isScopedUsingClassTag() !=
11417             SecondEnum->isScopedUsingClassTag()) {
11418           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11419                        EnumTagKeywordMismatch)
11420               << FirstEnum->isScopedUsingClassTag();
11421           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11422                       EnumTagKeywordMismatch)
11423               << SecondEnum->isScopedUsingClassTag();
11424           Diagnosed = true;
11425           continue;
11426         }
11427       }
11428 
11429       QualType FirstUnderlyingType =
11430           FirstEnum->getIntegerTypeSourceInfo()
11431               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11432               : QualType();
11433       QualType SecondUnderlyingType =
11434           SecondEnum->getIntegerTypeSourceInfo()
11435               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11436               : QualType();
11437       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11438           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11439                        SingleSpecifiedType)
11440               << !FirstUnderlyingType.isNull();
11441           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11442                       SingleSpecifiedType)
11443               << !SecondUnderlyingType.isNull();
11444           Diagnosed = true;
11445           continue;
11446       }
11447 
11448       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11449         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11450             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11451           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11452                        DifferentSpecifiedTypes)
11453               << FirstUnderlyingType;
11454           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11455                       DifferentSpecifiedTypes)
11456               << SecondUnderlyingType;
11457           Diagnosed = true;
11458           continue;
11459         }
11460       }
11461 
11462       DeclHashes SecondHashes;
11463       PopulateHashes(SecondHashes, SecondEnum);
11464 
11465       if (FirstHashes.size() != SecondHashes.size()) {
11466         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11467                      DifferentNumberEnumConstants)
11468             << (int)FirstHashes.size();
11469         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11470                     DifferentNumberEnumConstants)
11471             << (int)SecondHashes.size();
11472         Diagnosed = true;
11473         continue;
11474       }
11475 
11476       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11477         if (FirstHashes[I].second == SecondHashes[I].second)
11478           continue;
11479         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11480         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11481 
11482         if (FirstEnumConstant->getDeclName() !=
11483             SecondEnumConstant->getDeclName()) {
11484 
11485           ODRDiagError(FirstEnumConstant->getLocation(),
11486                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11487               << I + 1 << FirstEnumConstant;
11488           ODRDiagNote(SecondEnumConstant->getLocation(),
11489                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11490               << I + 1 << SecondEnumConstant;
11491           Diagnosed = true;
11492           break;
11493         }
11494 
11495         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11496         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11497         if (!FirstInit && !SecondInit)
11498           continue;
11499 
11500         if (!FirstInit || !SecondInit) {
11501           ODRDiagError(FirstEnumConstant->getLocation(),
11502                        FirstEnumConstant->getSourceRange(),
11503                        EnumConstantSingleInitilizer)
11504               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11505           ODRDiagNote(SecondEnumConstant->getLocation(),
11506                       SecondEnumConstant->getSourceRange(),
11507                       EnumConstantSingleInitilizer)
11508               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11509           Diagnosed = true;
11510           break;
11511         }
11512 
11513         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11514           ODRDiagError(FirstEnumConstant->getLocation(),
11515                        FirstEnumConstant->getSourceRange(),
11516                        EnumConstantDifferentInitilizer)
11517               << I + 1 << FirstEnumConstant;
11518           ODRDiagNote(SecondEnumConstant->getLocation(),
11519                       SecondEnumConstant->getSourceRange(),
11520                       EnumConstantDifferentInitilizer)
11521               << I + 1 << SecondEnumConstant;
11522           Diagnosed = true;
11523           break;
11524         }
11525       }
11526     }
11527 
11528     (void)Diagnosed;
11529     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11530   }
11531 }
11532 
11533 void ASTReader::StartedDeserializing() {
11534   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11535     ReadTimer->startTimer();
11536 }
11537 
11538 void ASTReader::FinishedDeserializing() {
11539   assert(NumCurrentElementsDeserializing &&
11540          "FinishedDeserializing not paired with StartedDeserializing");
11541   if (NumCurrentElementsDeserializing == 1) {
11542     // We decrease NumCurrentElementsDeserializing only after pending actions
11543     // are finished, to avoid recursively re-calling finishPendingActions().
11544     finishPendingActions();
11545   }
11546   --NumCurrentElementsDeserializing;
11547 
11548   if (NumCurrentElementsDeserializing == 0) {
11549     // Propagate exception specification and deduced type updates along
11550     // redeclaration chains.
11551     //
11552     // We do this now rather than in finishPendingActions because we want to
11553     // be able to walk the complete redeclaration chains of the updated decls.
11554     while (!PendingExceptionSpecUpdates.empty() ||
11555            !PendingDeducedTypeUpdates.empty()) {
11556       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11557       PendingExceptionSpecUpdates.clear();
11558       for (auto Update : ESUpdates) {
11559         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11560         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11561         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11562         if (auto *Listener = getContext().getASTMutationListener())
11563           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11564         for (auto *Redecl : Update.second->redecls())
11565           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11566       }
11567 
11568       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11569       PendingDeducedTypeUpdates.clear();
11570       for (auto Update : DTUpdates) {
11571         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11572         // FIXME: If the return type is already deduced, check that it matches.
11573         getContext().adjustDeducedFunctionResultType(Update.first,
11574                                                      Update.second);
11575       }
11576     }
11577 
11578     if (ReadTimer)
11579       ReadTimer->stopTimer();
11580 
11581     diagnoseOdrViolations();
11582 
11583     // We are not in recursive loading, so it's safe to pass the "interesting"
11584     // decls to the consumer.
11585     if (Consumer)
11586       PassInterestingDeclsToConsumer();
11587   }
11588 }
11589 
11590 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11591   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11592     // Remove any fake results before adding any real ones.
11593     auto It = PendingFakeLookupResults.find(II);
11594     if (It != PendingFakeLookupResults.end()) {
11595       for (auto *ND : It->second)
11596         SemaObj->IdResolver.RemoveDecl(ND);
11597       // FIXME: this works around module+PCH performance issue.
11598       // Rather than erase the result from the map, which is O(n), just clear
11599       // the vector of NamedDecls.
11600       It->second.clear();
11601     }
11602   }
11603 
11604   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11605     SemaObj->TUScope->AddDecl(D);
11606   } else if (SemaObj->TUScope) {
11607     // Adding the decl to IdResolver may have failed because it was already in
11608     // (even though it was not added in scope). If it is already in, make sure
11609     // it gets in the scope as well.
11610     if (std::find(SemaObj->IdResolver.begin(Name),
11611                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11612       SemaObj->TUScope->AddDecl(D);
11613   }
11614 }
11615 
11616 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11617                      ASTContext *Context,
11618                      const PCHContainerReader &PCHContainerRdr,
11619                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11620                      StringRef isysroot,
11621                      DisableValidationForModuleKind DisableValidationKind,
11622                      bool AllowASTWithCompilerErrors,
11623                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11624                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11625                      std::unique_ptr<llvm::Timer> ReadTimer)
11626     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11627                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11628                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11629       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11630       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11631       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11632                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11633       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11634       DisableValidationKind(DisableValidationKind),
11635       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11636       AllowConfigurationMismatch(AllowConfigurationMismatch),
11637       ValidateSystemInputs(ValidateSystemInputs),
11638       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11639       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11640   SourceMgr.setExternalSLocEntrySource(this);
11641 
11642   for (const auto &Ext : Extensions) {
11643     auto BlockName = Ext->getExtensionMetadata().BlockName;
11644     auto Known = ModuleFileExtensions.find(BlockName);
11645     if (Known != ModuleFileExtensions.end()) {
11646       Diags.Report(diag::warn_duplicate_module_file_extension)
11647         << BlockName;
11648       continue;
11649     }
11650 
11651     ModuleFileExtensions.insert({BlockName, Ext});
11652   }
11653 }
11654 
11655 ASTReader::~ASTReader() {
11656   if (OwnsDeserializationListener)
11657     delete DeserializationListener;
11658 }
11659 
11660 IdentifierResolver &ASTReader::getIdResolver() {
11661   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11662 }
11663 
11664 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11665                                                unsigned AbbrevID) {
11666   Idx = 0;
11667   Record.clear();
11668   return Cursor.readRecord(AbbrevID, Record);
11669 }
11670 //===----------------------------------------------------------------------===//
11671 //// OMPClauseReader implementation
11672 ////===----------------------------------------------------------------------===//
11673 
11674 // This has to be in namespace clang because it's friended by all
11675 // of the OMP clauses.
11676 namespace clang {
11677 
11678 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11679   ASTRecordReader &Record;
11680   ASTContext &Context;
11681 
11682 public:
11683   OMPClauseReader(ASTRecordReader &Record)
11684       : Record(Record), Context(Record.getContext()) {}
11685 #define GEN_CLANG_CLAUSE_CLASS
11686 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11687 #include "llvm/Frontend/OpenMP/OMP.inc"
11688   OMPClause *readClause();
11689   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11690   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11691 };
11692 
11693 } // end namespace clang
11694 
11695 OMPClause *ASTRecordReader::readOMPClause() {
11696   return OMPClauseReader(*this).readClause();
11697 }
11698 
11699 OMPClause *OMPClauseReader::readClause() {
11700   OMPClause *C = nullptr;
11701   switch (llvm::omp::Clause(Record.readInt())) {
11702   case llvm::omp::OMPC_if:
11703     C = new (Context) OMPIfClause();
11704     break;
11705   case llvm::omp::OMPC_final:
11706     C = new (Context) OMPFinalClause();
11707     break;
11708   case llvm::omp::OMPC_num_threads:
11709     C = new (Context) OMPNumThreadsClause();
11710     break;
11711   case llvm::omp::OMPC_safelen:
11712     C = new (Context) OMPSafelenClause();
11713     break;
11714   case llvm::omp::OMPC_simdlen:
11715     C = new (Context) OMPSimdlenClause();
11716     break;
11717   case llvm::omp::OMPC_sizes: {
11718     unsigned NumSizes = Record.readInt();
11719     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11720     break;
11721   }
11722   case llvm::omp::OMPC_full:
11723     C = OMPFullClause::CreateEmpty(Context);
11724     break;
11725   case llvm::omp::OMPC_partial:
11726     C = OMPPartialClause::CreateEmpty(Context);
11727     break;
11728   case llvm::omp::OMPC_allocator:
11729     C = new (Context) OMPAllocatorClause();
11730     break;
11731   case llvm::omp::OMPC_collapse:
11732     C = new (Context) OMPCollapseClause();
11733     break;
11734   case llvm::omp::OMPC_default:
11735     C = new (Context) OMPDefaultClause();
11736     break;
11737   case llvm::omp::OMPC_proc_bind:
11738     C = new (Context) OMPProcBindClause();
11739     break;
11740   case llvm::omp::OMPC_schedule:
11741     C = new (Context) OMPScheduleClause();
11742     break;
11743   case llvm::omp::OMPC_ordered:
11744     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11745     break;
11746   case llvm::omp::OMPC_nowait:
11747     C = new (Context) OMPNowaitClause();
11748     break;
11749   case llvm::omp::OMPC_untied:
11750     C = new (Context) OMPUntiedClause();
11751     break;
11752   case llvm::omp::OMPC_mergeable:
11753     C = new (Context) OMPMergeableClause();
11754     break;
11755   case llvm::omp::OMPC_read:
11756     C = new (Context) OMPReadClause();
11757     break;
11758   case llvm::omp::OMPC_write:
11759     C = new (Context) OMPWriteClause();
11760     break;
11761   case llvm::omp::OMPC_update:
11762     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11763     break;
11764   case llvm::omp::OMPC_capture:
11765     C = new (Context) OMPCaptureClause();
11766     break;
11767   case llvm::omp::OMPC_compare:
11768     C = new (Context) OMPCompareClause();
11769     break;
11770   case llvm::omp::OMPC_seq_cst:
11771     C = new (Context) OMPSeqCstClause();
11772     break;
11773   case llvm::omp::OMPC_acq_rel:
11774     C = new (Context) OMPAcqRelClause();
11775     break;
11776   case llvm::omp::OMPC_acquire:
11777     C = new (Context) OMPAcquireClause();
11778     break;
11779   case llvm::omp::OMPC_release:
11780     C = new (Context) OMPReleaseClause();
11781     break;
11782   case llvm::omp::OMPC_relaxed:
11783     C = new (Context) OMPRelaxedClause();
11784     break;
11785   case llvm::omp::OMPC_threads:
11786     C = new (Context) OMPThreadsClause();
11787     break;
11788   case llvm::omp::OMPC_simd:
11789     C = new (Context) OMPSIMDClause();
11790     break;
11791   case llvm::omp::OMPC_nogroup:
11792     C = new (Context) OMPNogroupClause();
11793     break;
11794   case llvm::omp::OMPC_unified_address:
11795     C = new (Context) OMPUnifiedAddressClause();
11796     break;
11797   case llvm::omp::OMPC_unified_shared_memory:
11798     C = new (Context) OMPUnifiedSharedMemoryClause();
11799     break;
11800   case llvm::omp::OMPC_reverse_offload:
11801     C = new (Context) OMPReverseOffloadClause();
11802     break;
11803   case llvm::omp::OMPC_dynamic_allocators:
11804     C = new (Context) OMPDynamicAllocatorsClause();
11805     break;
11806   case llvm::omp::OMPC_atomic_default_mem_order:
11807     C = new (Context) OMPAtomicDefaultMemOrderClause();
11808     break;
11809  case llvm::omp::OMPC_private:
11810     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11811     break;
11812   case llvm::omp::OMPC_firstprivate:
11813     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11814     break;
11815   case llvm::omp::OMPC_lastprivate:
11816     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11817     break;
11818   case llvm::omp::OMPC_shared:
11819     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11820     break;
11821   case llvm::omp::OMPC_reduction: {
11822     unsigned N = Record.readInt();
11823     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11824     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11825     break;
11826   }
11827   case llvm::omp::OMPC_task_reduction:
11828     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11829     break;
11830   case llvm::omp::OMPC_in_reduction:
11831     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11832     break;
11833   case llvm::omp::OMPC_linear:
11834     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11835     break;
11836   case llvm::omp::OMPC_aligned:
11837     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11838     break;
11839   case llvm::omp::OMPC_copyin:
11840     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11841     break;
11842   case llvm::omp::OMPC_copyprivate:
11843     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11844     break;
11845   case llvm::omp::OMPC_flush:
11846     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11847     break;
11848   case llvm::omp::OMPC_depobj:
11849     C = OMPDepobjClause::CreateEmpty(Context);
11850     break;
11851   case llvm::omp::OMPC_depend: {
11852     unsigned NumVars = Record.readInt();
11853     unsigned NumLoops = Record.readInt();
11854     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11855     break;
11856   }
11857   case llvm::omp::OMPC_device:
11858     C = new (Context) OMPDeviceClause();
11859     break;
11860   case llvm::omp::OMPC_map: {
11861     OMPMappableExprListSizeTy Sizes;
11862     Sizes.NumVars = Record.readInt();
11863     Sizes.NumUniqueDeclarations = Record.readInt();
11864     Sizes.NumComponentLists = Record.readInt();
11865     Sizes.NumComponents = Record.readInt();
11866     C = OMPMapClause::CreateEmpty(Context, Sizes);
11867     break;
11868   }
11869   case llvm::omp::OMPC_num_teams:
11870     C = new (Context) OMPNumTeamsClause();
11871     break;
11872   case llvm::omp::OMPC_thread_limit:
11873     C = new (Context) OMPThreadLimitClause();
11874     break;
11875   case llvm::omp::OMPC_priority:
11876     C = new (Context) OMPPriorityClause();
11877     break;
11878   case llvm::omp::OMPC_grainsize:
11879     C = new (Context) OMPGrainsizeClause();
11880     break;
11881   case llvm::omp::OMPC_num_tasks:
11882     C = new (Context) OMPNumTasksClause();
11883     break;
11884   case llvm::omp::OMPC_hint:
11885     C = new (Context) OMPHintClause();
11886     break;
11887   case llvm::omp::OMPC_dist_schedule:
11888     C = new (Context) OMPDistScheduleClause();
11889     break;
11890   case llvm::omp::OMPC_defaultmap:
11891     C = new (Context) OMPDefaultmapClause();
11892     break;
11893   case llvm::omp::OMPC_to: {
11894     OMPMappableExprListSizeTy Sizes;
11895     Sizes.NumVars = Record.readInt();
11896     Sizes.NumUniqueDeclarations = Record.readInt();
11897     Sizes.NumComponentLists = Record.readInt();
11898     Sizes.NumComponents = Record.readInt();
11899     C = OMPToClause::CreateEmpty(Context, Sizes);
11900     break;
11901   }
11902   case llvm::omp::OMPC_from: {
11903     OMPMappableExprListSizeTy Sizes;
11904     Sizes.NumVars = Record.readInt();
11905     Sizes.NumUniqueDeclarations = Record.readInt();
11906     Sizes.NumComponentLists = Record.readInt();
11907     Sizes.NumComponents = Record.readInt();
11908     C = OMPFromClause::CreateEmpty(Context, Sizes);
11909     break;
11910   }
11911   case llvm::omp::OMPC_use_device_ptr: {
11912     OMPMappableExprListSizeTy Sizes;
11913     Sizes.NumVars = Record.readInt();
11914     Sizes.NumUniqueDeclarations = Record.readInt();
11915     Sizes.NumComponentLists = Record.readInt();
11916     Sizes.NumComponents = Record.readInt();
11917     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11918     break;
11919   }
11920   case llvm::omp::OMPC_use_device_addr: {
11921     OMPMappableExprListSizeTy Sizes;
11922     Sizes.NumVars = Record.readInt();
11923     Sizes.NumUniqueDeclarations = Record.readInt();
11924     Sizes.NumComponentLists = Record.readInt();
11925     Sizes.NumComponents = Record.readInt();
11926     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11927     break;
11928   }
11929   case llvm::omp::OMPC_is_device_ptr: {
11930     OMPMappableExprListSizeTy Sizes;
11931     Sizes.NumVars = Record.readInt();
11932     Sizes.NumUniqueDeclarations = Record.readInt();
11933     Sizes.NumComponentLists = Record.readInt();
11934     Sizes.NumComponents = Record.readInt();
11935     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11936     break;
11937   }
11938   case llvm::omp::OMPC_allocate:
11939     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11940     break;
11941   case llvm::omp::OMPC_nontemporal:
11942     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11943     break;
11944   case llvm::omp::OMPC_inclusive:
11945     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11946     break;
11947   case llvm::omp::OMPC_exclusive:
11948     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11949     break;
11950   case llvm::omp::OMPC_order:
11951     C = new (Context) OMPOrderClause();
11952     break;
11953   case llvm::omp::OMPC_init:
11954     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11955     break;
11956   case llvm::omp::OMPC_use:
11957     C = new (Context) OMPUseClause();
11958     break;
11959   case llvm::omp::OMPC_destroy:
11960     C = new (Context) OMPDestroyClause();
11961     break;
11962   case llvm::omp::OMPC_novariants:
11963     C = new (Context) OMPNovariantsClause();
11964     break;
11965   case llvm::omp::OMPC_nocontext:
11966     C = new (Context) OMPNocontextClause();
11967     break;
11968   case llvm::omp::OMPC_detach:
11969     C = new (Context) OMPDetachClause();
11970     break;
11971   case llvm::omp::OMPC_uses_allocators:
11972     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11973     break;
11974   case llvm::omp::OMPC_affinity:
11975     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11976     break;
11977   case llvm::omp::OMPC_filter:
11978     C = new (Context) OMPFilterClause();
11979     break;
11980   case llvm::omp::OMPC_bind:
11981     C = OMPBindClause::CreateEmpty(Context);
11982     break;
11983   case llvm::omp::OMPC_align:
11984     C = new (Context) OMPAlignClause();
11985     break;
11986 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11987   case llvm::omp::Enum:                                                        \
11988     break;
11989 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11990   default:
11991     break;
11992   }
11993   assert(C && "Unknown OMPClause type");
11994 
11995   Visit(C);
11996   C->setLocStart(Record.readSourceLocation());
11997   C->setLocEnd(Record.readSourceLocation());
11998 
11999   return C;
12000 }
12001 
12002 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12003   C->setPreInitStmt(Record.readSubStmt(),
12004                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12005 }
12006 
12007 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12008   VisitOMPClauseWithPreInit(C);
12009   C->setPostUpdateExpr(Record.readSubExpr());
12010 }
12011 
12012 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12013   VisitOMPClauseWithPreInit(C);
12014   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12015   C->setNameModifierLoc(Record.readSourceLocation());
12016   C->setColonLoc(Record.readSourceLocation());
12017   C->setCondition(Record.readSubExpr());
12018   C->setLParenLoc(Record.readSourceLocation());
12019 }
12020 
12021 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12022   VisitOMPClauseWithPreInit(C);
12023   C->setCondition(Record.readSubExpr());
12024   C->setLParenLoc(Record.readSourceLocation());
12025 }
12026 
12027 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12028   VisitOMPClauseWithPreInit(C);
12029   C->setNumThreads(Record.readSubExpr());
12030   C->setLParenLoc(Record.readSourceLocation());
12031 }
12032 
12033 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12034   C->setSafelen(Record.readSubExpr());
12035   C->setLParenLoc(Record.readSourceLocation());
12036 }
12037 
12038 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12039   C->setSimdlen(Record.readSubExpr());
12040   C->setLParenLoc(Record.readSourceLocation());
12041 }
12042 
12043 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12044   for (Expr *&E : C->getSizesRefs())
12045     E = Record.readSubExpr();
12046   C->setLParenLoc(Record.readSourceLocation());
12047 }
12048 
12049 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12050 
12051 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12052   C->setFactor(Record.readSubExpr());
12053   C->setLParenLoc(Record.readSourceLocation());
12054 }
12055 
12056 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12057   C->setAllocator(Record.readExpr());
12058   C->setLParenLoc(Record.readSourceLocation());
12059 }
12060 
12061 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12062   C->setNumForLoops(Record.readSubExpr());
12063   C->setLParenLoc(Record.readSourceLocation());
12064 }
12065 
12066 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12067   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12068   C->setLParenLoc(Record.readSourceLocation());
12069   C->setDefaultKindKwLoc(Record.readSourceLocation());
12070 }
12071 
12072 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12073   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12074   C->setLParenLoc(Record.readSourceLocation());
12075   C->setProcBindKindKwLoc(Record.readSourceLocation());
12076 }
12077 
12078 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12079   VisitOMPClauseWithPreInit(C);
12080   C->setScheduleKind(
12081        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12082   C->setFirstScheduleModifier(
12083       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12084   C->setSecondScheduleModifier(
12085       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12086   C->setChunkSize(Record.readSubExpr());
12087   C->setLParenLoc(Record.readSourceLocation());
12088   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12089   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12090   C->setScheduleKindLoc(Record.readSourceLocation());
12091   C->setCommaLoc(Record.readSourceLocation());
12092 }
12093 
12094 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12095   C->setNumForLoops(Record.readSubExpr());
12096   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12097     C->setLoopNumIterations(I, Record.readSubExpr());
12098   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12099     C->setLoopCounter(I, Record.readSubExpr());
12100   C->setLParenLoc(Record.readSourceLocation());
12101 }
12102 
12103 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12104   C->setEventHandler(Record.readSubExpr());
12105   C->setLParenLoc(Record.readSourceLocation());
12106 }
12107 
12108 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12109 
12110 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12111 
12112 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12113 
12114 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12115 
12116 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12117 
12118 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12119   if (C->isExtended()) {
12120     C->setLParenLoc(Record.readSourceLocation());
12121     C->setArgumentLoc(Record.readSourceLocation());
12122     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12123   }
12124 }
12125 
12126 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12127 
12128 void OMPClauseReader::VisitOMPCompareClause(OMPCompareClause *) {}
12129 
12130 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12131 
12132 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12133 
12134 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12135 
12136 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12137 
12138 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12139 
12140 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12141 
12142 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12143 
12144 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12145 
12146 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12147   unsigned NumVars = C->varlist_size();
12148   SmallVector<Expr *, 16> Vars;
12149   Vars.reserve(NumVars);
12150   for (unsigned I = 0; I != NumVars; ++I)
12151     Vars.push_back(Record.readSubExpr());
12152   C->setVarRefs(Vars);
12153   C->setIsTarget(Record.readBool());
12154   C->setIsTargetSync(Record.readBool());
12155   C->setLParenLoc(Record.readSourceLocation());
12156   C->setVarLoc(Record.readSourceLocation());
12157 }
12158 
12159 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12160   C->setInteropVar(Record.readSubExpr());
12161   C->setLParenLoc(Record.readSourceLocation());
12162   C->setVarLoc(Record.readSourceLocation());
12163 }
12164 
12165 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12166   C->setInteropVar(Record.readSubExpr());
12167   C->setLParenLoc(Record.readSourceLocation());
12168   C->setVarLoc(Record.readSourceLocation());
12169 }
12170 
12171 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12172   VisitOMPClauseWithPreInit(C);
12173   C->setCondition(Record.readSubExpr());
12174   C->setLParenLoc(Record.readSourceLocation());
12175 }
12176 
12177 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12178   VisitOMPClauseWithPreInit(C);
12179   C->setCondition(Record.readSubExpr());
12180   C->setLParenLoc(Record.readSourceLocation());
12181 }
12182 
12183 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12184 
12185 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12186     OMPUnifiedSharedMemoryClause *) {}
12187 
12188 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12189 
12190 void
12191 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12192 }
12193 
12194 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12195     OMPAtomicDefaultMemOrderClause *C) {
12196   C->setAtomicDefaultMemOrderKind(
12197       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12198   C->setLParenLoc(Record.readSourceLocation());
12199   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12200 }
12201 
12202 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12203   C->setLParenLoc(Record.readSourceLocation());
12204   unsigned NumVars = C->varlist_size();
12205   SmallVector<Expr *, 16> Vars;
12206   Vars.reserve(NumVars);
12207   for (unsigned i = 0; i != NumVars; ++i)
12208     Vars.push_back(Record.readSubExpr());
12209   C->setVarRefs(Vars);
12210   Vars.clear();
12211   for (unsigned i = 0; i != NumVars; ++i)
12212     Vars.push_back(Record.readSubExpr());
12213   C->setPrivateCopies(Vars);
12214 }
12215 
12216 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12217   VisitOMPClauseWithPreInit(C);
12218   C->setLParenLoc(Record.readSourceLocation());
12219   unsigned NumVars = C->varlist_size();
12220   SmallVector<Expr *, 16> Vars;
12221   Vars.reserve(NumVars);
12222   for (unsigned i = 0; i != NumVars; ++i)
12223     Vars.push_back(Record.readSubExpr());
12224   C->setVarRefs(Vars);
12225   Vars.clear();
12226   for (unsigned i = 0; i != NumVars; ++i)
12227     Vars.push_back(Record.readSubExpr());
12228   C->setPrivateCopies(Vars);
12229   Vars.clear();
12230   for (unsigned i = 0; i != NumVars; ++i)
12231     Vars.push_back(Record.readSubExpr());
12232   C->setInits(Vars);
12233 }
12234 
12235 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12236   VisitOMPClauseWithPostUpdate(C);
12237   C->setLParenLoc(Record.readSourceLocation());
12238   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12239   C->setKindLoc(Record.readSourceLocation());
12240   C->setColonLoc(Record.readSourceLocation());
12241   unsigned NumVars = C->varlist_size();
12242   SmallVector<Expr *, 16> Vars;
12243   Vars.reserve(NumVars);
12244   for (unsigned i = 0; i != NumVars; ++i)
12245     Vars.push_back(Record.readSubExpr());
12246   C->setVarRefs(Vars);
12247   Vars.clear();
12248   for (unsigned i = 0; i != NumVars; ++i)
12249     Vars.push_back(Record.readSubExpr());
12250   C->setPrivateCopies(Vars);
12251   Vars.clear();
12252   for (unsigned i = 0; i != NumVars; ++i)
12253     Vars.push_back(Record.readSubExpr());
12254   C->setSourceExprs(Vars);
12255   Vars.clear();
12256   for (unsigned i = 0; i != NumVars; ++i)
12257     Vars.push_back(Record.readSubExpr());
12258   C->setDestinationExprs(Vars);
12259   Vars.clear();
12260   for (unsigned i = 0; i != NumVars; ++i)
12261     Vars.push_back(Record.readSubExpr());
12262   C->setAssignmentOps(Vars);
12263 }
12264 
12265 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12266   C->setLParenLoc(Record.readSourceLocation());
12267   unsigned NumVars = C->varlist_size();
12268   SmallVector<Expr *, 16> Vars;
12269   Vars.reserve(NumVars);
12270   for (unsigned i = 0; i != NumVars; ++i)
12271     Vars.push_back(Record.readSubExpr());
12272   C->setVarRefs(Vars);
12273 }
12274 
12275 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12276   VisitOMPClauseWithPostUpdate(C);
12277   C->setLParenLoc(Record.readSourceLocation());
12278   C->setModifierLoc(Record.readSourceLocation());
12279   C->setColonLoc(Record.readSourceLocation());
12280   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12281   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12282   C->setQualifierLoc(NNSL);
12283   C->setNameInfo(DNI);
12284 
12285   unsigned NumVars = C->varlist_size();
12286   SmallVector<Expr *, 16> Vars;
12287   Vars.reserve(NumVars);
12288   for (unsigned i = 0; i != NumVars; ++i)
12289     Vars.push_back(Record.readSubExpr());
12290   C->setVarRefs(Vars);
12291   Vars.clear();
12292   for (unsigned i = 0; i != NumVars; ++i)
12293     Vars.push_back(Record.readSubExpr());
12294   C->setPrivates(Vars);
12295   Vars.clear();
12296   for (unsigned i = 0; i != NumVars; ++i)
12297     Vars.push_back(Record.readSubExpr());
12298   C->setLHSExprs(Vars);
12299   Vars.clear();
12300   for (unsigned i = 0; i != NumVars; ++i)
12301     Vars.push_back(Record.readSubExpr());
12302   C->setRHSExprs(Vars);
12303   Vars.clear();
12304   for (unsigned i = 0; i != NumVars; ++i)
12305     Vars.push_back(Record.readSubExpr());
12306   C->setReductionOps(Vars);
12307   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12308     Vars.clear();
12309     for (unsigned i = 0; i != NumVars; ++i)
12310       Vars.push_back(Record.readSubExpr());
12311     C->setInscanCopyOps(Vars);
12312     Vars.clear();
12313     for (unsigned i = 0; i != NumVars; ++i)
12314       Vars.push_back(Record.readSubExpr());
12315     C->setInscanCopyArrayTemps(Vars);
12316     Vars.clear();
12317     for (unsigned i = 0; i != NumVars; ++i)
12318       Vars.push_back(Record.readSubExpr());
12319     C->setInscanCopyArrayElems(Vars);
12320   }
12321 }
12322 
12323 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12324   VisitOMPClauseWithPostUpdate(C);
12325   C->setLParenLoc(Record.readSourceLocation());
12326   C->setColonLoc(Record.readSourceLocation());
12327   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12328   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12329   C->setQualifierLoc(NNSL);
12330   C->setNameInfo(DNI);
12331 
12332   unsigned NumVars = C->varlist_size();
12333   SmallVector<Expr *, 16> Vars;
12334   Vars.reserve(NumVars);
12335   for (unsigned I = 0; I != NumVars; ++I)
12336     Vars.push_back(Record.readSubExpr());
12337   C->setVarRefs(Vars);
12338   Vars.clear();
12339   for (unsigned I = 0; I != NumVars; ++I)
12340     Vars.push_back(Record.readSubExpr());
12341   C->setPrivates(Vars);
12342   Vars.clear();
12343   for (unsigned I = 0; I != NumVars; ++I)
12344     Vars.push_back(Record.readSubExpr());
12345   C->setLHSExprs(Vars);
12346   Vars.clear();
12347   for (unsigned I = 0; I != NumVars; ++I)
12348     Vars.push_back(Record.readSubExpr());
12349   C->setRHSExprs(Vars);
12350   Vars.clear();
12351   for (unsigned I = 0; I != NumVars; ++I)
12352     Vars.push_back(Record.readSubExpr());
12353   C->setReductionOps(Vars);
12354 }
12355 
12356 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12357   VisitOMPClauseWithPostUpdate(C);
12358   C->setLParenLoc(Record.readSourceLocation());
12359   C->setColonLoc(Record.readSourceLocation());
12360   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12361   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12362   C->setQualifierLoc(NNSL);
12363   C->setNameInfo(DNI);
12364 
12365   unsigned NumVars = C->varlist_size();
12366   SmallVector<Expr *, 16> Vars;
12367   Vars.reserve(NumVars);
12368   for (unsigned I = 0; I != NumVars; ++I)
12369     Vars.push_back(Record.readSubExpr());
12370   C->setVarRefs(Vars);
12371   Vars.clear();
12372   for (unsigned I = 0; I != NumVars; ++I)
12373     Vars.push_back(Record.readSubExpr());
12374   C->setPrivates(Vars);
12375   Vars.clear();
12376   for (unsigned I = 0; I != NumVars; ++I)
12377     Vars.push_back(Record.readSubExpr());
12378   C->setLHSExprs(Vars);
12379   Vars.clear();
12380   for (unsigned I = 0; I != NumVars; ++I)
12381     Vars.push_back(Record.readSubExpr());
12382   C->setRHSExprs(Vars);
12383   Vars.clear();
12384   for (unsigned I = 0; I != NumVars; ++I)
12385     Vars.push_back(Record.readSubExpr());
12386   C->setReductionOps(Vars);
12387   Vars.clear();
12388   for (unsigned I = 0; I != NumVars; ++I)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setTaskgroupDescriptors(Vars);
12391 }
12392 
12393 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12394   VisitOMPClauseWithPostUpdate(C);
12395   C->setLParenLoc(Record.readSourceLocation());
12396   C->setColonLoc(Record.readSourceLocation());
12397   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12398   C->setModifierLoc(Record.readSourceLocation());
12399   unsigned NumVars = C->varlist_size();
12400   SmallVector<Expr *, 16> Vars;
12401   Vars.reserve(NumVars);
12402   for (unsigned i = 0; i != NumVars; ++i)
12403     Vars.push_back(Record.readSubExpr());
12404   C->setVarRefs(Vars);
12405   Vars.clear();
12406   for (unsigned i = 0; i != NumVars; ++i)
12407     Vars.push_back(Record.readSubExpr());
12408   C->setPrivates(Vars);
12409   Vars.clear();
12410   for (unsigned i = 0; i != NumVars; ++i)
12411     Vars.push_back(Record.readSubExpr());
12412   C->setInits(Vars);
12413   Vars.clear();
12414   for (unsigned i = 0; i != NumVars; ++i)
12415     Vars.push_back(Record.readSubExpr());
12416   C->setUpdates(Vars);
12417   Vars.clear();
12418   for (unsigned i = 0; i != NumVars; ++i)
12419     Vars.push_back(Record.readSubExpr());
12420   C->setFinals(Vars);
12421   C->setStep(Record.readSubExpr());
12422   C->setCalcStep(Record.readSubExpr());
12423   Vars.clear();
12424   for (unsigned I = 0; I != NumVars + 1; ++I)
12425     Vars.push_back(Record.readSubExpr());
12426   C->setUsedExprs(Vars);
12427 }
12428 
12429 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12430   C->setLParenLoc(Record.readSourceLocation());
12431   C->setColonLoc(Record.readSourceLocation());
12432   unsigned NumVars = C->varlist_size();
12433   SmallVector<Expr *, 16> Vars;
12434   Vars.reserve(NumVars);
12435   for (unsigned i = 0; i != NumVars; ++i)
12436     Vars.push_back(Record.readSubExpr());
12437   C->setVarRefs(Vars);
12438   C->setAlignment(Record.readSubExpr());
12439 }
12440 
12441 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12442   C->setLParenLoc(Record.readSourceLocation());
12443   unsigned NumVars = C->varlist_size();
12444   SmallVector<Expr *, 16> Exprs;
12445   Exprs.reserve(NumVars);
12446   for (unsigned i = 0; i != NumVars; ++i)
12447     Exprs.push_back(Record.readSubExpr());
12448   C->setVarRefs(Exprs);
12449   Exprs.clear();
12450   for (unsigned i = 0; i != NumVars; ++i)
12451     Exprs.push_back(Record.readSubExpr());
12452   C->setSourceExprs(Exprs);
12453   Exprs.clear();
12454   for (unsigned i = 0; i != NumVars; ++i)
12455     Exprs.push_back(Record.readSubExpr());
12456   C->setDestinationExprs(Exprs);
12457   Exprs.clear();
12458   for (unsigned i = 0; i != NumVars; ++i)
12459     Exprs.push_back(Record.readSubExpr());
12460   C->setAssignmentOps(Exprs);
12461 }
12462 
12463 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12464   C->setLParenLoc(Record.readSourceLocation());
12465   unsigned NumVars = C->varlist_size();
12466   SmallVector<Expr *, 16> Exprs;
12467   Exprs.reserve(NumVars);
12468   for (unsigned i = 0; i != NumVars; ++i)
12469     Exprs.push_back(Record.readSubExpr());
12470   C->setVarRefs(Exprs);
12471   Exprs.clear();
12472   for (unsigned i = 0; i != NumVars; ++i)
12473     Exprs.push_back(Record.readSubExpr());
12474   C->setSourceExprs(Exprs);
12475   Exprs.clear();
12476   for (unsigned i = 0; i != NumVars; ++i)
12477     Exprs.push_back(Record.readSubExpr());
12478   C->setDestinationExprs(Exprs);
12479   Exprs.clear();
12480   for (unsigned i = 0; i != NumVars; ++i)
12481     Exprs.push_back(Record.readSubExpr());
12482   C->setAssignmentOps(Exprs);
12483 }
12484 
12485 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12486   C->setLParenLoc(Record.readSourceLocation());
12487   unsigned NumVars = C->varlist_size();
12488   SmallVector<Expr *, 16> Vars;
12489   Vars.reserve(NumVars);
12490   for (unsigned i = 0; i != NumVars; ++i)
12491     Vars.push_back(Record.readSubExpr());
12492   C->setVarRefs(Vars);
12493 }
12494 
12495 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12496   C->setDepobj(Record.readSubExpr());
12497   C->setLParenLoc(Record.readSourceLocation());
12498 }
12499 
12500 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12501   C->setLParenLoc(Record.readSourceLocation());
12502   C->setModifier(Record.readSubExpr());
12503   C->setDependencyKind(
12504       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12505   C->setDependencyLoc(Record.readSourceLocation());
12506   C->setColonLoc(Record.readSourceLocation());
12507   unsigned NumVars = C->varlist_size();
12508   SmallVector<Expr *, 16> Vars;
12509   Vars.reserve(NumVars);
12510   for (unsigned I = 0; I != NumVars; ++I)
12511     Vars.push_back(Record.readSubExpr());
12512   C->setVarRefs(Vars);
12513   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12514     C->setLoopData(I, Record.readSubExpr());
12515 }
12516 
12517 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12518   VisitOMPClauseWithPreInit(C);
12519   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12520   C->setDevice(Record.readSubExpr());
12521   C->setModifierLoc(Record.readSourceLocation());
12522   C->setLParenLoc(Record.readSourceLocation());
12523 }
12524 
12525 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12526   C->setLParenLoc(Record.readSourceLocation());
12527   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12528     C->setMapTypeModifier(
12529         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12530     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12531   }
12532   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12533   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12534   C->setMapType(
12535      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12536   C->setMapLoc(Record.readSourceLocation());
12537   C->setColonLoc(Record.readSourceLocation());
12538   auto NumVars = C->varlist_size();
12539   auto UniqueDecls = C->getUniqueDeclarationsNum();
12540   auto TotalLists = C->getTotalComponentListNum();
12541   auto TotalComponents = C->getTotalComponentsNum();
12542 
12543   SmallVector<Expr *, 16> Vars;
12544   Vars.reserve(NumVars);
12545   for (unsigned i = 0; i != NumVars; ++i)
12546     Vars.push_back(Record.readExpr());
12547   C->setVarRefs(Vars);
12548 
12549   SmallVector<Expr *, 16> UDMappers;
12550   UDMappers.reserve(NumVars);
12551   for (unsigned I = 0; I < NumVars; ++I)
12552     UDMappers.push_back(Record.readExpr());
12553   C->setUDMapperRefs(UDMappers);
12554 
12555   SmallVector<ValueDecl *, 16> Decls;
12556   Decls.reserve(UniqueDecls);
12557   for (unsigned i = 0; i < UniqueDecls; ++i)
12558     Decls.push_back(Record.readDeclAs<ValueDecl>());
12559   C->setUniqueDecls(Decls);
12560 
12561   SmallVector<unsigned, 16> ListsPerDecl;
12562   ListsPerDecl.reserve(UniqueDecls);
12563   for (unsigned i = 0; i < UniqueDecls; ++i)
12564     ListsPerDecl.push_back(Record.readInt());
12565   C->setDeclNumLists(ListsPerDecl);
12566 
12567   SmallVector<unsigned, 32> ListSizes;
12568   ListSizes.reserve(TotalLists);
12569   for (unsigned i = 0; i < TotalLists; ++i)
12570     ListSizes.push_back(Record.readInt());
12571   C->setComponentListSizes(ListSizes);
12572 
12573   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12574   Components.reserve(TotalComponents);
12575   for (unsigned i = 0; i < TotalComponents; ++i) {
12576     Expr *AssociatedExprPr = Record.readExpr();
12577     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12578     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12579                             /*IsNonContiguous=*/false);
12580   }
12581   C->setComponents(Components, ListSizes);
12582 }
12583 
12584 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12585   C->setLParenLoc(Record.readSourceLocation());
12586   C->setColonLoc(Record.readSourceLocation());
12587   C->setAllocator(Record.readSubExpr());
12588   unsigned NumVars = C->varlist_size();
12589   SmallVector<Expr *, 16> Vars;
12590   Vars.reserve(NumVars);
12591   for (unsigned i = 0; i != NumVars; ++i)
12592     Vars.push_back(Record.readSubExpr());
12593   C->setVarRefs(Vars);
12594 }
12595 
12596 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12597   VisitOMPClauseWithPreInit(C);
12598   C->setNumTeams(Record.readSubExpr());
12599   C->setLParenLoc(Record.readSourceLocation());
12600 }
12601 
12602 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12603   VisitOMPClauseWithPreInit(C);
12604   C->setThreadLimit(Record.readSubExpr());
12605   C->setLParenLoc(Record.readSourceLocation());
12606 }
12607 
12608 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12609   VisitOMPClauseWithPreInit(C);
12610   C->setPriority(Record.readSubExpr());
12611   C->setLParenLoc(Record.readSourceLocation());
12612 }
12613 
12614 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12615   VisitOMPClauseWithPreInit(C);
12616   C->setGrainsize(Record.readSubExpr());
12617   C->setLParenLoc(Record.readSourceLocation());
12618 }
12619 
12620 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12621   VisitOMPClauseWithPreInit(C);
12622   C->setNumTasks(Record.readSubExpr());
12623   C->setLParenLoc(Record.readSourceLocation());
12624 }
12625 
12626 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12627   C->setHint(Record.readSubExpr());
12628   C->setLParenLoc(Record.readSourceLocation());
12629 }
12630 
12631 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12632   VisitOMPClauseWithPreInit(C);
12633   C->setDistScheduleKind(
12634       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12635   C->setChunkSize(Record.readSubExpr());
12636   C->setLParenLoc(Record.readSourceLocation());
12637   C->setDistScheduleKindLoc(Record.readSourceLocation());
12638   C->setCommaLoc(Record.readSourceLocation());
12639 }
12640 
12641 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12642   C->setDefaultmapKind(
12643        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12644   C->setDefaultmapModifier(
12645       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12646   C->setLParenLoc(Record.readSourceLocation());
12647   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12648   C->setDefaultmapKindLoc(Record.readSourceLocation());
12649 }
12650 
12651 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12652   C->setLParenLoc(Record.readSourceLocation());
12653   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12654     C->setMotionModifier(
12655         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12656     C->setMotionModifierLoc(I, Record.readSourceLocation());
12657   }
12658   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12659   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12660   C->setColonLoc(Record.readSourceLocation());
12661   auto NumVars = C->varlist_size();
12662   auto UniqueDecls = C->getUniqueDeclarationsNum();
12663   auto TotalLists = C->getTotalComponentListNum();
12664   auto TotalComponents = C->getTotalComponentsNum();
12665 
12666   SmallVector<Expr *, 16> Vars;
12667   Vars.reserve(NumVars);
12668   for (unsigned i = 0; i != NumVars; ++i)
12669     Vars.push_back(Record.readSubExpr());
12670   C->setVarRefs(Vars);
12671 
12672   SmallVector<Expr *, 16> UDMappers;
12673   UDMappers.reserve(NumVars);
12674   for (unsigned I = 0; I < NumVars; ++I)
12675     UDMappers.push_back(Record.readSubExpr());
12676   C->setUDMapperRefs(UDMappers);
12677 
12678   SmallVector<ValueDecl *, 16> Decls;
12679   Decls.reserve(UniqueDecls);
12680   for (unsigned i = 0; i < UniqueDecls; ++i)
12681     Decls.push_back(Record.readDeclAs<ValueDecl>());
12682   C->setUniqueDecls(Decls);
12683 
12684   SmallVector<unsigned, 16> ListsPerDecl;
12685   ListsPerDecl.reserve(UniqueDecls);
12686   for (unsigned i = 0; i < UniqueDecls; ++i)
12687     ListsPerDecl.push_back(Record.readInt());
12688   C->setDeclNumLists(ListsPerDecl);
12689 
12690   SmallVector<unsigned, 32> ListSizes;
12691   ListSizes.reserve(TotalLists);
12692   for (unsigned i = 0; i < TotalLists; ++i)
12693     ListSizes.push_back(Record.readInt());
12694   C->setComponentListSizes(ListSizes);
12695 
12696   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12697   Components.reserve(TotalComponents);
12698   for (unsigned i = 0; i < TotalComponents; ++i) {
12699     Expr *AssociatedExprPr = Record.readSubExpr();
12700     bool IsNonContiguous = Record.readBool();
12701     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12702     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12703   }
12704   C->setComponents(Components, ListSizes);
12705 }
12706 
12707 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12708   C->setLParenLoc(Record.readSourceLocation());
12709   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12710     C->setMotionModifier(
12711         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12712     C->setMotionModifierLoc(I, Record.readSourceLocation());
12713   }
12714   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12715   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12716   C->setColonLoc(Record.readSourceLocation());
12717   auto NumVars = C->varlist_size();
12718   auto UniqueDecls = C->getUniqueDeclarationsNum();
12719   auto TotalLists = C->getTotalComponentListNum();
12720   auto TotalComponents = C->getTotalComponentsNum();
12721 
12722   SmallVector<Expr *, 16> Vars;
12723   Vars.reserve(NumVars);
12724   for (unsigned i = 0; i != NumVars; ++i)
12725     Vars.push_back(Record.readSubExpr());
12726   C->setVarRefs(Vars);
12727 
12728   SmallVector<Expr *, 16> UDMappers;
12729   UDMappers.reserve(NumVars);
12730   for (unsigned I = 0; I < NumVars; ++I)
12731     UDMappers.push_back(Record.readSubExpr());
12732   C->setUDMapperRefs(UDMappers);
12733 
12734   SmallVector<ValueDecl *, 16> Decls;
12735   Decls.reserve(UniqueDecls);
12736   for (unsigned i = 0; i < UniqueDecls; ++i)
12737     Decls.push_back(Record.readDeclAs<ValueDecl>());
12738   C->setUniqueDecls(Decls);
12739 
12740   SmallVector<unsigned, 16> ListsPerDecl;
12741   ListsPerDecl.reserve(UniqueDecls);
12742   for (unsigned i = 0; i < UniqueDecls; ++i)
12743     ListsPerDecl.push_back(Record.readInt());
12744   C->setDeclNumLists(ListsPerDecl);
12745 
12746   SmallVector<unsigned, 32> ListSizes;
12747   ListSizes.reserve(TotalLists);
12748   for (unsigned i = 0; i < TotalLists; ++i)
12749     ListSizes.push_back(Record.readInt());
12750   C->setComponentListSizes(ListSizes);
12751 
12752   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12753   Components.reserve(TotalComponents);
12754   for (unsigned i = 0; i < TotalComponents; ++i) {
12755     Expr *AssociatedExprPr = Record.readSubExpr();
12756     bool IsNonContiguous = Record.readBool();
12757     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12758     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12759   }
12760   C->setComponents(Components, ListSizes);
12761 }
12762 
12763 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12764   C->setLParenLoc(Record.readSourceLocation());
12765   auto NumVars = C->varlist_size();
12766   auto UniqueDecls = C->getUniqueDeclarationsNum();
12767   auto TotalLists = C->getTotalComponentListNum();
12768   auto TotalComponents = C->getTotalComponentsNum();
12769 
12770   SmallVector<Expr *, 16> Vars;
12771   Vars.reserve(NumVars);
12772   for (unsigned i = 0; i != NumVars; ++i)
12773     Vars.push_back(Record.readSubExpr());
12774   C->setVarRefs(Vars);
12775   Vars.clear();
12776   for (unsigned i = 0; i != NumVars; ++i)
12777     Vars.push_back(Record.readSubExpr());
12778   C->setPrivateCopies(Vars);
12779   Vars.clear();
12780   for (unsigned i = 0; i != NumVars; ++i)
12781     Vars.push_back(Record.readSubExpr());
12782   C->setInits(Vars);
12783 
12784   SmallVector<ValueDecl *, 16> Decls;
12785   Decls.reserve(UniqueDecls);
12786   for (unsigned i = 0; i < UniqueDecls; ++i)
12787     Decls.push_back(Record.readDeclAs<ValueDecl>());
12788   C->setUniqueDecls(Decls);
12789 
12790   SmallVector<unsigned, 16> ListsPerDecl;
12791   ListsPerDecl.reserve(UniqueDecls);
12792   for (unsigned i = 0; i < UniqueDecls; ++i)
12793     ListsPerDecl.push_back(Record.readInt());
12794   C->setDeclNumLists(ListsPerDecl);
12795 
12796   SmallVector<unsigned, 32> ListSizes;
12797   ListSizes.reserve(TotalLists);
12798   for (unsigned i = 0; i < TotalLists; ++i)
12799     ListSizes.push_back(Record.readInt());
12800   C->setComponentListSizes(ListSizes);
12801 
12802   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12803   Components.reserve(TotalComponents);
12804   for (unsigned i = 0; i < TotalComponents; ++i) {
12805     auto *AssociatedExprPr = Record.readSubExpr();
12806     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12807     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12808                             /*IsNonContiguous=*/false);
12809   }
12810   C->setComponents(Components, ListSizes);
12811 }
12812 
12813 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12814   C->setLParenLoc(Record.readSourceLocation());
12815   auto NumVars = C->varlist_size();
12816   auto UniqueDecls = C->getUniqueDeclarationsNum();
12817   auto TotalLists = C->getTotalComponentListNum();
12818   auto TotalComponents = C->getTotalComponentsNum();
12819 
12820   SmallVector<Expr *, 16> Vars;
12821   Vars.reserve(NumVars);
12822   for (unsigned i = 0; i != NumVars; ++i)
12823     Vars.push_back(Record.readSubExpr());
12824   C->setVarRefs(Vars);
12825 
12826   SmallVector<ValueDecl *, 16> Decls;
12827   Decls.reserve(UniqueDecls);
12828   for (unsigned i = 0; i < UniqueDecls; ++i)
12829     Decls.push_back(Record.readDeclAs<ValueDecl>());
12830   C->setUniqueDecls(Decls);
12831 
12832   SmallVector<unsigned, 16> ListsPerDecl;
12833   ListsPerDecl.reserve(UniqueDecls);
12834   for (unsigned i = 0; i < UniqueDecls; ++i)
12835     ListsPerDecl.push_back(Record.readInt());
12836   C->setDeclNumLists(ListsPerDecl);
12837 
12838   SmallVector<unsigned, 32> ListSizes;
12839   ListSizes.reserve(TotalLists);
12840   for (unsigned i = 0; i < TotalLists; ++i)
12841     ListSizes.push_back(Record.readInt());
12842   C->setComponentListSizes(ListSizes);
12843 
12844   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12845   Components.reserve(TotalComponents);
12846   for (unsigned i = 0; i < TotalComponents; ++i) {
12847     Expr *AssociatedExpr = Record.readSubExpr();
12848     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12849     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12850                             /*IsNonContiguous*/ false);
12851   }
12852   C->setComponents(Components, ListSizes);
12853 }
12854 
12855 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12856   C->setLParenLoc(Record.readSourceLocation());
12857   auto NumVars = C->varlist_size();
12858   auto UniqueDecls = C->getUniqueDeclarationsNum();
12859   auto TotalLists = C->getTotalComponentListNum();
12860   auto TotalComponents = C->getTotalComponentsNum();
12861 
12862   SmallVector<Expr *, 16> Vars;
12863   Vars.reserve(NumVars);
12864   for (unsigned i = 0; i != NumVars; ++i)
12865     Vars.push_back(Record.readSubExpr());
12866   C->setVarRefs(Vars);
12867   Vars.clear();
12868 
12869   SmallVector<ValueDecl *, 16> Decls;
12870   Decls.reserve(UniqueDecls);
12871   for (unsigned i = 0; i < UniqueDecls; ++i)
12872     Decls.push_back(Record.readDeclAs<ValueDecl>());
12873   C->setUniqueDecls(Decls);
12874 
12875   SmallVector<unsigned, 16> ListsPerDecl;
12876   ListsPerDecl.reserve(UniqueDecls);
12877   for (unsigned i = 0; i < UniqueDecls; ++i)
12878     ListsPerDecl.push_back(Record.readInt());
12879   C->setDeclNumLists(ListsPerDecl);
12880 
12881   SmallVector<unsigned, 32> ListSizes;
12882   ListSizes.reserve(TotalLists);
12883   for (unsigned i = 0; i < TotalLists; ++i)
12884     ListSizes.push_back(Record.readInt());
12885   C->setComponentListSizes(ListSizes);
12886 
12887   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12888   Components.reserve(TotalComponents);
12889   for (unsigned i = 0; i < TotalComponents; ++i) {
12890     Expr *AssociatedExpr = Record.readSubExpr();
12891     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12892     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12893                             /*IsNonContiguous=*/false);
12894   }
12895   C->setComponents(Components, ListSizes);
12896 }
12897 
12898 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12899   C->setLParenLoc(Record.readSourceLocation());
12900   unsigned NumVars = C->varlist_size();
12901   SmallVector<Expr *, 16> Vars;
12902   Vars.reserve(NumVars);
12903   for (unsigned i = 0; i != NumVars; ++i)
12904     Vars.push_back(Record.readSubExpr());
12905   C->setVarRefs(Vars);
12906   Vars.clear();
12907   Vars.reserve(NumVars);
12908   for (unsigned i = 0; i != NumVars; ++i)
12909     Vars.push_back(Record.readSubExpr());
12910   C->setPrivateRefs(Vars);
12911 }
12912 
12913 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12914   C->setLParenLoc(Record.readSourceLocation());
12915   unsigned NumVars = C->varlist_size();
12916   SmallVector<Expr *, 16> Vars;
12917   Vars.reserve(NumVars);
12918   for (unsigned i = 0; i != NumVars; ++i)
12919     Vars.push_back(Record.readSubExpr());
12920   C->setVarRefs(Vars);
12921 }
12922 
12923 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12924   C->setLParenLoc(Record.readSourceLocation());
12925   unsigned NumVars = C->varlist_size();
12926   SmallVector<Expr *, 16> Vars;
12927   Vars.reserve(NumVars);
12928   for (unsigned i = 0; i != NumVars; ++i)
12929     Vars.push_back(Record.readSubExpr());
12930   C->setVarRefs(Vars);
12931 }
12932 
12933 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12934   C->setLParenLoc(Record.readSourceLocation());
12935   unsigned NumOfAllocators = C->getNumberOfAllocators();
12936   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12937   Data.reserve(NumOfAllocators);
12938   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12939     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12940     D.Allocator = Record.readSubExpr();
12941     D.AllocatorTraits = Record.readSubExpr();
12942     D.LParenLoc = Record.readSourceLocation();
12943     D.RParenLoc = Record.readSourceLocation();
12944   }
12945   C->setAllocatorsData(Data);
12946 }
12947 
12948 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12949   C->setLParenLoc(Record.readSourceLocation());
12950   C->setModifier(Record.readSubExpr());
12951   C->setColonLoc(Record.readSourceLocation());
12952   unsigned NumOfLocators = C->varlist_size();
12953   SmallVector<Expr *, 4> Locators;
12954   Locators.reserve(NumOfLocators);
12955   for (unsigned I = 0; I != NumOfLocators; ++I)
12956     Locators.push_back(Record.readSubExpr());
12957   C->setVarRefs(Locators);
12958 }
12959 
12960 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12961   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12962   C->setLParenLoc(Record.readSourceLocation());
12963   C->setKindKwLoc(Record.readSourceLocation());
12964 }
12965 
12966 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12967   VisitOMPClauseWithPreInit(C);
12968   C->setThreadID(Record.readSubExpr());
12969   C->setLParenLoc(Record.readSourceLocation());
12970 }
12971 
12972 void OMPClauseReader::VisitOMPBindClause(OMPBindClause *C) {
12973   C->setBindKind(Record.readEnum<OpenMPBindClauseKind>());
12974   C->setLParenLoc(Record.readSourceLocation());
12975   C->setBindKindLoc(Record.readSourceLocation());
12976 }
12977 
12978 void OMPClauseReader::VisitOMPAlignClause(OMPAlignClause *C) {
12979   C->setAlignment(Record.readExpr());
12980   C->setLParenLoc(Record.readSourceLocation());
12981 }
12982 
12983 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12984   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12985   TI.Sets.resize(readUInt32());
12986   for (auto &Set : TI.Sets) {
12987     Set.Kind = readEnum<llvm::omp::TraitSet>();
12988     Set.Selectors.resize(readUInt32());
12989     for (auto &Selector : Set.Selectors) {
12990       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12991       Selector.ScoreOrCondition = nullptr;
12992       if (readBool())
12993         Selector.ScoreOrCondition = readExprRef();
12994       Selector.Properties.resize(readUInt32());
12995       for (auto &Property : Selector.Properties)
12996         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12997     }
12998   }
12999   return &TI;
13000 }
13001 
13002 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
13003   if (!Data)
13004     return;
13005   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
13006     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13007     skipInts(3);
13008   }
13009   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13010   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13011     Clauses[I] = readOMPClause();
13012   Data->setClauses(Clauses);
13013   if (Data->hasAssociatedStmt())
13014     Data->setAssociatedStmt(readStmt());
13015   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13016     Data->getChildren()[I] = readStmt();
13017 }
13018