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, false);
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] = true;
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.setDecltypeLoc(readSourceLocation());
6632   TL.setRParenLoc(readSourceLocation());
6633 }
6634 
6635 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6636   TL.setKWLoc(readSourceLocation());
6637   TL.setLParenLoc(readSourceLocation());
6638   TL.setRParenLoc(readSourceLocation());
6639   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6640 }
6641 
6642 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6643   TL.setNameLoc(readSourceLocation());
6644   if (Reader.readBool()) {
6645     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6646     TL.setTemplateKWLoc(readSourceLocation());
6647     TL.setConceptNameLoc(readSourceLocation());
6648     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6649     TL.setLAngleLoc(readSourceLocation());
6650     TL.setRAngleLoc(readSourceLocation());
6651     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6652       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6653                               TL.getTypePtr()->getArg(i).getKind()));
6654   }
6655 }
6656 
6657 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6658     DeducedTemplateSpecializationTypeLoc TL) {
6659   TL.setTemplateNameLoc(readSourceLocation());
6660 }
6661 
6662 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6663   TL.setNameLoc(readSourceLocation());
6664 }
6665 
6666 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6667   TL.setNameLoc(readSourceLocation());
6668 }
6669 
6670 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6671   TL.setAttr(ReadAttr());
6672 }
6673 
6674 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6675   TL.setNameLoc(readSourceLocation());
6676 }
6677 
6678 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6679                                             SubstTemplateTypeParmTypeLoc TL) {
6680   TL.setNameLoc(readSourceLocation());
6681 }
6682 
6683 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6684                                           SubstTemplateTypeParmPackTypeLoc TL) {
6685   TL.setNameLoc(readSourceLocation());
6686 }
6687 
6688 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6689                                            TemplateSpecializationTypeLoc TL) {
6690   TL.setTemplateKeywordLoc(readSourceLocation());
6691   TL.setTemplateNameLoc(readSourceLocation());
6692   TL.setLAngleLoc(readSourceLocation());
6693   TL.setRAngleLoc(readSourceLocation());
6694   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6695     TL.setArgLocInfo(
6696         i,
6697         Reader.readTemplateArgumentLocInfo(
6698           TL.getTypePtr()->getArg(i).getKind()));
6699 }
6700 
6701 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6702   TL.setLParenLoc(readSourceLocation());
6703   TL.setRParenLoc(readSourceLocation());
6704 }
6705 
6706 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6707   TL.setElaboratedKeywordLoc(readSourceLocation());
6708   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6709 }
6710 
6711 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6712   TL.setNameLoc(readSourceLocation());
6713 }
6714 
6715 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6716   TL.setElaboratedKeywordLoc(readSourceLocation());
6717   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6718   TL.setNameLoc(readSourceLocation());
6719 }
6720 
6721 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6722        DependentTemplateSpecializationTypeLoc TL) {
6723   TL.setElaboratedKeywordLoc(readSourceLocation());
6724   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6725   TL.setTemplateKeywordLoc(readSourceLocation());
6726   TL.setTemplateNameLoc(readSourceLocation());
6727   TL.setLAngleLoc(readSourceLocation());
6728   TL.setRAngleLoc(readSourceLocation());
6729   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6730     TL.setArgLocInfo(
6731         I,
6732         Reader.readTemplateArgumentLocInfo(
6733             TL.getTypePtr()->getArg(I).getKind()));
6734 }
6735 
6736 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6737   TL.setEllipsisLoc(readSourceLocation());
6738 }
6739 
6740 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6741   TL.setNameLoc(readSourceLocation());
6742 }
6743 
6744 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6745   if (TL.getNumProtocols()) {
6746     TL.setProtocolLAngleLoc(readSourceLocation());
6747     TL.setProtocolRAngleLoc(readSourceLocation());
6748   }
6749   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6750     TL.setProtocolLoc(i, readSourceLocation());
6751 }
6752 
6753 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6754   TL.setHasBaseTypeAsWritten(Reader.readBool());
6755   TL.setTypeArgsLAngleLoc(readSourceLocation());
6756   TL.setTypeArgsRAngleLoc(readSourceLocation());
6757   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6758     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6759   TL.setProtocolLAngleLoc(readSourceLocation());
6760   TL.setProtocolRAngleLoc(readSourceLocation());
6761   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6762     TL.setProtocolLoc(i, readSourceLocation());
6763 }
6764 
6765 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6766   TL.setStarLoc(readSourceLocation());
6767 }
6768 
6769 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6770   TL.setKWLoc(readSourceLocation());
6771   TL.setLParenLoc(readSourceLocation());
6772   TL.setRParenLoc(readSourceLocation());
6773 }
6774 
6775 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6776   TL.setKWLoc(readSourceLocation());
6777 }
6778 
6779 void TypeLocReader::VisitBitIntTypeLoc(clang::BitIntTypeLoc TL) {
6780   TL.setNameLoc(readSourceLocation());
6781 }
6782 void TypeLocReader::VisitDependentBitIntTypeLoc(
6783     clang::DependentBitIntTypeLoc TL) {
6784   TL.setNameLoc(readSourceLocation());
6785 }
6786 
6787 
6788 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6789   TypeLocReader TLR(*this);
6790   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6791     TLR.Visit(TL);
6792 }
6793 
6794 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6795   QualType InfoTy = readType();
6796   if (InfoTy.isNull())
6797     return nullptr;
6798 
6799   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6800   readTypeLoc(TInfo->getTypeLoc());
6801   return TInfo;
6802 }
6803 
6804 QualType ASTReader::GetType(TypeID ID) {
6805   assert(ContextObj && "reading type with no AST context");
6806   ASTContext &Context = *ContextObj;
6807 
6808   unsigned FastQuals = ID & Qualifiers::FastMask;
6809   unsigned Index = ID >> Qualifiers::FastWidth;
6810 
6811   if (Index < NUM_PREDEF_TYPE_IDS) {
6812     QualType T;
6813     switch ((PredefinedTypeIDs)Index) {
6814     case PREDEF_TYPE_NULL_ID:
6815       return QualType();
6816     case PREDEF_TYPE_VOID_ID:
6817       T = Context.VoidTy;
6818       break;
6819     case PREDEF_TYPE_BOOL_ID:
6820       T = Context.BoolTy;
6821       break;
6822     case PREDEF_TYPE_CHAR_U_ID:
6823     case PREDEF_TYPE_CHAR_S_ID:
6824       // FIXME: Check that the signedness of CharTy is correct!
6825       T = Context.CharTy;
6826       break;
6827     case PREDEF_TYPE_UCHAR_ID:
6828       T = Context.UnsignedCharTy;
6829       break;
6830     case PREDEF_TYPE_USHORT_ID:
6831       T = Context.UnsignedShortTy;
6832       break;
6833     case PREDEF_TYPE_UINT_ID:
6834       T = Context.UnsignedIntTy;
6835       break;
6836     case PREDEF_TYPE_ULONG_ID:
6837       T = Context.UnsignedLongTy;
6838       break;
6839     case PREDEF_TYPE_ULONGLONG_ID:
6840       T = Context.UnsignedLongLongTy;
6841       break;
6842     case PREDEF_TYPE_UINT128_ID:
6843       T = Context.UnsignedInt128Ty;
6844       break;
6845     case PREDEF_TYPE_SCHAR_ID:
6846       T = Context.SignedCharTy;
6847       break;
6848     case PREDEF_TYPE_WCHAR_ID:
6849       T = Context.WCharTy;
6850       break;
6851     case PREDEF_TYPE_SHORT_ID:
6852       T = Context.ShortTy;
6853       break;
6854     case PREDEF_TYPE_INT_ID:
6855       T = Context.IntTy;
6856       break;
6857     case PREDEF_TYPE_LONG_ID:
6858       T = Context.LongTy;
6859       break;
6860     case PREDEF_TYPE_LONGLONG_ID:
6861       T = Context.LongLongTy;
6862       break;
6863     case PREDEF_TYPE_INT128_ID:
6864       T = Context.Int128Ty;
6865       break;
6866     case PREDEF_TYPE_BFLOAT16_ID:
6867       T = Context.BFloat16Ty;
6868       break;
6869     case PREDEF_TYPE_HALF_ID:
6870       T = Context.HalfTy;
6871       break;
6872     case PREDEF_TYPE_FLOAT_ID:
6873       T = Context.FloatTy;
6874       break;
6875     case PREDEF_TYPE_DOUBLE_ID:
6876       T = Context.DoubleTy;
6877       break;
6878     case PREDEF_TYPE_LONGDOUBLE_ID:
6879       T = Context.LongDoubleTy;
6880       break;
6881     case PREDEF_TYPE_SHORT_ACCUM_ID:
6882       T = Context.ShortAccumTy;
6883       break;
6884     case PREDEF_TYPE_ACCUM_ID:
6885       T = Context.AccumTy;
6886       break;
6887     case PREDEF_TYPE_LONG_ACCUM_ID:
6888       T = Context.LongAccumTy;
6889       break;
6890     case PREDEF_TYPE_USHORT_ACCUM_ID:
6891       T = Context.UnsignedShortAccumTy;
6892       break;
6893     case PREDEF_TYPE_UACCUM_ID:
6894       T = Context.UnsignedAccumTy;
6895       break;
6896     case PREDEF_TYPE_ULONG_ACCUM_ID:
6897       T = Context.UnsignedLongAccumTy;
6898       break;
6899     case PREDEF_TYPE_SHORT_FRACT_ID:
6900       T = Context.ShortFractTy;
6901       break;
6902     case PREDEF_TYPE_FRACT_ID:
6903       T = Context.FractTy;
6904       break;
6905     case PREDEF_TYPE_LONG_FRACT_ID:
6906       T = Context.LongFractTy;
6907       break;
6908     case PREDEF_TYPE_USHORT_FRACT_ID:
6909       T = Context.UnsignedShortFractTy;
6910       break;
6911     case PREDEF_TYPE_UFRACT_ID:
6912       T = Context.UnsignedFractTy;
6913       break;
6914     case PREDEF_TYPE_ULONG_FRACT_ID:
6915       T = Context.UnsignedLongFractTy;
6916       break;
6917     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6918       T = Context.SatShortAccumTy;
6919       break;
6920     case PREDEF_TYPE_SAT_ACCUM_ID:
6921       T = Context.SatAccumTy;
6922       break;
6923     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6924       T = Context.SatLongAccumTy;
6925       break;
6926     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6927       T = Context.SatUnsignedShortAccumTy;
6928       break;
6929     case PREDEF_TYPE_SAT_UACCUM_ID:
6930       T = Context.SatUnsignedAccumTy;
6931       break;
6932     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6933       T = Context.SatUnsignedLongAccumTy;
6934       break;
6935     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6936       T = Context.SatShortFractTy;
6937       break;
6938     case PREDEF_TYPE_SAT_FRACT_ID:
6939       T = Context.SatFractTy;
6940       break;
6941     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6942       T = Context.SatLongFractTy;
6943       break;
6944     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6945       T = Context.SatUnsignedShortFractTy;
6946       break;
6947     case PREDEF_TYPE_SAT_UFRACT_ID:
6948       T = Context.SatUnsignedFractTy;
6949       break;
6950     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6951       T = Context.SatUnsignedLongFractTy;
6952       break;
6953     case PREDEF_TYPE_FLOAT16_ID:
6954       T = Context.Float16Ty;
6955       break;
6956     case PREDEF_TYPE_FLOAT128_ID:
6957       T = Context.Float128Ty;
6958       break;
6959     case PREDEF_TYPE_IBM128_ID:
6960       T = Context.Ibm128Ty;
6961       break;
6962     case PREDEF_TYPE_OVERLOAD_ID:
6963       T = Context.OverloadTy;
6964       break;
6965     case PREDEF_TYPE_BOUND_MEMBER:
6966       T = Context.BoundMemberTy;
6967       break;
6968     case PREDEF_TYPE_PSEUDO_OBJECT:
6969       T = Context.PseudoObjectTy;
6970       break;
6971     case PREDEF_TYPE_DEPENDENT_ID:
6972       T = Context.DependentTy;
6973       break;
6974     case PREDEF_TYPE_UNKNOWN_ANY:
6975       T = Context.UnknownAnyTy;
6976       break;
6977     case PREDEF_TYPE_NULLPTR_ID:
6978       T = Context.NullPtrTy;
6979       break;
6980     case PREDEF_TYPE_CHAR8_ID:
6981       T = Context.Char8Ty;
6982       break;
6983     case PREDEF_TYPE_CHAR16_ID:
6984       T = Context.Char16Ty;
6985       break;
6986     case PREDEF_TYPE_CHAR32_ID:
6987       T = Context.Char32Ty;
6988       break;
6989     case PREDEF_TYPE_OBJC_ID:
6990       T = Context.ObjCBuiltinIdTy;
6991       break;
6992     case PREDEF_TYPE_OBJC_CLASS:
6993       T = Context.ObjCBuiltinClassTy;
6994       break;
6995     case PREDEF_TYPE_OBJC_SEL:
6996       T = Context.ObjCBuiltinSelTy;
6997       break;
6998 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6999     case PREDEF_TYPE_##Id##_ID: \
7000       T = Context.SingletonId; \
7001       break;
7002 #include "clang/Basic/OpenCLImageTypes.def"
7003 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7004     case PREDEF_TYPE_##Id##_ID: \
7005       T = Context.Id##Ty; \
7006       break;
7007 #include "clang/Basic/OpenCLExtensionTypes.def"
7008     case PREDEF_TYPE_SAMPLER_ID:
7009       T = Context.OCLSamplerTy;
7010       break;
7011     case PREDEF_TYPE_EVENT_ID:
7012       T = Context.OCLEventTy;
7013       break;
7014     case PREDEF_TYPE_CLK_EVENT_ID:
7015       T = Context.OCLClkEventTy;
7016       break;
7017     case PREDEF_TYPE_QUEUE_ID:
7018       T = Context.OCLQueueTy;
7019       break;
7020     case PREDEF_TYPE_RESERVE_ID_ID:
7021       T = Context.OCLReserveIDTy;
7022       break;
7023     case PREDEF_TYPE_AUTO_DEDUCT:
7024       T = Context.getAutoDeductType();
7025       break;
7026     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7027       T = Context.getAutoRRefDeductType();
7028       break;
7029     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7030       T = Context.ARCUnbridgedCastTy;
7031       break;
7032     case PREDEF_TYPE_BUILTIN_FN:
7033       T = Context.BuiltinFnTy;
7034       break;
7035     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7036       T = Context.IncompleteMatrixIdxTy;
7037       break;
7038     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7039       T = Context.OMPArraySectionTy;
7040       break;
7041     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7042       T = Context.OMPArraySectionTy;
7043       break;
7044     case PREDEF_TYPE_OMP_ITERATOR:
7045       T = Context.OMPIteratorTy;
7046       break;
7047 #define SVE_TYPE(Name, Id, SingletonId) \
7048     case PREDEF_TYPE_##Id##_ID: \
7049       T = Context.SingletonId; \
7050       break;
7051 #include "clang/Basic/AArch64SVEACLETypes.def"
7052 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7053     case PREDEF_TYPE_##Id##_ID: \
7054       T = Context.Id##Ty; \
7055       break;
7056 #include "clang/Basic/PPCTypes.def"
7057 #define RVV_TYPE(Name, Id, SingletonId) \
7058     case PREDEF_TYPE_##Id##_ID: \
7059       T = Context.SingletonId; \
7060       break;
7061 #include "clang/Basic/RISCVVTypes.def"
7062     }
7063 
7064     assert(!T.isNull() && "Unknown predefined type");
7065     return T.withFastQualifiers(FastQuals);
7066   }
7067 
7068   Index -= NUM_PREDEF_TYPE_IDS;
7069   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7070   if (TypesLoaded[Index].isNull()) {
7071     TypesLoaded[Index] = readTypeRecord(Index);
7072     if (TypesLoaded[Index].isNull())
7073       return QualType();
7074 
7075     TypesLoaded[Index]->setFromAST();
7076     if (DeserializationListener)
7077       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7078                                         TypesLoaded[Index]);
7079   }
7080 
7081   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7082 }
7083 
7084 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7085   return GetType(getGlobalTypeID(F, LocalID));
7086 }
7087 
7088 serialization::TypeID
7089 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7090   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7091   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7092 
7093   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7094     return LocalID;
7095 
7096   if (!F.ModuleOffsetMap.empty())
7097     ReadModuleOffsetMap(F);
7098 
7099   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7100     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7101   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7102 
7103   unsigned GlobalIndex = LocalIndex + I->second;
7104   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7105 }
7106 
7107 TemplateArgumentLocInfo
7108 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7109   switch (Kind) {
7110   case TemplateArgument::Expression:
7111     return readExpr();
7112   case TemplateArgument::Type:
7113     return readTypeSourceInfo();
7114   case TemplateArgument::Template: {
7115     NestedNameSpecifierLoc QualifierLoc =
7116       readNestedNameSpecifierLoc();
7117     SourceLocation TemplateNameLoc = readSourceLocation();
7118     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7119                                    TemplateNameLoc, SourceLocation());
7120   }
7121   case TemplateArgument::TemplateExpansion: {
7122     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7123     SourceLocation TemplateNameLoc = readSourceLocation();
7124     SourceLocation EllipsisLoc = readSourceLocation();
7125     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7126                                    TemplateNameLoc, EllipsisLoc);
7127   }
7128   case TemplateArgument::Null:
7129   case TemplateArgument::Integral:
7130   case TemplateArgument::Declaration:
7131   case TemplateArgument::NullPtr:
7132   case TemplateArgument::Pack:
7133     // FIXME: Is this right?
7134     return TemplateArgumentLocInfo();
7135   }
7136   llvm_unreachable("unexpected template argument loc");
7137 }
7138 
7139 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7140   TemplateArgument Arg = readTemplateArgument();
7141 
7142   if (Arg.getKind() == TemplateArgument::Expression) {
7143     if (readBool()) // bool InfoHasSameExpr.
7144       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7145   }
7146   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7147 }
7148 
7149 const ASTTemplateArgumentListInfo *
7150 ASTRecordReader::readASTTemplateArgumentListInfo() {
7151   SourceLocation LAngleLoc = readSourceLocation();
7152   SourceLocation RAngleLoc = readSourceLocation();
7153   unsigned NumArgsAsWritten = readInt();
7154   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7155   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7156     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7157   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7158 }
7159 
7160 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7161   return GetDecl(ID);
7162 }
7163 
7164 void ASTReader::CompleteRedeclChain(const Decl *D) {
7165   if (NumCurrentElementsDeserializing) {
7166     // We arrange to not care about the complete redeclaration chain while we're
7167     // deserializing. Just remember that the AST has marked this one as complete
7168     // but that it's not actually complete yet, so we know we still need to
7169     // complete it later.
7170     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7171     return;
7172   }
7173 
7174   if (!D->getDeclContext()) {
7175     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7176     return;
7177   }
7178 
7179   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7180 
7181   // If this is a named declaration, complete it by looking it up
7182   // within its context.
7183   //
7184   // FIXME: Merging a function definition should merge
7185   // all mergeable entities within it.
7186   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7187       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7188     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7189       if (!getContext().getLangOpts().CPlusPlus &&
7190           isa<TranslationUnitDecl>(DC)) {
7191         // Outside of C++, we don't have a lookup table for the TU, so update
7192         // the identifier instead. (For C++ modules, we don't store decls
7193         // in the serialized identifier table, so we do the lookup in the TU.)
7194         auto *II = Name.getAsIdentifierInfo();
7195         assert(II && "non-identifier name in C?");
7196         if (II->isOutOfDate())
7197           updateOutOfDateIdentifier(*II);
7198       } else
7199         DC->lookup(Name);
7200     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7201       // Find all declarations of this kind from the relevant context.
7202       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7203         auto *DC = cast<DeclContext>(DCDecl);
7204         SmallVector<Decl*, 8> Decls;
7205         FindExternalLexicalDecls(
7206             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7207       }
7208     }
7209   }
7210 
7211   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7212     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7213   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7214     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7215   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7216     if (auto *Template = FD->getPrimaryTemplate())
7217       Template->LoadLazySpecializations();
7218   }
7219 }
7220 
7221 CXXCtorInitializer **
7222 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7223   RecordLocation Loc = getLocalBitOffset(Offset);
7224   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7225   SavedStreamPosition SavedPosition(Cursor);
7226   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7227     Error(std::move(Err));
7228     return nullptr;
7229   }
7230   ReadingKindTracker ReadingKind(Read_Decl, *this);
7231 
7232   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7233   if (!MaybeCode) {
7234     Error(MaybeCode.takeError());
7235     return nullptr;
7236   }
7237   unsigned Code = MaybeCode.get();
7238 
7239   ASTRecordReader Record(*this, *Loc.F);
7240   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7241   if (!MaybeRecCode) {
7242     Error(MaybeRecCode.takeError());
7243     return nullptr;
7244   }
7245   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7246     Error("malformed AST file: missing C++ ctor initializers");
7247     return nullptr;
7248   }
7249 
7250   return Record.readCXXCtorInitializers();
7251 }
7252 
7253 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7254   assert(ContextObj && "reading base specifiers with no AST context");
7255   ASTContext &Context = *ContextObj;
7256 
7257   RecordLocation Loc = getLocalBitOffset(Offset);
7258   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7259   SavedStreamPosition SavedPosition(Cursor);
7260   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7261     Error(std::move(Err));
7262     return nullptr;
7263   }
7264   ReadingKindTracker ReadingKind(Read_Decl, *this);
7265 
7266   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7267   if (!MaybeCode) {
7268     Error(MaybeCode.takeError());
7269     return nullptr;
7270   }
7271   unsigned Code = MaybeCode.get();
7272 
7273   ASTRecordReader Record(*this, *Loc.F);
7274   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7275   if (!MaybeRecCode) {
7276     Error(MaybeCode.takeError());
7277     return nullptr;
7278   }
7279   unsigned RecCode = MaybeRecCode.get();
7280 
7281   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7282     Error("malformed AST file: missing C++ base specifiers");
7283     return nullptr;
7284   }
7285 
7286   unsigned NumBases = Record.readInt();
7287   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7288   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7289   for (unsigned I = 0; I != NumBases; ++I)
7290     Bases[I] = Record.readCXXBaseSpecifier();
7291   return Bases;
7292 }
7293 
7294 serialization::DeclID
7295 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7296   if (LocalID < NUM_PREDEF_DECL_IDS)
7297     return LocalID;
7298 
7299   if (!F.ModuleOffsetMap.empty())
7300     ReadModuleOffsetMap(F);
7301 
7302   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7303     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7304   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7305 
7306   return LocalID + I->second;
7307 }
7308 
7309 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7310                                    ModuleFile &M) const {
7311   // Predefined decls aren't from any module.
7312   if (ID < NUM_PREDEF_DECL_IDS)
7313     return false;
7314 
7315   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7316          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7317 }
7318 
7319 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7320   if (!D->isFromASTFile())
7321     return nullptr;
7322   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7323   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7324   return I->second;
7325 }
7326 
7327 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7328   if (ID < NUM_PREDEF_DECL_IDS)
7329     return SourceLocation();
7330 
7331   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7332 
7333   if (Index > DeclsLoaded.size()) {
7334     Error("declaration ID out-of-range for AST file");
7335     return SourceLocation();
7336   }
7337 
7338   if (Decl *D = DeclsLoaded[Index])
7339     return D->getLocation();
7340 
7341   SourceLocation Loc;
7342   DeclCursorForID(ID, Loc);
7343   return Loc;
7344 }
7345 
7346 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7347   switch (ID) {
7348   case PREDEF_DECL_NULL_ID:
7349     return nullptr;
7350 
7351   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7352     return Context.getTranslationUnitDecl();
7353 
7354   case PREDEF_DECL_OBJC_ID_ID:
7355     return Context.getObjCIdDecl();
7356 
7357   case PREDEF_DECL_OBJC_SEL_ID:
7358     return Context.getObjCSelDecl();
7359 
7360   case PREDEF_DECL_OBJC_CLASS_ID:
7361     return Context.getObjCClassDecl();
7362 
7363   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7364     return Context.getObjCProtocolDecl();
7365 
7366   case PREDEF_DECL_INT_128_ID:
7367     return Context.getInt128Decl();
7368 
7369   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7370     return Context.getUInt128Decl();
7371 
7372   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7373     return Context.getObjCInstanceTypeDecl();
7374 
7375   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7376     return Context.getBuiltinVaListDecl();
7377 
7378   case PREDEF_DECL_VA_LIST_TAG:
7379     return Context.getVaListTagDecl();
7380 
7381   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7382     return Context.getBuiltinMSVaListDecl();
7383 
7384   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7385     return Context.getMSGuidTagDecl();
7386 
7387   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7388     return Context.getExternCContextDecl();
7389 
7390   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7391     return Context.getMakeIntegerSeqDecl();
7392 
7393   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7394     return Context.getCFConstantStringDecl();
7395 
7396   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7397     return Context.getCFConstantStringTagDecl();
7398 
7399   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7400     return Context.getTypePackElementDecl();
7401   }
7402   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7403 }
7404 
7405 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7406   assert(ContextObj && "reading decl with no AST context");
7407   if (ID < NUM_PREDEF_DECL_IDS) {
7408     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7409     if (D) {
7410       // Track that we have merged the declaration with ID \p ID into the
7411       // pre-existing predefined declaration \p D.
7412       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7413       if (Merged.empty())
7414         Merged.push_back(ID);
7415     }
7416     return D;
7417   }
7418 
7419   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7420 
7421   if (Index >= DeclsLoaded.size()) {
7422     assert(0 && "declaration ID out-of-range for AST file");
7423     Error("declaration ID out-of-range for AST file");
7424     return nullptr;
7425   }
7426 
7427   return DeclsLoaded[Index];
7428 }
7429 
7430 Decl *ASTReader::GetDecl(DeclID ID) {
7431   if (ID < NUM_PREDEF_DECL_IDS)
7432     return GetExistingDecl(ID);
7433 
7434   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7435 
7436   if (Index >= DeclsLoaded.size()) {
7437     assert(0 && "declaration ID out-of-range for AST file");
7438     Error("declaration ID out-of-range for AST file");
7439     return nullptr;
7440   }
7441 
7442   if (!DeclsLoaded[Index]) {
7443     ReadDeclRecord(ID);
7444     if (DeserializationListener)
7445       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7446   }
7447 
7448   return DeclsLoaded[Index];
7449 }
7450 
7451 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7452                                                   DeclID GlobalID) {
7453   if (GlobalID < NUM_PREDEF_DECL_IDS)
7454     return GlobalID;
7455 
7456   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7457   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7458   ModuleFile *Owner = I->second;
7459 
7460   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7461     = M.GlobalToLocalDeclIDs.find(Owner);
7462   if (Pos == M.GlobalToLocalDeclIDs.end())
7463     return 0;
7464 
7465   return GlobalID - Owner->BaseDeclID + Pos->second;
7466 }
7467 
7468 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7469                                             const RecordData &Record,
7470                                             unsigned &Idx) {
7471   if (Idx >= Record.size()) {
7472     Error("Corrupted AST file");
7473     return 0;
7474   }
7475 
7476   return getGlobalDeclID(F, Record[Idx++]);
7477 }
7478 
7479 /// Resolve the offset of a statement into a statement.
7480 ///
7481 /// This operation will read a new statement from the external
7482 /// source each time it is called, and is meant to be used via a
7483 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7484 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7485   // Switch case IDs are per Decl.
7486   ClearSwitchCaseIDs();
7487 
7488   // Offset here is a global offset across the entire chain.
7489   RecordLocation Loc = getLocalBitOffset(Offset);
7490   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7491     Error(std::move(Err));
7492     return nullptr;
7493   }
7494   assert(NumCurrentElementsDeserializing == 0 &&
7495          "should not be called while already deserializing");
7496   Deserializing D(this);
7497   return ReadStmtFromStream(*Loc.F);
7498 }
7499 
7500 void ASTReader::FindExternalLexicalDecls(
7501     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7502     SmallVectorImpl<Decl *> &Decls) {
7503   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7504 
7505   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7506     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7507     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7508       auto K = (Decl::Kind)+LexicalDecls[I];
7509       if (!IsKindWeWant(K))
7510         continue;
7511 
7512       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7513 
7514       // Don't add predefined declarations to the lexical context more
7515       // than once.
7516       if (ID < NUM_PREDEF_DECL_IDS) {
7517         if (PredefsVisited[ID])
7518           continue;
7519 
7520         PredefsVisited[ID] = true;
7521       }
7522 
7523       if (Decl *D = GetLocalDecl(*M, ID)) {
7524         assert(D->getKind() == K && "wrong kind for lexical decl");
7525         if (!DC->isDeclInLexicalTraversal(D))
7526           Decls.push_back(D);
7527       }
7528     }
7529   };
7530 
7531   if (isa<TranslationUnitDecl>(DC)) {
7532     for (auto Lexical : TULexicalDecls)
7533       Visit(Lexical.first, Lexical.second);
7534   } else {
7535     auto I = LexicalDecls.find(DC);
7536     if (I != LexicalDecls.end())
7537       Visit(I->second.first, I->second.second);
7538   }
7539 
7540   ++NumLexicalDeclContextsRead;
7541 }
7542 
7543 namespace {
7544 
7545 class DeclIDComp {
7546   ASTReader &Reader;
7547   ModuleFile &Mod;
7548 
7549 public:
7550   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7551 
7552   bool operator()(LocalDeclID L, LocalDeclID R) const {
7553     SourceLocation LHS = getLocation(L);
7554     SourceLocation RHS = getLocation(R);
7555     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7556   }
7557 
7558   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7559     SourceLocation RHS = getLocation(R);
7560     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7561   }
7562 
7563   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7564     SourceLocation LHS = getLocation(L);
7565     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7566   }
7567 
7568   SourceLocation getLocation(LocalDeclID ID) const {
7569     return Reader.getSourceManager().getFileLoc(
7570             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7571   }
7572 };
7573 
7574 } // namespace
7575 
7576 void ASTReader::FindFileRegionDecls(FileID File,
7577                                     unsigned Offset, unsigned Length,
7578                                     SmallVectorImpl<Decl *> &Decls) {
7579   SourceManager &SM = getSourceManager();
7580 
7581   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7582   if (I == FileDeclIDs.end())
7583     return;
7584 
7585   FileDeclsInfo &DInfo = I->second;
7586   if (DInfo.Decls.empty())
7587     return;
7588 
7589   SourceLocation
7590     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7591   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7592 
7593   DeclIDComp DIDComp(*this, *DInfo.Mod);
7594   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7595       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7596   if (BeginIt != DInfo.Decls.begin())
7597     --BeginIt;
7598 
7599   // If we are pointing at a top-level decl inside an objc container, we need
7600   // to backtrack until we find it otherwise we will fail to report that the
7601   // region overlaps with an objc container.
7602   while (BeginIt != DInfo.Decls.begin() &&
7603          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7604              ->isTopLevelDeclInObjCContainer())
7605     --BeginIt;
7606 
7607   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7608       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7609   if (EndIt != DInfo.Decls.end())
7610     ++EndIt;
7611 
7612   for (ArrayRef<serialization::LocalDeclID>::iterator
7613          DIt = BeginIt; DIt != EndIt; ++DIt)
7614     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7615 }
7616 
7617 bool
7618 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7619                                           DeclarationName Name) {
7620   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7621          "DeclContext has no visible decls in storage");
7622   if (!Name)
7623     return false;
7624 
7625   auto It = Lookups.find(DC);
7626   if (It == Lookups.end())
7627     return false;
7628 
7629   Deserializing LookupResults(this);
7630 
7631   // Load the list of declarations.
7632   SmallVector<NamedDecl *, 64> Decls;
7633   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7634   for (DeclID ID : It->second.Table.find(Name)) {
7635     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7636     if (ND->getDeclName() == Name && Found.insert(ND).second)
7637       Decls.push_back(ND);
7638   }
7639 
7640   ++NumVisibleDeclContextsRead;
7641   SetExternalVisibleDeclsForName(DC, Name, Decls);
7642   return !Decls.empty();
7643 }
7644 
7645 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7646   if (!DC->hasExternalVisibleStorage())
7647     return;
7648 
7649   auto It = Lookups.find(DC);
7650   assert(It != Lookups.end() &&
7651          "have external visible storage but no lookup tables");
7652 
7653   DeclsMap Decls;
7654 
7655   for (DeclID ID : It->second.Table.findAll()) {
7656     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7657     Decls[ND->getDeclName()].push_back(ND);
7658   }
7659 
7660   ++NumVisibleDeclContextsRead;
7661 
7662   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7663     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7664   }
7665   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7666 }
7667 
7668 const serialization::reader::DeclContextLookupTable *
7669 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7670   auto I = Lookups.find(Primary);
7671   return I == Lookups.end() ? nullptr : &I->second;
7672 }
7673 
7674 /// Under non-PCH compilation the consumer receives the objc methods
7675 /// before receiving the implementation, and codegen depends on this.
7676 /// We simulate this by deserializing and passing to consumer the methods of the
7677 /// implementation before passing the deserialized implementation decl.
7678 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7679                                        ASTConsumer *Consumer) {
7680   assert(ImplD && Consumer);
7681 
7682   for (auto *I : ImplD->methods())
7683     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7684 
7685   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7686 }
7687 
7688 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7689   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7690     PassObjCImplDeclToConsumer(ImplD, Consumer);
7691   else
7692     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7693 }
7694 
7695 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7696   this->Consumer = Consumer;
7697 
7698   if (Consumer)
7699     PassInterestingDeclsToConsumer();
7700 
7701   if (DeserializationListener)
7702     DeserializationListener->ReaderInitialized(this);
7703 }
7704 
7705 void ASTReader::PrintStats() {
7706   std::fprintf(stderr, "*** AST File Statistics:\n");
7707 
7708   unsigned NumTypesLoaded =
7709       TypesLoaded.size() - llvm::count(TypesLoaded, QualType());
7710   unsigned NumDeclsLoaded =
7711       DeclsLoaded.size() - llvm::count(DeclsLoaded, (Decl *)nullptr);
7712   unsigned NumIdentifiersLoaded =
7713       IdentifiersLoaded.size() -
7714       llvm::count(IdentifiersLoaded, (IdentifierInfo *)nullptr);
7715   unsigned NumMacrosLoaded =
7716       MacrosLoaded.size() - llvm::count(MacrosLoaded, (MacroInfo *)nullptr);
7717   unsigned NumSelectorsLoaded =
7718       SelectorsLoaded.size() - llvm::count(SelectorsLoaded, Selector());
7719 
7720   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7721     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7722                  NumSLocEntriesRead, TotalNumSLocEntries,
7723                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7724   if (!TypesLoaded.empty())
7725     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7726                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7727                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7728   if (!DeclsLoaded.empty())
7729     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7730                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7731                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7732   if (!IdentifiersLoaded.empty())
7733     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7734                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7735                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7736   if (!MacrosLoaded.empty())
7737     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7738                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7739                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7740   if (!SelectorsLoaded.empty())
7741     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7742                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7743                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7744   if (TotalNumStatements)
7745     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7746                  NumStatementsRead, TotalNumStatements,
7747                  ((float)NumStatementsRead/TotalNumStatements * 100));
7748   if (TotalNumMacros)
7749     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7750                  NumMacrosRead, TotalNumMacros,
7751                  ((float)NumMacrosRead/TotalNumMacros * 100));
7752   if (TotalLexicalDeclContexts)
7753     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7754                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7755                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7756                   * 100));
7757   if (TotalVisibleDeclContexts)
7758     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7759                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7760                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7761                   * 100));
7762   if (TotalNumMethodPoolEntries)
7763     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7764                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7765                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7766                   * 100));
7767   if (NumMethodPoolLookups)
7768     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7769                  NumMethodPoolHits, NumMethodPoolLookups,
7770                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7771   if (NumMethodPoolTableLookups)
7772     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7773                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7774                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7775                   * 100.0));
7776   if (NumIdentifierLookupHits)
7777     std::fprintf(stderr,
7778                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7779                  NumIdentifierLookupHits, NumIdentifierLookups,
7780                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7781 
7782   if (GlobalIndex) {
7783     std::fprintf(stderr, "\n");
7784     GlobalIndex->printStats();
7785   }
7786 
7787   std::fprintf(stderr, "\n");
7788   dump();
7789   std::fprintf(stderr, "\n");
7790 }
7791 
7792 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7793 LLVM_DUMP_METHOD static void
7794 dumpModuleIDMap(StringRef Name,
7795                 const ContinuousRangeMap<Key, ModuleFile *,
7796                                          InitialCapacity> &Map) {
7797   if (Map.begin() == Map.end())
7798     return;
7799 
7800   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7801 
7802   llvm::errs() << Name << ":\n";
7803   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7804        I != IEnd; ++I) {
7805     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7806       << "\n";
7807   }
7808 }
7809 
7810 LLVM_DUMP_METHOD void ASTReader::dump() {
7811   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7812   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7813   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7814   dumpModuleIDMap("Global type map", GlobalTypeMap);
7815   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7816   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7817   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7818   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7819   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7820   dumpModuleIDMap("Global preprocessed entity map",
7821                   GlobalPreprocessedEntityMap);
7822 
7823   llvm::errs() << "\n*** PCH/Modules Loaded:";
7824   for (ModuleFile &M : ModuleMgr)
7825     M.dump();
7826 }
7827 
7828 /// Return the amount of memory used by memory buffers, breaking down
7829 /// by heap-backed versus mmap'ed memory.
7830 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7831   for (ModuleFile &I : ModuleMgr) {
7832     if (llvm::MemoryBuffer *buf = I.Buffer) {
7833       size_t bytes = buf->getBufferSize();
7834       switch (buf->getBufferKind()) {
7835         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7836           sizes.malloc_bytes += bytes;
7837           break;
7838         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7839           sizes.mmap_bytes += bytes;
7840           break;
7841       }
7842     }
7843   }
7844 }
7845 
7846 void ASTReader::InitializeSema(Sema &S) {
7847   SemaObj = &S;
7848   S.addExternalSource(this);
7849 
7850   // Makes sure any declarations that were deserialized "too early"
7851   // still get added to the identifier's declaration chains.
7852   for (uint64_t ID : PreloadedDeclIDs) {
7853     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7854     pushExternalDeclIntoScope(D, D->getDeclName());
7855   }
7856   PreloadedDeclIDs.clear();
7857 
7858   // FIXME: What happens if these are changed by a module import?
7859   if (!FPPragmaOptions.empty()) {
7860     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7861     FPOptionsOverride NewOverrides =
7862         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7863     SemaObj->CurFPFeatures =
7864         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7865   }
7866 
7867   SemaObj->OpenCLFeatures = OpenCLExtensions;
7868 
7869   UpdateSema();
7870 }
7871 
7872 void ASTReader::UpdateSema() {
7873   assert(SemaObj && "no Sema to update");
7874 
7875   // Load the offsets of the declarations that Sema references.
7876   // They will be lazily deserialized when needed.
7877   if (!SemaDeclRefs.empty()) {
7878     assert(SemaDeclRefs.size() % 3 == 0);
7879     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7880       if (!SemaObj->StdNamespace)
7881         SemaObj->StdNamespace = SemaDeclRefs[I];
7882       if (!SemaObj->StdBadAlloc)
7883         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7884       if (!SemaObj->StdAlignValT)
7885         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7886     }
7887     SemaDeclRefs.clear();
7888   }
7889 
7890   // Update the state of pragmas. Use the same API as if we had encountered the
7891   // pragma in the source.
7892   if(OptimizeOffPragmaLocation.isValid())
7893     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7894   if (PragmaMSStructState != -1)
7895     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7896   if (PointersToMembersPragmaLocation.isValid()) {
7897     SemaObj->ActOnPragmaMSPointersToMembers(
7898         (LangOptions::PragmaMSPointersToMembersKind)
7899             PragmaMSPointersToMembersState,
7900         PointersToMembersPragmaLocation);
7901   }
7902   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7903 
7904   if (PragmaAlignPackCurrentValue) {
7905     // The bottom of the stack might have a default value. It must be adjusted
7906     // to the current value to ensure that the packing state is preserved after
7907     // popping entries that were included/imported from a PCH/module.
7908     bool DropFirst = false;
7909     if (!PragmaAlignPackStack.empty() &&
7910         PragmaAlignPackStack.front().Location.isInvalid()) {
7911       assert(PragmaAlignPackStack.front().Value ==
7912                  SemaObj->AlignPackStack.DefaultValue &&
7913              "Expected a default alignment value");
7914       SemaObj->AlignPackStack.Stack.emplace_back(
7915           PragmaAlignPackStack.front().SlotLabel,
7916           SemaObj->AlignPackStack.CurrentValue,
7917           SemaObj->AlignPackStack.CurrentPragmaLocation,
7918           PragmaAlignPackStack.front().PushLocation);
7919       DropFirst = true;
7920     }
7921     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7922                                  .drop_front(DropFirst ? 1 : 0)) {
7923       SemaObj->AlignPackStack.Stack.emplace_back(
7924           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7925     }
7926     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7927       assert(*PragmaAlignPackCurrentValue ==
7928                  SemaObj->AlignPackStack.DefaultValue &&
7929              "Expected a default align and pack value");
7930       // Keep the current values.
7931     } else {
7932       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7933       SemaObj->AlignPackStack.CurrentPragmaLocation =
7934           PragmaAlignPackCurrentLocation;
7935     }
7936   }
7937   if (FpPragmaCurrentValue) {
7938     // The bottom of the stack might have a default value. It must be adjusted
7939     // to the current value to ensure that fp-pragma state is preserved after
7940     // popping entries that were included/imported from a PCH/module.
7941     bool DropFirst = false;
7942     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7943       assert(FpPragmaStack.front().Value ==
7944                  SemaObj->FpPragmaStack.DefaultValue &&
7945              "Expected a default pragma float_control value");
7946       SemaObj->FpPragmaStack.Stack.emplace_back(
7947           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7948           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7949           FpPragmaStack.front().PushLocation);
7950       DropFirst = true;
7951     }
7952     for (const auto &Entry :
7953          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7954       SemaObj->FpPragmaStack.Stack.emplace_back(
7955           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7956     if (FpPragmaCurrentLocation.isInvalid()) {
7957       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7958              "Expected a default pragma float_control value");
7959       // Keep the current values.
7960     } else {
7961       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7962       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7963     }
7964   }
7965 
7966   // For non-modular AST files, restore visiblity of modules.
7967   for (auto &Import : ImportedModules) {
7968     if (Import.ImportLoc.isInvalid())
7969       continue;
7970     if (Module *Imported = getSubmodule(Import.ID)) {
7971       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7972     }
7973   }
7974 }
7975 
7976 IdentifierInfo *ASTReader::get(StringRef Name) {
7977   // Note that we are loading an identifier.
7978   Deserializing AnIdentifier(this);
7979 
7980   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
7981                                   NumIdentifierLookups,
7982                                   NumIdentifierLookupHits);
7983 
7984   // We don't need to do identifier table lookups in C++ modules (we preload
7985   // all interesting declarations, and don't need to use the scope for name
7986   // lookups). Perform the lookup in PCH files, though, since we don't build
7987   // a complete initial identifier table if we're carrying on from a PCH.
7988   if (PP.getLangOpts().CPlusPlus) {
7989     for (auto F : ModuleMgr.pch_modules())
7990       if (Visitor(*F))
7991         break;
7992   } else {
7993     // If there is a global index, look there first to determine which modules
7994     // provably do not have any results for this identifier.
7995     GlobalModuleIndex::HitSet Hits;
7996     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
7997     if (!loadGlobalIndex()) {
7998       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
7999         HitsPtr = &Hits;
8000       }
8001     }
8002 
8003     ModuleMgr.visit(Visitor, HitsPtr);
8004   }
8005 
8006   IdentifierInfo *II = Visitor.getIdentifierInfo();
8007   markIdentifierUpToDate(II);
8008   return II;
8009 }
8010 
8011 namespace clang {
8012 
8013   /// An identifier-lookup iterator that enumerates all of the
8014   /// identifiers stored within a set of AST files.
8015   class ASTIdentifierIterator : public IdentifierIterator {
8016     /// The AST reader whose identifiers are being enumerated.
8017     const ASTReader &Reader;
8018 
8019     /// The current index into the chain of AST files stored in
8020     /// the AST reader.
8021     unsigned Index;
8022 
8023     /// The current position within the identifier lookup table
8024     /// of the current AST file.
8025     ASTIdentifierLookupTable::key_iterator Current;
8026 
8027     /// The end position within the identifier lookup table of
8028     /// the current AST file.
8029     ASTIdentifierLookupTable::key_iterator End;
8030 
8031     /// Whether to skip any modules in the ASTReader.
8032     bool SkipModules;
8033 
8034   public:
8035     explicit ASTIdentifierIterator(const ASTReader &Reader,
8036                                    bool SkipModules = false);
8037 
8038     StringRef Next() override;
8039   };
8040 
8041 } // namespace clang
8042 
8043 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8044                                              bool SkipModules)
8045     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8046 }
8047 
8048 StringRef ASTIdentifierIterator::Next() {
8049   while (Current == End) {
8050     // If we have exhausted all of our AST files, we're done.
8051     if (Index == 0)
8052       return StringRef();
8053 
8054     --Index;
8055     ModuleFile &F = Reader.ModuleMgr[Index];
8056     if (SkipModules && F.isModule())
8057       continue;
8058 
8059     ASTIdentifierLookupTable *IdTable =
8060         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8061     Current = IdTable->key_begin();
8062     End = IdTable->key_end();
8063   }
8064 
8065   // We have any identifiers remaining in the current AST file; return
8066   // the next one.
8067   StringRef Result = *Current;
8068   ++Current;
8069   return Result;
8070 }
8071 
8072 namespace {
8073 
8074 /// A utility for appending two IdentifierIterators.
8075 class ChainedIdentifierIterator : public IdentifierIterator {
8076   std::unique_ptr<IdentifierIterator> Current;
8077   std::unique_ptr<IdentifierIterator> Queued;
8078 
8079 public:
8080   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8081                             std::unique_ptr<IdentifierIterator> Second)
8082       : Current(std::move(First)), Queued(std::move(Second)) {}
8083 
8084   StringRef Next() override {
8085     if (!Current)
8086       return StringRef();
8087 
8088     StringRef result = Current->Next();
8089     if (!result.empty())
8090       return result;
8091 
8092     // Try the queued iterator, which may itself be empty.
8093     Current.reset();
8094     std::swap(Current, Queued);
8095     return Next();
8096   }
8097 };
8098 
8099 } // namespace
8100 
8101 IdentifierIterator *ASTReader::getIdentifiers() {
8102   if (!loadGlobalIndex()) {
8103     std::unique_ptr<IdentifierIterator> ReaderIter(
8104         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8105     std::unique_ptr<IdentifierIterator> ModulesIter(
8106         GlobalIndex->createIdentifierIterator());
8107     return new ChainedIdentifierIterator(std::move(ReaderIter),
8108                                          std::move(ModulesIter));
8109   }
8110 
8111   return new ASTIdentifierIterator(*this);
8112 }
8113 
8114 namespace clang {
8115 namespace serialization {
8116 
8117   class ReadMethodPoolVisitor {
8118     ASTReader &Reader;
8119     Selector Sel;
8120     unsigned PriorGeneration;
8121     unsigned InstanceBits = 0;
8122     unsigned FactoryBits = 0;
8123     bool InstanceHasMoreThanOneDecl = false;
8124     bool FactoryHasMoreThanOneDecl = false;
8125     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8126     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8127 
8128   public:
8129     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8130                           unsigned PriorGeneration)
8131         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8132 
8133     bool operator()(ModuleFile &M) {
8134       if (!M.SelectorLookupTable)
8135         return false;
8136 
8137       // If we've already searched this module file, skip it now.
8138       if (M.Generation <= PriorGeneration)
8139         return true;
8140 
8141       ++Reader.NumMethodPoolTableLookups;
8142       ASTSelectorLookupTable *PoolTable
8143         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8144       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8145       if (Pos == PoolTable->end())
8146         return false;
8147 
8148       ++Reader.NumMethodPoolTableHits;
8149       ++Reader.NumSelectorsRead;
8150       // FIXME: Not quite happy with the statistics here. We probably should
8151       // disable this tracking when called via LoadSelector.
8152       // Also, should entries without methods count as misses?
8153       ++Reader.NumMethodPoolEntriesRead;
8154       ASTSelectorLookupTrait::data_type Data = *Pos;
8155       if (Reader.DeserializationListener)
8156         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8157 
8158       // Append methods in the reverse order, so that later we can process them
8159       // in the order they appear in the source code by iterating through
8160       // the vector in the reverse order.
8161       InstanceMethods.append(Data.Instance.rbegin(), Data.Instance.rend());
8162       FactoryMethods.append(Data.Factory.rbegin(), Data.Factory.rend());
8163       InstanceBits = Data.InstanceBits;
8164       FactoryBits = Data.FactoryBits;
8165       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8166       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8167       return false;
8168     }
8169 
8170     /// Retrieve the instance methods found by this visitor.
8171     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8172       return InstanceMethods;
8173     }
8174 
8175     /// Retrieve the instance methods found by this visitor.
8176     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8177       return FactoryMethods;
8178     }
8179 
8180     unsigned getInstanceBits() const { return InstanceBits; }
8181     unsigned getFactoryBits() const { return FactoryBits; }
8182 
8183     bool instanceHasMoreThanOneDecl() const {
8184       return InstanceHasMoreThanOneDecl;
8185     }
8186 
8187     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8188   };
8189 
8190 } // namespace serialization
8191 } // namespace clang
8192 
8193 /// Add the given set of methods to the method list.
8194 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8195                              ObjCMethodList &List) {
8196   for (auto I = Methods.rbegin(), E = Methods.rend(); I != E; ++I)
8197     S.addMethodToGlobalList(&List, *I);
8198 }
8199 
8200 void ASTReader::ReadMethodPool(Selector Sel) {
8201   // Get the selector generation and update it to the current generation.
8202   unsigned &Generation = SelectorGeneration[Sel];
8203   unsigned PriorGeneration = Generation;
8204   Generation = getGeneration();
8205   SelectorOutOfDate[Sel] = false;
8206 
8207   // Search for methods defined with this selector.
8208   ++NumMethodPoolLookups;
8209   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8210   ModuleMgr.visit(Visitor);
8211 
8212   if (Visitor.getInstanceMethods().empty() &&
8213       Visitor.getFactoryMethods().empty())
8214     return;
8215 
8216   ++NumMethodPoolHits;
8217 
8218   if (!getSema())
8219     return;
8220 
8221   Sema &S = *getSema();
8222   Sema::GlobalMethodPool::iterator Pos =
8223       S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethodPool::Lists()))
8224           .first;
8225 
8226   Pos->second.first.setBits(Visitor.getInstanceBits());
8227   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8228   Pos->second.second.setBits(Visitor.getFactoryBits());
8229   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8230 
8231   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8232   // when building a module we keep every method individually and may need to
8233   // update hasMoreThanOneDecl as we add the methods.
8234   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8235   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8236 }
8237 
8238 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8239   if (SelectorOutOfDate[Sel])
8240     ReadMethodPool(Sel);
8241 }
8242 
8243 void ASTReader::ReadKnownNamespaces(
8244                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8245   Namespaces.clear();
8246 
8247   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8248     if (NamespaceDecl *Namespace
8249                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8250       Namespaces.push_back(Namespace);
8251   }
8252 }
8253 
8254 void ASTReader::ReadUndefinedButUsed(
8255     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8256   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8257     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8258     SourceLocation Loc =
8259         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8260     Undefined.insert(std::make_pair(D, Loc));
8261   }
8262 }
8263 
8264 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8265     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8266                                                      Exprs) {
8267   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8268     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8269     uint64_t Count = DelayedDeleteExprs[Idx++];
8270     for (uint64_t C = 0; C < Count; ++C) {
8271       SourceLocation DeleteLoc =
8272           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8273       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8274       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8275     }
8276   }
8277 }
8278 
8279 void ASTReader::ReadTentativeDefinitions(
8280                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8281   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8282     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8283     if (Var)
8284       TentativeDefs.push_back(Var);
8285   }
8286   TentativeDefinitions.clear();
8287 }
8288 
8289 void ASTReader::ReadUnusedFileScopedDecls(
8290                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8291   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8292     DeclaratorDecl *D
8293       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8294     if (D)
8295       Decls.push_back(D);
8296   }
8297   UnusedFileScopedDecls.clear();
8298 }
8299 
8300 void ASTReader::ReadDelegatingConstructors(
8301                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8302   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8303     CXXConstructorDecl *D
8304       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8305     if (D)
8306       Decls.push_back(D);
8307   }
8308   DelegatingCtorDecls.clear();
8309 }
8310 
8311 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8312   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8313     TypedefNameDecl *D
8314       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8315     if (D)
8316       Decls.push_back(D);
8317   }
8318   ExtVectorDecls.clear();
8319 }
8320 
8321 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8322     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8323   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8324        ++I) {
8325     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8326         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8327     if (D)
8328       Decls.insert(D);
8329   }
8330   UnusedLocalTypedefNameCandidates.clear();
8331 }
8332 
8333 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8334     llvm::SmallSetVector<Decl *, 4> &Decls) {
8335   for (auto I : DeclsToCheckForDeferredDiags) {
8336     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8337     if (D)
8338       Decls.insert(D);
8339   }
8340   DeclsToCheckForDeferredDiags.clear();
8341 }
8342 
8343 void ASTReader::ReadReferencedSelectors(
8344        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8345   if (ReferencedSelectorsData.empty())
8346     return;
8347 
8348   // If there are @selector references added them to its pool. This is for
8349   // implementation of -Wselector.
8350   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8351   unsigned I = 0;
8352   while (I < DataSize) {
8353     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8354     SourceLocation SelLoc
8355       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8356     Sels.push_back(std::make_pair(Sel, SelLoc));
8357   }
8358   ReferencedSelectorsData.clear();
8359 }
8360 
8361 void ASTReader::ReadWeakUndeclaredIdentifiers(
8362        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8363   if (WeakUndeclaredIdentifiers.empty())
8364     return;
8365 
8366   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8367     IdentifierInfo *WeakId
8368       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8369     IdentifierInfo *AliasId
8370       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8371     SourceLocation Loc
8372       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8373     bool Used = WeakUndeclaredIdentifiers[I++];
8374     WeakInfo WI(AliasId, Loc);
8375     WI.setUsed(Used);
8376     WeakIDs.push_back(std::make_pair(WeakId, WI));
8377   }
8378   WeakUndeclaredIdentifiers.clear();
8379 }
8380 
8381 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8382   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8383     ExternalVTableUse VT;
8384     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8385     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8386     VT.DefinitionRequired = VTableUses[Idx++];
8387     VTables.push_back(VT);
8388   }
8389 
8390   VTableUses.clear();
8391 }
8392 
8393 void ASTReader::ReadPendingInstantiations(
8394        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8395   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8396     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8397     SourceLocation Loc
8398       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8399 
8400     Pending.push_back(std::make_pair(D, Loc));
8401   }
8402   PendingInstantiations.clear();
8403 }
8404 
8405 void ASTReader::ReadLateParsedTemplates(
8406     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8407         &LPTMap) {
8408   for (auto &LPT : LateParsedTemplates) {
8409     ModuleFile *FMod = LPT.first;
8410     RecordDataImpl &LateParsed = LPT.second;
8411     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8412          /* In loop */) {
8413       FunctionDecl *FD =
8414           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8415 
8416       auto LT = std::make_unique<LateParsedTemplate>();
8417       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8418 
8419       ModuleFile *F = getOwningModuleFile(LT->D);
8420       assert(F && "No module");
8421 
8422       unsigned TokN = LateParsed[Idx++];
8423       LT->Toks.reserve(TokN);
8424       for (unsigned T = 0; T < TokN; ++T)
8425         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8426 
8427       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8428     }
8429   }
8430 
8431   LateParsedTemplates.clear();
8432 }
8433 
8434 void ASTReader::LoadSelector(Selector Sel) {
8435   // It would be complicated to avoid reading the methods anyway. So don't.
8436   ReadMethodPool(Sel);
8437 }
8438 
8439 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8440   assert(ID && "Non-zero identifier ID required");
8441   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8442   IdentifiersLoaded[ID - 1] = II;
8443   if (DeserializationListener)
8444     DeserializationListener->IdentifierRead(ID, II);
8445 }
8446 
8447 /// Set the globally-visible declarations associated with the given
8448 /// identifier.
8449 ///
8450 /// If the AST reader is currently in a state where the given declaration IDs
8451 /// cannot safely be resolved, they are queued until it is safe to resolve
8452 /// them.
8453 ///
8454 /// \param II an IdentifierInfo that refers to one or more globally-visible
8455 /// declarations.
8456 ///
8457 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8458 /// visible at global scope.
8459 ///
8460 /// \param Decls if non-null, this vector will be populated with the set of
8461 /// deserialized declarations. These declarations will not be pushed into
8462 /// scope.
8463 void
8464 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8465                               const SmallVectorImpl<uint32_t> &DeclIDs,
8466                                    SmallVectorImpl<Decl *> *Decls) {
8467   if (NumCurrentElementsDeserializing && !Decls) {
8468     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8469     return;
8470   }
8471 
8472   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8473     if (!SemaObj) {
8474       // Queue this declaration so that it will be added to the
8475       // translation unit scope and identifier's declaration chain
8476       // once a Sema object is known.
8477       PreloadedDeclIDs.push_back(DeclIDs[I]);
8478       continue;
8479     }
8480 
8481     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8482 
8483     // If we're simply supposed to record the declarations, do so now.
8484     if (Decls) {
8485       Decls->push_back(D);
8486       continue;
8487     }
8488 
8489     // Introduce this declaration into the translation-unit scope
8490     // and add it to the declaration chain for this identifier, so
8491     // that (unqualified) name lookup will find it.
8492     pushExternalDeclIntoScope(D, II);
8493   }
8494 }
8495 
8496 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8497   if (ID == 0)
8498     return nullptr;
8499 
8500   if (IdentifiersLoaded.empty()) {
8501     Error("no identifier table in AST file");
8502     return nullptr;
8503   }
8504 
8505   ID -= 1;
8506   if (!IdentifiersLoaded[ID]) {
8507     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8508     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8509     ModuleFile *M = I->second;
8510     unsigned Index = ID - M->BaseIdentifierID;
8511     const unsigned char *Data =
8512         M->IdentifierTableData + M->IdentifierOffsets[Index];
8513 
8514     ASTIdentifierLookupTrait Trait(*this, *M);
8515     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8516     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8517     auto &II = PP.getIdentifierTable().get(Key);
8518     IdentifiersLoaded[ID] = &II;
8519     markIdentifierFromAST(*this,  II);
8520     if (DeserializationListener)
8521       DeserializationListener->IdentifierRead(ID + 1, &II);
8522   }
8523 
8524   return IdentifiersLoaded[ID];
8525 }
8526 
8527 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8528   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8529 }
8530 
8531 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8532   if (LocalID < NUM_PREDEF_IDENT_IDS)
8533     return LocalID;
8534 
8535   if (!M.ModuleOffsetMap.empty())
8536     ReadModuleOffsetMap(M);
8537 
8538   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8539     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8540   assert(I != M.IdentifierRemap.end()
8541          && "Invalid index into identifier index remap");
8542 
8543   return LocalID + I->second;
8544 }
8545 
8546 MacroInfo *ASTReader::getMacro(MacroID ID) {
8547   if (ID == 0)
8548     return nullptr;
8549 
8550   if (MacrosLoaded.empty()) {
8551     Error("no macro table in AST file");
8552     return nullptr;
8553   }
8554 
8555   ID -= NUM_PREDEF_MACRO_IDS;
8556   if (!MacrosLoaded[ID]) {
8557     GlobalMacroMapType::iterator I
8558       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8559     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8560     ModuleFile *M = I->second;
8561     unsigned Index = ID - M->BaseMacroID;
8562     MacrosLoaded[ID] =
8563         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8564 
8565     if (DeserializationListener)
8566       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8567                                          MacrosLoaded[ID]);
8568   }
8569 
8570   return MacrosLoaded[ID];
8571 }
8572 
8573 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8574   if (LocalID < NUM_PREDEF_MACRO_IDS)
8575     return LocalID;
8576 
8577   if (!M.ModuleOffsetMap.empty())
8578     ReadModuleOffsetMap(M);
8579 
8580   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8581     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8582   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8583 
8584   return LocalID + I->second;
8585 }
8586 
8587 serialization::SubmoduleID
8588 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8589   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8590     return LocalID;
8591 
8592   if (!M.ModuleOffsetMap.empty())
8593     ReadModuleOffsetMap(M);
8594 
8595   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8596     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8597   assert(I != M.SubmoduleRemap.end()
8598          && "Invalid index into submodule index remap");
8599 
8600   return LocalID + I->second;
8601 }
8602 
8603 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8604   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8605     assert(GlobalID == 0 && "Unhandled global submodule ID");
8606     return nullptr;
8607   }
8608 
8609   if (GlobalID > SubmodulesLoaded.size()) {
8610     Error("submodule ID out of range in AST file");
8611     return nullptr;
8612   }
8613 
8614   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8615 }
8616 
8617 Module *ASTReader::getModule(unsigned ID) {
8618   return getSubmodule(ID);
8619 }
8620 
8621 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8622   if (ID & 1) {
8623     // It's a module, look it up by submodule ID.
8624     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8625     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8626   } else {
8627     // It's a prefix (preamble, PCH, ...). Look it up by index.
8628     unsigned IndexFromEnd = ID >> 1;
8629     assert(IndexFromEnd && "got reference to unknown module file");
8630     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8631   }
8632 }
8633 
8634 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8635   if (!F)
8636     return 1;
8637 
8638   // For a file representing a module, use the submodule ID of the top-level
8639   // module as the file ID. For any other kind of file, the number of such
8640   // files loaded beforehand will be the same on reload.
8641   // FIXME: Is this true even if we have an explicit module file and a PCH?
8642   if (F->isModule())
8643     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8644 
8645   auto PCHModules = getModuleManager().pch_modules();
8646   auto I = llvm::find(PCHModules, F);
8647   assert(I != PCHModules.end() && "emitting reference to unknown file");
8648   return (I - PCHModules.end()) << 1;
8649 }
8650 
8651 llvm::Optional<ASTSourceDescriptor>
8652 ASTReader::getSourceDescriptor(unsigned ID) {
8653   if (Module *M = getSubmodule(ID))
8654     return ASTSourceDescriptor(*M);
8655 
8656   // If there is only a single PCH, return it instead.
8657   // Chained PCH are not supported.
8658   const auto &PCHChain = ModuleMgr.pch_modules();
8659   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8660     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8661     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8662     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8663     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8664                                MF.Signature);
8665   }
8666   return None;
8667 }
8668 
8669 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8670   auto I = DefinitionSource.find(FD);
8671   if (I == DefinitionSource.end())
8672     return EK_ReplyHazy;
8673   return I->second ? EK_Never : EK_Always;
8674 }
8675 
8676 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8677   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8678 }
8679 
8680 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8681   if (ID == 0)
8682     return Selector();
8683 
8684   if (ID > SelectorsLoaded.size()) {
8685     Error("selector ID out of range in AST file");
8686     return Selector();
8687   }
8688 
8689   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8690     // Load this selector from the selector table.
8691     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8692     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8693     ModuleFile &M = *I->second;
8694     ASTSelectorLookupTrait Trait(*this, M);
8695     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8696     SelectorsLoaded[ID - 1] =
8697       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8698     if (DeserializationListener)
8699       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8700   }
8701 
8702   return SelectorsLoaded[ID - 1];
8703 }
8704 
8705 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8706   return DecodeSelector(ID);
8707 }
8708 
8709 uint32_t ASTReader::GetNumExternalSelectors() {
8710   // ID 0 (the null selector) is considered an external selector.
8711   return getTotalNumSelectors() + 1;
8712 }
8713 
8714 serialization::SelectorID
8715 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8716   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8717     return LocalID;
8718 
8719   if (!M.ModuleOffsetMap.empty())
8720     ReadModuleOffsetMap(M);
8721 
8722   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8723     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8724   assert(I != M.SelectorRemap.end()
8725          && "Invalid index into selector index remap");
8726 
8727   return LocalID + I->second;
8728 }
8729 
8730 DeclarationNameLoc
8731 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8732   switch (Name.getNameKind()) {
8733   case DeclarationName::CXXConstructorName:
8734   case DeclarationName::CXXDestructorName:
8735   case DeclarationName::CXXConversionFunctionName:
8736     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8737 
8738   case DeclarationName::CXXOperatorName:
8739     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8740 
8741   case DeclarationName::CXXLiteralOperatorName:
8742     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8743         readSourceLocation());
8744 
8745   case DeclarationName::Identifier:
8746   case DeclarationName::ObjCZeroArgSelector:
8747   case DeclarationName::ObjCOneArgSelector:
8748   case DeclarationName::ObjCMultiArgSelector:
8749   case DeclarationName::CXXUsingDirective:
8750   case DeclarationName::CXXDeductionGuideName:
8751     break;
8752   }
8753   return DeclarationNameLoc();
8754 }
8755 
8756 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8757   DeclarationNameInfo NameInfo;
8758   NameInfo.setName(readDeclarationName());
8759   NameInfo.setLoc(readSourceLocation());
8760   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8761   return NameInfo;
8762 }
8763 
8764 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8765   Info.QualifierLoc = readNestedNameSpecifierLoc();
8766   unsigned NumTPLists = readInt();
8767   Info.NumTemplParamLists = NumTPLists;
8768   if (NumTPLists) {
8769     Info.TemplParamLists =
8770         new (getContext()) TemplateParameterList *[NumTPLists];
8771     for (unsigned i = 0; i != NumTPLists; ++i)
8772       Info.TemplParamLists[i] = readTemplateParameterList();
8773   }
8774 }
8775 
8776 TemplateParameterList *
8777 ASTRecordReader::readTemplateParameterList() {
8778   SourceLocation TemplateLoc = readSourceLocation();
8779   SourceLocation LAngleLoc = readSourceLocation();
8780   SourceLocation RAngleLoc = readSourceLocation();
8781 
8782   unsigned NumParams = readInt();
8783   SmallVector<NamedDecl *, 16> Params;
8784   Params.reserve(NumParams);
8785   while (NumParams--)
8786     Params.push_back(readDeclAs<NamedDecl>());
8787 
8788   bool HasRequiresClause = readBool();
8789   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8790 
8791   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8792       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8793   return TemplateParams;
8794 }
8795 
8796 void ASTRecordReader::readTemplateArgumentList(
8797                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8798                         bool Canonicalize) {
8799   unsigned NumTemplateArgs = readInt();
8800   TemplArgs.reserve(NumTemplateArgs);
8801   while (NumTemplateArgs--)
8802     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8803 }
8804 
8805 /// Read a UnresolvedSet structure.
8806 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8807   unsigned NumDecls = readInt();
8808   Set.reserve(getContext(), NumDecls);
8809   while (NumDecls--) {
8810     DeclID ID = readDeclID();
8811     AccessSpecifier AS = (AccessSpecifier) readInt();
8812     Set.addLazyDecl(getContext(), ID, AS);
8813   }
8814 }
8815 
8816 CXXBaseSpecifier
8817 ASTRecordReader::readCXXBaseSpecifier() {
8818   bool isVirtual = readBool();
8819   bool isBaseOfClass = readBool();
8820   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8821   bool inheritConstructors = readBool();
8822   TypeSourceInfo *TInfo = readTypeSourceInfo();
8823   SourceRange Range = readSourceRange();
8824   SourceLocation EllipsisLoc = readSourceLocation();
8825   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8826                           EllipsisLoc);
8827   Result.setInheritConstructors(inheritConstructors);
8828   return Result;
8829 }
8830 
8831 CXXCtorInitializer **
8832 ASTRecordReader::readCXXCtorInitializers() {
8833   ASTContext &Context = getContext();
8834   unsigned NumInitializers = readInt();
8835   assert(NumInitializers && "wrote ctor initializers but have no inits");
8836   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8837   for (unsigned i = 0; i != NumInitializers; ++i) {
8838     TypeSourceInfo *TInfo = nullptr;
8839     bool IsBaseVirtual = false;
8840     FieldDecl *Member = nullptr;
8841     IndirectFieldDecl *IndirectMember = nullptr;
8842 
8843     CtorInitializerType Type = (CtorInitializerType) readInt();
8844     switch (Type) {
8845     case CTOR_INITIALIZER_BASE:
8846       TInfo = readTypeSourceInfo();
8847       IsBaseVirtual = readBool();
8848       break;
8849 
8850     case CTOR_INITIALIZER_DELEGATING:
8851       TInfo = readTypeSourceInfo();
8852       break;
8853 
8854      case CTOR_INITIALIZER_MEMBER:
8855       Member = readDeclAs<FieldDecl>();
8856       break;
8857 
8858      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8859       IndirectMember = readDeclAs<IndirectFieldDecl>();
8860       break;
8861     }
8862 
8863     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8864     Expr *Init = readExpr();
8865     SourceLocation LParenLoc = readSourceLocation();
8866     SourceLocation RParenLoc = readSourceLocation();
8867 
8868     CXXCtorInitializer *BOMInit;
8869     if (Type == CTOR_INITIALIZER_BASE)
8870       BOMInit = new (Context)
8871           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8872                              RParenLoc, MemberOrEllipsisLoc);
8873     else if (Type == CTOR_INITIALIZER_DELEGATING)
8874       BOMInit = new (Context)
8875           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8876     else if (Member)
8877       BOMInit = new (Context)
8878           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8879                              Init, RParenLoc);
8880     else
8881       BOMInit = new (Context)
8882           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8883                              LParenLoc, Init, RParenLoc);
8884 
8885     if (/*IsWritten*/readBool()) {
8886       unsigned SourceOrder = readInt();
8887       BOMInit->setSourceOrder(SourceOrder);
8888     }
8889 
8890     CtorInitializers[i] = BOMInit;
8891   }
8892 
8893   return CtorInitializers;
8894 }
8895 
8896 NestedNameSpecifierLoc
8897 ASTRecordReader::readNestedNameSpecifierLoc() {
8898   ASTContext &Context = getContext();
8899   unsigned N = readInt();
8900   NestedNameSpecifierLocBuilder Builder;
8901   for (unsigned I = 0; I != N; ++I) {
8902     auto Kind = readNestedNameSpecifierKind();
8903     switch (Kind) {
8904     case NestedNameSpecifier::Identifier: {
8905       IdentifierInfo *II = readIdentifier();
8906       SourceRange Range = readSourceRange();
8907       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8908       break;
8909     }
8910 
8911     case NestedNameSpecifier::Namespace: {
8912       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8913       SourceRange Range = readSourceRange();
8914       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8915       break;
8916     }
8917 
8918     case NestedNameSpecifier::NamespaceAlias: {
8919       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8920       SourceRange Range = readSourceRange();
8921       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8922       break;
8923     }
8924 
8925     case NestedNameSpecifier::TypeSpec:
8926     case NestedNameSpecifier::TypeSpecWithTemplate: {
8927       bool Template = readBool();
8928       TypeSourceInfo *T = readTypeSourceInfo();
8929       if (!T)
8930         return NestedNameSpecifierLoc();
8931       SourceLocation ColonColonLoc = readSourceLocation();
8932 
8933       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8934       Builder.Extend(Context,
8935                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8936                      T->getTypeLoc(), ColonColonLoc);
8937       break;
8938     }
8939 
8940     case NestedNameSpecifier::Global: {
8941       SourceLocation ColonColonLoc = readSourceLocation();
8942       Builder.MakeGlobal(Context, ColonColonLoc);
8943       break;
8944     }
8945 
8946     case NestedNameSpecifier::Super: {
8947       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8948       SourceRange Range = readSourceRange();
8949       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8950       break;
8951     }
8952     }
8953   }
8954 
8955   return Builder.getWithLocInContext(Context);
8956 }
8957 
8958 SourceRange
8959 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8960                            unsigned &Idx) {
8961   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8962   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8963   return SourceRange(beg, end);
8964 }
8965 
8966 /// Read a floating-point value
8967 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8968   return llvm::APFloat(Sem, readAPInt());
8969 }
8970 
8971 // Read a string
8972 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8973   unsigned Len = Record[Idx++];
8974   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8975   Idx += Len;
8976   return Result;
8977 }
8978 
8979 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8980                                 unsigned &Idx) {
8981   std::string Filename = ReadString(Record, Idx);
8982   ResolveImportedPath(F, Filename);
8983   return Filename;
8984 }
8985 
8986 std::string ASTReader::ReadPath(StringRef BaseDirectory,
8987                                 const RecordData &Record, unsigned &Idx) {
8988   std::string Filename = ReadString(Record, Idx);
8989   if (!BaseDirectory.empty())
8990     ResolveImportedPath(Filename, BaseDirectory);
8991   return Filename;
8992 }
8993 
8994 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
8995                                          unsigned &Idx) {
8996   unsigned Major = Record[Idx++];
8997   unsigned Minor = Record[Idx++];
8998   unsigned Subminor = Record[Idx++];
8999   if (Minor == 0)
9000     return VersionTuple(Major);
9001   if (Subminor == 0)
9002     return VersionTuple(Major, Minor - 1);
9003   return VersionTuple(Major, Minor - 1, Subminor - 1);
9004 }
9005 
9006 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9007                                           const RecordData &Record,
9008                                           unsigned &Idx) {
9009   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9010   return CXXTemporary::Create(getContext(), Decl);
9011 }
9012 
9013 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9014   return Diag(CurrentImportLoc, DiagID);
9015 }
9016 
9017 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9018   return Diags.Report(Loc, DiagID);
9019 }
9020 
9021 /// Retrieve the identifier table associated with the
9022 /// preprocessor.
9023 IdentifierTable &ASTReader::getIdentifierTable() {
9024   return PP.getIdentifierTable();
9025 }
9026 
9027 /// Record that the given ID maps to the given switch-case
9028 /// statement.
9029 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9030   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9031          "Already have a SwitchCase with this ID");
9032   (*CurrSwitchCaseStmts)[ID] = SC;
9033 }
9034 
9035 /// Retrieve the switch-case statement with the given ID.
9036 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9037   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9038   return (*CurrSwitchCaseStmts)[ID];
9039 }
9040 
9041 void ASTReader::ClearSwitchCaseIDs() {
9042   CurrSwitchCaseStmts->clear();
9043 }
9044 
9045 void ASTReader::ReadComments() {
9046   ASTContext &Context = getContext();
9047   std::vector<RawComment *> Comments;
9048   for (SmallVectorImpl<std::pair<BitstreamCursor,
9049                                  serialization::ModuleFile *>>::iterator
9050        I = CommentsCursors.begin(),
9051        E = CommentsCursors.end();
9052        I != E; ++I) {
9053     Comments.clear();
9054     BitstreamCursor &Cursor = I->first;
9055     serialization::ModuleFile &F = *I->second;
9056     SavedStreamPosition SavedPosition(Cursor);
9057 
9058     RecordData Record;
9059     while (true) {
9060       Expected<llvm::BitstreamEntry> MaybeEntry =
9061           Cursor.advanceSkippingSubblocks(
9062               BitstreamCursor::AF_DontPopBlockAtEnd);
9063       if (!MaybeEntry) {
9064         Error(MaybeEntry.takeError());
9065         return;
9066       }
9067       llvm::BitstreamEntry Entry = MaybeEntry.get();
9068 
9069       switch (Entry.Kind) {
9070       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9071       case llvm::BitstreamEntry::Error:
9072         Error("malformed block record in AST file");
9073         return;
9074       case llvm::BitstreamEntry::EndBlock:
9075         goto NextCursor;
9076       case llvm::BitstreamEntry::Record:
9077         // The interesting case.
9078         break;
9079       }
9080 
9081       // Read a record.
9082       Record.clear();
9083       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9084       if (!MaybeComment) {
9085         Error(MaybeComment.takeError());
9086         return;
9087       }
9088       switch ((CommentRecordTypes)MaybeComment.get()) {
9089       case COMMENTS_RAW_COMMENT: {
9090         unsigned Idx = 0;
9091         SourceRange SR = ReadSourceRange(F, Record, Idx);
9092         RawComment::CommentKind Kind =
9093             (RawComment::CommentKind) Record[Idx++];
9094         bool IsTrailingComment = Record[Idx++];
9095         bool IsAlmostTrailingComment = Record[Idx++];
9096         Comments.push_back(new (Context) RawComment(
9097             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9098         break;
9099       }
9100       }
9101     }
9102   NextCursor:
9103     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9104         FileToOffsetToComment;
9105     for (RawComment *C : Comments) {
9106       SourceLocation CommentLoc = C->getBeginLoc();
9107       if (CommentLoc.isValid()) {
9108         std::pair<FileID, unsigned> Loc =
9109             SourceMgr.getDecomposedLoc(CommentLoc);
9110         if (Loc.first.isValid())
9111           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9112       }
9113     }
9114   }
9115 }
9116 
9117 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9118                                 bool IncludeSystem, bool Complain,
9119                     llvm::function_ref<void(const serialization::InputFile &IF,
9120                                             bool isSystem)> Visitor) {
9121   unsigned NumUserInputs = MF.NumUserInputFiles;
9122   unsigned NumInputs = MF.InputFilesLoaded.size();
9123   assert(NumUserInputs <= NumInputs);
9124   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9125   for (unsigned I = 0; I < N; ++I) {
9126     bool IsSystem = I >= NumUserInputs;
9127     InputFile IF = getInputFile(MF, I+1, Complain);
9128     Visitor(IF, IsSystem);
9129   }
9130 }
9131 
9132 void ASTReader::visitTopLevelModuleMaps(
9133     serialization::ModuleFile &MF,
9134     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9135   unsigned NumInputs = MF.InputFilesLoaded.size();
9136   for (unsigned I = 0; I < NumInputs; ++I) {
9137     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9138     if (IFI.TopLevelModuleMap)
9139       // FIXME: This unnecessarily re-reads the InputFileInfo.
9140       if (auto FE = getInputFile(MF, I + 1).getFile())
9141         Visitor(FE);
9142   }
9143 }
9144 
9145 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9146   // If we know the owning module, use it.
9147   if (Module *M = D->getImportedOwningModule())
9148     return M->getFullModuleName();
9149 
9150   // Otherwise, use the name of the top-level module the decl is within.
9151   if (ModuleFile *M = getOwningModuleFile(D))
9152     return M->ModuleName;
9153 
9154   // Not from a module.
9155   return {};
9156 }
9157 
9158 void ASTReader::finishPendingActions() {
9159   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9160          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9161          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9162          !PendingUpdateRecords.empty()) {
9163     // If any identifiers with corresponding top-level declarations have
9164     // been loaded, load those declarations now.
9165     using TopLevelDeclsMap =
9166         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9167     TopLevelDeclsMap TopLevelDecls;
9168 
9169     while (!PendingIdentifierInfos.empty()) {
9170       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9171       SmallVector<uint32_t, 4> DeclIDs =
9172           std::move(PendingIdentifierInfos.back().second);
9173       PendingIdentifierInfos.pop_back();
9174 
9175       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9176     }
9177 
9178     // Load each function type that we deferred loading because it was a
9179     // deduced type that might refer to a local type declared within itself.
9180     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9181       auto *FD = PendingFunctionTypes[I].first;
9182       FD->setType(GetType(PendingFunctionTypes[I].second));
9183 
9184       // If we gave a function a deduced return type, remember that we need to
9185       // propagate that along the redeclaration chain.
9186       auto *DT = FD->getReturnType()->getContainedDeducedType();
9187       if (DT && DT->isDeduced())
9188         PendingDeducedTypeUpdates.insert(
9189             {FD->getCanonicalDecl(), FD->getReturnType()});
9190     }
9191     PendingFunctionTypes.clear();
9192 
9193     // For each decl chain that we wanted to complete while deserializing, mark
9194     // it as "still needs to be completed".
9195     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9196       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9197     }
9198     PendingIncompleteDeclChains.clear();
9199 
9200     // Load pending declaration chains.
9201     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9202       loadPendingDeclChain(PendingDeclChains[I].first,
9203                            PendingDeclChains[I].second);
9204     PendingDeclChains.clear();
9205 
9206     // Make the most recent of the top-level declarations visible.
9207     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9208            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9209       IdentifierInfo *II = TLD->first;
9210       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9211         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9212       }
9213     }
9214 
9215     // Load any pending macro definitions.
9216     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9217       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9218       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9219       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9220       // Initialize the macro history from chained-PCHs ahead of module imports.
9221       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9222            ++IDIdx) {
9223         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9224         if (!Info.M->isModule())
9225           resolvePendingMacro(II, Info);
9226       }
9227       // Handle module imports.
9228       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9229            ++IDIdx) {
9230         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9231         if (Info.M->isModule())
9232           resolvePendingMacro(II, Info);
9233       }
9234     }
9235     PendingMacroIDs.clear();
9236 
9237     // Wire up the DeclContexts for Decls that we delayed setting until
9238     // recursive loading is completed.
9239     while (!PendingDeclContextInfos.empty()) {
9240       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9241       PendingDeclContextInfos.pop_front();
9242       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9243       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9244       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9245     }
9246 
9247     // Perform any pending declaration updates.
9248     while (!PendingUpdateRecords.empty()) {
9249       auto Update = PendingUpdateRecords.pop_back_val();
9250       ReadingKindTracker ReadingKind(Read_Decl, *this);
9251       loadDeclUpdateRecords(Update);
9252     }
9253   }
9254 
9255   // At this point, all update records for loaded decls are in place, so any
9256   // fake class definitions should have become real.
9257   assert(PendingFakeDefinitionData.empty() &&
9258          "faked up a class definition but never saw the real one");
9259 
9260   // If we deserialized any C++ or Objective-C class definitions, any
9261   // Objective-C protocol definitions, or any redeclarable templates, make sure
9262   // that all redeclarations point to the definitions. Note that this can only
9263   // happen now, after the redeclaration chains have been fully wired.
9264   for (Decl *D : PendingDefinitions) {
9265     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9266       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9267         // Make sure that the TagType points at the definition.
9268         const_cast<TagType*>(TagT)->decl = TD;
9269       }
9270 
9271       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9272         for (auto *R = getMostRecentExistingDecl(RD); R;
9273              R = R->getPreviousDecl()) {
9274           assert((R == D) ==
9275                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9276                  "declaration thinks it's the definition but it isn't");
9277           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9278         }
9279       }
9280 
9281       continue;
9282     }
9283 
9284     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9285       // Make sure that the ObjCInterfaceType points at the definition.
9286       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9287         ->Decl = ID;
9288 
9289       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9290         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9291 
9292       continue;
9293     }
9294 
9295     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9296       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9297         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9298 
9299       continue;
9300     }
9301 
9302     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9303     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9304       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9305   }
9306   PendingDefinitions.clear();
9307 
9308   // Load the bodies of any functions or methods we've encountered. We do
9309   // this now (delayed) so that we can be sure that the declaration chains
9310   // have been fully wired up (hasBody relies on this).
9311   // FIXME: We shouldn't require complete redeclaration chains here.
9312   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9313                                PBEnd = PendingBodies.end();
9314        PB != PBEnd; ++PB) {
9315     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9316       // For a function defined inline within a class template, force the
9317       // canonical definition to be the one inside the canonical definition of
9318       // the template. This ensures that we instantiate from a correct view
9319       // of the template.
9320       //
9321       // Sadly we can't do this more generally: we can't be sure that all
9322       // copies of an arbitrary class definition will have the same members
9323       // defined (eg, some member functions may not be instantiated, and some
9324       // special members may or may not have been implicitly defined).
9325       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9326         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9327           continue;
9328 
9329       // FIXME: Check for =delete/=default?
9330       // FIXME: Complain about ODR violations here?
9331       const FunctionDecl *Defn = nullptr;
9332       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9333         FD->setLazyBody(PB->second);
9334       } else {
9335         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9336         mergeDefinitionVisibility(NonConstDefn, FD);
9337 
9338         if (!FD->isLateTemplateParsed() &&
9339             !NonConstDefn->isLateTemplateParsed() &&
9340             FD->getODRHash() != NonConstDefn->getODRHash()) {
9341           if (!isa<CXXMethodDecl>(FD)) {
9342             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9343           } else if (FD->getLexicalParent()->isFileContext() &&
9344                      NonConstDefn->getLexicalParent()->isFileContext()) {
9345             // Only diagnose out-of-line method definitions.  If they are
9346             // in class definitions, then an error will be generated when
9347             // processing the class bodies.
9348             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9349           }
9350         }
9351       }
9352       continue;
9353     }
9354 
9355     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9356     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9357       MD->setLazyBody(PB->second);
9358   }
9359   PendingBodies.clear();
9360 
9361   // Do some cleanup.
9362   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9363     getContext().deduplicateMergedDefinitonsFor(ND);
9364   PendingMergedDefinitionsToDeduplicate.clear();
9365 }
9366 
9367 void ASTReader::diagnoseOdrViolations() {
9368   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9369       PendingFunctionOdrMergeFailures.empty() &&
9370       PendingEnumOdrMergeFailures.empty())
9371     return;
9372 
9373   // Trigger the import of the full definition of each class that had any
9374   // odr-merging problems, so we can produce better diagnostics for them.
9375   // These updates may in turn find and diagnose some ODR failures, so take
9376   // ownership of the set first.
9377   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9378   PendingOdrMergeFailures.clear();
9379   for (auto &Merge : OdrMergeFailures) {
9380     Merge.first->buildLookup();
9381     Merge.first->decls_begin();
9382     Merge.first->bases_begin();
9383     Merge.first->vbases_begin();
9384     for (auto &RecordPair : Merge.second) {
9385       auto *RD = RecordPair.first;
9386       RD->decls_begin();
9387       RD->bases_begin();
9388       RD->vbases_begin();
9389     }
9390   }
9391 
9392   // Trigger the import of functions.
9393   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9394   PendingFunctionOdrMergeFailures.clear();
9395   for (auto &Merge : FunctionOdrMergeFailures) {
9396     Merge.first->buildLookup();
9397     Merge.first->decls_begin();
9398     Merge.first->getBody();
9399     for (auto &FD : Merge.second) {
9400       FD->buildLookup();
9401       FD->decls_begin();
9402       FD->getBody();
9403     }
9404   }
9405 
9406   // Trigger the import of enums.
9407   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9408   PendingEnumOdrMergeFailures.clear();
9409   for (auto &Merge : EnumOdrMergeFailures) {
9410     Merge.first->decls_begin();
9411     for (auto &Enum : Merge.second) {
9412       Enum->decls_begin();
9413     }
9414   }
9415 
9416   // For each declaration from a merged context, check that the canonical
9417   // definition of that context also contains a declaration of the same
9418   // entity.
9419   //
9420   // Caution: this loop does things that might invalidate iterators into
9421   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9422   while (!PendingOdrMergeChecks.empty()) {
9423     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9424 
9425     // FIXME: Skip over implicit declarations for now. This matters for things
9426     // like implicitly-declared special member functions. This isn't entirely
9427     // correct; we can end up with multiple unmerged declarations of the same
9428     // implicit entity.
9429     if (D->isImplicit())
9430       continue;
9431 
9432     DeclContext *CanonDef = D->getDeclContext();
9433 
9434     bool Found = false;
9435     const Decl *DCanon = D->getCanonicalDecl();
9436 
9437     for (auto RI : D->redecls()) {
9438       if (RI->getLexicalDeclContext() == CanonDef) {
9439         Found = true;
9440         break;
9441       }
9442     }
9443     if (Found)
9444       continue;
9445 
9446     // Quick check failed, time to do the slow thing. Note, we can't just
9447     // look up the name of D in CanonDef here, because the member that is
9448     // in CanonDef might not be found by name lookup (it might have been
9449     // replaced by a more recent declaration in the lookup table), and we
9450     // can't necessarily find it in the redeclaration chain because it might
9451     // be merely mergeable, not redeclarable.
9452     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9453     for (auto *CanonMember : CanonDef->decls()) {
9454       if (CanonMember->getCanonicalDecl() == DCanon) {
9455         // This can happen if the declaration is merely mergeable and not
9456         // actually redeclarable (we looked for redeclarations earlier).
9457         //
9458         // FIXME: We should be able to detect this more efficiently, without
9459         // pulling in all of the members of CanonDef.
9460         Found = true;
9461         break;
9462       }
9463       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9464         if (ND->getDeclName() == D->getDeclName())
9465           Candidates.push_back(ND);
9466     }
9467 
9468     if (!Found) {
9469       // The AST doesn't like TagDecls becoming invalid after they've been
9470       // completed. We only really need to mark FieldDecls as invalid here.
9471       if (!isa<TagDecl>(D))
9472         D->setInvalidDecl();
9473 
9474       // Ensure we don't accidentally recursively enter deserialization while
9475       // we're producing our diagnostic.
9476       Deserializing RecursionGuard(this);
9477 
9478       std::string CanonDefModule =
9479           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9480       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9481         << D << getOwningModuleNameForDiagnostic(D)
9482         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9483 
9484       if (Candidates.empty())
9485         Diag(cast<Decl>(CanonDef)->getLocation(),
9486              diag::note_module_odr_violation_no_possible_decls) << D;
9487       else {
9488         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9489           Diag(Candidates[I]->getLocation(),
9490                diag::note_module_odr_violation_possible_decl)
9491             << Candidates[I];
9492       }
9493 
9494       DiagnosedOdrMergeFailures.insert(CanonDef);
9495     }
9496   }
9497 
9498   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9499       EnumOdrMergeFailures.empty())
9500     return;
9501 
9502   // Ensure we don't accidentally recursively enter deserialization while
9503   // we're producing our diagnostics.
9504   Deserializing RecursionGuard(this);
9505 
9506   // Common code for hashing helpers.
9507   ODRHash Hash;
9508   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9509     Hash.clear();
9510     Hash.AddQualType(Ty);
9511     return Hash.CalculateHash();
9512   };
9513 
9514   auto ComputeODRHash = [&Hash](const Stmt *S) {
9515     assert(S);
9516     Hash.clear();
9517     Hash.AddStmt(S);
9518     return Hash.CalculateHash();
9519   };
9520 
9521   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9522     assert(D);
9523     Hash.clear();
9524     Hash.AddSubDecl(D);
9525     return Hash.CalculateHash();
9526   };
9527 
9528   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9529     Hash.clear();
9530     Hash.AddTemplateArgument(TA);
9531     return Hash.CalculateHash();
9532   };
9533 
9534   auto ComputeTemplateParameterListODRHash =
9535       [&Hash](const TemplateParameterList *TPL) {
9536         assert(TPL);
9537         Hash.clear();
9538         Hash.AddTemplateParameterList(TPL);
9539         return Hash.CalculateHash();
9540       };
9541 
9542   // Used with err_module_odr_violation_mismatch_decl and
9543   // note_module_odr_violation_mismatch_decl
9544   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9545   enum ODRMismatchDecl {
9546     EndOfClass,
9547     PublicSpecifer,
9548     PrivateSpecifer,
9549     ProtectedSpecifer,
9550     StaticAssert,
9551     Field,
9552     CXXMethod,
9553     TypeAlias,
9554     TypeDef,
9555     Var,
9556     Friend,
9557     FunctionTemplate,
9558     Other
9559   };
9560 
9561   // Used with err_module_odr_violation_mismatch_decl_diff and
9562   // note_module_odr_violation_mismatch_decl_diff
9563   enum ODRMismatchDeclDifference {
9564     StaticAssertCondition,
9565     StaticAssertMessage,
9566     StaticAssertOnlyMessage,
9567     FieldName,
9568     FieldTypeName,
9569     FieldSingleBitField,
9570     FieldDifferentWidthBitField,
9571     FieldSingleMutable,
9572     FieldSingleInitializer,
9573     FieldDifferentInitializers,
9574     MethodName,
9575     MethodDeleted,
9576     MethodDefaulted,
9577     MethodVirtual,
9578     MethodStatic,
9579     MethodVolatile,
9580     MethodConst,
9581     MethodInline,
9582     MethodNumberParameters,
9583     MethodParameterType,
9584     MethodParameterName,
9585     MethodParameterSingleDefaultArgument,
9586     MethodParameterDifferentDefaultArgument,
9587     MethodNoTemplateArguments,
9588     MethodDifferentNumberTemplateArguments,
9589     MethodDifferentTemplateArgument,
9590     MethodSingleBody,
9591     MethodDifferentBody,
9592     TypedefName,
9593     TypedefType,
9594     VarName,
9595     VarType,
9596     VarSingleInitializer,
9597     VarDifferentInitializer,
9598     VarConstexpr,
9599     FriendTypeFunction,
9600     FriendType,
9601     FriendFunction,
9602     FunctionTemplateDifferentNumberParameters,
9603     FunctionTemplateParameterDifferentKind,
9604     FunctionTemplateParameterName,
9605     FunctionTemplateParameterSingleDefaultArgument,
9606     FunctionTemplateParameterDifferentDefaultArgument,
9607     FunctionTemplateParameterDifferentType,
9608     FunctionTemplatePackParameter,
9609   };
9610 
9611   // These lambdas have the common portions of the ODR diagnostics.  This
9612   // has the same return as Diag(), so addition parameters can be passed
9613   // in with operator<<
9614   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9615                                  SourceLocation Loc, SourceRange Range,
9616                                  ODRMismatchDeclDifference DiffType) {
9617     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9618            << FirstRecord << FirstModule.empty() << FirstModule << Range
9619            << DiffType;
9620   };
9621   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9622                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9623     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9624            << SecondModule << Range << DiffType;
9625   };
9626 
9627   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9628                        &ComputeQualTypeODRHash, &ComputeODRHash](
9629                           NamedDecl *FirstRecord, StringRef FirstModule,
9630                           StringRef SecondModule, FieldDecl *FirstField,
9631                           FieldDecl *SecondField) {
9632     IdentifierInfo *FirstII = FirstField->getIdentifier();
9633     IdentifierInfo *SecondII = SecondField->getIdentifier();
9634     if (FirstII->getName() != SecondII->getName()) {
9635       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9636                        FirstField->getSourceRange(), FieldName)
9637           << FirstII;
9638       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9639                       SecondField->getSourceRange(), FieldName)
9640           << SecondII;
9641 
9642       return true;
9643     }
9644 
9645     assert(getContext().hasSameType(FirstField->getType(),
9646                                     SecondField->getType()));
9647 
9648     QualType FirstType = FirstField->getType();
9649     QualType SecondType = SecondField->getType();
9650     if (ComputeQualTypeODRHash(FirstType) !=
9651         ComputeQualTypeODRHash(SecondType)) {
9652       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9653                        FirstField->getSourceRange(), FieldTypeName)
9654           << FirstII << FirstType;
9655       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9656                       SecondField->getSourceRange(), FieldTypeName)
9657           << SecondII << SecondType;
9658 
9659       return true;
9660     }
9661 
9662     const bool IsFirstBitField = FirstField->isBitField();
9663     const bool IsSecondBitField = SecondField->isBitField();
9664     if (IsFirstBitField != IsSecondBitField) {
9665       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9666                        FirstField->getSourceRange(), FieldSingleBitField)
9667           << FirstII << IsFirstBitField;
9668       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9669                       SecondField->getSourceRange(), FieldSingleBitField)
9670           << SecondII << IsSecondBitField;
9671       return true;
9672     }
9673 
9674     if (IsFirstBitField && IsSecondBitField) {
9675       unsigned FirstBitWidthHash =
9676           ComputeODRHash(FirstField->getBitWidth());
9677       unsigned SecondBitWidthHash =
9678           ComputeODRHash(SecondField->getBitWidth());
9679       if (FirstBitWidthHash != SecondBitWidthHash) {
9680         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9681                          FirstField->getSourceRange(),
9682                          FieldDifferentWidthBitField)
9683             << FirstII << FirstField->getBitWidth()->getSourceRange();
9684         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9685                         SecondField->getSourceRange(),
9686                         FieldDifferentWidthBitField)
9687             << SecondII << SecondField->getBitWidth()->getSourceRange();
9688         return true;
9689       }
9690     }
9691 
9692     if (!PP.getLangOpts().CPlusPlus)
9693       return false;
9694 
9695     const bool IsFirstMutable = FirstField->isMutable();
9696     const bool IsSecondMutable = SecondField->isMutable();
9697     if (IsFirstMutable != IsSecondMutable) {
9698       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9699                        FirstField->getSourceRange(), FieldSingleMutable)
9700           << FirstII << IsFirstMutable;
9701       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9702                       SecondField->getSourceRange(), FieldSingleMutable)
9703           << SecondII << IsSecondMutable;
9704       return true;
9705     }
9706 
9707     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9708     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9709     if ((!FirstInitializer && SecondInitializer) ||
9710         (FirstInitializer && !SecondInitializer)) {
9711       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9712                        FirstField->getSourceRange(), FieldSingleInitializer)
9713           << FirstII << (FirstInitializer != nullptr);
9714       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9715                       SecondField->getSourceRange(), FieldSingleInitializer)
9716           << SecondII << (SecondInitializer != nullptr);
9717       return true;
9718     }
9719 
9720     if (FirstInitializer && SecondInitializer) {
9721       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9722       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9723       if (FirstInitHash != SecondInitHash) {
9724         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9725                          FirstField->getSourceRange(),
9726                          FieldDifferentInitializers)
9727             << FirstII << FirstInitializer->getSourceRange();
9728         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9729                         SecondField->getSourceRange(),
9730                         FieldDifferentInitializers)
9731             << SecondII << SecondInitializer->getSourceRange();
9732         return true;
9733       }
9734     }
9735 
9736     return false;
9737   };
9738 
9739   auto ODRDiagTypeDefOrAlias =
9740       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9741           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9742           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9743           bool IsTypeAlias) {
9744         auto FirstName = FirstTD->getDeclName();
9745         auto SecondName = SecondTD->getDeclName();
9746         if (FirstName != SecondName) {
9747           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9748                            FirstTD->getSourceRange(), TypedefName)
9749               << IsTypeAlias << FirstName;
9750           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9751                           SecondTD->getSourceRange(), TypedefName)
9752               << IsTypeAlias << SecondName;
9753           return true;
9754         }
9755 
9756         QualType FirstType = FirstTD->getUnderlyingType();
9757         QualType SecondType = SecondTD->getUnderlyingType();
9758         if (ComputeQualTypeODRHash(FirstType) !=
9759             ComputeQualTypeODRHash(SecondType)) {
9760           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9761                            FirstTD->getSourceRange(), TypedefType)
9762               << IsTypeAlias << FirstName << FirstType;
9763           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9764                           SecondTD->getSourceRange(), TypedefType)
9765               << IsTypeAlias << SecondName << SecondType;
9766           return true;
9767         }
9768 
9769         return false;
9770   };
9771 
9772   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9773                      &ComputeQualTypeODRHash, &ComputeODRHash,
9774                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9775                            StringRef SecondModule, VarDecl *FirstVD,
9776                            VarDecl *SecondVD) {
9777     auto FirstName = FirstVD->getDeclName();
9778     auto SecondName = SecondVD->getDeclName();
9779     if (FirstName != SecondName) {
9780       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9781                        FirstVD->getSourceRange(), VarName)
9782           << FirstName;
9783       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9784                       SecondVD->getSourceRange(), VarName)
9785           << SecondName;
9786       return true;
9787     }
9788 
9789     QualType FirstType = FirstVD->getType();
9790     QualType SecondType = SecondVD->getType();
9791     if (ComputeQualTypeODRHash(FirstType) !=
9792         ComputeQualTypeODRHash(SecondType)) {
9793       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9794                        FirstVD->getSourceRange(), VarType)
9795           << FirstName << FirstType;
9796       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9797                       SecondVD->getSourceRange(), VarType)
9798           << SecondName << SecondType;
9799       return true;
9800     }
9801 
9802     if (!PP.getLangOpts().CPlusPlus)
9803       return false;
9804 
9805     const Expr *FirstInit = FirstVD->getInit();
9806     const Expr *SecondInit = SecondVD->getInit();
9807     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9808       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9809                        FirstVD->getSourceRange(), VarSingleInitializer)
9810           << FirstName << (FirstInit == nullptr)
9811           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9812       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9813                       SecondVD->getSourceRange(), VarSingleInitializer)
9814           << SecondName << (SecondInit == nullptr)
9815           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9816       return true;
9817     }
9818 
9819     if (FirstInit && SecondInit &&
9820         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9821       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9822                        FirstVD->getSourceRange(), VarDifferentInitializer)
9823           << FirstName << FirstInit->getSourceRange();
9824       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9825                       SecondVD->getSourceRange(), VarDifferentInitializer)
9826           << SecondName << SecondInit->getSourceRange();
9827       return true;
9828     }
9829 
9830     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9831     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9832     if (FirstIsConstexpr != SecondIsConstexpr) {
9833       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9834                        FirstVD->getSourceRange(), VarConstexpr)
9835           << FirstName << FirstIsConstexpr;
9836       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9837                       SecondVD->getSourceRange(), VarConstexpr)
9838           << SecondName << SecondIsConstexpr;
9839       return true;
9840     }
9841     return false;
9842   };
9843 
9844   auto DifferenceSelector = [](Decl *D) {
9845     assert(D && "valid Decl required");
9846     switch (D->getKind()) {
9847     default:
9848       return Other;
9849     case Decl::AccessSpec:
9850       switch (D->getAccess()) {
9851       case AS_public:
9852         return PublicSpecifer;
9853       case AS_private:
9854         return PrivateSpecifer;
9855       case AS_protected:
9856         return ProtectedSpecifer;
9857       case AS_none:
9858         break;
9859       }
9860       llvm_unreachable("Invalid access specifier");
9861     case Decl::StaticAssert:
9862       return StaticAssert;
9863     case Decl::Field:
9864       return Field;
9865     case Decl::CXXMethod:
9866     case Decl::CXXConstructor:
9867     case Decl::CXXDestructor:
9868       return CXXMethod;
9869     case Decl::TypeAlias:
9870       return TypeAlias;
9871     case Decl::Typedef:
9872       return TypeDef;
9873     case Decl::Var:
9874       return Var;
9875     case Decl::Friend:
9876       return Friend;
9877     case Decl::FunctionTemplate:
9878       return FunctionTemplate;
9879     }
9880   };
9881 
9882   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9883   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9884                                                  RecordDecl *Record,
9885                                                  const DeclContext *DC) {
9886     for (auto *D : Record->decls()) {
9887       if (!ODRHash::isDeclToBeProcessed(D, DC))
9888         continue;
9889       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9890     }
9891   };
9892 
9893   struct DiffResult {
9894     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9895     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9896   };
9897 
9898   // If there is a diagnoseable difference, FirstDiffType and
9899   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9900   // filled in if not EndOfClass.
9901   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9902                                              DeclHashes &SecondHashes) {
9903     DiffResult DR;
9904     auto FirstIt = FirstHashes.begin();
9905     auto SecondIt = SecondHashes.begin();
9906     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9907       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9908           FirstIt->second == SecondIt->second) {
9909         ++FirstIt;
9910         ++SecondIt;
9911         continue;
9912       }
9913 
9914       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9915       DR.SecondDecl =
9916           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9917 
9918       DR.FirstDiffType =
9919           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9920       DR.SecondDiffType =
9921           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9922       return DR;
9923     }
9924     return DR;
9925   };
9926 
9927   // Use this to diagnose that an unexpected Decl was encountered
9928   // or no difference was detected. This causes a generic error
9929   // message to be emitted.
9930   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9931                                       StringRef FirstModule,
9932                                       NamedDecl *SecondRecord,
9933                                       StringRef SecondModule) {
9934     Diag(FirstRecord->getLocation(),
9935          diag::err_module_odr_violation_different_definitions)
9936         << FirstRecord << FirstModule.empty() << FirstModule;
9937 
9938     if (DR.FirstDecl) {
9939       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9940           << FirstRecord << DR.FirstDecl->getSourceRange();
9941     }
9942 
9943     Diag(SecondRecord->getLocation(),
9944          diag::note_module_odr_violation_different_definitions)
9945         << SecondModule;
9946 
9947     if (DR.SecondDecl) {
9948       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9949           << DR.SecondDecl->getSourceRange();
9950     }
9951   };
9952 
9953   auto DiagnoseODRMismatch =
9954       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9955              NamedDecl *SecondRecord, StringRef SecondModule) {
9956         SourceLocation FirstLoc;
9957         SourceRange FirstRange;
9958         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9959         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9960           FirstLoc = FirstTag->getBraceRange().getEnd();
9961         } else {
9962           FirstLoc = DR.FirstDecl->getLocation();
9963           FirstRange = DR.FirstDecl->getSourceRange();
9964         }
9965         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9966             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9967             << DR.FirstDiffType;
9968 
9969         SourceLocation SecondLoc;
9970         SourceRange SecondRange;
9971         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9972         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9973           SecondLoc = SecondTag->getBraceRange().getEnd();
9974         } else {
9975           SecondLoc = DR.SecondDecl->getLocation();
9976           SecondRange = DR.SecondDecl->getSourceRange();
9977         }
9978         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9979             << SecondModule << SecondRange << DR.SecondDiffType;
9980       };
9981 
9982   // Issue any pending ODR-failure diagnostics.
9983   for (auto &Merge : OdrMergeFailures) {
9984     // If we've already pointed out a specific problem with this class, don't
9985     // bother issuing a general "something's different" diagnostic.
9986     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
9987       continue;
9988 
9989     bool Diagnosed = false;
9990     CXXRecordDecl *FirstRecord = Merge.first;
9991     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
9992     for (auto &RecordPair : Merge.second) {
9993       CXXRecordDecl *SecondRecord = RecordPair.first;
9994       // Multiple different declarations got merged together; tell the user
9995       // where they came from.
9996       if (FirstRecord == SecondRecord)
9997         continue;
9998 
9999       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10000 
10001       auto *FirstDD = FirstRecord->DefinitionData;
10002       auto *SecondDD = RecordPair.second;
10003 
10004       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10005 
10006       // Diagnostics from DefinitionData are emitted here.
10007       if (FirstDD != SecondDD) {
10008         enum ODRDefinitionDataDifference {
10009           NumBases,
10010           NumVBases,
10011           BaseType,
10012           BaseVirtual,
10013           BaseAccess,
10014         };
10015         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10016                                  this](SourceLocation Loc, SourceRange Range,
10017                                        ODRDefinitionDataDifference DiffType) {
10018           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10019                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10020                  << DiffType;
10021         };
10022         auto ODRDiagBaseNote = [&SecondModule,
10023                                 this](SourceLocation Loc, SourceRange Range,
10024                                       ODRDefinitionDataDifference DiffType) {
10025           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10026                  << SecondModule << Range << DiffType;
10027         };
10028 
10029         unsigned FirstNumBases = FirstDD->NumBases;
10030         unsigned FirstNumVBases = FirstDD->NumVBases;
10031         unsigned SecondNumBases = SecondDD->NumBases;
10032         unsigned SecondNumVBases = SecondDD->NumVBases;
10033 
10034         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10035           unsigned NumBases = DD->NumBases;
10036           if (NumBases == 0) return SourceRange();
10037           auto bases = DD->bases();
10038           return SourceRange(bases[0].getBeginLoc(),
10039                              bases[NumBases - 1].getEndLoc());
10040         };
10041 
10042         if (FirstNumBases != SecondNumBases) {
10043           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10044                            NumBases)
10045               << FirstNumBases;
10046           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10047                           NumBases)
10048               << SecondNumBases;
10049           Diagnosed = true;
10050           break;
10051         }
10052 
10053         if (FirstNumVBases != SecondNumVBases) {
10054           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10055                            NumVBases)
10056               << FirstNumVBases;
10057           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10058                           NumVBases)
10059               << SecondNumVBases;
10060           Diagnosed = true;
10061           break;
10062         }
10063 
10064         auto FirstBases = FirstDD->bases();
10065         auto SecondBases = SecondDD->bases();
10066         unsigned i = 0;
10067         for (i = 0; i < FirstNumBases; ++i) {
10068           auto FirstBase = FirstBases[i];
10069           auto SecondBase = SecondBases[i];
10070           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10071               ComputeQualTypeODRHash(SecondBase.getType())) {
10072             ODRDiagBaseError(FirstRecord->getLocation(),
10073                              FirstBase.getSourceRange(), BaseType)
10074                 << (i + 1) << FirstBase.getType();
10075             ODRDiagBaseNote(SecondRecord->getLocation(),
10076                             SecondBase.getSourceRange(), BaseType)
10077                 << (i + 1) << SecondBase.getType();
10078             break;
10079           }
10080 
10081           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10082             ODRDiagBaseError(FirstRecord->getLocation(),
10083                              FirstBase.getSourceRange(), BaseVirtual)
10084                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10085             ODRDiagBaseNote(SecondRecord->getLocation(),
10086                             SecondBase.getSourceRange(), BaseVirtual)
10087                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10088             break;
10089           }
10090 
10091           if (FirstBase.getAccessSpecifierAsWritten() !=
10092               SecondBase.getAccessSpecifierAsWritten()) {
10093             ODRDiagBaseError(FirstRecord->getLocation(),
10094                              FirstBase.getSourceRange(), BaseAccess)
10095                 << (i + 1) << FirstBase.getType()
10096                 << (int)FirstBase.getAccessSpecifierAsWritten();
10097             ODRDiagBaseNote(SecondRecord->getLocation(),
10098                             SecondBase.getSourceRange(), BaseAccess)
10099                 << (i + 1) << SecondBase.getType()
10100                 << (int)SecondBase.getAccessSpecifierAsWritten();
10101             break;
10102           }
10103         }
10104 
10105         if (i != FirstNumBases) {
10106           Diagnosed = true;
10107           break;
10108         }
10109       }
10110 
10111       const ClassTemplateDecl *FirstTemplate =
10112           FirstRecord->getDescribedClassTemplate();
10113       const ClassTemplateDecl *SecondTemplate =
10114           SecondRecord->getDescribedClassTemplate();
10115 
10116       assert(!FirstTemplate == !SecondTemplate &&
10117              "Both pointers should be null or non-null");
10118 
10119       enum ODRTemplateDifference {
10120         ParamEmptyName,
10121         ParamName,
10122         ParamSingleDefaultArgument,
10123         ParamDifferentDefaultArgument,
10124       };
10125 
10126       if (FirstTemplate && SecondTemplate) {
10127         DeclHashes FirstTemplateHashes;
10128         DeclHashes SecondTemplateHashes;
10129 
10130         auto PopulateTemplateParameterHashs =
10131             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10132                                      const ClassTemplateDecl *TD) {
10133               for (auto *D : TD->getTemplateParameters()->asArray()) {
10134                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10135               }
10136             };
10137 
10138         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10139         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10140 
10141         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10142                "Number of template parameters should be equal.");
10143 
10144         auto FirstIt = FirstTemplateHashes.begin();
10145         auto FirstEnd = FirstTemplateHashes.end();
10146         auto SecondIt = SecondTemplateHashes.begin();
10147         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10148           if (FirstIt->second == SecondIt->second)
10149             continue;
10150 
10151           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10152                                           SourceLocation Loc, SourceRange Range,
10153                                           ODRTemplateDifference DiffType) {
10154             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10155                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10156                    << DiffType;
10157           };
10158           auto ODRDiagTemplateNote = [&SecondModule, this](
10159                                          SourceLocation Loc, SourceRange Range,
10160                                          ODRTemplateDifference DiffType) {
10161             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10162                    << SecondModule << Range << DiffType;
10163           };
10164 
10165           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10166           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10167 
10168           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10169                  "Parameter Decl's should be the same kind.");
10170 
10171           DeclarationName FirstName = FirstDecl->getDeclName();
10172           DeclarationName SecondName = SecondDecl->getDeclName();
10173 
10174           if (FirstName != SecondName) {
10175             const bool FirstNameEmpty =
10176                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10177             const bool SecondNameEmpty =
10178                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10179             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10180                    "Both template parameters cannot be unnamed.");
10181             ODRDiagTemplateError(FirstDecl->getLocation(),
10182                                  FirstDecl->getSourceRange(),
10183                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10184                 << FirstName;
10185             ODRDiagTemplateNote(SecondDecl->getLocation(),
10186                                 SecondDecl->getSourceRange(),
10187                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10188                 << SecondName;
10189             break;
10190           }
10191 
10192           switch (FirstDecl->getKind()) {
10193           default:
10194             llvm_unreachable("Invalid template parameter type.");
10195           case Decl::TemplateTypeParm: {
10196             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10197             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10198             const bool HasFirstDefaultArgument =
10199                 FirstParam->hasDefaultArgument() &&
10200                 !FirstParam->defaultArgumentWasInherited();
10201             const bool HasSecondDefaultArgument =
10202                 SecondParam->hasDefaultArgument() &&
10203                 !SecondParam->defaultArgumentWasInherited();
10204 
10205             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10206               ODRDiagTemplateError(FirstDecl->getLocation(),
10207                                    FirstDecl->getSourceRange(),
10208                                    ParamSingleDefaultArgument)
10209                   << HasFirstDefaultArgument;
10210               ODRDiagTemplateNote(SecondDecl->getLocation(),
10211                                   SecondDecl->getSourceRange(),
10212                                   ParamSingleDefaultArgument)
10213                   << HasSecondDefaultArgument;
10214               break;
10215             }
10216 
10217             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10218                    "Expecting default arguments.");
10219 
10220             ODRDiagTemplateError(FirstDecl->getLocation(),
10221                                  FirstDecl->getSourceRange(),
10222                                  ParamDifferentDefaultArgument);
10223             ODRDiagTemplateNote(SecondDecl->getLocation(),
10224                                 SecondDecl->getSourceRange(),
10225                                 ParamDifferentDefaultArgument);
10226 
10227             break;
10228           }
10229           case Decl::NonTypeTemplateParm: {
10230             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10231             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10232             const bool HasFirstDefaultArgument =
10233                 FirstParam->hasDefaultArgument() &&
10234                 !FirstParam->defaultArgumentWasInherited();
10235             const bool HasSecondDefaultArgument =
10236                 SecondParam->hasDefaultArgument() &&
10237                 !SecondParam->defaultArgumentWasInherited();
10238 
10239             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10240               ODRDiagTemplateError(FirstDecl->getLocation(),
10241                                    FirstDecl->getSourceRange(),
10242                                    ParamSingleDefaultArgument)
10243                   << HasFirstDefaultArgument;
10244               ODRDiagTemplateNote(SecondDecl->getLocation(),
10245                                   SecondDecl->getSourceRange(),
10246                                   ParamSingleDefaultArgument)
10247                   << HasSecondDefaultArgument;
10248               break;
10249             }
10250 
10251             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10252                    "Expecting default arguments.");
10253 
10254             ODRDiagTemplateError(FirstDecl->getLocation(),
10255                                  FirstDecl->getSourceRange(),
10256                                  ParamDifferentDefaultArgument);
10257             ODRDiagTemplateNote(SecondDecl->getLocation(),
10258                                 SecondDecl->getSourceRange(),
10259                                 ParamDifferentDefaultArgument);
10260 
10261             break;
10262           }
10263           case Decl::TemplateTemplateParm: {
10264             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10265             const auto *SecondParam =
10266                 cast<TemplateTemplateParmDecl>(SecondDecl);
10267             const bool HasFirstDefaultArgument =
10268                 FirstParam->hasDefaultArgument() &&
10269                 !FirstParam->defaultArgumentWasInherited();
10270             const bool HasSecondDefaultArgument =
10271                 SecondParam->hasDefaultArgument() &&
10272                 !SecondParam->defaultArgumentWasInherited();
10273 
10274             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10275               ODRDiagTemplateError(FirstDecl->getLocation(),
10276                                    FirstDecl->getSourceRange(),
10277                                    ParamSingleDefaultArgument)
10278                   << HasFirstDefaultArgument;
10279               ODRDiagTemplateNote(SecondDecl->getLocation(),
10280                                   SecondDecl->getSourceRange(),
10281                                   ParamSingleDefaultArgument)
10282                   << HasSecondDefaultArgument;
10283               break;
10284             }
10285 
10286             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10287                    "Expecting default arguments.");
10288 
10289             ODRDiagTemplateError(FirstDecl->getLocation(),
10290                                  FirstDecl->getSourceRange(),
10291                                  ParamDifferentDefaultArgument);
10292             ODRDiagTemplateNote(SecondDecl->getLocation(),
10293                                 SecondDecl->getSourceRange(),
10294                                 ParamDifferentDefaultArgument);
10295 
10296             break;
10297           }
10298           }
10299 
10300           break;
10301         }
10302 
10303         if (FirstIt != FirstEnd) {
10304           Diagnosed = true;
10305           break;
10306         }
10307       }
10308 
10309       DeclHashes FirstHashes;
10310       DeclHashes SecondHashes;
10311       const DeclContext *DC = FirstRecord;
10312       PopulateHashes(FirstHashes, FirstRecord, DC);
10313       PopulateHashes(SecondHashes, SecondRecord, DC);
10314 
10315       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10316       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10317       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10318       Decl *FirstDecl = DR.FirstDecl;
10319       Decl *SecondDecl = DR.SecondDecl;
10320 
10321       if (FirstDiffType == Other || SecondDiffType == Other) {
10322         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10323                               SecondModule);
10324         Diagnosed = true;
10325         break;
10326       }
10327 
10328       if (FirstDiffType != SecondDiffType) {
10329         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10330                             SecondModule);
10331         Diagnosed = true;
10332         break;
10333       }
10334 
10335       assert(FirstDiffType == SecondDiffType);
10336 
10337       switch (FirstDiffType) {
10338       case Other:
10339       case EndOfClass:
10340       case PublicSpecifer:
10341       case PrivateSpecifer:
10342       case ProtectedSpecifer:
10343         llvm_unreachable("Invalid diff type");
10344 
10345       case StaticAssert: {
10346         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10347         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10348 
10349         Expr *FirstExpr = FirstSA->getAssertExpr();
10350         Expr *SecondExpr = SecondSA->getAssertExpr();
10351         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10352         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10353         if (FirstODRHash != SecondODRHash) {
10354           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10355                            FirstExpr->getSourceRange(), StaticAssertCondition);
10356           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10357                           SecondExpr->getSourceRange(), StaticAssertCondition);
10358           Diagnosed = true;
10359           break;
10360         }
10361 
10362         StringLiteral *FirstStr = FirstSA->getMessage();
10363         StringLiteral *SecondStr = SecondSA->getMessage();
10364         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10365         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10366           SourceLocation FirstLoc, SecondLoc;
10367           SourceRange FirstRange, SecondRange;
10368           if (FirstStr) {
10369             FirstLoc = FirstStr->getBeginLoc();
10370             FirstRange = FirstStr->getSourceRange();
10371           } else {
10372             FirstLoc = FirstSA->getBeginLoc();
10373             FirstRange = FirstSA->getSourceRange();
10374           }
10375           if (SecondStr) {
10376             SecondLoc = SecondStr->getBeginLoc();
10377             SecondRange = SecondStr->getSourceRange();
10378           } else {
10379             SecondLoc = SecondSA->getBeginLoc();
10380             SecondRange = SecondSA->getSourceRange();
10381           }
10382           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10383                            StaticAssertOnlyMessage)
10384               << (FirstStr == nullptr);
10385           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10386                           StaticAssertOnlyMessage)
10387               << (SecondStr == nullptr);
10388           Diagnosed = true;
10389           break;
10390         }
10391 
10392         if (FirstStr && SecondStr &&
10393             FirstStr->getString() != SecondStr->getString()) {
10394           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10395                            FirstStr->getSourceRange(), StaticAssertMessage);
10396           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10397                           SecondStr->getSourceRange(), StaticAssertMessage);
10398           Diagnosed = true;
10399           break;
10400         }
10401         break;
10402       }
10403       case Field: {
10404         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10405                                  cast<FieldDecl>(FirstDecl),
10406                                  cast<FieldDecl>(SecondDecl));
10407         break;
10408       }
10409       case CXXMethod: {
10410         enum {
10411           DiagMethod,
10412           DiagConstructor,
10413           DiagDestructor,
10414         } FirstMethodType,
10415             SecondMethodType;
10416         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10417           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10418           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10419           return DiagMethod;
10420         };
10421         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10422         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10423         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10424         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10425         auto FirstName = FirstMethod->getDeclName();
10426         auto SecondName = SecondMethod->getDeclName();
10427         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10428           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10429                            FirstMethod->getSourceRange(), MethodName)
10430               << FirstMethodType << FirstName;
10431           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10432                           SecondMethod->getSourceRange(), MethodName)
10433               << SecondMethodType << SecondName;
10434 
10435           Diagnosed = true;
10436           break;
10437         }
10438 
10439         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10440         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10441         if (FirstDeleted != SecondDeleted) {
10442           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10443                            FirstMethod->getSourceRange(), MethodDeleted)
10444               << FirstMethodType << FirstName << FirstDeleted;
10445 
10446           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10447                           SecondMethod->getSourceRange(), MethodDeleted)
10448               << SecondMethodType << SecondName << SecondDeleted;
10449           Diagnosed = true;
10450           break;
10451         }
10452 
10453         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10454         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10455         if (FirstDefaulted != SecondDefaulted) {
10456           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10457                            FirstMethod->getSourceRange(), MethodDefaulted)
10458               << FirstMethodType << FirstName << FirstDefaulted;
10459 
10460           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10461                           SecondMethod->getSourceRange(), MethodDefaulted)
10462               << SecondMethodType << SecondName << SecondDefaulted;
10463           Diagnosed = true;
10464           break;
10465         }
10466 
10467         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10468         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10469         const bool FirstPure = FirstMethod->isPure();
10470         const bool SecondPure = SecondMethod->isPure();
10471         if ((FirstVirtual || SecondVirtual) &&
10472             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10473           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10474                            FirstMethod->getSourceRange(), MethodVirtual)
10475               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10476           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10477                           SecondMethod->getSourceRange(), MethodVirtual)
10478               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10479           Diagnosed = true;
10480           break;
10481         }
10482 
10483         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10484         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10485         // class needs to be checked instead.
10486         const auto FirstStorage = FirstMethod->getStorageClass();
10487         const auto SecondStorage = SecondMethod->getStorageClass();
10488         const bool FirstStatic = FirstStorage == SC_Static;
10489         const bool SecondStatic = SecondStorage == SC_Static;
10490         if (FirstStatic != SecondStatic) {
10491           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10492                            FirstMethod->getSourceRange(), MethodStatic)
10493               << FirstMethodType << FirstName << FirstStatic;
10494           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10495                           SecondMethod->getSourceRange(), MethodStatic)
10496               << SecondMethodType << SecondName << SecondStatic;
10497           Diagnosed = true;
10498           break;
10499         }
10500 
10501         const bool FirstVolatile = FirstMethod->isVolatile();
10502         const bool SecondVolatile = SecondMethod->isVolatile();
10503         if (FirstVolatile != SecondVolatile) {
10504           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10505                            FirstMethod->getSourceRange(), MethodVolatile)
10506               << FirstMethodType << FirstName << FirstVolatile;
10507           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10508                           SecondMethod->getSourceRange(), MethodVolatile)
10509               << SecondMethodType << SecondName << SecondVolatile;
10510           Diagnosed = true;
10511           break;
10512         }
10513 
10514         const bool FirstConst = FirstMethod->isConst();
10515         const bool SecondConst = SecondMethod->isConst();
10516         if (FirstConst != SecondConst) {
10517           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10518                            FirstMethod->getSourceRange(), MethodConst)
10519               << FirstMethodType << FirstName << FirstConst;
10520           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10521                           SecondMethod->getSourceRange(), MethodConst)
10522               << SecondMethodType << SecondName << SecondConst;
10523           Diagnosed = true;
10524           break;
10525         }
10526 
10527         const bool FirstInline = FirstMethod->isInlineSpecified();
10528         const bool SecondInline = SecondMethod->isInlineSpecified();
10529         if (FirstInline != SecondInline) {
10530           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10531                            FirstMethod->getSourceRange(), MethodInline)
10532               << FirstMethodType << FirstName << FirstInline;
10533           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10534                           SecondMethod->getSourceRange(), MethodInline)
10535               << SecondMethodType << SecondName << SecondInline;
10536           Diagnosed = true;
10537           break;
10538         }
10539 
10540         const unsigned FirstNumParameters = FirstMethod->param_size();
10541         const unsigned SecondNumParameters = SecondMethod->param_size();
10542         if (FirstNumParameters != SecondNumParameters) {
10543           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10544                            FirstMethod->getSourceRange(),
10545                            MethodNumberParameters)
10546               << FirstMethodType << FirstName << FirstNumParameters;
10547           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10548                           SecondMethod->getSourceRange(),
10549                           MethodNumberParameters)
10550               << SecondMethodType << SecondName << SecondNumParameters;
10551           Diagnosed = true;
10552           break;
10553         }
10554 
10555         // Need this status boolean to know when break out of the switch.
10556         bool ParameterMismatch = false;
10557         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10558           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10559           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10560 
10561           QualType FirstParamType = FirstParam->getType();
10562           QualType SecondParamType = SecondParam->getType();
10563           if (FirstParamType != SecondParamType &&
10564               ComputeQualTypeODRHash(FirstParamType) !=
10565                   ComputeQualTypeODRHash(SecondParamType)) {
10566             if (const DecayedType *ParamDecayedType =
10567                     FirstParamType->getAs<DecayedType>()) {
10568               ODRDiagDeclError(
10569                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10570                   FirstMethod->getSourceRange(), MethodParameterType)
10571                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10572                   << true << ParamDecayedType->getOriginalType();
10573             } else {
10574               ODRDiagDeclError(
10575                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10576                   FirstMethod->getSourceRange(), MethodParameterType)
10577                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10578                   << false;
10579             }
10580 
10581             if (const DecayedType *ParamDecayedType =
10582                     SecondParamType->getAs<DecayedType>()) {
10583               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10584                               SecondMethod->getSourceRange(),
10585                               MethodParameterType)
10586                   << SecondMethodType << SecondName << (I + 1)
10587                   << SecondParamType << true
10588                   << ParamDecayedType->getOriginalType();
10589             } else {
10590               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10591                               SecondMethod->getSourceRange(),
10592                               MethodParameterType)
10593                   << SecondMethodType << SecondName << (I + 1)
10594                   << SecondParamType << false;
10595             }
10596             ParameterMismatch = true;
10597             break;
10598           }
10599 
10600           DeclarationName FirstParamName = FirstParam->getDeclName();
10601           DeclarationName SecondParamName = SecondParam->getDeclName();
10602           if (FirstParamName != SecondParamName) {
10603             ODRDiagDeclError(FirstRecord, FirstModule,
10604                              FirstMethod->getLocation(),
10605                              FirstMethod->getSourceRange(), MethodParameterName)
10606                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10607             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10608                             SecondMethod->getSourceRange(), MethodParameterName)
10609                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10610             ParameterMismatch = true;
10611             break;
10612           }
10613 
10614           const Expr *FirstInit = FirstParam->getInit();
10615           const Expr *SecondInit = SecondParam->getInit();
10616           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10617             ODRDiagDeclError(FirstRecord, FirstModule,
10618                              FirstMethod->getLocation(),
10619                              FirstMethod->getSourceRange(),
10620                              MethodParameterSingleDefaultArgument)
10621                 << FirstMethodType << FirstName << (I + 1)
10622                 << (FirstInit == nullptr)
10623                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10624             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10625                             SecondMethod->getSourceRange(),
10626                             MethodParameterSingleDefaultArgument)
10627                 << SecondMethodType << SecondName << (I + 1)
10628                 << (SecondInit == nullptr)
10629                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10630             ParameterMismatch = true;
10631             break;
10632           }
10633 
10634           if (FirstInit && SecondInit &&
10635               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10636             ODRDiagDeclError(FirstRecord, FirstModule,
10637                              FirstMethod->getLocation(),
10638                              FirstMethod->getSourceRange(),
10639                              MethodParameterDifferentDefaultArgument)
10640                 << FirstMethodType << FirstName << (I + 1)
10641                 << FirstInit->getSourceRange();
10642             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10643                             SecondMethod->getSourceRange(),
10644                             MethodParameterDifferentDefaultArgument)
10645                 << SecondMethodType << SecondName << (I + 1)
10646                 << SecondInit->getSourceRange();
10647             ParameterMismatch = true;
10648             break;
10649 
10650           }
10651         }
10652 
10653         if (ParameterMismatch) {
10654           Diagnosed = true;
10655           break;
10656         }
10657 
10658         const auto *FirstTemplateArgs =
10659             FirstMethod->getTemplateSpecializationArgs();
10660         const auto *SecondTemplateArgs =
10661             SecondMethod->getTemplateSpecializationArgs();
10662 
10663         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10664             (!FirstTemplateArgs && SecondTemplateArgs)) {
10665           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10666                            FirstMethod->getSourceRange(),
10667                            MethodNoTemplateArguments)
10668               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10669           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10670                           SecondMethod->getSourceRange(),
10671                           MethodNoTemplateArguments)
10672               << SecondMethodType << SecondName
10673               << (SecondTemplateArgs != nullptr);
10674 
10675           Diagnosed = true;
10676           break;
10677         }
10678 
10679         if (FirstTemplateArgs && SecondTemplateArgs) {
10680           // Remove pack expansions from argument list.
10681           auto ExpandTemplateArgumentList =
10682               [](const TemplateArgumentList *TAL) {
10683                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10684                 for (const TemplateArgument &TA : TAL->asArray()) {
10685                   if (TA.getKind() != TemplateArgument::Pack) {
10686                     ExpandedList.push_back(&TA);
10687                     continue;
10688                   }
10689                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10690                     ExpandedList.push_back(&PackTA);
10691                   }
10692                 }
10693                 return ExpandedList;
10694               };
10695           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10696               ExpandTemplateArgumentList(FirstTemplateArgs);
10697           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10698               ExpandTemplateArgumentList(SecondTemplateArgs);
10699 
10700           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10701             ODRDiagDeclError(FirstRecord, FirstModule,
10702                              FirstMethod->getLocation(),
10703                              FirstMethod->getSourceRange(),
10704                              MethodDifferentNumberTemplateArguments)
10705                 << FirstMethodType << FirstName
10706                 << (unsigned)FirstExpandedList.size();
10707             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10708                             SecondMethod->getSourceRange(),
10709                             MethodDifferentNumberTemplateArguments)
10710                 << SecondMethodType << SecondName
10711                 << (unsigned)SecondExpandedList.size();
10712 
10713             Diagnosed = true;
10714             break;
10715           }
10716 
10717           bool TemplateArgumentMismatch = false;
10718           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10719             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10720                                    &SecondTA = *SecondExpandedList[i];
10721             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10722                 ComputeTemplateArgumentODRHash(SecondTA)) {
10723               continue;
10724             }
10725 
10726             ODRDiagDeclError(
10727                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10728                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10729                 << FirstMethodType << FirstName << FirstTA << i + 1;
10730             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10731                             SecondMethod->getSourceRange(),
10732                             MethodDifferentTemplateArgument)
10733                 << SecondMethodType << SecondName << SecondTA << i + 1;
10734 
10735             TemplateArgumentMismatch = true;
10736             break;
10737           }
10738 
10739           if (TemplateArgumentMismatch) {
10740             Diagnosed = true;
10741             break;
10742           }
10743         }
10744 
10745         // Compute the hash of the method as if it has no body.
10746         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10747           Hash.clear();
10748           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10749           return Hash.CalculateHash();
10750         };
10751 
10752         // Compare the hash generated to the hash stored.  A difference means
10753         // that a body was present in the original source.  Due to merging,
10754         // the stardard way of detecting a body will not work.
10755         const bool HasFirstBody =
10756             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10757         const bool HasSecondBody =
10758             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10759 
10760         if (HasFirstBody != HasSecondBody) {
10761           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10762                            FirstMethod->getSourceRange(), MethodSingleBody)
10763               << FirstMethodType << FirstName << HasFirstBody;
10764           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10765                           SecondMethod->getSourceRange(), MethodSingleBody)
10766               << SecondMethodType << SecondName << HasSecondBody;
10767           Diagnosed = true;
10768           break;
10769         }
10770 
10771         if (HasFirstBody && HasSecondBody) {
10772           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10773                            FirstMethod->getSourceRange(), MethodDifferentBody)
10774               << FirstMethodType << FirstName;
10775           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10776                           SecondMethod->getSourceRange(), MethodDifferentBody)
10777               << SecondMethodType << SecondName;
10778           Diagnosed = true;
10779           break;
10780         }
10781 
10782         break;
10783       }
10784       case TypeAlias:
10785       case TypeDef: {
10786         Diagnosed = ODRDiagTypeDefOrAlias(
10787             FirstRecord, FirstModule, SecondModule,
10788             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10789             FirstDiffType == TypeAlias);
10790         break;
10791       }
10792       case Var: {
10793         Diagnosed =
10794             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10795                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10796         break;
10797       }
10798       case Friend: {
10799         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10800         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10801 
10802         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10803         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10804 
10805         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10806         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10807 
10808         if (FirstND && SecondND) {
10809           ODRDiagDeclError(FirstRecord, FirstModule,
10810                            FirstFriend->getFriendLoc(),
10811                            FirstFriend->getSourceRange(), FriendFunction)
10812               << FirstND;
10813           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10814                           SecondFriend->getSourceRange(), FriendFunction)
10815               << SecondND;
10816 
10817           Diagnosed = true;
10818           break;
10819         }
10820 
10821         if (FirstTSI && SecondTSI) {
10822           QualType FirstFriendType = FirstTSI->getType();
10823           QualType SecondFriendType = SecondTSI->getType();
10824           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10825                  ComputeQualTypeODRHash(SecondFriendType));
10826           ODRDiagDeclError(FirstRecord, FirstModule,
10827                            FirstFriend->getFriendLoc(),
10828                            FirstFriend->getSourceRange(), FriendType)
10829               << FirstFriendType;
10830           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10831                           SecondFriend->getSourceRange(), FriendType)
10832               << SecondFriendType;
10833           Diagnosed = true;
10834           break;
10835         }
10836 
10837         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10838                          FirstFriend->getSourceRange(), FriendTypeFunction)
10839             << (FirstTSI == nullptr);
10840         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10841                         SecondFriend->getSourceRange(), FriendTypeFunction)
10842             << (SecondTSI == nullptr);
10843 
10844         Diagnosed = true;
10845         break;
10846       }
10847       case FunctionTemplate: {
10848         FunctionTemplateDecl *FirstTemplate =
10849             cast<FunctionTemplateDecl>(FirstDecl);
10850         FunctionTemplateDecl *SecondTemplate =
10851             cast<FunctionTemplateDecl>(SecondDecl);
10852 
10853         TemplateParameterList *FirstTPL =
10854             FirstTemplate->getTemplateParameters();
10855         TemplateParameterList *SecondTPL =
10856             SecondTemplate->getTemplateParameters();
10857 
10858         if (FirstTPL->size() != SecondTPL->size()) {
10859           ODRDiagDeclError(FirstRecord, FirstModule,
10860                            FirstTemplate->getLocation(),
10861                            FirstTemplate->getSourceRange(),
10862                            FunctionTemplateDifferentNumberParameters)
10863               << FirstTemplate << FirstTPL->size();
10864           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10865                           SecondTemplate->getSourceRange(),
10866                           FunctionTemplateDifferentNumberParameters)
10867               << SecondTemplate << SecondTPL->size();
10868 
10869           Diagnosed = true;
10870           break;
10871         }
10872 
10873         bool ParameterMismatch = false;
10874         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10875           NamedDecl *FirstParam = FirstTPL->getParam(i);
10876           NamedDecl *SecondParam = SecondTPL->getParam(i);
10877 
10878           if (FirstParam->getKind() != SecondParam->getKind()) {
10879             enum {
10880               TemplateTypeParameter,
10881               NonTypeTemplateParameter,
10882               TemplateTemplateParameter,
10883             };
10884             auto GetParamType = [](NamedDecl *D) {
10885               switch (D->getKind()) {
10886                 default:
10887                   llvm_unreachable("Unexpected template parameter type");
10888                 case Decl::TemplateTypeParm:
10889                   return TemplateTypeParameter;
10890                 case Decl::NonTypeTemplateParm:
10891                   return NonTypeTemplateParameter;
10892                 case Decl::TemplateTemplateParm:
10893                   return TemplateTemplateParameter;
10894               }
10895             };
10896 
10897             ODRDiagDeclError(FirstRecord, FirstModule,
10898                              FirstTemplate->getLocation(),
10899                              FirstTemplate->getSourceRange(),
10900                              FunctionTemplateParameterDifferentKind)
10901                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10902             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10903                             SecondTemplate->getSourceRange(),
10904                             FunctionTemplateParameterDifferentKind)
10905                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10906 
10907             ParameterMismatch = true;
10908             break;
10909           }
10910 
10911           if (FirstParam->getName() != SecondParam->getName()) {
10912             ODRDiagDeclError(
10913                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10914                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10915                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10916                 << FirstParam;
10917             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10918                             SecondTemplate->getSourceRange(),
10919                             FunctionTemplateParameterName)
10920                 << SecondTemplate << (i + 1)
10921                 << (bool)SecondParam->getIdentifier() << SecondParam;
10922             ParameterMismatch = true;
10923             break;
10924           }
10925 
10926           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10927               isa<TemplateTypeParmDecl>(SecondParam)) {
10928             TemplateTypeParmDecl *FirstTTPD =
10929                 cast<TemplateTypeParmDecl>(FirstParam);
10930             TemplateTypeParmDecl *SecondTTPD =
10931                 cast<TemplateTypeParmDecl>(SecondParam);
10932             bool HasFirstDefaultArgument =
10933                 FirstTTPD->hasDefaultArgument() &&
10934                 !FirstTTPD->defaultArgumentWasInherited();
10935             bool HasSecondDefaultArgument =
10936                 SecondTTPD->hasDefaultArgument() &&
10937                 !SecondTTPD->defaultArgumentWasInherited();
10938             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10939               ODRDiagDeclError(FirstRecord, FirstModule,
10940                                FirstTemplate->getLocation(),
10941                                FirstTemplate->getSourceRange(),
10942                                FunctionTemplateParameterSingleDefaultArgument)
10943                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10944               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10945                               SecondTemplate->getSourceRange(),
10946                               FunctionTemplateParameterSingleDefaultArgument)
10947                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10948               ParameterMismatch = true;
10949               break;
10950             }
10951 
10952             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10953               QualType FirstType = FirstTTPD->getDefaultArgument();
10954               QualType SecondType = SecondTTPD->getDefaultArgument();
10955               if (ComputeQualTypeODRHash(FirstType) !=
10956                   ComputeQualTypeODRHash(SecondType)) {
10957                 ODRDiagDeclError(
10958                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10959                     FirstTemplate->getSourceRange(),
10960                     FunctionTemplateParameterDifferentDefaultArgument)
10961                     << FirstTemplate << (i + 1) << FirstType;
10962                 ODRDiagDeclNote(
10963                     SecondModule, SecondTemplate->getLocation(),
10964                     SecondTemplate->getSourceRange(),
10965                     FunctionTemplateParameterDifferentDefaultArgument)
10966                     << SecondTemplate << (i + 1) << SecondType;
10967                 ParameterMismatch = true;
10968                 break;
10969               }
10970             }
10971 
10972             if (FirstTTPD->isParameterPack() !=
10973                 SecondTTPD->isParameterPack()) {
10974               ODRDiagDeclError(FirstRecord, FirstModule,
10975                                FirstTemplate->getLocation(),
10976                                FirstTemplate->getSourceRange(),
10977                                FunctionTemplatePackParameter)
10978                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10979               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10980                               SecondTemplate->getSourceRange(),
10981                               FunctionTemplatePackParameter)
10982                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10983               ParameterMismatch = true;
10984               break;
10985             }
10986           }
10987 
10988           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
10989               isa<TemplateTemplateParmDecl>(SecondParam)) {
10990             TemplateTemplateParmDecl *FirstTTPD =
10991                 cast<TemplateTemplateParmDecl>(FirstParam);
10992             TemplateTemplateParmDecl *SecondTTPD =
10993                 cast<TemplateTemplateParmDecl>(SecondParam);
10994 
10995             TemplateParameterList *FirstTPL =
10996                 FirstTTPD->getTemplateParameters();
10997             TemplateParameterList *SecondTPL =
10998                 SecondTTPD->getTemplateParameters();
10999 
11000             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11001                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11002               ODRDiagDeclError(FirstRecord, FirstModule,
11003                                FirstTemplate->getLocation(),
11004                                FirstTemplate->getSourceRange(),
11005                                FunctionTemplateParameterDifferentType)
11006                   << FirstTemplate << (i + 1);
11007               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11008                               SecondTemplate->getSourceRange(),
11009                               FunctionTemplateParameterDifferentType)
11010                   << SecondTemplate << (i + 1);
11011               ParameterMismatch = true;
11012               break;
11013             }
11014 
11015             bool HasFirstDefaultArgument =
11016                 FirstTTPD->hasDefaultArgument() &&
11017                 !FirstTTPD->defaultArgumentWasInherited();
11018             bool HasSecondDefaultArgument =
11019                 SecondTTPD->hasDefaultArgument() &&
11020                 !SecondTTPD->defaultArgumentWasInherited();
11021             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11022               ODRDiagDeclError(FirstRecord, FirstModule,
11023                                FirstTemplate->getLocation(),
11024                                FirstTemplate->getSourceRange(),
11025                                FunctionTemplateParameterSingleDefaultArgument)
11026                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11027               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11028                               SecondTemplate->getSourceRange(),
11029                               FunctionTemplateParameterSingleDefaultArgument)
11030                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11031               ParameterMismatch = true;
11032               break;
11033             }
11034 
11035             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11036               TemplateArgument FirstTA =
11037                   FirstTTPD->getDefaultArgument().getArgument();
11038               TemplateArgument SecondTA =
11039                   SecondTTPD->getDefaultArgument().getArgument();
11040               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11041                   ComputeTemplateArgumentODRHash(SecondTA)) {
11042                 ODRDiagDeclError(
11043                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11044                     FirstTemplate->getSourceRange(),
11045                     FunctionTemplateParameterDifferentDefaultArgument)
11046                     << FirstTemplate << (i + 1) << FirstTA;
11047                 ODRDiagDeclNote(
11048                     SecondModule, SecondTemplate->getLocation(),
11049                     SecondTemplate->getSourceRange(),
11050                     FunctionTemplateParameterDifferentDefaultArgument)
11051                     << SecondTemplate << (i + 1) << SecondTA;
11052                 ParameterMismatch = true;
11053                 break;
11054               }
11055             }
11056 
11057             if (FirstTTPD->isParameterPack() !=
11058                 SecondTTPD->isParameterPack()) {
11059               ODRDiagDeclError(FirstRecord, FirstModule,
11060                                FirstTemplate->getLocation(),
11061                                FirstTemplate->getSourceRange(),
11062                                FunctionTemplatePackParameter)
11063                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11064               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11065                               SecondTemplate->getSourceRange(),
11066                               FunctionTemplatePackParameter)
11067                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11068               ParameterMismatch = true;
11069               break;
11070             }
11071           }
11072 
11073           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11074               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11075             NonTypeTemplateParmDecl *FirstNTTPD =
11076                 cast<NonTypeTemplateParmDecl>(FirstParam);
11077             NonTypeTemplateParmDecl *SecondNTTPD =
11078                 cast<NonTypeTemplateParmDecl>(SecondParam);
11079 
11080             QualType FirstType = FirstNTTPD->getType();
11081             QualType SecondType = SecondNTTPD->getType();
11082             if (ComputeQualTypeODRHash(FirstType) !=
11083                 ComputeQualTypeODRHash(SecondType)) {
11084               ODRDiagDeclError(FirstRecord, FirstModule,
11085                                FirstTemplate->getLocation(),
11086                                FirstTemplate->getSourceRange(),
11087                                FunctionTemplateParameterDifferentType)
11088                   << FirstTemplate << (i + 1);
11089               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11090                               SecondTemplate->getSourceRange(),
11091                               FunctionTemplateParameterDifferentType)
11092                   << SecondTemplate << (i + 1);
11093               ParameterMismatch = true;
11094               break;
11095             }
11096 
11097             bool HasFirstDefaultArgument =
11098                 FirstNTTPD->hasDefaultArgument() &&
11099                 !FirstNTTPD->defaultArgumentWasInherited();
11100             bool HasSecondDefaultArgument =
11101                 SecondNTTPD->hasDefaultArgument() &&
11102                 !SecondNTTPD->defaultArgumentWasInherited();
11103             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11104               ODRDiagDeclError(FirstRecord, FirstModule,
11105                                FirstTemplate->getLocation(),
11106                                FirstTemplate->getSourceRange(),
11107                                FunctionTemplateParameterSingleDefaultArgument)
11108                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11109               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11110                               SecondTemplate->getSourceRange(),
11111                               FunctionTemplateParameterSingleDefaultArgument)
11112                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11113               ParameterMismatch = true;
11114               break;
11115             }
11116 
11117             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11118               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11119               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11120               if (ComputeODRHash(FirstDefaultArgument) !=
11121                   ComputeODRHash(SecondDefaultArgument)) {
11122                 ODRDiagDeclError(
11123                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11124                     FirstTemplate->getSourceRange(),
11125                     FunctionTemplateParameterDifferentDefaultArgument)
11126                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11127                 ODRDiagDeclNote(
11128                     SecondModule, SecondTemplate->getLocation(),
11129                     SecondTemplate->getSourceRange(),
11130                     FunctionTemplateParameterDifferentDefaultArgument)
11131                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11132                 ParameterMismatch = true;
11133                 break;
11134               }
11135             }
11136 
11137             if (FirstNTTPD->isParameterPack() !=
11138                 SecondNTTPD->isParameterPack()) {
11139               ODRDiagDeclError(FirstRecord, FirstModule,
11140                                FirstTemplate->getLocation(),
11141                                FirstTemplate->getSourceRange(),
11142                                FunctionTemplatePackParameter)
11143                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11144               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11145                               SecondTemplate->getSourceRange(),
11146                               FunctionTemplatePackParameter)
11147                   << SecondTemplate << (i + 1)
11148                   << SecondNTTPD->isParameterPack();
11149               ParameterMismatch = true;
11150               break;
11151             }
11152           }
11153         }
11154 
11155         if (ParameterMismatch) {
11156           Diagnosed = true;
11157           break;
11158         }
11159 
11160         break;
11161       }
11162       }
11163 
11164       if (Diagnosed)
11165         continue;
11166 
11167       Diag(FirstDecl->getLocation(),
11168            diag::err_module_odr_violation_mismatch_decl_unknown)
11169           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11170           << FirstDecl->getSourceRange();
11171       Diag(SecondDecl->getLocation(),
11172            diag::note_module_odr_violation_mismatch_decl_unknown)
11173           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11174       Diagnosed = true;
11175     }
11176 
11177     if (!Diagnosed) {
11178       // All definitions are updates to the same declaration. This happens if a
11179       // module instantiates the declaration of a class template specialization
11180       // and two or more other modules instantiate its definition.
11181       //
11182       // FIXME: Indicate which modules had instantiations of this definition.
11183       // FIXME: How can this even happen?
11184       Diag(Merge.first->getLocation(),
11185            diag::err_module_odr_violation_different_instantiations)
11186         << Merge.first;
11187     }
11188   }
11189 
11190   // Issue ODR failures diagnostics for functions.
11191   for (auto &Merge : FunctionOdrMergeFailures) {
11192     enum ODRFunctionDifference {
11193       ReturnType,
11194       ParameterName,
11195       ParameterType,
11196       ParameterSingleDefaultArgument,
11197       ParameterDifferentDefaultArgument,
11198       FunctionBody,
11199     };
11200 
11201     FunctionDecl *FirstFunction = Merge.first;
11202     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11203 
11204     bool Diagnosed = false;
11205     for (auto &SecondFunction : Merge.second) {
11206 
11207       if (FirstFunction == SecondFunction)
11208         continue;
11209 
11210       std::string SecondModule =
11211           getOwningModuleNameForDiagnostic(SecondFunction);
11212 
11213       auto ODRDiagError = [FirstFunction, &FirstModule,
11214                            this](SourceLocation Loc, SourceRange Range,
11215                                  ODRFunctionDifference DiffType) {
11216         return Diag(Loc, diag::err_module_odr_violation_function)
11217                << FirstFunction << FirstModule.empty() << FirstModule << Range
11218                << DiffType;
11219       };
11220       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11221                                                SourceRange Range,
11222                                                ODRFunctionDifference DiffType) {
11223         return Diag(Loc, diag::note_module_odr_violation_function)
11224                << SecondModule << Range << DiffType;
11225       };
11226 
11227       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11228           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11229         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11230                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11231             << FirstFunction->getReturnType();
11232         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11233                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11234             << SecondFunction->getReturnType();
11235         Diagnosed = true;
11236         break;
11237       }
11238 
11239       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11240              "Merged functions with different number of parameters");
11241 
11242       auto ParamSize = FirstFunction->param_size();
11243       bool ParameterMismatch = false;
11244       for (unsigned I = 0; I < ParamSize; ++I) {
11245         auto *FirstParam = FirstFunction->getParamDecl(I);
11246         auto *SecondParam = SecondFunction->getParamDecl(I);
11247 
11248         assert(getContext().hasSameType(FirstParam->getType(),
11249                                       SecondParam->getType()) &&
11250                "Merged function has different parameter types.");
11251 
11252         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11253           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11254                        ParameterName)
11255               << I + 1 << FirstParam->getDeclName();
11256           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11257                       ParameterName)
11258               << I + 1 << SecondParam->getDeclName();
11259           ParameterMismatch = true;
11260           break;
11261         };
11262 
11263         QualType FirstParamType = FirstParam->getType();
11264         QualType SecondParamType = SecondParam->getType();
11265         if (FirstParamType != SecondParamType &&
11266             ComputeQualTypeODRHash(FirstParamType) !=
11267                 ComputeQualTypeODRHash(SecondParamType)) {
11268           if (const DecayedType *ParamDecayedType =
11269                   FirstParamType->getAs<DecayedType>()) {
11270             ODRDiagError(FirstParam->getLocation(),
11271                          FirstParam->getSourceRange(), ParameterType)
11272                 << (I + 1) << FirstParamType << true
11273                 << ParamDecayedType->getOriginalType();
11274           } else {
11275             ODRDiagError(FirstParam->getLocation(),
11276                          FirstParam->getSourceRange(), ParameterType)
11277                 << (I + 1) << FirstParamType << false;
11278           }
11279 
11280           if (const DecayedType *ParamDecayedType =
11281                   SecondParamType->getAs<DecayedType>()) {
11282             ODRDiagNote(SecondParam->getLocation(),
11283                         SecondParam->getSourceRange(), ParameterType)
11284                 << (I + 1) << SecondParamType << true
11285                 << ParamDecayedType->getOriginalType();
11286           } else {
11287             ODRDiagNote(SecondParam->getLocation(),
11288                         SecondParam->getSourceRange(), ParameterType)
11289                 << (I + 1) << SecondParamType << false;
11290           }
11291           ParameterMismatch = true;
11292           break;
11293         }
11294 
11295         const Expr *FirstInit = FirstParam->getInit();
11296         const Expr *SecondInit = SecondParam->getInit();
11297         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11298           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11299                        ParameterSingleDefaultArgument)
11300               << (I + 1) << (FirstInit == nullptr)
11301               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11302           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11303                       ParameterSingleDefaultArgument)
11304               << (I + 1) << (SecondInit == nullptr)
11305               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11306           ParameterMismatch = true;
11307           break;
11308         }
11309 
11310         if (FirstInit && SecondInit &&
11311             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11312           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11313                        ParameterDifferentDefaultArgument)
11314               << (I + 1) << FirstInit->getSourceRange();
11315           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11316                       ParameterDifferentDefaultArgument)
11317               << (I + 1) << SecondInit->getSourceRange();
11318           ParameterMismatch = true;
11319           break;
11320         }
11321 
11322         assert(ComputeSubDeclODRHash(FirstParam) ==
11323                    ComputeSubDeclODRHash(SecondParam) &&
11324                "Undiagnosed parameter difference.");
11325       }
11326 
11327       if (ParameterMismatch) {
11328         Diagnosed = true;
11329         break;
11330       }
11331 
11332       // If no error has been generated before now, assume the problem is in
11333       // the body and generate a message.
11334       ODRDiagError(FirstFunction->getLocation(),
11335                    FirstFunction->getSourceRange(), FunctionBody);
11336       ODRDiagNote(SecondFunction->getLocation(),
11337                   SecondFunction->getSourceRange(), FunctionBody);
11338       Diagnosed = true;
11339       break;
11340     }
11341     (void)Diagnosed;
11342     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11343   }
11344 
11345   // Issue ODR failures diagnostics for enums.
11346   for (auto &Merge : EnumOdrMergeFailures) {
11347     enum ODREnumDifference {
11348       SingleScopedEnum,
11349       EnumTagKeywordMismatch,
11350       SingleSpecifiedType,
11351       DifferentSpecifiedTypes,
11352       DifferentNumberEnumConstants,
11353       EnumConstantName,
11354       EnumConstantSingleInitilizer,
11355       EnumConstantDifferentInitilizer,
11356     };
11357 
11358     // If we've already pointed out a specific problem with this enum, don't
11359     // bother issuing a general "something's different" diagnostic.
11360     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11361       continue;
11362 
11363     EnumDecl *FirstEnum = Merge.first;
11364     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11365 
11366     using DeclHashes =
11367         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11368     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11369                               DeclHashes &Hashes, EnumDecl *Enum) {
11370       for (auto *D : Enum->decls()) {
11371         // Due to decl merging, the first EnumDecl is the parent of
11372         // Decls in both records.
11373         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11374           continue;
11375         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11376         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11377                             ComputeSubDeclODRHash(D));
11378       }
11379     };
11380     DeclHashes FirstHashes;
11381     PopulateHashes(FirstHashes, FirstEnum);
11382     bool Diagnosed = false;
11383     for (auto &SecondEnum : Merge.second) {
11384 
11385       if (FirstEnum == SecondEnum)
11386         continue;
11387 
11388       std::string SecondModule =
11389           getOwningModuleNameForDiagnostic(SecondEnum);
11390 
11391       auto ODRDiagError = [FirstEnum, &FirstModule,
11392                            this](SourceLocation Loc, SourceRange Range,
11393                                  ODREnumDifference DiffType) {
11394         return Diag(Loc, diag::err_module_odr_violation_enum)
11395                << FirstEnum << FirstModule.empty() << FirstModule << Range
11396                << DiffType;
11397       };
11398       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11399                                                SourceRange Range,
11400                                                ODREnumDifference DiffType) {
11401         return Diag(Loc, diag::note_module_odr_violation_enum)
11402                << SecondModule << Range << DiffType;
11403       };
11404 
11405       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11406         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11407                      SingleScopedEnum)
11408             << FirstEnum->isScoped();
11409         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11410                     SingleScopedEnum)
11411             << SecondEnum->isScoped();
11412         Diagnosed = true;
11413         continue;
11414       }
11415 
11416       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11417         if (FirstEnum->isScopedUsingClassTag() !=
11418             SecondEnum->isScopedUsingClassTag()) {
11419           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11420                        EnumTagKeywordMismatch)
11421               << FirstEnum->isScopedUsingClassTag();
11422           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11423                       EnumTagKeywordMismatch)
11424               << SecondEnum->isScopedUsingClassTag();
11425           Diagnosed = true;
11426           continue;
11427         }
11428       }
11429 
11430       QualType FirstUnderlyingType =
11431           FirstEnum->getIntegerTypeSourceInfo()
11432               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11433               : QualType();
11434       QualType SecondUnderlyingType =
11435           SecondEnum->getIntegerTypeSourceInfo()
11436               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11437               : QualType();
11438       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11439           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11440                        SingleSpecifiedType)
11441               << !FirstUnderlyingType.isNull();
11442           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11443                       SingleSpecifiedType)
11444               << !SecondUnderlyingType.isNull();
11445           Diagnosed = true;
11446           continue;
11447       }
11448 
11449       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11450         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11451             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11452           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11453                        DifferentSpecifiedTypes)
11454               << FirstUnderlyingType;
11455           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11456                       DifferentSpecifiedTypes)
11457               << SecondUnderlyingType;
11458           Diagnosed = true;
11459           continue;
11460         }
11461       }
11462 
11463       DeclHashes SecondHashes;
11464       PopulateHashes(SecondHashes, SecondEnum);
11465 
11466       if (FirstHashes.size() != SecondHashes.size()) {
11467         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11468                      DifferentNumberEnumConstants)
11469             << (int)FirstHashes.size();
11470         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11471                     DifferentNumberEnumConstants)
11472             << (int)SecondHashes.size();
11473         Diagnosed = true;
11474         continue;
11475       }
11476 
11477       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11478         if (FirstHashes[I].second == SecondHashes[I].second)
11479           continue;
11480         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11481         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11482 
11483         if (FirstEnumConstant->getDeclName() !=
11484             SecondEnumConstant->getDeclName()) {
11485 
11486           ODRDiagError(FirstEnumConstant->getLocation(),
11487                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11488               << I + 1 << FirstEnumConstant;
11489           ODRDiagNote(SecondEnumConstant->getLocation(),
11490                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11491               << I + 1 << SecondEnumConstant;
11492           Diagnosed = true;
11493           break;
11494         }
11495 
11496         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11497         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11498         if (!FirstInit && !SecondInit)
11499           continue;
11500 
11501         if (!FirstInit || !SecondInit) {
11502           ODRDiagError(FirstEnumConstant->getLocation(),
11503                        FirstEnumConstant->getSourceRange(),
11504                        EnumConstantSingleInitilizer)
11505               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11506           ODRDiagNote(SecondEnumConstant->getLocation(),
11507                       SecondEnumConstant->getSourceRange(),
11508                       EnumConstantSingleInitilizer)
11509               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11510           Diagnosed = true;
11511           break;
11512         }
11513 
11514         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11515           ODRDiagError(FirstEnumConstant->getLocation(),
11516                        FirstEnumConstant->getSourceRange(),
11517                        EnumConstantDifferentInitilizer)
11518               << I + 1 << FirstEnumConstant;
11519           ODRDiagNote(SecondEnumConstant->getLocation(),
11520                       SecondEnumConstant->getSourceRange(),
11521                       EnumConstantDifferentInitilizer)
11522               << I + 1 << SecondEnumConstant;
11523           Diagnosed = true;
11524           break;
11525         }
11526       }
11527     }
11528 
11529     (void)Diagnosed;
11530     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11531   }
11532 }
11533 
11534 void ASTReader::StartedDeserializing() {
11535   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11536     ReadTimer->startTimer();
11537 }
11538 
11539 void ASTReader::FinishedDeserializing() {
11540   assert(NumCurrentElementsDeserializing &&
11541          "FinishedDeserializing not paired with StartedDeserializing");
11542   if (NumCurrentElementsDeserializing == 1) {
11543     // We decrease NumCurrentElementsDeserializing only after pending actions
11544     // are finished, to avoid recursively re-calling finishPendingActions().
11545     finishPendingActions();
11546   }
11547   --NumCurrentElementsDeserializing;
11548 
11549   if (NumCurrentElementsDeserializing == 0) {
11550     // Propagate exception specification and deduced type updates along
11551     // redeclaration chains.
11552     //
11553     // We do this now rather than in finishPendingActions because we want to
11554     // be able to walk the complete redeclaration chains of the updated decls.
11555     while (!PendingExceptionSpecUpdates.empty() ||
11556            !PendingDeducedTypeUpdates.empty()) {
11557       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11558       PendingExceptionSpecUpdates.clear();
11559       for (auto Update : ESUpdates) {
11560         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11561         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11562         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11563         if (auto *Listener = getContext().getASTMutationListener())
11564           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11565         for (auto *Redecl : Update.second->redecls())
11566           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11567       }
11568 
11569       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11570       PendingDeducedTypeUpdates.clear();
11571       for (auto Update : DTUpdates) {
11572         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11573         // FIXME: If the return type is already deduced, check that it matches.
11574         getContext().adjustDeducedFunctionResultType(Update.first,
11575                                                      Update.second);
11576       }
11577     }
11578 
11579     if (ReadTimer)
11580       ReadTimer->stopTimer();
11581 
11582     diagnoseOdrViolations();
11583 
11584     // We are not in recursive loading, so it's safe to pass the "interesting"
11585     // decls to the consumer.
11586     if (Consumer)
11587       PassInterestingDeclsToConsumer();
11588   }
11589 }
11590 
11591 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11592   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11593     // Remove any fake results before adding any real ones.
11594     auto It = PendingFakeLookupResults.find(II);
11595     if (It != PendingFakeLookupResults.end()) {
11596       for (auto *ND : It->second)
11597         SemaObj->IdResolver.RemoveDecl(ND);
11598       // FIXME: this works around module+PCH performance issue.
11599       // Rather than erase the result from the map, which is O(n), just clear
11600       // the vector of NamedDecls.
11601       It->second.clear();
11602     }
11603   }
11604 
11605   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11606     SemaObj->TUScope->AddDecl(D);
11607   } else if (SemaObj->TUScope) {
11608     // Adding the decl to IdResolver may have failed because it was already in
11609     // (even though it was not added in scope). If it is already in, make sure
11610     // it gets in the scope as well.
11611     if (std::find(SemaObj->IdResolver.begin(Name),
11612                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11613       SemaObj->TUScope->AddDecl(D);
11614   }
11615 }
11616 
11617 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11618                      ASTContext *Context,
11619                      const PCHContainerReader &PCHContainerRdr,
11620                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11621                      StringRef isysroot,
11622                      DisableValidationForModuleKind DisableValidationKind,
11623                      bool AllowASTWithCompilerErrors,
11624                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11625                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11626                      std::unique_ptr<llvm::Timer> ReadTimer)
11627     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11628                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11629                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11630       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11631       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11632       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11633                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11634       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11635       DisableValidationKind(DisableValidationKind),
11636       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11637       AllowConfigurationMismatch(AllowConfigurationMismatch),
11638       ValidateSystemInputs(ValidateSystemInputs),
11639       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11640       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11641   SourceMgr.setExternalSLocEntrySource(this);
11642 
11643   for (const auto &Ext : Extensions) {
11644     auto BlockName = Ext->getExtensionMetadata().BlockName;
11645     auto Known = ModuleFileExtensions.find(BlockName);
11646     if (Known != ModuleFileExtensions.end()) {
11647       Diags.Report(diag::warn_duplicate_module_file_extension)
11648         << BlockName;
11649       continue;
11650     }
11651 
11652     ModuleFileExtensions.insert({BlockName, Ext});
11653   }
11654 }
11655 
11656 ASTReader::~ASTReader() {
11657   if (OwnsDeserializationListener)
11658     delete DeserializationListener;
11659 }
11660 
11661 IdentifierResolver &ASTReader::getIdResolver() {
11662   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11663 }
11664 
11665 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11666                                                unsigned AbbrevID) {
11667   Idx = 0;
11668   Record.clear();
11669   return Cursor.readRecord(AbbrevID, Record);
11670 }
11671 //===----------------------------------------------------------------------===//
11672 //// OMPClauseReader implementation
11673 ////===----------------------------------------------------------------------===//
11674 
11675 // This has to be in namespace clang because it's friended by all
11676 // of the OMP clauses.
11677 namespace clang {
11678 
11679 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11680   ASTRecordReader &Record;
11681   ASTContext &Context;
11682 
11683 public:
11684   OMPClauseReader(ASTRecordReader &Record)
11685       : Record(Record), Context(Record.getContext()) {}
11686 #define GEN_CLANG_CLAUSE_CLASS
11687 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11688 #include "llvm/Frontend/OpenMP/OMP.inc"
11689   OMPClause *readClause();
11690   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11691   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11692 };
11693 
11694 } // end namespace clang
11695 
11696 OMPClause *ASTRecordReader::readOMPClause() {
11697   return OMPClauseReader(*this).readClause();
11698 }
11699 
11700 OMPClause *OMPClauseReader::readClause() {
11701   OMPClause *C = nullptr;
11702   switch (llvm::omp::Clause(Record.readInt())) {
11703   case llvm::omp::OMPC_if:
11704     C = new (Context) OMPIfClause();
11705     break;
11706   case llvm::omp::OMPC_final:
11707     C = new (Context) OMPFinalClause();
11708     break;
11709   case llvm::omp::OMPC_num_threads:
11710     C = new (Context) OMPNumThreadsClause();
11711     break;
11712   case llvm::omp::OMPC_safelen:
11713     C = new (Context) OMPSafelenClause();
11714     break;
11715   case llvm::omp::OMPC_simdlen:
11716     C = new (Context) OMPSimdlenClause();
11717     break;
11718   case llvm::omp::OMPC_sizes: {
11719     unsigned NumSizes = Record.readInt();
11720     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11721     break;
11722   }
11723   case llvm::omp::OMPC_full:
11724     C = OMPFullClause::CreateEmpty(Context);
11725     break;
11726   case llvm::omp::OMPC_partial:
11727     C = OMPPartialClause::CreateEmpty(Context);
11728     break;
11729   case llvm::omp::OMPC_allocator:
11730     C = new (Context) OMPAllocatorClause();
11731     break;
11732   case llvm::omp::OMPC_collapse:
11733     C = new (Context) OMPCollapseClause();
11734     break;
11735   case llvm::omp::OMPC_default:
11736     C = new (Context) OMPDefaultClause();
11737     break;
11738   case llvm::omp::OMPC_proc_bind:
11739     C = new (Context) OMPProcBindClause();
11740     break;
11741   case llvm::omp::OMPC_schedule:
11742     C = new (Context) OMPScheduleClause();
11743     break;
11744   case llvm::omp::OMPC_ordered:
11745     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11746     break;
11747   case llvm::omp::OMPC_nowait:
11748     C = new (Context) OMPNowaitClause();
11749     break;
11750   case llvm::omp::OMPC_untied:
11751     C = new (Context) OMPUntiedClause();
11752     break;
11753   case llvm::omp::OMPC_mergeable:
11754     C = new (Context) OMPMergeableClause();
11755     break;
11756   case llvm::omp::OMPC_read:
11757     C = new (Context) OMPReadClause();
11758     break;
11759   case llvm::omp::OMPC_write:
11760     C = new (Context) OMPWriteClause();
11761     break;
11762   case llvm::omp::OMPC_update:
11763     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11764     break;
11765   case llvm::omp::OMPC_capture:
11766     C = new (Context) OMPCaptureClause();
11767     break;
11768   case llvm::omp::OMPC_compare:
11769     C = new (Context) OMPCompareClause();
11770     break;
11771   case llvm::omp::OMPC_seq_cst:
11772     C = new (Context) OMPSeqCstClause();
11773     break;
11774   case llvm::omp::OMPC_acq_rel:
11775     C = new (Context) OMPAcqRelClause();
11776     break;
11777   case llvm::omp::OMPC_acquire:
11778     C = new (Context) OMPAcquireClause();
11779     break;
11780   case llvm::omp::OMPC_release:
11781     C = new (Context) OMPReleaseClause();
11782     break;
11783   case llvm::omp::OMPC_relaxed:
11784     C = new (Context) OMPRelaxedClause();
11785     break;
11786   case llvm::omp::OMPC_threads:
11787     C = new (Context) OMPThreadsClause();
11788     break;
11789   case llvm::omp::OMPC_simd:
11790     C = new (Context) OMPSIMDClause();
11791     break;
11792   case llvm::omp::OMPC_nogroup:
11793     C = new (Context) OMPNogroupClause();
11794     break;
11795   case llvm::omp::OMPC_unified_address:
11796     C = new (Context) OMPUnifiedAddressClause();
11797     break;
11798   case llvm::omp::OMPC_unified_shared_memory:
11799     C = new (Context) OMPUnifiedSharedMemoryClause();
11800     break;
11801   case llvm::omp::OMPC_reverse_offload:
11802     C = new (Context) OMPReverseOffloadClause();
11803     break;
11804   case llvm::omp::OMPC_dynamic_allocators:
11805     C = new (Context) OMPDynamicAllocatorsClause();
11806     break;
11807   case llvm::omp::OMPC_atomic_default_mem_order:
11808     C = new (Context) OMPAtomicDefaultMemOrderClause();
11809     break;
11810  case llvm::omp::OMPC_private:
11811     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11812     break;
11813   case llvm::omp::OMPC_firstprivate:
11814     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11815     break;
11816   case llvm::omp::OMPC_lastprivate:
11817     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11818     break;
11819   case llvm::omp::OMPC_shared:
11820     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11821     break;
11822   case llvm::omp::OMPC_reduction: {
11823     unsigned N = Record.readInt();
11824     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11825     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11826     break;
11827   }
11828   case llvm::omp::OMPC_task_reduction:
11829     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11830     break;
11831   case llvm::omp::OMPC_in_reduction:
11832     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11833     break;
11834   case llvm::omp::OMPC_linear:
11835     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11836     break;
11837   case llvm::omp::OMPC_aligned:
11838     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11839     break;
11840   case llvm::omp::OMPC_copyin:
11841     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11842     break;
11843   case llvm::omp::OMPC_copyprivate:
11844     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11845     break;
11846   case llvm::omp::OMPC_flush:
11847     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11848     break;
11849   case llvm::omp::OMPC_depobj:
11850     C = OMPDepobjClause::CreateEmpty(Context);
11851     break;
11852   case llvm::omp::OMPC_depend: {
11853     unsigned NumVars = Record.readInt();
11854     unsigned NumLoops = Record.readInt();
11855     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11856     break;
11857   }
11858   case llvm::omp::OMPC_device:
11859     C = new (Context) OMPDeviceClause();
11860     break;
11861   case llvm::omp::OMPC_map: {
11862     OMPMappableExprListSizeTy Sizes;
11863     Sizes.NumVars = Record.readInt();
11864     Sizes.NumUniqueDeclarations = Record.readInt();
11865     Sizes.NumComponentLists = Record.readInt();
11866     Sizes.NumComponents = Record.readInt();
11867     C = OMPMapClause::CreateEmpty(Context, Sizes);
11868     break;
11869   }
11870   case llvm::omp::OMPC_num_teams:
11871     C = new (Context) OMPNumTeamsClause();
11872     break;
11873   case llvm::omp::OMPC_thread_limit:
11874     C = new (Context) OMPThreadLimitClause();
11875     break;
11876   case llvm::omp::OMPC_priority:
11877     C = new (Context) OMPPriorityClause();
11878     break;
11879   case llvm::omp::OMPC_grainsize:
11880     C = new (Context) OMPGrainsizeClause();
11881     break;
11882   case llvm::omp::OMPC_num_tasks:
11883     C = new (Context) OMPNumTasksClause();
11884     break;
11885   case llvm::omp::OMPC_hint:
11886     C = new (Context) OMPHintClause();
11887     break;
11888   case llvm::omp::OMPC_dist_schedule:
11889     C = new (Context) OMPDistScheduleClause();
11890     break;
11891   case llvm::omp::OMPC_defaultmap:
11892     C = new (Context) OMPDefaultmapClause();
11893     break;
11894   case llvm::omp::OMPC_to: {
11895     OMPMappableExprListSizeTy Sizes;
11896     Sizes.NumVars = Record.readInt();
11897     Sizes.NumUniqueDeclarations = Record.readInt();
11898     Sizes.NumComponentLists = Record.readInt();
11899     Sizes.NumComponents = Record.readInt();
11900     C = OMPToClause::CreateEmpty(Context, Sizes);
11901     break;
11902   }
11903   case llvm::omp::OMPC_from: {
11904     OMPMappableExprListSizeTy Sizes;
11905     Sizes.NumVars = Record.readInt();
11906     Sizes.NumUniqueDeclarations = Record.readInt();
11907     Sizes.NumComponentLists = Record.readInt();
11908     Sizes.NumComponents = Record.readInt();
11909     C = OMPFromClause::CreateEmpty(Context, Sizes);
11910     break;
11911   }
11912   case llvm::omp::OMPC_use_device_ptr: {
11913     OMPMappableExprListSizeTy Sizes;
11914     Sizes.NumVars = Record.readInt();
11915     Sizes.NumUniqueDeclarations = Record.readInt();
11916     Sizes.NumComponentLists = Record.readInt();
11917     Sizes.NumComponents = Record.readInt();
11918     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11919     break;
11920   }
11921   case llvm::omp::OMPC_use_device_addr: {
11922     OMPMappableExprListSizeTy Sizes;
11923     Sizes.NumVars = Record.readInt();
11924     Sizes.NumUniqueDeclarations = Record.readInt();
11925     Sizes.NumComponentLists = Record.readInt();
11926     Sizes.NumComponents = Record.readInt();
11927     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11928     break;
11929   }
11930   case llvm::omp::OMPC_is_device_ptr: {
11931     OMPMappableExprListSizeTy Sizes;
11932     Sizes.NumVars = Record.readInt();
11933     Sizes.NumUniqueDeclarations = Record.readInt();
11934     Sizes.NumComponentLists = Record.readInt();
11935     Sizes.NumComponents = Record.readInt();
11936     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11937     break;
11938   }
11939   case llvm::omp::OMPC_allocate:
11940     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11941     break;
11942   case llvm::omp::OMPC_nontemporal:
11943     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11944     break;
11945   case llvm::omp::OMPC_inclusive:
11946     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11947     break;
11948   case llvm::omp::OMPC_exclusive:
11949     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11950     break;
11951   case llvm::omp::OMPC_order:
11952     C = new (Context) OMPOrderClause();
11953     break;
11954   case llvm::omp::OMPC_init:
11955     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11956     break;
11957   case llvm::omp::OMPC_use:
11958     C = new (Context) OMPUseClause();
11959     break;
11960   case llvm::omp::OMPC_destroy:
11961     C = new (Context) OMPDestroyClause();
11962     break;
11963   case llvm::omp::OMPC_novariants:
11964     C = new (Context) OMPNovariantsClause();
11965     break;
11966   case llvm::omp::OMPC_nocontext:
11967     C = new (Context) OMPNocontextClause();
11968     break;
11969   case llvm::omp::OMPC_detach:
11970     C = new (Context) OMPDetachClause();
11971     break;
11972   case llvm::omp::OMPC_uses_allocators:
11973     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11974     break;
11975   case llvm::omp::OMPC_affinity:
11976     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11977     break;
11978   case llvm::omp::OMPC_filter:
11979     C = new (Context) OMPFilterClause();
11980     break;
11981   case llvm::omp::OMPC_bind:
11982     C = OMPBindClause::CreateEmpty(Context);
11983     break;
11984   case llvm::omp::OMPC_align:
11985     C = new (Context) OMPAlignClause();
11986     break;
11987 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11988   case llvm::omp::Enum:                                                        \
11989     break;
11990 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11991   default:
11992     break;
11993   }
11994   assert(C && "Unknown OMPClause type");
11995 
11996   Visit(C);
11997   C->setLocStart(Record.readSourceLocation());
11998   C->setLocEnd(Record.readSourceLocation());
11999 
12000   return C;
12001 }
12002 
12003 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12004   C->setPreInitStmt(Record.readSubStmt(),
12005                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12006 }
12007 
12008 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12009   VisitOMPClauseWithPreInit(C);
12010   C->setPostUpdateExpr(Record.readSubExpr());
12011 }
12012 
12013 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12014   VisitOMPClauseWithPreInit(C);
12015   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12016   C->setNameModifierLoc(Record.readSourceLocation());
12017   C->setColonLoc(Record.readSourceLocation());
12018   C->setCondition(Record.readSubExpr());
12019   C->setLParenLoc(Record.readSourceLocation());
12020 }
12021 
12022 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12023   VisitOMPClauseWithPreInit(C);
12024   C->setCondition(Record.readSubExpr());
12025   C->setLParenLoc(Record.readSourceLocation());
12026 }
12027 
12028 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12029   VisitOMPClauseWithPreInit(C);
12030   C->setNumThreads(Record.readSubExpr());
12031   C->setLParenLoc(Record.readSourceLocation());
12032 }
12033 
12034 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12035   C->setSafelen(Record.readSubExpr());
12036   C->setLParenLoc(Record.readSourceLocation());
12037 }
12038 
12039 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12040   C->setSimdlen(Record.readSubExpr());
12041   C->setLParenLoc(Record.readSourceLocation());
12042 }
12043 
12044 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12045   for (Expr *&E : C->getSizesRefs())
12046     E = Record.readSubExpr();
12047   C->setLParenLoc(Record.readSourceLocation());
12048 }
12049 
12050 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12051 
12052 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12053   C->setFactor(Record.readSubExpr());
12054   C->setLParenLoc(Record.readSourceLocation());
12055 }
12056 
12057 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12058   C->setAllocator(Record.readExpr());
12059   C->setLParenLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12063   C->setNumForLoops(Record.readSubExpr());
12064   C->setLParenLoc(Record.readSourceLocation());
12065 }
12066 
12067 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12068   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12069   C->setLParenLoc(Record.readSourceLocation());
12070   C->setDefaultKindKwLoc(Record.readSourceLocation());
12071 }
12072 
12073 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12074   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12075   C->setLParenLoc(Record.readSourceLocation());
12076   C->setProcBindKindKwLoc(Record.readSourceLocation());
12077 }
12078 
12079 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12080   VisitOMPClauseWithPreInit(C);
12081   C->setScheduleKind(
12082        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12083   C->setFirstScheduleModifier(
12084       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12085   C->setSecondScheduleModifier(
12086       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12087   C->setChunkSize(Record.readSubExpr());
12088   C->setLParenLoc(Record.readSourceLocation());
12089   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12090   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12091   C->setScheduleKindLoc(Record.readSourceLocation());
12092   C->setCommaLoc(Record.readSourceLocation());
12093 }
12094 
12095 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12096   C->setNumForLoops(Record.readSubExpr());
12097   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12098     C->setLoopNumIterations(I, Record.readSubExpr());
12099   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12100     C->setLoopCounter(I, Record.readSubExpr());
12101   C->setLParenLoc(Record.readSourceLocation());
12102 }
12103 
12104 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12105   C->setEventHandler(Record.readSubExpr());
12106   C->setLParenLoc(Record.readSourceLocation());
12107 }
12108 
12109 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12110 
12111 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12112 
12113 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12114 
12115 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12116 
12117 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12118 
12119 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12120   if (C->isExtended()) {
12121     C->setLParenLoc(Record.readSourceLocation());
12122     C->setArgumentLoc(Record.readSourceLocation());
12123     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12124   }
12125 }
12126 
12127 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12128 
12129 void OMPClauseReader::VisitOMPCompareClause(OMPCompareClause *) {}
12130 
12131 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12132 
12133 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12134 
12135 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12136 
12137 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12138 
12139 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12140 
12141 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12142 
12143 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12144 
12145 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12146 
12147 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12148   unsigned NumVars = C->varlist_size();
12149   SmallVector<Expr *, 16> Vars;
12150   Vars.reserve(NumVars);
12151   for (unsigned I = 0; I != NumVars; ++I)
12152     Vars.push_back(Record.readSubExpr());
12153   C->setVarRefs(Vars);
12154   C->setIsTarget(Record.readBool());
12155   C->setIsTargetSync(Record.readBool());
12156   C->setLParenLoc(Record.readSourceLocation());
12157   C->setVarLoc(Record.readSourceLocation());
12158 }
12159 
12160 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12161   C->setInteropVar(Record.readSubExpr());
12162   C->setLParenLoc(Record.readSourceLocation());
12163   C->setVarLoc(Record.readSourceLocation());
12164 }
12165 
12166 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12167   C->setInteropVar(Record.readSubExpr());
12168   C->setLParenLoc(Record.readSourceLocation());
12169   C->setVarLoc(Record.readSourceLocation());
12170 }
12171 
12172 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12173   VisitOMPClauseWithPreInit(C);
12174   C->setCondition(Record.readSubExpr());
12175   C->setLParenLoc(Record.readSourceLocation());
12176 }
12177 
12178 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12179   VisitOMPClauseWithPreInit(C);
12180   C->setCondition(Record.readSubExpr());
12181   C->setLParenLoc(Record.readSourceLocation());
12182 }
12183 
12184 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12185 
12186 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12187     OMPUnifiedSharedMemoryClause *) {}
12188 
12189 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12190 
12191 void
12192 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12193 }
12194 
12195 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12196     OMPAtomicDefaultMemOrderClause *C) {
12197   C->setAtomicDefaultMemOrderKind(
12198       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12199   C->setLParenLoc(Record.readSourceLocation());
12200   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12201 }
12202 
12203 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12204   C->setLParenLoc(Record.readSourceLocation());
12205   unsigned NumVars = C->varlist_size();
12206   SmallVector<Expr *, 16> Vars;
12207   Vars.reserve(NumVars);
12208   for (unsigned i = 0; i != NumVars; ++i)
12209     Vars.push_back(Record.readSubExpr());
12210   C->setVarRefs(Vars);
12211   Vars.clear();
12212   for (unsigned i = 0; i != NumVars; ++i)
12213     Vars.push_back(Record.readSubExpr());
12214   C->setPrivateCopies(Vars);
12215 }
12216 
12217 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12218   VisitOMPClauseWithPreInit(C);
12219   C->setLParenLoc(Record.readSourceLocation());
12220   unsigned NumVars = C->varlist_size();
12221   SmallVector<Expr *, 16> Vars;
12222   Vars.reserve(NumVars);
12223   for (unsigned i = 0; i != NumVars; ++i)
12224     Vars.push_back(Record.readSubExpr());
12225   C->setVarRefs(Vars);
12226   Vars.clear();
12227   for (unsigned i = 0; i != NumVars; ++i)
12228     Vars.push_back(Record.readSubExpr());
12229   C->setPrivateCopies(Vars);
12230   Vars.clear();
12231   for (unsigned i = 0; i != NumVars; ++i)
12232     Vars.push_back(Record.readSubExpr());
12233   C->setInits(Vars);
12234 }
12235 
12236 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12237   VisitOMPClauseWithPostUpdate(C);
12238   C->setLParenLoc(Record.readSourceLocation());
12239   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12240   C->setKindLoc(Record.readSourceLocation());
12241   C->setColonLoc(Record.readSourceLocation());
12242   unsigned NumVars = C->varlist_size();
12243   SmallVector<Expr *, 16> Vars;
12244   Vars.reserve(NumVars);
12245   for (unsigned i = 0; i != NumVars; ++i)
12246     Vars.push_back(Record.readSubExpr());
12247   C->setVarRefs(Vars);
12248   Vars.clear();
12249   for (unsigned i = 0; i != NumVars; ++i)
12250     Vars.push_back(Record.readSubExpr());
12251   C->setPrivateCopies(Vars);
12252   Vars.clear();
12253   for (unsigned i = 0; i != NumVars; ++i)
12254     Vars.push_back(Record.readSubExpr());
12255   C->setSourceExprs(Vars);
12256   Vars.clear();
12257   for (unsigned i = 0; i != NumVars; ++i)
12258     Vars.push_back(Record.readSubExpr());
12259   C->setDestinationExprs(Vars);
12260   Vars.clear();
12261   for (unsigned i = 0; i != NumVars; ++i)
12262     Vars.push_back(Record.readSubExpr());
12263   C->setAssignmentOps(Vars);
12264 }
12265 
12266 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12267   C->setLParenLoc(Record.readSourceLocation());
12268   unsigned NumVars = C->varlist_size();
12269   SmallVector<Expr *, 16> Vars;
12270   Vars.reserve(NumVars);
12271   for (unsigned i = 0; i != NumVars; ++i)
12272     Vars.push_back(Record.readSubExpr());
12273   C->setVarRefs(Vars);
12274 }
12275 
12276 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12277   VisitOMPClauseWithPostUpdate(C);
12278   C->setLParenLoc(Record.readSourceLocation());
12279   C->setModifierLoc(Record.readSourceLocation());
12280   C->setColonLoc(Record.readSourceLocation());
12281   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12282   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12283   C->setQualifierLoc(NNSL);
12284   C->setNameInfo(DNI);
12285 
12286   unsigned NumVars = C->varlist_size();
12287   SmallVector<Expr *, 16> Vars;
12288   Vars.reserve(NumVars);
12289   for (unsigned i = 0; i != NumVars; ++i)
12290     Vars.push_back(Record.readSubExpr());
12291   C->setVarRefs(Vars);
12292   Vars.clear();
12293   for (unsigned i = 0; i != NumVars; ++i)
12294     Vars.push_back(Record.readSubExpr());
12295   C->setPrivates(Vars);
12296   Vars.clear();
12297   for (unsigned i = 0; i != NumVars; ++i)
12298     Vars.push_back(Record.readSubExpr());
12299   C->setLHSExprs(Vars);
12300   Vars.clear();
12301   for (unsigned i = 0; i != NumVars; ++i)
12302     Vars.push_back(Record.readSubExpr());
12303   C->setRHSExprs(Vars);
12304   Vars.clear();
12305   for (unsigned i = 0; i != NumVars; ++i)
12306     Vars.push_back(Record.readSubExpr());
12307   C->setReductionOps(Vars);
12308   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12309     Vars.clear();
12310     for (unsigned i = 0; i != NumVars; ++i)
12311       Vars.push_back(Record.readSubExpr());
12312     C->setInscanCopyOps(Vars);
12313     Vars.clear();
12314     for (unsigned i = 0; i != NumVars; ++i)
12315       Vars.push_back(Record.readSubExpr());
12316     C->setInscanCopyArrayTemps(Vars);
12317     Vars.clear();
12318     for (unsigned i = 0; i != NumVars; ++i)
12319       Vars.push_back(Record.readSubExpr());
12320     C->setInscanCopyArrayElems(Vars);
12321   }
12322 }
12323 
12324 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12325   VisitOMPClauseWithPostUpdate(C);
12326   C->setLParenLoc(Record.readSourceLocation());
12327   C->setColonLoc(Record.readSourceLocation());
12328   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12329   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12330   C->setQualifierLoc(NNSL);
12331   C->setNameInfo(DNI);
12332 
12333   unsigned NumVars = C->varlist_size();
12334   SmallVector<Expr *, 16> Vars;
12335   Vars.reserve(NumVars);
12336   for (unsigned I = 0; I != NumVars; ++I)
12337     Vars.push_back(Record.readSubExpr());
12338   C->setVarRefs(Vars);
12339   Vars.clear();
12340   for (unsigned I = 0; I != NumVars; ++I)
12341     Vars.push_back(Record.readSubExpr());
12342   C->setPrivates(Vars);
12343   Vars.clear();
12344   for (unsigned I = 0; I != NumVars; ++I)
12345     Vars.push_back(Record.readSubExpr());
12346   C->setLHSExprs(Vars);
12347   Vars.clear();
12348   for (unsigned I = 0; I != NumVars; ++I)
12349     Vars.push_back(Record.readSubExpr());
12350   C->setRHSExprs(Vars);
12351   Vars.clear();
12352   for (unsigned I = 0; I != NumVars; ++I)
12353     Vars.push_back(Record.readSubExpr());
12354   C->setReductionOps(Vars);
12355 }
12356 
12357 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12358   VisitOMPClauseWithPostUpdate(C);
12359   C->setLParenLoc(Record.readSourceLocation());
12360   C->setColonLoc(Record.readSourceLocation());
12361   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12362   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12363   C->setQualifierLoc(NNSL);
12364   C->setNameInfo(DNI);
12365 
12366   unsigned NumVars = C->varlist_size();
12367   SmallVector<Expr *, 16> Vars;
12368   Vars.reserve(NumVars);
12369   for (unsigned I = 0; I != NumVars; ++I)
12370     Vars.push_back(Record.readSubExpr());
12371   C->setVarRefs(Vars);
12372   Vars.clear();
12373   for (unsigned I = 0; I != NumVars; ++I)
12374     Vars.push_back(Record.readSubExpr());
12375   C->setPrivates(Vars);
12376   Vars.clear();
12377   for (unsigned I = 0; I != NumVars; ++I)
12378     Vars.push_back(Record.readSubExpr());
12379   C->setLHSExprs(Vars);
12380   Vars.clear();
12381   for (unsigned I = 0; I != NumVars; ++I)
12382     Vars.push_back(Record.readSubExpr());
12383   C->setRHSExprs(Vars);
12384   Vars.clear();
12385   for (unsigned I = 0; I != NumVars; ++I)
12386     Vars.push_back(Record.readSubExpr());
12387   C->setReductionOps(Vars);
12388   Vars.clear();
12389   for (unsigned I = 0; I != NumVars; ++I)
12390     Vars.push_back(Record.readSubExpr());
12391   C->setTaskgroupDescriptors(Vars);
12392 }
12393 
12394 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12395   VisitOMPClauseWithPostUpdate(C);
12396   C->setLParenLoc(Record.readSourceLocation());
12397   C->setColonLoc(Record.readSourceLocation());
12398   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12399   C->setModifierLoc(Record.readSourceLocation());
12400   unsigned NumVars = C->varlist_size();
12401   SmallVector<Expr *, 16> Vars;
12402   Vars.reserve(NumVars);
12403   for (unsigned i = 0; i != NumVars; ++i)
12404     Vars.push_back(Record.readSubExpr());
12405   C->setVarRefs(Vars);
12406   Vars.clear();
12407   for (unsigned i = 0; i != NumVars; ++i)
12408     Vars.push_back(Record.readSubExpr());
12409   C->setPrivates(Vars);
12410   Vars.clear();
12411   for (unsigned i = 0; i != NumVars; ++i)
12412     Vars.push_back(Record.readSubExpr());
12413   C->setInits(Vars);
12414   Vars.clear();
12415   for (unsigned i = 0; i != NumVars; ++i)
12416     Vars.push_back(Record.readSubExpr());
12417   C->setUpdates(Vars);
12418   Vars.clear();
12419   for (unsigned i = 0; i != NumVars; ++i)
12420     Vars.push_back(Record.readSubExpr());
12421   C->setFinals(Vars);
12422   C->setStep(Record.readSubExpr());
12423   C->setCalcStep(Record.readSubExpr());
12424   Vars.clear();
12425   for (unsigned I = 0; I != NumVars + 1; ++I)
12426     Vars.push_back(Record.readSubExpr());
12427   C->setUsedExprs(Vars);
12428 }
12429 
12430 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12431   C->setLParenLoc(Record.readSourceLocation());
12432   C->setColonLoc(Record.readSourceLocation());
12433   unsigned NumVars = C->varlist_size();
12434   SmallVector<Expr *, 16> Vars;
12435   Vars.reserve(NumVars);
12436   for (unsigned i = 0; i != NumVars; ++i)
12437     Vars.push_back(Record.readSubExpr());
12438   C->setVarRefs(Vars);
12439   C->setAlignment(Record.readSubExpr());
12440 }
12441 
12442 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12443   C->setLParenLoc(Record.readSourceLocation());
12444   unsigned NumVars = C->varlist_size();
12445   SmallVector<Expr *, 16> Exprs;
12446   Exprs.reserve(NumVars);
12447   for (unsigned i = 0; i != NumVars; ++i)
12448     Exprs.push_back(Record.readSubExpr());
12449   C->setVarRefs(Exprs);
12450   Exprs.clear();
12451   for (unsigned i = 0; i != NumVars; ++i)
12452     Exprs.push_back(Record.readSubExpr());
12453   C->setSourceExprs(Exprs);
12454   Exprs.clear();
12455   for (unsigned i = 0; i != NumVars; ++i)
12456     Exprs.push_back(Record.readSubExpr());
12457   C->setDestinationExprs(Exprs);
12458   Exprs.clear();
12459   for (unsigned i = 0; i != NumVars; ++i)
12460     Exprs.push_back(Record.readSubExpr());
12461   C->setAssignmentOps(Exprs);
12462 }
12463 
12464 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12465   C->setLParenLoc(Record.readSourceLocation());
12466   unsigned NumVars = C->varlist_size();
12467   SmallVector<Expr *, 16> Exprs;
12468   Exprs.reserve(NumVars);
12469   for (unsigned i = 0; i != NumVars; ++i)
12470     Exprs.push_back(Record.readSubExpr());
12471   C->setVarRefs(Exprs);
12472   Exprs.clear();
12473   for (unsigned i = 0; i != NumVars; ++i)
12474     Exprs.push_back(Record.readSubExpr());
12475   C->setSourceExprs(Exprs);
12476   Exprs.clear();
12477   for (unsigned i = 0; i != NumVars; ++i)
12478     Exprs.push_back(Record.readSubExpr());
12479   C->setDestinationExprs(Exprs);
12480   Exprs.clear();
12481   for (unsigned i = 0; i != NumVars; ++i)
12482     Exprs.push_back(Record.readSubExpr());
12483   C->setAssignmentOps(Exprs);
12484 }
12485 
12486 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12487   C->setLParenLoc(Record.readSourceLocation());
12488   unsigned NumVars = C->varlist_size();
12489   SmallVector<Expr *, 16> Vars;
12490   Vars.reserve(NumVars);
12491   for (unsigned i = 0; i != NumVars; ++i)
12492     Vars.push_back(Record.readSubExpr());
12493   C->setVarRefs(Vars);
12494 }
12495 
12496 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12497   C->setDepobj(Record.readSubExpr());
12498   C->setLParenLoc(Record.readSourceLocation());
12499 }
12500 
12501 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12502   C->setLParenLoc(Record.readSourceLocation());
12503   C->setModifier(Record.readSubExpr());
12504   C->setDependencyKind(
12505       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12506   C->setDependencyLoc(Record.readSourceLocation());
12507   C->setColonLoc(Record.readSourceLocation());
12508   unsigned NumVars = C->varlist_size();
12509   SmallVector<Expr *, 16> Vars;
12510   Vars.reserve(NumVars);
12511   for (unsigned I = 0; I != NumVars; ++I)
12512     Vars.push_back(Record.readSubExpr());
12513   C->setVarRefs(Vars);
12514   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12515     C->setLoopData(I, Record.readSubExpr());
12516 }
12517 
12518 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12519   VisitOMPClauseWithPreInit(C);
12520   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12521   C->setDevice(Record.readSubExpr());
12522   C->setModifierLoc(Record.readSourceLocation());
12523   C->setLParenLoc(Record.readSourceLocation());
12524 }
12525 
12526 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12527   C->setLParenLoc(Record.readSourceLocation());
12528   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12529     C->setMapTypeModifier(
12530         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12531     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12532   }
12533   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12534   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12535   C->setMapType(
12536      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12537   C->setMapLoc(Record.readSourceLocation());
12538   C->setColonLoc(Record.readSourceLocation());
12539   auto NumVars = C->varlist_size();
12540   auto UniqueDecls = C->getUniqueDeclarationsNum();
12541   auto TotalLists = C->getTotalComponentListNum();
12542   auto TotalComponents = C->getTotalComponentsNum();
12543 
12544   SmallVector<Expr *, 16> Vars;
12545   Vars.reserve(NumVars);
12546   for (unsigned i = 0; i != NumVars; ++i)
12547     Vars.push_back(Record.readExpr());
12548   C->setVarRefs(Vars);
12549 
12550   SmallVector<Expr *, 16> UDMappers;
12551   UDMappers.reserve(NumVars);
12552   for (unsigned I = 0; I < NumVars; ++I)
12553     UDMappers.push_back(Record.readExpr());
12554   C->setUDMapperRefs(UDMappers);
12555 
12556   SmallVector<ValueDecl *, 16> Decls;
12557   Decls.reserve(UniqueDecls);
12558   for (unsigned i = 0; i < UniqueDecls; ++i)
12559     Decls.push_back(Record.readDeclAs<ValueDecl>());
12560   C->setUniqueDecls(Decls);
12561 
12562   SmallVector<unsigned, 16> ListsPerDecl;
12563   ListsPerDecl.reserve(UniqueDecls);
12564   for (unsigned i = 0; i < UniqueDecls; ++i)
12565     ListsPerDecl.push_back(Record.readInt());
12566   C->setDeclNumLists(ListsPerDecl);
12567 
12568   SmallVector<unsigned, 32> ListSizes;
12569   ListSizes.reserve(TotalLists);
12570   for (unsigned i = 0; i < TotalLists; ++i)
12571     ListSizes.push_back(Record.readInt());
12572   C->setComponentListSizes(ListSizes);
12573 
12574   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12575   Components.reserve(TotalComponents);
12576   for (unsigned i = 0; i < TotalComponents; ++i) {
12577     Expr *AssociatedExprPr = Record.readExpr();
12578     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12579     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12580                             /*IsNonContiguous=*/false);
12581   }
12582   C->setComponents(Components, ListSizes);
12583 }
12584 
12585 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12586   C->setLParenLoc(Record.readSourceLocation());
12587   C->setColonLoc(Record.readSourceLocation());
12588   C->setAllocator(Record.readSubExpr());
12589   unsigned NumVars = C->varlist_size();
12590   SmallVector<Expr *, 16> Vars;
12591   Vars.reserve(NumVars);
12592   for (unsigned i = 0; i != NumVars; ++i)
12593     Vars.push_back(Record.readSubExpr());
12594   C->setVarRefs(Vars);
12595 }
12596 
12597 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12598   VisitOMPClauseWithPreInit(C);
12599   C->setNumTeams(Record.readSubExpr());
12600   C->setLParenLoc(Record.readSourceLocation());
12601 }
12602 
12603 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12604   VisitOMPClauseWithPreInit(C);
12605   C->setThreadLimit(Record.readSubExpr());
12606   C->setLParenLoc(Record.readSourceLocation());
12607 }
12608 
12609 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12610   VisitOMPClauseWithPreInit(C);
12611   C->setPriority(Record.readSubExpr());
12612   C->setLParenLoc(Record.readSourceLocation());
12613 }
12614 
12615 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12616   VisitOMPClauseWithPreInit(C);
12617   C->setGrainsize(Record.readSubExpr());
12618   C->setLParenLoc(Record.readSourceLocation());
12619 }
12620 
12621 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12622   VisitOMPClauseWithPreInit(C);
12623   C->setNumTasks(Record.readSubExpr());
12624   C->setLParenLoc(Record.readSourceLocation());
12625 }
12626 
12627 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12628   C->setHint(Record.readSubExpr());
12629   C->setLParenLoc(Record.readSourceLocation());
12630 }
12631 
12632 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12633   VisitOMPClauseWithPreInit(C);
12634   C->setDistScheduleKind(
12635       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12636   C->setChunkSize(Record.readSubExpr());
12637   C->setLParenLoc(Record.readSourceLocation());
12638   C->setDistScheduleKindLoc(Record.readSourceLocation());
12639   C->setCommaLoc(Record.readSourceLocation());
12640 }
12641 
12642 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12643   C->setDefaultmapKind(
12644        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12645   C->setDefaultmapModifier(
12646       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12647   C->setLParenLoc(Record.readSourceLocation());
12648   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12649   C->setDefaultmapKindLoc(Record.readSourceLocation());
12650 }
12651 
12652 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12653   C->setLParenLoc(Record.readSourceLocation());
12654   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12655     C->setMotionModifier(
12656         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12657     C->setMotionModifierLoc(I, Record.readSourceLocation());
12658   }
12659   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12660   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12661   C->setColonLoc(Record.readSourceLocation());
12662   auto NumVars = C->varlist_size();
12663   auto UniqueDecls = C->getUniqueDeclarationsNum();
12664   auto TotalLists = C->getTotalComponentListNum();
12665   auto TotalComponents = C->getTotalComponentsNum();
12666 
12667   SmallVector<Expr *, 16> Vars;
12668   Vars.reserve(NumVars);
12669   for (unsigned i = 0; i != NumVars; ++i)
12670     Vars.push_back(Record.readSubExpr());
12671   C->setVarRefs(Vars);
12672 
12673   SmallVector<Expr *, 16> UDMappers;
12674   UDMappers.reserve(NumVars);
12675   for (unsigned I = 0; I < NumVars; ++I)
12676     UDMappers.push_back(Record.readSubExpr());
12677   C->setUDMapperRefs(UDMappers);
12678 
12679   SmallVector<ValueDecl *, 16> Decls;
12680   Decls.reserve(UniqueDecls);
12681   for (unsigned i = 0; i < UniqueDecls; ++i)
12682     Decls.push_back(Record.readDeclAs<ValueDecl>());
12683   C->setUniqueDecls(Decls);
12684 
12685   SmallVector<unsigned, 16> ListsPerDecl;
12686   ListsPerDecl.reserve(UniqueDecls);
12687   for (unsigned i = 0; i < UniqueDecls; ++i)
12688     ListsPerDecl.push_back(Record.readInt());
12689   C->setDeclNumLists(ListsPerDecl);
12690 
12691   SmallVector<unsigned, 32> ListSizes;
12692   ListSizes.reserve(TotalLists);
12693   for (unsigned i = 0; i < TotalLists; ++i)
12694     ListSizes.push_back(Record.readInt());
12695   C->setComponentListSizes(ListSizes);
12696 
12697   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12698   Components.reserve(TotalComponents);
12699   for (unsigned i = 0; i < TotalComponents; ++i) {
12700     Expr *AssociatedExprPr = Record.readSubExpr();
12701     bool IsNonContiguous = Record.readBool();
12702     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12703     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12704   }
12705   C->setComponents(Components, ListSizes);
12706 }
12707 
12708 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12709   C->setLParenLoc(Record.readSourceLocation());
12710   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12711     C->setMotionModifier(
12712         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12713     C->setMotionModifierLoc(I, Record.readSourceLocation());
12714   }
12715   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12716   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12717   C->setColonLoc(Record.readSourceLocation());
12718   auto NumVars = C->varlist_size();
12719   auto UniqueDecls = C->getUniqueDeclarationsNum();
12720   auto TotalLists = C->getTotalComponentListNum();
12721   auto TotalComponents = C->getTotalComponentsNum();
12722 
12723   SmallVector<Expr *, 16> Vars;
12724   Vars.reserve(NumVars);
12725   for (unsigned i = 0; i != NumVars; ++i)
12726     Vars.push_back(Record.readSubExpr());
12727   C->setVarRefs(Vars);
12728 
12729   SmallVector<Expr *, 16> UDMappers;
12730   UDMappers.reserve(NumVars);
12731   for (unsigned I = 0; I < NumVars; ++I)
12732     UDMappers.push_back(Record.readSubExpr());
12733   C->setUDMapperRefs(UDMappers);
12734 
12735   SmallVector<ValueDecl *, 16> Decls;
12736   Decls.reserve(UniqueDecls);
12737   for (unsigned i = 0; i < UniqueDecls; ++i)
12738     Decls.push_back(Record.readDeclAs<ValueDecl>());
12739   C->setUniqueDecls(Decls);
12740 
12741   SmallVector<unsigned, 16> ListsPerDecl;
12742   ListsPerDecl.reserve(UniqueDecls);
12743   for (unsigned i = 0; i < UniqueDecls; ++i)
12744     ListsPerDecl.push_back(Record.readInt());
12745   C->setDeclNumLists(ListsPerDecl);
12746 
12747   SmallVector<unsigned, 32> ListSizes;
12748   ListSizes.reserve(TotalLists);
12749   for (unsigned i = 0; i < TotalLists; ++i)
12750     ListSizes.push_back(Record.readInt());
12751   C->setComponentListSizes(ListSizes);
12752 
12753   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12754   Components.reserve(TotalComponents);
12755   for (unsigned i = 0; i < TotalComponents; ++i) {
12756     Expr *AssociatedExprPr = Record.readSubExpr();
12757     bool IsNonContiguous = Record.readBool();
12758     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12759     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12760   }
12761   C->setComponents(Components, ListSizes);
12762 }
12763 
12764 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12765   C->setLParenLoc(Record.readSourceLocation());
12766   auto NumVars = C->varlist_size();
12767   auto UniqueDecls = C->getUniqueDeclarationsNum();
12768   auto TotalLists = C->getTotalComponentListNum();
12769   auto TotalComponents = C->getTotalComponentsNum();
12770 
12771   SmallVector<Expr *, 16> Vars;
12772   Vars.reserve(NumVars);
12773   for (unsigned i = 0; i != NumVars; ++i)
12774     Vars.push_back(Record.readSubExpr());
12775   C->setVarRefs(Vars);
12776   Vars.clear();
12777   for (unsigned i = 0; i != NumVars; ++i)
12778     Vars.push_back(Record.readSubExpr());
12779   C->setPrivateCopies(Vars);
12780   Vars.clear();
12781   for (unsigned i = 0; i != NumVars; ++i)
12782     Vars.push_back(Record.readSubExpr());
12783   C->setInits(Vars);
12784 
12785   SmallVector<ValueDecl *, 16> Decls;
12786   Decls.reserve(UniqueDecls);
12787   for (unsigned i = 0; i < UniqueDecls; ++i)
12788     Decls.push_back(Record.readDeclAs<ValueDecl>());
12789   C->setUniqueDecls(Decls);
12790 
12791   SmallVector<unsigned, 16> ListsPerDecl;
12792   ListsPerDecl.reserve(UniqueDecls);
12793   for (unsigned i = 0; i < UniqueDecls; ++i)
12794     ListsPerDecl.push_back(Record.readInt());
12795   C->setDeclNumLists(ListsPerDecl);
12796 
12797   SmallVector<unsigned, 32> ListSizes;
12798   ListSizes.reserve(TotalLists);
12799   for (unsigned i = 0; i < TotalLists; ++i)
12800     ListSizes.push_back(Record.readInt());
12801   C->setComponentListSizes(ListSizes);
12802 
12803   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12804   Components.reserve(TotalComponents);
12805   for (unsigned i = 0; i < TotalComponents; ++i) {
12806     auto *AssociatedExprPr = Record.readSubExpr();
12807     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12808     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12809                             /*IsNonContiguous=*/false);
12810   }
12811   C->setComponents(Components, ListSizes);
12812 }
12813 
12814 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12815   C->setLParenLoc(Record.readSourceLocation());
12816   auto NumVars = C->varlist_size();
12817   auto UniqueDecls = C->getUniqueDeclarationsNum();
12818   auto TotalLists = C->getTotalComponentListNum();
12819   auto TotalComponents = C->getTotalComponentsNum();
12820 
12821   SmallVector<Expr *, 16> Vars;
12822   Vars.reserve(NumVars);
12823   for (unsigned i = 0; i != NumVars; ++i)
12824     Vars.push_back(Record.readSubExpr());
12825   C->setVarRefs(Vars);
12826 
12827   SmallVector<ValueDecl *, 16> Decls;
12828   Decls.reserve(UniqueDecls);
12829   for (unsigned i = 0; i < UniqueDecls; ++i)
12830     Decls.push_back(Record.readDeclAs<ValueDecl>());
12831   C->setUniqueDecls(Decls);
12832 
12833   SmallVector<unsigned, 16> ListsPerDecl;
12834   ListsPerDecl.reserve(UniqueDecls);
12835   for (unsigned i = 0; i < UniqueDecls; ++i)
12836     ListsPerDecl.push_back(Record.readInt());
12837   C->setDeclNumLists(ListsPerDecl);
12838 
12839   SmallVector<unsigned, 32> ListSizes;
12840   ListSizes.reserve(TotalLists);
12841   for (unsigned i = 0; i < TotalLists; ++i)
12842     ListSizes.push_back(Record.readInt());
12843   C->setComponentListSizes(ListSizes);
12844 
12845   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12846   Components.reserve(TotalComponents);
12847   for (unsigned i = 0; i < TotalComponents; ++i) {
12848     Expr *AssociatedExpr = Record.readSubExpr();
12849     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12850     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12851                             /*IsNonContiguous*/ false);
12852   }
12853   C->setComponents(Components, ListSizes);
12854 }
12855 
12856 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12857   C->setLParenLoc(Record.readSourceLocation());
12858   auto NumVars = C->varlist_size();
12859   auto UniqueDecls = C->getUniqueDeclarationsNum();
12860   auto TotalLists = C->getTotalComponentListNum();
12861   auto TotalComponents = C->getTotalComponentsNum();
12862 
12863   SmallVector<Expr *, 16> Vars;
12864   Vars.reserve(NumVars);
12865   for (unsigned i = 0; i != NumVars; ++i)
12866     Vars.push_back(Record.readSubExpr());
12867   C->setVarRefs(Vars);
12868   Vars.clear();
12869 
12870   SmallVector<ValueDecl *, 16> Decls;
12871   Decls.reserve(UniqueDecls);
12872   for (unsigned i = 0; i < UniqueDecls; ++i)
12873     Decls.push_back(Record.readDeclAs<ValueDecl>());
12874   C->setUniqueDecls(Decls);
12875 
12876   SmallVector<unsigned, 16> ListsPerDecl;
12877   ListsPerDecl.reserve(UniqueDecls);
12878   for (unsigned i = 0; i < UniqueDecls; ++i)
12879     ListsPerDecl.push_back(Record.readInt());
12880   C->setDeclNumLists(ListsPerDecl);
12881 
12882   SmallVector<unsigned, 32> ListSizes;
12883   ListSizes.reserve(TotalLists);
12884   for (unsigned i = 0; i < TotalLists; ++i)
12885     ListSizes.push_back(Record.readInt());
12886   C->setComponentListSizes(ListSizes);
12887 
12888   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12889   Components.reserve(TotalComponents);
12890   for (unsigned i = 0; i < TotalComponents; ++i) {
12891     Expr *AssociatedExpr = Record.readSubExpr();
12892     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12893     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12894                             /*IsNonContiguous=*/false);
12895   }
12896   C->setComponents(Components, ListSizes);
12897 }
12898 
12899 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12900   C->setLParenLoc(Record.readSourceLocation());
12901   unsigned NumVars = C->varlist_size();
12902   SmallVector<Expr *, 16> Vars;
12903   Vars.reserve(NumVars);
12904   for (unsigned i = 0; i != NumVars; ++i)
12905     Vars.push_back(Record.readSubExpr());
12906   C->setVarRefs(Vars);
12907   Vars.clear();
12908   Vars.reserve(NumVars);
12909   for (unsigned i = 0; i != NumVars; ++i)
12910     Vars.push_back(Record.readSubExpr());
12911   C->setPrivateRefs(Vars);
12912 }
12913 
12914 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12915   C->setLParenLoc(Record.readSourceLocation());
12916   unsigned NumVars = C->varlist_size();
12917   SmallVector<Expr *, 16> Vars;
12918   Vars.reserve(NumVars);
12919   for (unsigned i = 0; i != NumVars; ++i)
12920     Vars.push_back(Record.readSubExpr());
12921   C->setVarRefs(Vars);
12922 }
12923 
12924 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12925   C->setLParenLoc(Record.readSourceLocation());
12926   unsigned NumVars = C->varlist_size();
12927   SmallVector<Expr *, 16> Vars;
12928   Vars.reserve(NumVars);
12929   for (unsigned i = 0; i != NumVars; ++i)
12930     Vars.push_back(Record.readSubExpr());
12931   C->setVarRefs(Vars);
12932 }
12933 
12934 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12935   C->setLParenLoc(Record.readSourceLocation());
12936   unsigned NumOfAllocators = C->getNumberOfAllocators();
12937   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12938   Data.reserve(NumOfAllocators);
12939   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12940     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12941     D.Allocator = Record.readSubExpr();
12942     D.AllocatorTraits = Record.readSubExpr();
12943     D.LParenLoc = Record.readSourceLocation();
12944     D.RParenLoc = Record.readSourceLocation();
12945   }
12946   C->setAllocatorsData(Data);
12947 }
12948 
12949 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12950   C->setLParenLoc(Record.readSourceLocation());
12951   C->setModifier(Record.readSubExpr());
12952   C->setColonLoc(Record.readSourceLocation());
12953   unsigned NumOfLocators = C->varlist_size();
12954   SmallVector<Expr *, 4> Locators;
12955   Locators.reserve(NumOfLocators);
12956   for (unsigned I = 0; I != NumOfLocators; ++I)
12957     Locators.push_back(Record.readSubExpr());
12958   C->setVarRefs(Locators);
12959 }
12960 
12961 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12962   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12963   C->setLParenLoc(Record.readSourceLocation());
12964   C->setKindKwLoc(Record.readSourceLocation());
12965 }
12966 
12967 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12968   VisitOMPClauseWithPreInit(C);
12969   C->setThreadID(Record.readSubExpr());
12970   C->setLParenLoc(Record.readSourceLocation());
12971 }
12972 
12973 void OMPClauseReader::VisitOMPBindClause(OMPBindClause *C) {
12974   C->setBindKind(Record.readEnum<OpenMPBindClauseKind>());
12975   C->setLParenLoc(Record.readSourceLocation());
12976   C->setBindKindLoc(Record.readSourceLocation());
12977 }
12978 
12979 void OMPClauseReader::VisitOMPAlignClause(OMPAlignClause *C) {
12980   C->setAlignment(Record.readExpr());
12981   C->setLParenLoc(Record.readSourceLocation());
12982 }
12983 
12984 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12985   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12986   TI.Sets.resize(readUInt32());
12987   for (auto &Set : TI.Sets) {
12988     Set.Kind = readEnum<llvm::omp::TraitSet>();
12989     Set.Selectors.resize(readUInt32());
12990     for (auto &Selector : Set.Selectors) {
12991       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12992       Selector.ScoreOrCondition = nullptr;
12993       if (readBool())
12994         Selector.ScoreOrCondition = readExprRef();
12995       Selector.Properties.resize(readUInt32());
12996       for (auto &Property : Selector.Properties)
12997         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12998     }
12999   }
13000   return &TI;
13001 }
13002 
13003 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
13004   if (!Data)
13005     return;
13006   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
13007     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13008     skipInts(3);
13009   }
13010   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13011   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13012     Clauses[I] = readOMPClause();
13013   Data->setClauses(Clauses);
13014   if (Data->hasAssociatedStmt())
13015     Data->setAssociatedStmt(readStmt());
13016   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13017     Data->getChildren()[I] = readStmt();
13018 }
13019