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 "clang/Basic/OpenMPKinds.h"
14 #include "clang/Serialization/ASTRecordReader.h"
15 #include "ASTCommon.h"
16 #include "ASTReaderInternals.h"
17 #include "clang/AST/AbstractTypeReader.h"
18 #include "clang/AST/ASTConsumer.h"
19 #include "clang/AST/ASTContext.h"
20 #include "clang/AST/ASTMutationListener.h"
21 #include "clang/AST/ASTUnresolvedSet.h"
22 #include "clang/AST/Decl.h"
23 #include "clang/AST/DeclBase.h"
24 #include "clang/AST/DeclCXX.h"
25 #include "clang/AST/DeclFriend.h"
26 #include "clang/AST/DeclGroup.h"
27 #include "clang/AST/DeclObjC.h"
28 #include "clang/AST/DeclTemplate.h"
29 #include "clang/AST/DeclarationName.h"
30 #include "clang/AST/Expr.h"
31 #include "clang/AST/ExprCXX.h"
32 #include "clang/AST/ExternalASTSource.h"
33 #include "clang/AST/NestedNameSpecifier.h"
34 #include "clang/AST/OpenMPClause.h"
35 #include "clang/AST/ODRHash.h"
36 #include "clang/AST/RawCommentList.h"
37 #include "clang/AST/TemplateBase.h"
38 #include "clang/AST/TemplateName.h"
39 #include "clang/AST/Type.h"
40 #include "clang/AST/TypeLoc.h"
41 #include "clang/AST/TypeLocVisitor.h"
42 #include "clang/AST/UnresolvedSet.h"
43 #include "clang/Basic/CommentOptions.h"
44 #include "clang/Basic/Diagnostic.h"
45 #include "clang/Basic/DiagnosticOptions.h"
46 #include "clang/Basic/ExceptionSpecificationType.h"
47 #include "clang/Basic/FileManager.h"
48 #include "clang/Basic/FileSystemOptions.h"
49 #include "clang/Basic/IdentifierTable.h"
50 #include "clang/Basic/LLVM.h"
51 #include "clang/Basic/LangOptions.h"
52 #include "clang/Basic/Module.h"
53 #include "clang/Basic/ObjCRuntime.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/ContinuousRangeMap.h"
80 #include "clang/Serialization/GlobalModuleIndex.h"
81 #include "clang/Serialization/InMemoryModuleCache.h"
82 #include "clang/Serialization/ModuleFile.h"
83 #include "clang/Serialization/ModuleFileExtension.h"
84 #include "clang/Serialization/ModuleManager.h"
85 #include "clang/Serialization/PCHContainerOperations.h"
86 #include "clang/Serialization/SerializationDiagnostic.h"
87 #include "llvm/ADT/APFloat.h"
88 #include "llvm/ADT/APInt.h"
89 #include "llvm/ADT/APSInt.h"
90 #include "llvm/ADT/ArrayRef.h"
91 #include "llvm/ADT/DenseMap.h"
92 #include "llvm/ADT/FloatingPointMode.h"
93 #include "llvm/ADT/FoldingSet.h"
94 #include "llvm/ADT/Hashing.h"
95 #include "llvm/ADT/IntrusiveRefCntPtr.h"
96 #include "llvm/ADT/None.h"
97 #include "llvm/ADT/Optional.h"
98 #include "llvm/ADT/STLExtras.h"
99 #include "llvm/ADT/ScopeExit.h"
100 #include "llvm/ADT/SmallPtrSet.h"
101 #include "llvm/ADT/SmallString.h"
102 #include "llvm/ADT/SmallVector.h"
103 #include "llvm/ADT/StringExtras.h"
104 #include "llvm/ADT/StringMap.h"
105 #include "llvm/ADT/StringRef.h"
106 #include "llvm/ADT/Triple.h"
107 #include "llvm/ADT/iterator_range.h"
108 #include "llvm/Bitstream/BitstreamReader.h"
109 #include "llvm/Support/Casting.h"
110 #include "llvm/Support/Compiler.h"
111 #include "llvm/Support/Compression.h"
112 #include "llvm/Support/DJB.h"
113 #include "llvm/Support/Endian.h"
114 #include "llvm/Support/Error.h"
115 #include "llvm/Support/ErrorHandling.h"
116 #include "llvm/Support/FileSystem.h"
117 #include "llvm/Support/LEB128.h"
118 #include "llvm/Support/MemoryBuffer.h"
119 #include "llvm/Support/Path.h"
120 #include "llvm/Support/SaveAndRestore.h"
121 #include "llvm/Support/Timer.h"
122 #include "llvm/Support/VersionTuple.h"
123 #include "llvm/Support/raw_ostream.h"
124 #include <algorithm>
125 #include <cassert>
126 #include <cstddef>
127 #include <cstdint>
128 #include <cstdio>
129 #include <ctime>
130 #include <iterator>
131 #include <limits>
132 #include <map>
133 #include <memory>
134 #include <string>
135 #include <system_error>
136 #include <tuple>
137 #include <utility>
138 #include <vector>
139 
140 using namespace clang;
141 using namespace clang::serialization;
142 using namespace clang::serialization::reader;
143 using llvm::BitstreamCursor;
144 using llvm::RoundingMode;
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 = PP.getHeaderSearchInfo().lookupModule(ModuleName);
559   assert(M && "missing module");
560   return M;
561 }
562 
563 bool PCHValidator::ReadDiagnosticOptions(
564     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
565   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
566   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
567   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
568       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
569   // This should never fail, because we would have processed these options
570   // before writing them to an ASTFile.
571   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
572 
573   ModuleManager &ModuleMgr = Reader.getModuleManager();
574   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
575 
576   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
577   if (!TopM)
578     return false;
579 
580   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
581   // contains the union of their flags.
582   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
583                                  Complain);
584 }
585 
586 /// Collect the macro definitions provided by the given preprocessor
587 /// options.
588 static void
589 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
590                         MacroDefinitionsMap &Macros,
591                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
592   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
593     StringRef Macro = PPOpts.Macros[I].first;
594     bool IsUndef = PPOpts.Macros[I].second;
595 
596     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
597     StringRef MacroName = MacroPair.first;
598     StringRef MacroBody = MacroPair.second;
599 
600     // For an #undef'd macro, we only care about the name.
601     if (IsUndef) {
602       if (MacroNames && !Macros.count(MacroName))
603         MacroNames->push_back(MacroName);
604 
605       Macros[MacroName] = std::make_pair("", true);
606       continue;
607     }
608 
609     // For a #define'd macro, figure out the actual definition.
610     if (MacroName.size() == Macro.size())
611       MacroBody = "1";
612     else {
613       // Note: GCC drops anything following an end-of-line character.
614       StringRef::size_type End = MacroBody.find_first_of("\n\r");
615       MacroBody = MacroBody.substr(0, End);
616     }
617 
618     if (MacroNames && !Macros.count(MacroName))
619       MacroNames->push_back(MacroName);
620     Macros[MacroName] = std::make_pair(MacroBody, false);
621   }
622 }
623 
624 /// Check the preprocessor options deserialized from the control block
625 /// against the preprocessor options in an existing preprocessor.
626 ///
627 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
628 /// \param Validate If true, validate preprocessor options. If false, allow
629 ///        macros defined by \p ExistingPPOpts to override those defined by
630 ///        \p PPOpts in SuggestedPredefines.
631 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
632                                      const PreprocessorOptions &ExistingPPOpts,
633                                      DiagnosticsEngine *Diags,
634                                      FileManager &FileMgr,
635                                      std::string &SuggestedPredefines,
636                                      const LangOptions &LangOpts,
637                                      bool Validate = true) {
638   // Check macro definitions.
639   MacroDefinitionsMap ASTFileMacros;
640   collectMacroDefinitions(PPOpts, ASTFileMacros);
641   MacroDefinitionsMap ExistingMacros;
642   SmallVector<StringRef, 4> ExistingMacroNames;
643   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
644 
645   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
646     // Dig out the macro definition in the existing preprocessor options.
647     StringRef MacroName = ExistingMacroNames[I];
648     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
649 
650     // Check whether we know anything about this macro name or not.
651     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
652         ASTFileMacros.find(MacroName);
653     if (!Validate || Known == ASTFileMacros.end()) {
654       // FIXME: Check whether this identifier was referenced anywhere in the
655       // AST file. If so, we should reject the AST file. Unfortunately, this
656       // information isn't in the control block. What shall we do about it?
657 
658       if (Existing.second) {
659         SuggestedPredefines += "#undef ";
660         SuggestedPredefines += MacroName.str();
661         SuggestedPredefines += '\n';
662       } else {
663         SuggestedPredefines += "#define ";
664         SuggestedPredefines += MacroName.str();
665         SuggestedPredefines += ' ';
666         SuggestedPredefines += Existing.first.str();
667         SuggestedPredefines += '\n';
668       }
669       continue;
670     }
671 
672     // If the macro was defined in one but undef'd in the other, we have a
673     // conflict.
674     if (Existing.second != Known->second.second) {
675       if (Diags) {
676         Diags->Report(diag::err_pch_macro_def_undef)
677           << MacroName << Known->second.second;
678       }
679       return true;
680     }
681 
682     // If the macro was #undef'd in both, or if the macro bodies are identical,
683     // it's fine.
684     if (Existing.second || Existing.first == Known->second.first)
685       continue;
686 
687     // The macro bodies differ; complain.
688     if (Diags) {
689       Diags->Report(diag::err_pch_macro_def_conflict)
690         << MacroName << Known->second.first << Existing.first;
691     }
692     return true;
693   }
694 
695   // Check whether we're using predefines.
696   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
697     if (Diags) {
698       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
699     }
700     return true;
701   }
702 
703   // Detailed record is important since it is used for the module cache hash.
704   if (LangOpts.Modules &&
705       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
706     if (Diags) {
707       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
708     }
709     return true;
710   }
711 
712   // Compute the #include and #include_macros lines we need.
713   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
714     StringRef File = ExistingPPOpts.Includes[I];
715 
716     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
717         !ExistingPPOpts.PCHThroughHeader.empty()) {
718       // In case the through header is an include, we must add all the includes
719       // to the predefines so the start point can be determined.
720       SuggestedPredefines += "#include \"";
721       SuggestedPredefines += File;
722       SuggestedPredefines += "\"\n";
723       continue;
724     }
725 
726     if (File == ExistingPPOpts.ImplicitPCHInclude)
727       continue;
728 
729     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
730           != PPOpts.Includes.end())
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 (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
741                   File)
742         != PPOpts.MacroIncludes.end())
743       continue;
744 
745     SuggestedPredefines += "#__include_macros \"";
746     SuggestedPredefines += File;
747     SuggestedPredefines += "\"\n##\n";
748   }
749 
750   return false;
751 }
752 
753 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
754                                            bool Complain,
755                                            std::string &SuggestedPredefines) {
756   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
757 
758   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
759                                   Complain? &Reader.Diags : nullptr,
760                                   PP.getFileManager(),
761                                   SuggestedPredefines,
762                                   PP.getLangOpts());
763 }
764 
765 bool SimpleASTReaderListener::ReadPreprocessorOptions(
766                                   const PreprocessorOptions &PPOpts,
767                                   bool Complain,
768                                   std::string &SuggestedPredefines) {
769   return checkPreprocessorOptions(PPOpts,
770                                   PP.getPreprocessorOpts(),
771                                   nullptr,
772                                   PP.getFileManager(),
773                                   SuggestedPredefines,
774                                   PP.getLangOpts(),
775                                   false);
776 }
777 
778 /// Check the header search options deserialized from the control block
779 /// against the header search options in an existing preprocessor.
780 ///
781 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
782 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
783                                      StringRef SpecificModuleCachePath,
784                                      StringRef ExistingModuleCachePath,
785                                      DiagnosticsEngine *Diags,
786                                      const LangOptions &LangOpts,
787                                      const PreprocessorOptions &PPOpts) {
788   if (LangOpts.Modules) {
789     if (SpecificModuleCachePath != ExistingModuleCachePath &&
790         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
791       if (Diags)
792         Diags->Report(diag::err_pch_modulecache_mismatch)
793           << SpecificModuleCachePath << ExistingModuleCachePath;
794       return true;
795     }
796   }
797 
798   return false;
799 }
800 
801 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
802                                            StringRef SpecificModuleCachePath,
803                                            bool Complain) {
804   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
805                                   PP.getHeaderSearchInfo().getModuleCachePath(),
806                                   Complain ? &Reader.Diags : nullptr,
807                                   PP.getLangOpts(), PP.getPreprocessorOpts());
808 }
809 
810 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
811   PP.setCounterValue(Value);
812 }
813 
814 //===----------------------------------------------------------------------===//
815 // AST reader implementation
816 //===----------------------------------------------------------------------===//
817 
818 static uint64_t readULEB(const unsigned char *&P) {
819   unsigned Length = 0;
820   const char *Error = nullptr;
821 
822   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
823   if (Error)
824     llvm::report_fatal_error(Error);
825   P += Length;
826   return Val;
827 }
828 
829 /// Read ULEB-encoded key length and data length.
830 static std::pair<unsigned, unsigned>
831 readULEBKeyDataLength(const unsigned char *&P) {
832   unsigned KeyLen = readULEB(P);
833   if ((unsigned)KeyLen != KeyLen)
834     llvm::report_fatal_error("key too large");
835 
836   unsigned DataLen = readULEB(P);
837   if ((unsigned)DataLen != DataLen)
838     llvm::report_fatal_error("data too large");
839 
840   return std::make_pair(KeyLen, DataLen);
841 }
842 
843 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
844                                            bool TakeOwnership) {
845   DeserializationListener = Listener;
846   OwnsDeserializationListener = TakeOwnership;
847 }
848 
849 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
850   return serialization::ComputeHash(Sel);
851 }
852 
853 std::pair<unsigned, unsigned>
854 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
855   return readULEBKeyDataLength(d);
856 }
857 
858 ASTSelectorLookupTrait::internal_key_type
859 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
860   using namespace llvm::support;
861 
862   SelectorTable &SelTable = Reader.getContext().Selectors;
863   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
864   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
865       F, endian::readNext<uint32_t, little, unaligned>(d));
866   if (N == 0)
867     return SelTable.getNullarySelector(FirstII);
868   else if (N == 1)
869     return SelTable.getUnarySelector(FirstII);
870 
871   SmallVector<IdentifierInfo *, 16> Args;
872   Args.push_back(FirstII);
873   for (unsigned I = 1; I != N; ++I)
874     Args.push_back(Reader.getLocalIdentifier(
875         F, endian::readNext<uint32_t, little, unaligned>(d)));
876 
877   return SelTable.getSelector(N, Args.data());
878 }
879 
880 ASTSelectorLookupTrait::data_type
881 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
882                                  unsigned DataLen) {
883   using namespace llvm::support;
884 
885   data_type Result;
886 
887   Result.ID = Reader.getGlobalSelectorID(
888       F, endian::readNext<uint32_t, little, unaligned>(d));
889   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
890   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
891   Result.InstanceBits = FullInstanceBits & 0x3;
892   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
893   Result.FactoryBits = FullFactoryBits & 0x3;
894   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
895   unsigned NumInstanceMethods = FullInstanceBits >> 3;
896   unsigned NumFactoryMethods = FullFactoryBits >> 3;
897 
898   // Load instance methods
899   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
900     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
901             F, endian::readNext<uint32_t, little, unaligned>(d)))
902       Result.Instance.push_back(Method);
903   }
904 
905   // Load factory methods
906   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
907     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
908             F, endian::readNext<uint32_t, little, unaligned>(d)))
909       Result.Factory.push_back(Method);
910   }
911 
912   return Result;
913 }
914 
915 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
916   return llvm::djbHash(a);
917 }
918 
919 std::pair<unsigned, unsigned>
920 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
921   return readULEBKeyDataLength(d);
922 }
923 
924 ASTIdentifierLookupTraitBase::internal_key_type
925 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
926   assert(n >= 2 && d[n-1] == '\0');
927   return StringRef((const char*) d, n-1);
928 }
929 
930 /// Whether the given identifier is "interesting".
931 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
932                                     bool IsModule) {
933   return II.hadMacroDefinition() || II.isPoisoned() ||
934          (!IsModule && II.getObjCOrBuiltinID()) ||
935          II.hasRevertedTokenIDToIdentifier() ||
936          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
937           II.getFETokenInfo());
938 }
939 
940 static bool readBit(unsigned &Bits) {
941   bool Value = Bits & 0x1;
942   Bits >>= 1;
943   return Value;
944 }
945 
946 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
947   using namespace llvm::support;
948 
949   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
950   return Reader.getGlobalIdentifierID(F, RawID >> 1);
951 }
952 
953 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
954   if (!II.isFromAST()) {
955     II.setIsFromAST();
956     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
957     if (isInterestingIdentifier(Reader, II, IsModule))
958       II.setChangedSinceDeserialization();
959   }
960 }
961 
962 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
963                                                    const unsigned char* d,
964                                                    unsigned DataLen) {
965   using namespace llvm::support;
966 
967   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
968   bool IsInteresting = RawID & 0x01;
969 
970   // Wipe out the "is interesting" bit.
971   RawID = RawID >> 1;
972 
973   // Build the IdentifierInfo and link the identifier ID with it.
974   IdentifierInfo *II = KnownII;
975   if (!II) {
976     II = &Reader.getIdentifierTable().getOwn(k);
977     KnownII = II;
978   }
979   markIdentifierFromAST(Reader, *II);
980   Reader.markIdentifierUpToDate(II);
981 
982   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
983   if (!IsInteresting) {
984     // For uninteresting identifiers, there's nothing else to do. Just notify
985     // the reader that we've finished loading this identifier.
986     Reader.SetIdentifierInfo(ID, II);
987     return II;
988   }
989 
990   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
991   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
992   bool CPlusPlusOperatorKeyword = readBit(Bits);
993   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
994   bool Poisoned = readBit(Bits);
995   bool ExtensionToken = readBit(Bits);
996   bool HadMacroDefinition = readBit(Bits);
997 
998   assert(Bits == 0 && "Extra bits in the identifier?");
999   DataLen -= 8;
1000 
1001   // Set or check the various bits in the IdentifierInfo structure.
1002   // Token IDs are read-only.
1003   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1004     II->revertTokenIDToIdentifier();
1005   if (!F.isModule())
1006     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1007   assert(II->isExtensionToken() == ExtensionToken &&
1008          "Incorrect extension token flag");
1009   (void)ExtensionToken;
1010   if (Poisoned)
1011     II->setIsPoisoned(true);
1012   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1013          "Incorrect C++ operator keyword flag");
1014   (void)CPlusPlusOperatorKeyword;
1015 
1016   // If this identifier is a macro, deserialize the macro
1017   // definition.
1018   if (HadMacroDefinition) {
1019     uint32_t MacroDirectivesOffset =
1020         endian::readNext<uint32_t, little, unaligned>(d);
1021     DataLen -= 4;
1022 
1023     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1024   }
1025 
1026   Reader.SetIdentifierInfo(ID, II);
1027 
1028   // Read all of the declarations visible at global scope with this
1029   // name.
1030   if (DataLen > 0) {
1031     SmallVector<uint32_t, 4> DeclIDs;
1032     for (; DataLen > 0; DataLen -= 4)
1033       DeclIDs.push_back(Reader.getGlobalDeclID(
1034           F, endian::readNext<uint32_t, little, unaligned>(d)));
1035     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1036   }
1037 
1038   return II;
1039 }
1040 
1041 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1042     : Kind(Name.getNameKind()) {
1043   switch (Kind) {
1044   case DeclarationName::Identifier:
1045     Data = (uint64_t)Name.getAsIdentifierInfo();
1046     break;
1047   case DeclarationName::ObjCZeroArgSelector:
1048   case DeclarationName::ObjCOneArgSelector:
1049   case DeclarationName::ObjCMultiArgSelector:
1050     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1051     break;
1052   case DeclarationName::CXXOperatorName:
1053     Data = Name.getCXXOverloadedOperator();
1054     break;
1055   case DeclarationName::CXXLiteralOperatorName:
1056     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1057     break;
1058   case DeclarationName::CXXDeductionGuideName:
1059     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1060                ->getDeclName().getAsIdentifierInfo();
1061     break;
1062   case DeclarationName::CXXConstructorName:
1063   case DeclarationName::CXXDestructorName:
1064   case DeclarationName::CXXConversionFunctionName:
1065   case DeclarationName::CXXUsingDirective:
1066     Data = 0;
1067     break;
1068   }
1069 }
1070 
1071 unsigned DeclarationNameKey::getHash() const {
1072   llvm::FoldingSetNodeID ID;
1073   ID.AddInteger(Kind);
1074 
1075   switch (Kind) {
1076   case DeclarationName::Identifier:
1077   case DeclarationName::CXXLiteralOperatorName:
1078   case DeclarationName::CXXDeductionGuideName:
1079     ID.AddString(((IdentifierInfo*)Data)->getName());
1080     break;
1081   case DeclarationName::ObjCZeroArgSelector:
1082   case DeclarationName::ObjCOneArgSelector:
1083   case DeclarationName::ObjCMultiArgSelector:
1084     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1085     break;
1086   case DeclarationName::CXXOperatorName:
1087     ID.AddInteger((OverloadedOperatorKind)Data);
1088     break;
1089   case DeclarationName::CXXConstructorName:
1090   case DeclarationName::CXXDestructorName:
1091   case DeclarationName::CXXConversionFunctionName:
1092   case DeclarationName::CXXUsingDirective:
1093     break;
1094   }
1095 
1096   return ID.ComputeHash();
1097 }
1098 
1099 ModuleFile *
1100 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1101   using namespace llvm::support;
1102 
1103   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1104   return Reader.getLocalModuleFile(F, ModuleFileID);
1105 }
1106 
1107 std::pair<unsigned, unsigned>
1108 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1109   return readULEBKeyDataLength(d);
1110 }
1111 
1112 ASTDeclContextNameLookupTrait::internal_key_type
1113 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1114   using namespace llvm::support;
1115 
1116   auto Kind = (DeclarationName::NameKind)*d++;
1117   uint64_t Data;
1118   switch (Kind) {
1119   case DeclarationName::Identifier:
1120   case DeclarationName::CXXLiteralOperatorName:
1121   case DeclarationName::CXXDeductionGuideName:
1122     Data = (uint64_t)Reader.getLocalIdentifier(
1123         F, endian::readNext<uint32_t, little, unaligned>(d));
1124     break;
1125   case DeclarationName::ObjCZeroArgSelector:
1126   case DeclarationName::ObjCOneArgSelector:
1127   case DeclarationName::ObjCMultiArgSelector:
1128     Data =
1129         (uint64_t)Reader.getLocalSelector(
1130                              F, endian::readNext<uint32_t, little, unaligned>(
1131                                     d)).getAsOpaquePtr();
1132     break;
1133   case DeclarationName::CXXOperatorName:
1134     Data = *d++; // OverloadedOperatorKind
1135     break;
1136   case DeclarationName::CXXConstructorName:
1137   case DeclarationName::CXXDestructorName:
1138   case DeclarationName::CXXConversionFunctionName:
1139   case DeclarationName::CXXUsingDirective:
1140     Data = 0;
1141     break;
1142   }
1143 
1144   return DeclarationNameKey(Kind, Data);
1145 }
1146 
1147 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1148                                                  const unsigned char *d,
1149                                                  unsigned DataLen,
1150                                                  data_type_builder &Val) {
1151   using namespace llvm::support;
1152 
1153   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1154     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1155     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1156   }
1157 }
1158 
1159 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1160                                               BitstreamCursor &Cursor,
1161                                               uint64_t Offset,
1162                                               DeclContext *DC) {
1163   assert(Offset != 0);
1164 
1165   SavedStreamPosition SavedPosition(Cursor);
1166   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1167     Error(std::move(Err));
1168     return true;
1169   }
1170 
1171   RecordData Record;
1172   StringRef Blob;
1173   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1174   if (!MaybeCode) {
1175     Error(MaybeCode.takeError());
1176     return true;
1177   }
1178   unsigned Code = MaybeCode.get();
1179 
1180   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1181   if (!MaybeRecCode) {
1182     Error(MaybeRecCode.takeError());
1183     return true;
1184   }
1185   unsigned RecCode = MaybeRecCode.get();
1186   if (RecCode != DECL_CONTEXT_LEXICAL) {
1187     Error("Expected lexical block");
1188     return true;
1189   }
1190 
1191   assert(!isa<TranslationUnitDecl>(DC) &&
1192          "expected a TU_UPDATE_LEXICAL record for TU");
1193   // If we are handling a C++ class template instantiation, we can see multiple
1194   // lexical updates for the same record. It's important that we select only one
1195   // of them, so that field numbering works properly. Just pick the first one we
1196   // see.
1197   auto &Lex = LexicalDecls[DC];
1198   if (!Lex.first) {
1199     Lex = std::make_pair(
1200         &M, llvm::makeArrayRef(
1201                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1202                     Blob.data()),
1203                 Blob.size() / 4));
1204   }
1205   DC->setHasExternalLexicalStorage(true);
1206   return false;
1207 }
1208 
1209 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1210                                               BitstreamCursor &Cursor,
1211                                               uint64_t Offset,
1212                                               DeclID ID) {
1213   assert(Offset != 0);
1214 
1215   SavedStreamPosition SavedPosition(Cursor);
1216   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1217     Error(std::move(Err));
1218     return true;
1219   }
1220 
1221   RecordData Record;
1222   StringRef Blob;
1223   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1224   if (!MaybeCode) {
1225     Error(MaybeCode.takeError());
1226     return true;
1227   }
1228   unsigned Code = MaybeCode.get();
1229 
1230   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1231   if (!MaybeRecCode) {
1232     Error(MaybeRecCode.takeError());
1233     return true;
1234   }
1235   unsigned RecCode = MaybeRecCode.get();
1236   if (RecCode != DECL_CONTEXT_VISIBLE) {
1237     Error("Expected visible lookup table block");
1238     return true;
1239   }
1240 
1241   // We can't safely determine the primary context yet, so delay attaching the
1242   // lookup table until we're done with recursive deserialization.
1243   auto *Data = (const unsigned char*)Blob.data();
1244   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1245   return false;
1246 }
1247 
1248 void ASTReader::Error(StringRef Msg) const {
1249   Error(diag::err_fe_pch_malformed, Msg);
1250   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1251       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1252     Diag(diag::note_module_cache_path)
1253       << PP.getHeaderSearchInfo().getModuleCachePath();
1254   }
1255 }
1256 
1257 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1258                       StringRef Arg3) const {
1259   if (Diags.isDiagnosticInFlight())
1260     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1261   else
1262     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1263 }
1264 
1265 void ASTReader::Error(llvm::Error &&Err) const {
1266   Error(toString(std::move(Err)));
1267 }
1268 
1269 //===----------------------------------------------------------------------===//
1270 // Source Manager Deserialization
1271 //===----------------------------------------------------------------------===//
1272 
1273 /// Read the line table in the source manager block.
1274 /// \returns true if there was an error.
1275 bool ASTReader::ParseLineTable(ModuleFile &F,
1276                                const RecordData &Record) {
1277   unsigned Idx = 0;
1278   LineTableInfo &LineTable = SourceMgr.getLineTable();
1279 
1280   // Parse the file names
1281   std::map<int, int> FileIDs;
1282   FileIDs[-1] = -1; // For unspecified filenames.
1283   for (unsigned I = 0; Record[Idx]; ++I) {
1284     // Extract the file name
1285     auto Filename = ReadPath(F, Record, Idx);
1286     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1287   }
1288   ++Idx;
1289 
1290   // Parse the line entries
1291   std::vector<LineEntry> Entries;
1292   while (Idx < Record.size()) {
1293     int FID = Record[Idx++];
1294     assert(FID >= 0 && "Serialized line entries for non-local file.");
1295     // Remap FileID from 1-based old view.
1296     FID += F.SLocEntryBaseID - 1;
1297 
1298     // Extract the line entries
1299     unsigned NumEntries = Record[Idx++];
1300     assert(NumEntries && "no line entries for file ID");
1301     Entries.clear();
1302     Entries.reserve(NumEntries);
1303     for (unsigned I = 0; I != NumEntries; ++I) {
1304       unsigned FileOffset = Record[Idx++];
1305       unsigned LineNo = Record[Idx++];
1306       int FilenameID = FileIDs[Record[Idx++]];
1307       SrcMgr::CharacteristicKind FileKind
1308         = (SrcMgr::CharacteristicKind)Record[Idx++];
1309       unsigned IncludeOffset = Record[Idx++];
1310       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1311                                        FileKind, IncludeOffset));
1312     }
1313     LineTable.AddEntry(FileID::get(FID), Entries);
1314   }
1315 
1316   return false;
1317 }
1318 
1319 /// Read a source manager block
1320 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1321   using namespace SrcMgr;
1322 
1323   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1324 
1325   // Set the source-location entry cursor to the current position in
1326   // the stream. This cursor will be used to read the contents of the
1327   // source manager block initially, and then lazily read
1328   // source-location entries as needed.
1329   SLocEntryCursor = F.Stream;
1330 
1331   // The stream itself is going to skip over the source manager block.
1332   if (llvm::Error Err = F.Stream.SkipBlock()) {
1333     Error(std::move(Err));
1334     return true;
1335   }
1336 
1337   // Enter the source manager block.
1338   if (llvm::Error Err =
1339           SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1340     Error(std::move(Err));
1341     return true;
1342   }
1343   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1344 
1345   RecordData Record;
1346   while (true) {
1347     Expected<llvm::BitstreamEntry> MaybeE =
1348         SLocEntryCursor.advanceSkippingSubblocks();
1349     if (!MaybeE) {
1350       Error(MaybeE.takeError());
1351       return true;
1352     }
1353     llvm::BitstreamEntry E = MaybeE.get();
1354 
1355     switch (E.Kind) {
1356     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1357     case llvm::BitstreamEntry::Error:
1358       Error("malformed block record in AST file");
1359       return true;
1360     case llvm::BitstreamEntry::EndBlock:
1361       return false;
1362     case llvm::BitstreamEntry::Record:
1363       // The interesting case.
1364       break;
1365     }
1366 
1367     // Read a record.
1368     Record.clear();
1369     StringRef Blob;
1370     Expected<unsigned> MaybeRecord =
1371         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1372     if (!MaybeRecord) {
1373       Error(MaybeRecord.takeError());
1374       return true;
1375     }
1376     switch (MaybeRecord.get()) {
1377     default:  // Default behavior: ignore.
1378       break;
1379 
1380     case SM_SLOC_FILE_ENTRY:
1381     case SM_SLOC_BUFFER_ENTRY:
1382     case SM_SLOC_EXPANSION_ENTRY:
1383       // Once we hit one of the source location entries, we're done.
1384       return false;
1385     }
1386   }
1387 }
1388 
1389 /// If a header file is not found at the path that we expect it to be
1390 /// and the PCH file was moved from its original location, try to resolve the
1391 /// file by assuming that header+PCH were moved together and the header is in
1392 /// the same place relative to the PCH.
1393 static std::string
1394 resolveFileRelativeToOriginalDir(const std::string &Filename,
1395                                  const std::string &OriginalDir,
1396                                  const std::string &CurrDir) {
1397   assert(OriginalDir != CurrDir &&
1398          "No point trying to resolve the file if the PCH dir didn't change");
1399 
1400   using namespace llvm::sys;
1401 
1402   SmallString<128> filePath(Filename);
1403   fs::make_absolute(filePath);
1404   assert(path::is_absolute(OriginalDir));
1405   SmallString<128> currPCHPath(CurrDir);
1406 
1407   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1408                        fileDirE = path::end(path::parent_path(filePath));
1409   path::const_iterator origDirI = path::begin(OriginalDir),
1410                        origDirE = path::end(OriginalDir);
1411   // Skip the common path components from filePath and OriginalDir.
1412   while (fileDirI != fileDirE && origDirI != origDirE &&
1413          *fileDirI == *origDirI) {
1414     ++fileDirI;
1415     ++origDirI;
1416   }
1417   for (; origDirI != origDirE; ++origDirI)
1418     path::append(currPCHPath, "..");
1419   path::append(currPCHPath, fileDirI, fileDirE);
1420   path::append(currPCHPath, path::filename(Filename));
1421   return std::string(currPCHPath.str());
1422 }
1423 
1424 bool ASTReader::ReadSLocEntry(int ID) {
1425   if (ID == 0)
1426     return false;
1427 
1428   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1429     Error("source location entry ID out-of-range for AST file");
1430     return true;
1431   }
1432 
1433   // Local helper to read the (possibly-compressed) buffer data following the
1434   // entry record.
1435   auto ReadBuffer = [this](
1436       BitstreamCursor &SLocEntryCursor,
1437       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1438     RecordData Record;
1439     StringRef Blob;
1440     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1441     if (!MaybeCode) {
1442       Error(MaybeCode.takeError());
1443       return nullptr;
1444     }
1445     unsigned Code = MaybeCode.get();
1446 
1447     Expected<unsigned> MaybeRecCode =
1448         SLocEntryCursor.readRecord(Code, Record, &Blob);
1449     if (!MaybeRecCode) {
1450       Error(MaybeRecCode.takeError());
1451       return nullptr;
1452     }
1453     unsigned RecCode = MaybeRecCode.get();
1454 
1455     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1456       if (!llvm::zlib::isAvailable()) {
1457         Error("zlib is not available");
1458         return nullptr;
1459       }
1460       SmallString<0> Uncompressed;
1461       if (llvm::Error E =
1462               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1463         Error("could not decompress embedded file contents: " +
1464               llvm::toString(std::move(E)));
1465         return nullptr;
1466       }
1467       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1468     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1469       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1470     } else {
1471       Error("AST record has invalid code");
1472       return nullptr;
1473     }
1474   };
1475 
1476   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1477   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1478           F->SLocEntryOffsetsBase +
1479           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1480     Error(std::move(Err));
1481     return true;
1482   }
1483 
1484   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1485   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1486 
1487   ++NumSLocEntriesRead;
1488   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1489   if (!MaybeEntry) {
1490     Error(MaybeEntry.takeError());
1491     return true;
1492   }
1493   llvm::BitstreamEntry Entry = MaybeEntry.get();
1494 
1495   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1496     Error("incorrectly-formatted source location entry in AST file");
1497     return true;
1498   }
1499 
1500   RecordData Record;
1501   StringRef Blob;
1502   Expected<unsigned> MaybeSLOC =
1503       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1504   if (!MaybeSLOC) {
1505     Error(MaybeSLOC.takeError());
1506     return true;
1507   }
1508   switch (MaybeSLOC.get()) {
1509   default:
1510     Error("incorrectly-formatted source location entry in AST file");
1511     return true;
1512 
1513   case SM_SLOC_FILE_ENTRY: {
1514     // We will detect whether a file changed and return 'Failure' for it, but
1515     // we will also try to fail gracefully by setting up the SLocEntry.
1516     unsigned InputID = Record[4];
1517     InputFile IF = getInputFile(*F, InputID);
1518     Optional<FileEntryRef> File = IF.getFile();
1519     bool OverriddenBuffer = IF.isOverridden();
1520 
1521     // Note that we only check if a File was returned. If it was out-of-date
1522     // we have complained but we will continue creating a FileID to recover
1523     // gracefully.
1524     if (!File)
1525       return true;
1526 
1527     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1528     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1529       // This is the module's main file.
1530       IncludeLoc = getImportLocation(F);
1531     }
1532     SrcMgr::CharacteristicKind
1533       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1534     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1535                                         BaseOffset + Record[0]);
1536     SrcMgr::FileInfo &FileInfo =
1537           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1538     FileInfo.NumCreatedFIDs = Record[5];
1539     if (Record[3])
1540       FileInfo.setHasLineDirectives();
1541 
1542     unsigned NumFileDecls = Record[7];
1543     if (NumFileDecls && ContextObj) {
1544       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1545       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1546       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1547                                                              NumFileDecls));
1548     }
1549 
1550     const SrcMgr::ContentCache &ContentCache =
1551         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1552     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1553         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1554         !ContentCache.getBufferIfLoaded()) {
1555       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1556       if (!Buffer)
1557         return true;
1558       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1559     }
1560 
1561     break;
1562   }
1563 
1564   case SM_SLOC_BUFFER_ENTRY: {
1565     const char *Name = Blob.data();
1566     unsigned Offset = Record[0];
1567     SrcMgr::CharacteristicKind
1568       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1569     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1570     if (IncludeLoc.isInvalid() && F->isModule()) {
1571       IncludeLoc = getImportLocation(F);
1572     }
1573 
1574     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1575     if (!Buffer)
1576       return true;
1577     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1578                            BaseOffset + Offset, IncludeLoc);
1579     break;
1580   }
1581 
1582   case SM_SLOC_EXPANSION_ENTRY: {
1583     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1584     SourceMgr.createExpansionLoc(SpellingLoc,
1585                                      ReadSourceLocation(*F, Record[2]),
1586                                      ReadSourceLocation(*F, Record[3]),
1587                                      Record[5],
1588                                      Record[4],
1589                                      ID,
1590                                      BaseOffset + Record[0]);
1591     break;
1592   }
1593   }
1594 
1595   return false;
1596 }
1597 
1598 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1599   if (ID == 0)
1600     return std::make_pair(SourceLocation(), "");
1601 
1602   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1603     Error("source location entry ID out-of-range for AST file");
1604     return std::make_pair(SourceLocation(), "");
1605   }
1606 
1607   // Find which module file this entry lands in.
1608   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1609   if (!M->isModule())
1610     return std::make_pair(SourceLocation(), "");
1611 
1612   // FIXME: Can we map this down to a particular submodule? That would be
1613   // ideal.
1614   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1615 }
1616 
1617 /// Find the location where the module F is imported.
1618 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1619   if (F->ImportLoc.isValid())
1620     return F->ImportLoc;
1621 
1622   // Otherwise we have a PCH. It's considered to be "imported" at the first
1623   // location of its includer.
1624   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1625     // Main file is the importer.
1626     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1627     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1628   }
1629   return F->ImportedBy[0]->FirstLoc;
1630 }
1631 
1632 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1633 /// the abbreviations that are at the top of the block and then leave the cursor
1634 /// pointing into the block.
1635 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID,
1636                                  uint64_t *StartOfBlockOffset) {
1637   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1638     // FIXME this drops errors on the floor.
1639     consumeError(std::move(Err));
1640     return true;
1641   }
1642 
1643   if (StartOfBlockOffset)
1644     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1645 
1646   while (true) {
1647     uint64_t Offset = Cursor.GetCurrentBitNo();
1648     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1649     if (!MaybeCode) {
1650       // FIXME this drops errors on the floor.
1651       consumeError(MaybeCode.takeError());
1652       return true;
1653     }
1654     unsigned Code = MaybeCode.get();
1655 
1656     // We expect all abbrevs to be at the start of the block.
1657     if (Code != llvm::bitc::DEFINE_ABBREV) {
1658       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1659         // FIXME this drops errors on the floor.
1660         consumeError(std::move(Err));
1661         return true;
1662       }
1663       return false;
1664     }
1665     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1666       // FIXME this drops errors on the floor.
1667       consumeError(std::move(Err));
1668       return true;
1669     }
1670   }
1671 }
1672 
1673 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1674                            unsigned &Idx) {
1675   Token Tok;
1676   Tok.startToken();
1677   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1678   Tok.setLength(Record[Idx++]);
1679   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1680     Tok.setIdentifierInfo(II);
1681   Tok.setKind((tok::TokenKind)Record[Idx++]);
1682   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1683   return Tok;
1684 }
1685 
1686 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1687   BitstreamCursor &Stream = F.MacroCursor;
1688 
1689   // Keep track of where we are in the stream, then jump back there
1690   // after reading this macro.
1691   SavedStreamPosition SavedPosition(Stream);
1692 
1693   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1694     // FIXME this drops errors on the floor.
1695     consumeError(std::move(Err));
1696     return nullptr;
1697   }
1698   RecordData Record;
1699   SmallVector<IdentifierInfo*, 16> MacroParams;
1700   MacroInfo *Macro = nullptr;
1701 
1702   while (true) {
1703     // Advance to the next record, but if we get to the end of the block, don't
1704     // pop it (removing all the abbreviations from the cursor) since we want to
1705     // be able to reseek within the block and read entries.
1706     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1707     Expected<llvm::BitstreamEntry> MaybeEntry =
1708         Stream.advanceSkippingSubblocks(Flags);
1709     if (!MaybeEntry) {
1710       Error(MaybeEntry.takeError());
1711       return Macro;
1712     }
1713     llvm::BitstreamEntry Entry = MaybeEntry.get();
1714 
1715     switch (Entry.Kind) {
1716     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1717     case llvm::BitstreamEntry::Error:
1718       Error("malformed block record in AST file");
1719       return Macro;
1720     case llvm::BitstreamEntry::EndBlock:
1721       return Macro;
1722     case llvm::BitstreamEntry::Record:
1723       // The interesting case.
1724       break;
1725     }
1726 
1727     // Read a record.
1728     Record.clear();
1729     PreprocessorRecordTypes RecType;
1730     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1731       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1732     else {
1733       Error(MaybeRecType.takeError());
1734       return Macro;
1735     }
1736     switch (RecType) {
1737     case PP_MODULE_MACRO:
1738     case PP_MACRO_DIRECTIVE_HISTORY:
1739       return Macro;
1740 
1741     case PP_MACRO_OBJECT_LIKE:
1742     case PP_MACRO_FUNCTION_LIKE: {
1743       // If we already have a macro, that means that we've hit the end
1744       // of the definition of the macro we were looking for. We're
1745       // done.
1746       if (Macro)
1747         return Macro;
1748 
1749       unsigned NextIndex = 1; // Skip identifier ID.
1750       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1751       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1752       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1753       MI->setIsUsed(Record[NextIndex++]);
1754       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1755 
1756       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1757         // Decode function-like macro info.
1758         bool isC99VarArgs = Record[NextIndex++];
1759         bool isGNUVarArgs = Record[NextIndex++];
1760         bool hasCommaPasting = Record[NextIndex++];
1761         MacroParams.clear();
1762         unsigned NumArgs = Record[NextIndex++];
1763         for (unsigned i = 0; i != NumArgs; ++i)
1764           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1765 
1766         // Install function-like macro info.
1767         MI->setIsFunctionLike();
1768         if (isC99VarArgs) MI->setIsC99Varargs();
1769         if (isGNUVarArgs) MI->setIsGNUVarargs();
1770         if (hasCommaPasting) MI->setHasCommaPasting();
1771         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1772       }
1773 
1774       // Remember that we saw this macro last so that we add the tokens that
1775       // form its body to it.
1776       Macro = MI;
1777 
1778       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1779           Record[NextIndex]) {
1780         // We have a macro definition. Register the association
1781         PreprocessedEntityID
1782             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1783         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1784         PreprocessingRecord::PPEntityID PPID =
1785             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1786         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1787             PPRec.getPreprocessedEntity(PPID));
1788         if (PPDef)
1789           PPRec.RegisterMacroDefinition(Macro, PPDef);
1790       }
1791 
1792       ++NumMacrosRead;
1793       break;
1794     }
1795 
1796     case PP_TOKEN: {
1797       // If we see a TOKEN before a PP_MACRO_*, then the file is
1798       // erroneous, just pretend we didn't see this.
1799       if (!Macro) break;
1800 
1801       unsigned Idx = 0;
1802       Token Tok = ReadToken(F, Record, Idx);
1803       Macro->AddTokenToBody(Tok);
1804       break;
1805     }
1806     }
1807   }
1808 }
1809 
1810 PreprocessedEntityID
1811 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1812                                          unsigned LocalID) const {
1813   if (!M.ModuleOffsetMap.empty())
1814     ReadModuleOffsetMap(M);
1815 
1816   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1817     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1818   assert(I != M.PreprocessedEntityRemap.end()
1819          && "Invalid index into preprocessed entity index remap");
1820 
1821   return LocalID + I->second;
1822 }
1823 
1824 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1825   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1826 }
1827 
1828 HeaderFileInfoTrait::internal_key_type
1829 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1830   internal_key_type ikey = {FE->getSize(),
1831                             M.HasTimestamps ? FE->getModificationTime() : 0,
1832                             FE->getName(), /*Imported*/ false};
1833   return ikey;
1834 }
1835 
1836 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1837   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1838     return false;
1839 
1840   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1841     return true;
1842 
1843   // Determine whether the actual files are equivalent.
1844   FileManager &FileMgr = Reader.getFileManager();
1845   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1846     if (!Key.Imported) {
1847       if (auto File = FileMgr.getFile(Key.Filename))
1848         return *File;
1849       return nullptr;
1850     }
1851 
1852     std::string Resolved = std::string(Key.Filename);
1853     Reader.ResolveImportedPath(M, Resolved);
1854     if (auto File = FileMgr.getFile(Resolved))
1855       return *File;
1856     return nullptr;
1857   };
1858 
1859   const FileEntry *FEA = GetFile(a);
1860   const FileEntry *FEB = GetFile(b);
1861   return FEA && FEA == FEB;
1862 }
1863 
1864 std::pair<unsigned, unsigned>
1865 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1866   return readULEBKeyDataLength(d);
1867 }
1868 
1869 HeaderFileInfoTrait::internal_key_type
1870 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1871   using namespace llvm::support;
1872 
1873   internal_key_type ikey;
1874   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1875   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1876   ikey.Filename = (const char *)d;
1877   ikey.Imported = true;
1878   return ikey;
1879 }
1880 
1881 HeaderFileInfoTrait::data_type
1882 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1883                               unsigned DataLen) {
1884   using namespace llvm::support;
1885 
1886   const unsigned char *End = d + DataLen;
1887   HeaderFileInfo HFI;
1888   unsigned Flags = *d++;
1889   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1890   HFI.isImport |= (Flags >> 5) & 0x01;
1891   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1892   HFI.DirInfo = (Flags >> 1) & 0x07;
1893   HFI.IndexHeaderMapHeader = Flags & 0x01;
1894   // FIXME: Find a better way to handle this. Maybe just store a
1895   // "has been included" flag?
1896   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1897                              HFI.NumIncludes);
1898   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1899       M, endian::readNext<uint32_t, little, unaligned>(d));
1900   if (unsigned FrameworkOffset =
1901           endian::readNext<uint32_t, little, unaligned>(d)) {
1902     // The framework offset is 1 greater than the actual offset,
1903     // since 0 is used as an indicator for "no framework name".
1904     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1905     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1906   }
1907 
1908   assert((End - d) % 4 == 0 &&
1909          "Wrong data length in HeaderFileInfo deserialization");
1910   while (d != End) {
1911     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1912     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1913     LocalSMID >>= 2;
1914 
1915     // This header is part of a module. Associate it with the module to enable
1916     // implicit module import.
1917     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1918     Module *Mod = Reader.getSubmodule(GlobalSMID);
1919     FileManager &FileMgr = Reader.getFileManager();
1920     ModuleMap &ModMap =
1921         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1922 
1923     std::string Filename = std::string(key.Filename);
1924     if (key.Imported)
1925       Reader.ResolveImportedPath(M, Filename);
1926     // FIXME: NameAsWritten
1927     Module::Header H = {std::string(key.Filename), "",
1928                         *FileMgr.getFile(Filename)};
1929     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1930     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1931   }
1932 
1933   // This HeaderFileInfo was externally loaded.
1934   HFI.External = true;
1935   HFI.IsValid = true;
1936   return HFI;
1937 }
1938 
1939 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1940                                 uint32_t MacroDirectivesOffset) {
1941   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1942   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1943 }
1944 
1945 void ASTReader::ReadDefinedMacros() {
1946   // Note that we are loading defined macros.
1947   Deserializing Macros(this);
1948 
1949   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1950     BitstreamCursor &MacroCursor = I.MacroCursor;
1951 
1952     // If there was no preprocessor block, skip this file.
1953     if (MacroCursor.getBitcodeBytes().empty())
1954       continue;
1955 
1956     BitstreamCursor Cursor = MacroCursor;
1957     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1958       Error(std::move(Err));
1959       return;
1960     }
1961 
1962     RecordData Record;
1963     while (true) {
1964       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1965       if (!MaybeE) {
1966         Error(MaybeE.takeError());
1967         return;
1968       }
1969       llvm::BitstreamEntry E = MaybeE.get();
1970 
1971       switch (E.Kind) {
1972       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1973       case llvm::BitstreamEntry::Error:
1974         Error("malformed block record in AST file");
1975         return;
1976       case llvm::BitstreamEntry::EndBlock:
1977         goto NextCursor;
1978 
1979       case llvm::BitstreamEntry::Record: {
1980         Record.clear();
1981         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1982         if (!MaybeRecord) {
1983           Error(MaybeRecord.takeError());
1984           return;
1985         }
1986         switch (MaybeRecord.get()) {
1987         default:  // Default behavior: ignore.
1988           break;
1989 
1990         case PP_MACRO_OBJECT_LIKE:
1991         case PP_MACRO_FUNCTION_LIKE: {
1992           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1993           if (II->isOutOfDate())
1994             updateOutOfDateIdentifier(*II);
1995           break;
1996         }
1997 
1998         case PP_TOKEN:
1999           // Ignore tokens.
2000           break;
2001         }
2002         break;
2003       }
2004       }
2005     }
2006     NextCursor:  ;
2007   }
2008 }
2009 
2010 namespace {
2011 
2012   /// Visitor class used to look up identifirs in an AST file.
2013   class IdentifierLookupVisitor {
2014     StringRef Name;
2015     unsigned NameHash;
2016     unsigned PriorGeneration;
2017     unsigned &NumIdentifierLookups;
2018     unsigned &NumIdentifierLookupHits;
2019     IdentifierInfo *Found = nullptr;
2020 
2021   public:
2022     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2023                             unsigned &NumIdentifierLookups,
2024                             unsigned &NumIdentifierLookupHits)
2025       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2026         PriorGeneration(PriorGeneration),
2027         NumIdentifierLookups(NumIdentifierLookups),
2028         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2029 
2030     bool operator()(ModuleFile &M) {
2031       // If we've already searched this module file, skip it now.
2032       if (M.Generation <= PriorGeneration)
2033         return true;
2034 
2035       ASTIdentifierLookupTable *IdTable
2036         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2037       if (!IdTable)
2038         return false;
2039 
2040       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2041                                      Found);
2042       ++NumIdentifierLookups;
2043       ASTIdentifierLookupTable::iterator Pos =
2044           IdTable->find_hashed(Name, NameHash, &Trait);
2045       if (Pos == IdTable->end())
2046         return false;
2047 
2048       // Dereferencing the iterator has the effect of building the
2049       // IdentifierInfo node and populating it with the various
2050       // declarations it needs.
2051       ++NumIdentifierLookupHits;
2052       Found = *Pos;
2053       return true;
2054     }
2055 
2056     // Retrieve the identifier info found within the module
2057     // files.
2058     IdentifierInfo *getIdentifierInfo() const { return Found; }
2059   };
2060 
2061 } // namespace
2062 
2063 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2064   // Note that we are loading an identifier.
2065   Deserializing AnIdentifier(this);
2066 
2067   unsigned PriorGeneration = 0;
2068   if (getContext().getLangOpts().Modules)
2069     PriorGeneration = IdentifierGeneration[&II];
2070 
2071   // If there is a global index, look there first to determine which modules
2072   // provably do not have any results for this identifier.
2073   GlobalModuleIndex::HitSet Hits;
2074   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2075   if (!loadGlobalIndex()) {
2076     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2077       HitsPtr = &Hits;
2078     }
2079   }
2080 
2081   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2082                                   NumIdentifierLookups,
2083                                   NumIdentifierLookupHits);
2084   ModuleMgr.visit(Visitor, HitsPtr);
2085   markIdentifierUpToDate(&II);
2086 }
2087 
2088 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2089   if (!II)
2090     return;
2091 
2092   II->setOutOfDate(false);
2093 
2094   // Update the generation for this identifier.
2095   if (getContext().getLangOpts().Modules)
2096     IdentifierGeneration[II] = getGeneration();
2097 }
2098 
2099 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2100                                     const PendingMacroInfo &PMInfo) {
2101   ModuleFile &M = *PMInfo.M;
2102 
2103   BitstreamCursor &Cursor = M.MacroCursor;
2104   SavedStreamPosition SavedPosition(Cursor);
2105   if (llvm::Error Err =
2106           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2107     Error(std::move(Err));
2108     return;
2109   }
2110 
2111   struct ModuleMacroRecord {
2112     SubmoduleID SubModID;
2113     MacroInfo *MI;
2114     SmallVector<SubmoduleID, 8> Overrides;
2115   };
2116   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2117 
2118   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2119   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2120   // macro histroy.
2121   RecordData Record;
2122   while (true) {
2123     Expected<llvm::BitstreamEntry> MaybeEntry =
2124         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2125     if (!MaybeEntry) {
2126       Error(MaybeEntry.takeError());
2127       return;
2128     }
2129     llvm::BitstreamEntry Entry = MaybeEntry.get();
2130 
2131     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2132       Error("malformed block record in AST file");
2133       return;
2134     }
2135 
2136     Record.clear();
2137     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2138     if (!MaybePP) {
2139       Error(MaybePP.takeError());
2140       return;
2141     }
2142     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2143     case PP_MACRO_DIRECTIVE_HISTORY:
2144       break;
2145 
2146     case PP_MODULE_MACRO: {
2147       ModuleMacros.push_back(ModuleMacroRecord());
2148       auto &Info = ModuleMacros.back();
2149       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2150       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2151       for (int I = 2, N = Record.size(); I != N; ++I)
2152         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2153       continue;
2154     }
2155 
2156     default:
2157       Error("malformed block record in AST file");
2158       return;
2159     }
2160 
2161     // We found the macro directive history; that's the last record
2162     // for this macro.
2163     break;
2164   }
2165 
2166   // Module macros are listed in reverse dependency order.
2167   {
2168     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2169     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2170     for (auto &MMR : ModuleMacros) {
2171       Overrides.clear();
2172       for (unsigned ModID : MMR.Overrides) {
2173         Module *Mod = getSubmodule(ModID);
2174         auto *Macro = PP.getModuleMacro(Mod, II);
2175         assert(Macro && "missing definition for overridden macro");
2176         Overrides.push_back(Macro);
2177       }
2178 
2179       bool Inserted = false;
2180       Module *Owner = getSubmodule(MMR.SubModID);
2181       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2182     }
2183   }
2184 
2185   // Don't read the directive history for a module; we don't have anywhere
2186   // to put it.
2187   if (M.isModule())
2188     return;
2189 
2190   // Deserialize the macro directives history in reverse source-order.
2191   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2192   unsigned Idx = 0, N = Record.size();
2193   while (Idx < N) {
2194     MacroDirective *MD = nullptr;
2195     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2196     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2197     switch (K) {
2198     case MacroDirective::MD_Define: {
2199       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2200       MD = PP.AllocateDefMacroDirective(MI, Loc);
2201       break;
2202     }
2203     case MacroDirective::MD_Undefine:
2204       MD = PP.AllocateUndefMacroDirective(Loc);
2205       break;
2206     case MacroDirective::MD_Visibility:
2207       bool isPublic = Record[Idx++];
2208       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2209       break;
2210     }
2211 
2212     if (!Latest)
2213       Latest = MD;
2214     if (Earliest)
2215       Earliest->setPrevious(MD);
2216     Earliest = MD;
2217   }
2218 
2219   if (Latest)
2220     PP.setLoadedMacroDirective(II, Earliest, Latest);
2221 }
2222 
2223 bool ASTReader::shouldDisableValidationForFile(
2224     const serialization::ModuleFile &M) const {
2225   if (DisableValidationKind == DisableValidationForModuleKind::None)
2226     return false;
2227 
2228   // If a PCH is loaded and validation is disabled for PCH then disable
2229   // validation for the PCH and the modules it loads.
2230   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2231 
2232   switch (K) {
2233   case MK_MainFile:
2234   case MK_Preamble:
2235   case MK_PCH:
2236     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2237   case MK_ImplicitModule:
2238   case MK_ExplicitModule:
2239   case MK_PrebuiltModule:
2240     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2241   }
2242 
2243   return false;
2244 }
2245 
2246 ASTReader::InputFileInfo
2247 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2248   // Go find this input file.
2249   BitstreamCursor &Cursor = F.InputFilesCursor;
2250   SavedStreamPosition SavedPosition(Cursor);
2251   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2252     // FIXME this drops errors on the floor.
2253     consumeError(std::move(Err));
2254   }
2255 
2256   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2257   if (!MaybeCode) {
2258     // FIXME this drops errors on the floor.
2259     consumeError(MaybeCode.takeError());
2260   }
2261   unsigned Code = MaybeCode.get();
2262   RecordData Record;
2263   StringRef Blob;
2264 
2265   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2266     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2267            "invalid record type for input file");
2268   else {
2269     // FIXME this drops errors on the floor.
2270     consumeError(Maybe.takeError());
2271   }
2272 
2273   assert(Record[0] == ID && "Bogus stored ID or offset");
2274   InputFileInfo R;
2275   R.StoredSize = static_cast<off_t>(Record[1]);
2276   R.StoredTime = static_cast<time_t>(Record[2]);
2277   R.Overridden = static_cast<bool>(Record[3]);
2278   R.Transient = static_cast<bool>(Record[4]);
2279   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2280   R.Filename = std::string(Blob);
2281   ResolveImportedPath(F, R.Filename);
2282 
2283   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2284   if (!MaybeEntry) // FIXME this drops errors on the floor.
2285     consumeError(MaybeEntry.takeError());
2286   llvm::BitstreamEntry Entry = MaybeEntry.get();
2287   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2288          "expected record type for input file hash");
2289 
2290   Record.clear();
2291   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2292     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2293            "invalid record type for input file hash");
2294   else {
2295     // FIXME this drops errors on the floor.
2296     consumeError(Maybe.takeError());
2297   }
2298   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2299                   static_cast<uint64_t>(Record[0]);
2300   return R;
2301 }
2302 
2303 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2304 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2305   // If this ID is bogus, just return an empty input file.
2306   if (ID == 0 || ID > F.InputFilesLoaded.size())
2307     return InputFile();
2308 
2309   // If we've already loaded this input file, return it.
2310   if (F.InputFilesLoaded[ID-1].getFile())
2311     return F.InputFilesLoaded[ID-1];
2312 
2313   if (F.InputFilesLoaded[ID-1].isNotFound())
2314     return InputFile();
2315 
2316   // Go find this input file.
2317   BitstreamCursor &Cursor = F.InputFilesCursor;
2318   SavedStreamPosition SavedPosition(Cursor);
2319   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2320     // FIXME this drops errors on the floor.
2321     consumeError(std::move(Err));
2322   }
2323 
2324   InputFileInfo FI = readInputFileInfo(F, ID);
2325   off_t StoredSize = FI.StoredSize;
2326   time_t StoredTime = FI.StoredTime;
2327   bool Overridden = FI.Overridden;
2328   bool Transient = FI.Transient;
2329   StringRef Filename = FI.Filename;
2330   uint64_t StoredContentHash = FI.ContentHash;
2331 
2332   OptionalFileEntryRefDegradesToFileEntryPtr File =
2333       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2334 
2335   // If we didn't find the file, resolve it relative to the
2336   // original directory from which this AST file was created.
2337   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2338       F.OriginalDir != F.BaseDirectory) {
2339     std::string Resolved = resolveFileRelativeToOriginalDir(
2340         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2341     if (!Resolved.empty())
2342       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2343   }
2344 
2345   // For an overridden file, create a virtual file with the stored
2346   // size/timestamp.
2347   if ((Overridden || Transient) && !File)
2348     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2349 
2350   if (!File) {
2351     if (Complain) {
2352       std::string ErrorStr = "could not find file '";
2353       ErrorStr += Filename;
2354       ErrorStr += "' referenced by AST file '";
2355       ErrorStr += F.FileName;
2356       ErrorStr += "'";
2357       Error(ErrorStr);
2358     }
2359     // Record that we didn't find the file.
2360     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2361     return InputFile();
2362   }
2363 
2364   // Check if there was a request to override the contents of the file
2365   // that was part of the precompiled header. Overriding such a file
2366   // can lead to problems when lexing using the source locations from the
2367   // PCH.
2368   SourceManager &SM = getSourceManager();
2369   // FIXME: Reject if the overrides are different.
2370   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2371     if (Complain)
2372       Error(diag::err_fe_pch_file_overridden, Filename);
2373 
2374     // After emitting the diagnostic, bypass the overriding file to recover
2375     // (this creates a separate FileEntry).
2376     File = SM.bypassFileContentsOverride(*File);
2377     if (!File) {
2378       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2379       return InputFile();
2380     }
2381   }
2382 
2383   enum ModificationType {
2384     Size,
2385     ModTime,
2386     Content,
2387     None,
2388   };
2389   auto HasInputFileChanged = [&]() {
2390     if (StoredSize != File->getSize())
2391       return ModificationType::Size;
2392     if (!shouldDisableValidationForFile(F) && StoredTime &&
2393         StoredTime != File->getModificationTime()) {
2394       // In case the modification time changes but not the content,
2395       // accept the cached file as legit.
2396       if (ValidateASTInputFilesContent &&
2397           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2398         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2399         if (!MemBuffOrError) {
2400           if (!Complain)
2401             return ModificationType::ModTime;
2402           std::string ErrorStr = "could not get buffer for file '";
2403           ErrorStr += File->getName();
2404           ErrorStr += "'";
2405           Error(ErrorStr);
2406           return ModificationType::ModTime;
2407         }
2408 
2409         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2410         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2411           return ModificationType::None;
2412         return ModificationType::Content;
2413       }
2414       return ModificationType::ModTime;
2415     }
2416     return ModificationType::None;
2417   };
2418 
2419   bool IsOutOfDate = false;
2420   auto FileChange = HasInputFileChanged();
2421   // For an overridden file, there is nothing to validate.
2422   if (!Overridden && FileChange != ModificationType::None) {
2423     if (Complain && !Diags.isDiagnosticInFlight()) {
2424       // Build a list of the PCH imports that got us here (in reverse).
2425       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2426       while (!ImportStack.back()->ImportedBy.empty())
2427         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2428 
2429       // The top-level PCH is stale.
2430       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2431       Diag(diag::err_fe_ast_file_modified)
2432           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2433           << TopLevelPCHName << FileChange;
2434 
2435       // Print the import stack.
2436       if (ImportStack.size() > 1) {
2437         Diag(diag::note_pch_required_by)
2438           << Filename << ImportStack[0]->FileName;
2439         for (unsigned I = 1; I < ImportStack.size(); ++I)
2440           Diag(diag::note_pch_required_by)
2441             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2442       }
2443 
2444       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2445     }
2446 
2447     IsOutOfDate = true;
2448   }
2449   // FIXME: If the file is overridden and we've already opened it,
2450   // issue an error (or split it into a separate FileEntry).
2451 
2452   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2453 
2454   // Note that we've loaded this input file.
2455   F.InputFilesLoaded[ID-1] = IF;
2456   return IF;
2457 }
2458 
2459 /// If we are loading a relocatable PCH or module file, and the filename
2460 /// is not an absolute path, add the system or module root to the beginning of
2461 /// the file name.
2462 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2463   // Resolve relative to the base directory, if we have one.
2464   if (!M.BaseDirectory.empty())
2465     return ResolveImportedPath(Filename, M.BaseDirectory);
2466 }
2467 
2468 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2469   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2470     return;
2471 
2472   SmallString<128> Buffer;
2473   llvm::sys::path::append(Buffer, Prefix, Filename);
2474   Filename.assign(Buffer.begin(), Buffer.end());
2475 }
2476 
2477 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2478   switch (ARR) {
2479   case ASTReader::Failure: return true;
2480   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2481   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2482   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2483   case ASTReader::ConfigurationMismatch:
2484     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2485   case ASTReader::HadErrors: return true;
2486   case ASTReader::Success: return false;
2487   }
2488 
2489   llvm_unreachable("unknown ASTReadResult");
2490 }
2491 
2492 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2493     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2494     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2495     std::string &SuggestedPredefines) {
2496   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2497     // FIXME this drops errors on the floor.
2498     consumeError(std::move(Err));
2499     return Failure;
2500   }
2501 
2502   // Read all of the records in the options block.
2503   RecordData Record;
2504   ASTReadResult Result = Success;
2505   while (true) {
2506     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2507     if (!MaybeEntry) {
2508       // FIXME this drops errors on the floor.
2509       consumeError(MaybeEntry.takeError());
2510       return Failure;
2511     }
2512     llvm::BitstreamEntry Entry = MaybeEntry.get();
2513 
2514     switch (Entry.Kind) {
2515     case llvm::BitstreamEntry::Error:
2516     case llvm::BitstreamEntry::SubBlock:
2517       return Failure;
2518 
2519     case llvm::BitstreamEntry::EndBlock:
2520       return Result;
2521 
2522     case llvm::BitstreamEntry::Record:
2523       // The interesting case.
2524       break;
2525     }
2526 
2527     // Read and process a record.
2528     Record.clear();
2529     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2530     if (!MaybeRecordType) {
2531       // FIXME this drops errors on the floor.
2532       consumeError(MaybeRecordType.takeError());
2533       return Failure;
2534     }
2535     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2536     case LANGUAGE_OPTIONS: {
2537       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2538       if (ParseLanguageOptions(Record, Complain, Listener,
2539                                AllowCompatibleConfigurationMismatch))
2540         Result = ConfigurationMismatch;
2541       break;
2542     }
2543 
2544     case TARGET_OPTIONS: {
2545       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2546       if (ParseTargetOptions(Record, Complain, Listener,
2547                              AllowCompatibleConfigurationMismatch))
2548         Result = ConfigurationMismatch;
2549       break;
2550     }
2551 
2552     case FILE_SYSTEM_OPTIONS: {
2553       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2554       if (!AllowCompatibleConfigurationMismatch &&
2555           ParseFileSystemOptions(Record, Complain, Listener))
2556         Result = ConfigurationMismatch;
2557       break;
2558     }
2559 
2560     case HEADER_SEARCH_OPTIONS: {
2561       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2562       if (!AllowCompatibleConfigurationMismatch &&
2563           ParseHeaderSearchOptions(Record, Complain, Listener))
2564         Result = ConfigurationMismatch;
2565       break;
2566     }
2567 
2568     case PREPROCESSOR_OPTIONS:
2569       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2570       if (!AllowCompatibleConfigurationMismatch &&
2571           ParsePreprocessorOptions(Record, Complain, Listener,
2572                                    SuggestedPredefines))
2573         Result = ConfigurationMismatch;
2574       break;
2575     }
2576   }
2577 }
2578 
2579 ASTReader::ASTReadResult
2580 ASTReader::ReadControlBlock(ModuleFile &F,
2581                             SmallVectorImpl<ImportedModule> &Loaded,
2582                             const ModuleFile *ImportedBy,
2583                             unsigned ClientLoadCapabilities) {
2584   BitstreamCursor &Stream = F.Stream;
2585 
2586   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2587     Error(std::move(Err));
2588     return Failure;
2589   }
2590 
2591   // Lambda to read the unhashed control block the first time it's called.
2592   //
2593   // For PCM files, the unhashed control block cannot be read until after the
2594   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2595   // need to look ahead before reading the IMPORTS record.  For consistency,
2596   // this block is always read somehow (see BitstreamEntry::EndBlock).
2597   bool HasReadUnhashedControlBlock = false;
2598   auto readUnhashedControlBlockOnce = [&]() {
2599     if (!HasReadUnhashedControlBlock) {
2600       HasReadUnhashedControlBlock = true;
2601       if (ASTReadResult Result =
2602               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2603         return Result;
2604     }
2605     return Success;
2606   };
2607 
2608   bool DisableValidation = shouldDisableValidationForFile(F);
2609 
2610   // Read all of the records and blocks in the control block.
2611   RecordData Record;
2612   unsigned NumInputs = 0;
2613   unsigned NumUserInputs = 0;
2614   StringRef BaseDirectoryAsWritten;
2615   while (true) {
2616     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2617     if (!MaybeEntry) {
2618       Error(MaybeEntry.takeError());
2619       return Failure;
2620     }
2621     llvm::BitstreamEntry Entry = MaybeEntry.get();
2622 
2623     switch (Entry.Kind) {
2624     case llvm::BitstreamEntry::Error:
2625       Error("malformed block record in AST file");
2626       return Failure;
2627     case llvm::BitstreamEntry::EndBlock: {
2628       // Validate the module before returning.  This call catches an AST with
2629       // no module name and no imports.
2630       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2631         return Result;
2632 
2633       // Validate input files.
2634       const HeaderSearchOptions &HSOpts =
2635           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2636 
2637       // All user input files reside at the index range [0, NumUserInputs), and
2638       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2639       // loaded module files, ignore missing inputs.
2640       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2641           F.Kind != MK_PrebuiltModule) {
2642         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2643 
2644         // If we are reading a module, we will create a verification timestamp,
2645         // so we verify all input files.  Otherwise, verify only user input
2646         // files.
2647 
2648         unsigned N = NumUserInputs;
2649         if (ValidateSystemInputs ||
2650             (HSOpts.ModulesValidateOncePerBuildSession &&
2651              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2652              F.Kind == MK_ImplicitModule))
2653           N = NumInputs;
2654 
2655         for (unsigned I = 0; I < N; ++I) {
2656           InputFile IF = getInputFile(F, I+1, Complain);
2657           if (!IF.getFile() || IF.isOutOfDate())
2658             return OutOfDate;
2659         }
2660       }
2661 
2662       if (Listener)
2663         Listener->visitModuleFile(F.FileName, F.Kind);
2664 
2665       if (Listener && Listener->needsInputFileVisitation()) {
2666         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2667                                                                 : NumUserInputs;
2668         for (unsigned I = 0; I < N; ++I) {
2669           bool IsSystem = I >= NumUserInputs;
2670           InputFileInfo FI = readInputFileInfo(F, I+1);
2671           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2672                                    F.Kind == MK_ExplicitModule ||
2673                                    F.Kind == MK_PrebuiltModule);
2674         }
2675       }
2676 
2677       return Success;
2678     }
2679 
2680     case llvm::BitstreamEntry::SubBlock:
2681       switch (Entry.ID) {
2682       case INPUT_FILES_BLOCK_ID:
2683         F.InputFilesCursor = Stream;
2684         if (llvm::Error Err = Stream.SkipBlock()) {
2685           Error(std::move(Err));
2686           return Failure;
2687         }
2688         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2689           Error("malformed block record in AST file");
2690           return Failure;
2691         }
2692         continue;
2693 
2694       case OPTIONS_BLOCK_ID:
2695         // If we're reading the first module for this group, check its options
2696         // are compatible with ours. For modules it imports, no further checking
2697         // is required, because we checked them when we built it.
2698         if (Listener && !ImportedBy) {
2699           // Should we allow the configuration of the module file to differ from
2700           // the configuration of the current translation unit in a compatible
2701           // way?
2702           //
2703           // FIXME: Allow this for files explicitly specified with -include-pch.
2704           bool AllowCompatibleConfigurationMismatch =
2705               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2706 
2707           ASTReadResult Result =
2708               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2709                                AllowCompatibleConfigurationMismatch, *Listener,
2710                                SuggestedPredefines);
2711           if (Result == Failure) {
2712             Error("malformed block record in AST file");
2713             return Result;
2714           }
2715 
2716           if (DisableValidation ||
2717               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2718             Result = Success;
2719 
2720           // If we can't load the module, exit early since we likely
2721           // will rebuild the module anyway. The stream may be in the
2722           // middle of a block.
2723           if (Result != Success)
2724             return Result;
2725         } else if (llvm::Error Err = Stream.SkipBlock()) {
2726           Error(std::move(Err));
2727           return Failure;
2728         }
2729         continue;
2730 
2731       default:
2732         if (llvm::Error Err = Stream.SkipBlock()) {
2733           Error(std::move(Err));
2734           return Failure;
2735         }
2736         continue;
2737       }
2738 
2739     case llvm::BitstreamEntry::Record:
2740       // The interesting case.
2741       break;
2742     }
2743 
2744     // Read and process a record.
2745     Record.clear();
2746     StringRef Blob;
2747     Expected<unsigned> MaybeRecordType =
2748         Stream.readRecord(Entry.ID, Record, &Blob);
2749     if (!MaybeRecordType) {
2750       Error(MaybeRecordType.takeError());
2751       return Failure;
2752     }
2753     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2754     case METADATA: {
2755       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2756         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2757           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2758                                         : diag::err_pch_version_too_new);
2759         return VersionMismatch;
2760       }
2761 
2762       bool hasErrors = Record[6];
2763       if (hasErrors && !DisableValidation) {
2764         // If requested by the caller and the module hasn't already been read
2765         // or compiled, mark modules on error as out-of-date.
2766         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2767             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2768           return OutOfDate;
2769 
2770         if (!AllowASTWithCompilerErrors) {
2771           Diag(diag::err_pch_with_compiler_errors);
2772           return HadErrors;
2773         }
2774       }
2775       if (hasErrors) {
2776         Diags.ErrorOccurred = true;
2777         Diags.UncompilableErrorOccurred = true;
2778         Diags.UnrecoverableErrorOccurred = true;
2779       }
2780 
2781       F.RelocatablePCH = Record[4];
2782       // Relative paths in a relocatable PCH are relative to our sysroot.
2783       if (F.RelocatablePCH)
2784         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2785 
2786       F.HasTimestamps = Record[5];
2787 
2788       const std::string &CurBranch = getClangFullRepositoryVersion();
2789       StringRef ASTBranch = Blob;
2790       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2791         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2792           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2793         return VersionMismatch;
2794       }
2795       break;
2796     }
2797 
2798     case IMPORTS: {
2799       // Validate the AST before processing any imports (otherwise, untangling
2800       // them can be error-prone and expensive).  A module will have a name and
2801       // will already have been validated, but this catches the PCH case.
2802       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2803         return Result;
2804 
2805       // Load each of the imported PCH files.
2806       unsigned Idx = 0, N = Record.size();
2807       while (Idx < N) {
2808         // Read information about the AST file.
2809         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2810         // The import location will be the local one for now; we will adjust
2811         // all import locations of module imports after the global source
2812         // location info are setup, in ReadAST.
2813         SourceLocation ImportLoc =
2814             ReadUntranslatedSourceLocation(Record[Idx++]);
2815         off_t StoredSize = (off_t)Record[Idx++];
2816         time_t StoredModTime = (time_t)Record[Idx++];
2817         auto FirstSignatureByte = Record.begin() + Idx;
2818         ASTFileSignature StoredSignature = ASTFileSignature::create(
2819             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2820         Idx += ASTFileSignature::size;
2821 
2822         std::string ImportedName = ReadString(Record, Idx);
2823         std::string ImportedFile;
2824 
2825         // For prebuilt and explicit modules first consult the file map for
2826         // an override. Note that here we don't search prebuilt module
2827         // directories, only the explicit name to file mappings. Also, we will
2828         // still verify the size/signature making sure it is essentially the
2829         // same file but perhaps in a different location.
2830         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2831           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2832             ImportedName, /*FileMapOnly*/ true);
2833 
2834         if (ImportedFile.empty())
2835           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2836           // ModuleCache as when writing.
2837           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2838         else
2839           SkipPath(Record, Idx);
2840 
2841         // If our client can't cope with us being out of date, we can't cope with
2842         // our dependency being missing.
2843         unsigned Capabilities = ClientLoadCapabilities;
2844         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2845           Capabilities &= ~ARR_Missing;
2846 
2847         // Load the AST file.
2848         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2849                                   Loaded, StoredSize, StoredModTime,
2850                                   StoredSignature, Capabilities);
2851 
2852         // If we diagnosed a problem, produce a backtrace.
2853         bool recompilingFinalized =
2854             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2855             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2856         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2857           Diag(diag::note_module_file_imported_by)
2858               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2859         if (recompilingFinalized)
2860           Diag(diag::note_module_file_conflict);
2861 
2862         switch (Result) {
2863         case Failure: return Failure;
2864           // If we have to ignore the dependency, we'll have to ignore this too.
2865         case Missing:
2866         case OutOfDate: return OutOfDate;
2867         case VersionMismatch: return VersionMismatch;
2868         case ConfigurationMismatch: return ConfigurationMismatch;
2869         case HadErrors: return HadErrors;
2870         case Success: break;
2871         }
2872       }
2873       break;
2874     }
2875 
2876     case ORIGINAL_FILE:
2877       F.OriginalSourceFileID = FileID::get(Record[0]);
2878       F.ActualOriginalSourceFileName = std::string(Blob);
2879       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2880       ResolveImportedPath(F, F.OriginalSourceFileName);
2881       break;
2882 
2883     case ORIGINAL_FILE_ID:
2884       F.OriginalSourceFileID = FileID::get(Record[0]);
2885       break;
2886 
2887     case ORIGINAL_PCH_DIR:
2888       F.OriginalDir = std::string(Blob);
2889       break;
2890 
2891     case MODULE_NAME:
2892       F.ModuleName = std::string(Blob);
2893       Diag(diag::remark_module_import)
2894           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2895           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2896       if (Listener)
2897         Listener->ReadModuleName(F.ModuleName);
2898 
2899       // Validate the AST as soon as we have a name so we can exit early on
2900       // failure.
2901       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2902         return Result;
2903 
2904       break;
2905 
2906     case MODULE_DIRECTORY: {
2907       // Save the BaseDirectory as written in the PCM for computing the module
2908       // filename for the ModuleCache.
2909       BaseDirectoryAsWritten = Blob;
2910       assert(!F.ModuleName.empty() &&
2911              "MODULE_DIRECTORY found before MODULE_NAME");
2912       // If we've already loaded a module map file covering this module, we may
2913       // have a better path for it (relative to the current build).
2914       Module *M = PP.getHeaderSearchInfo().lookupModule(
2915           F.ModuleName, /*AllowSearch*/ true,
2916           /*AllowExtraModuleMapSearch*/ true);
2917       if (M && M->Directory) {
2918         // If we're implicitly loading a module, the base directory can't
2919         // change between the build and use.
2920         // Don't emit module relocation error if we have -fno-validate-pch
2921         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2922                   DisableValidationForModuleKind::Module) &&
2923             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2924           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2925           if (!BuildDir || *BuildDir != M->Directory) {
2926             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2927               Diag(diag::err_imported_module_relocated)
2928                   << F.ModuleName << Blob << M->Directory->getName();
2929             return OutOfDate;
2930           }
2931         }
2932         F.BaseDirectory = std::string(M->Directory->getName());
2933       } else {
2934         F.BaseDirectory = std::string(Blob);
2935       }
2936       break;
2937     }
2938 
2939     case MODULE_MAP_FILE:
2940       if (ASTReadResult Result =
2941               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2942         return Result;
2943       break;
2944 
2945     case INPUT_FILE_OFFSETS:
2946       NumInputs = Record[0];
2947       NumUserInputs = Record[1];
2948       F.InputFileOffsets =
2949           (const llvm::support::unaligned_uint64_t *)Blob.data();
2950       F.InputFilesLoaded.resize(NumInputs);
2951       F.NumUserInputFiles = NumUserInputs;
2952       break;
2953     }
2954   }
2955 }
2956 
2957 ASTReader::ASTReadResult
2958 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2959   BitstreamCursor &Stream = F.Stream;
2960 
2961   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2962     Error(std::move(Err));
2963     return Failure;
2964   }
2965   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2966 
2967   // Read all of the records and blocks for the AST file.
2968   RecordData Record;
2969   while (true) {
2970     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2971     if (!MaybeEntry) {
2972       Error(MaybeEntry.takeError());
2973       return Failure;
2974     }
2975     llvm::BitstreamEntry Entry = MaybeEntry.get();
2976 
2977     switch (Entry.Kind) {
2978     case llvm::BitstreamEntry::Error:
2979       Error("error at end of module block in AST file");
2980       return Failure;
2981     case llvm::BitstreamEntry::EndBlock:
2982       // Outside of C++, we do not store a lookup map for the translation unit.
2983       // Instead, mark it as needing a lookup map to be built if this module
2984       // contains any declarations lexically within it (which it always does!).
2985       // This usually has no cost, since we very rarely need the lookup map for
2986       // the translation unit outside C++.
2987       if (ASTContext *Ctx = ContextObj) {
2988         DeclContext *DC = Ctx->getTranslationUnitDecl();
2989         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2990           DC->setMustBuildLookupTable();
2991       }
2992 
2993       return Success;
2994     case llvm::BitstreamEntry::SubBlock:
2995       switch (Entry.ID) {
2996       case DECLTYPES_BLOCK_ID:
2997         // We lazily load the decls block, but we want to set up the
2998         // DeclsCursor cursor to point into it.  Clone our current bitcode
2999         // cursor to it, enter the block and read the abbrevs in that block.
3000         // With the main cursor, we just skip over it.
3001         F.DeclsCursor = Stream;
3002         if (llvm::Error Err = Stream.SkipBlock()) {
3003           Error(std::move(Err));
3004           return Failure;
3005         }
3006         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID,
3007                              &F.DeclsBlockStartOffset)) {
3008           Error("malformed block record in AST file");
3009           return Failure;
3010         }
3011         break;
3012 
3013       case PREPROCESSOR_BLOCK_ID:
3014         F.MacroCursor = Stream;
3015         if (!PP.getExternalSource())
3016           PP.setExternalSource(this);
3017 
3018         if (llvm::Error Err = Stream.SkipBlock()) {
3019           Error(std::move(Err));
3020           return Failure;
3021         }
3022         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
3023           Error("malformed block record in AST file");
3024           return Failure;
3025         }
3026         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3027         break;
3028 
3029       case PREPROCESSOR_DETAIL_BLOCK_ID:
3030         F.PreprocessorDetailCursor = Stream;
3031 
3032         if (llvm::Error Err = Stream.SkipBlock()) {
3033           Error(std::move(Err));
3034           return Failure;
3035         }
3036         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3037                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3038           Error("malformed preprocessor detail record in AST file");
3039           return Failure;
3040         }
3041         F.PreprocessorDetailStartOffset
3042         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3043 
3044         if (!PP.getPreprocessingRecord())
3045           PP.createPreprocessingRecord();
3046         if (!PP.getPreprocessingRecord()->getExternalSource())
3047           PP.getPreprocessingRecord()->SetExternalSource(*this);
3048         break;
3049 
3050       case SOURCE_MANAGER_BLOCK_ID:
3051         if (ReadSourceManagerBlock(F))
3052           return Failure;
3053         break;
3054 
3055       case SUBMODULE_BLOCK_ID:
3056         if (ASTReadResult Result =
3057                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3058           return Result;
3059         break;
3060 
3061       case COMMENTS_BLOCK_ID: {
3062         BitstreamCursor C = Stream;
3063 
3064         if (llvm::Error Err = Stream.SkipBlock()) {
3065           Error(std::move(Err));
3066           return Failure;
3067         }
3068         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3069           Error("malformed comments block in AST file");
3070           return Failure;
3071         }
3072         CommentsCursors.push_back(std::make_pair(C, &F));
3073         break;
3074       }
3075 
3076       default:
3077         if (llvm::Error Err = Stream.SkipBlock()) {
3078           Error(std::move(Err));
3079           return Failure;
3080         }
3081         break;
3082       }
3083       continue;
3084 
3085     case llvm::BitstreamEntry::Record:
3086       // The interesting case.
3087       break;
3088     }
3089 
3090     // Read and process a record.
3091     Record.clear();
3092     StringRef Blob;
3093     Expected<unsigned> MaybeRecordType =
3094         Stream.readRecord(Entry.ID, Record, &Blob);
3095     if (!MaybeRecordType) {
3096       Error(MaybeRecordType.takeError());
3097       return Failure;
3098     }
3099     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3100 
3101     // If we're not loading an AST context, we don't care about most records.
3102     if (!ContextObj) {
3103       switch (RecordType) {
3104       case IDENTIFIER_TABLE:
3105       case IDENTIFIER_OFFSET:
3106       case INTERESTING_IDENTIFIERS:
3107       case STATISTICS:
3108       case PP_CONDITIONAL_STACK:
3109       case PP_COUNTER_VALUE:
3110       case SOURCE_LOCATION_OFFSETS:
3111       case MODULE_OFFSET_MAP:
3112       case SOURCE_MANAGER_LINE_TABLE:
3113       case SOURCE_LOCATION_PRELOADS:
3114       case PPD_ENTITIES_OFFSETS:
3115       case HEADER_SEARCH_TABLE:
3116       case IMPORTED_MODULES:
3117       case MACRO_OFFSET:
3118         break;
3119       default:
3120         continue;
3121       }
3122     }
3123 
3124     switch (RecordType) {
3125     default:  // Default behavior: ignore.
3126       break;
3127 
3128     case TYPE_OFFSET: {
3129       if (F.LocalNumTypes != 0) {
3130         Error("duplicate TYPE_OFFSET record in AST file");
3131         return Failure;
3132       }
3133       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3134       F.LocalNumTypes = Record[0];
3135       unsigned LocalBaseTypeIndex = Record[1];
3136       F.BaseTypeIndex = getTotalNumTypes();
3137 
3138       if (F.LocalNumTypes > 0) {
3139         // Introduce the global -> local mapping for types within this module.
3140         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3141 
3142         // Introduce the local -> global mapping for types within this module.
3143         F.TypeRemap.insertOrReplace(
3144           std::make_pair(LocalBaseTypeIndex,
3145                          F.BaseTypeIndex - LocalBaseTypeIndex));
3146 
3147         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3148       }
3149       break;
3150     }
3151 
3152     case DECL_OFFSET: {
3153       if (F.LocalNumDecls != 0) {
3154         Error("duplicate DECL_OFFSET record in AST file");
3155         return Failure;
3156       }
3157       F.DeclOffsets = (const DeclOffset *)Blob.data();
3158       F.LocalNumDecls = Record[0];
3159       unsigned LocalBaseDeclID = Record[1];
3160       F.BaseDeclID = getTotalNumDecls();
3161 
3162       if (F.LocalNumDecls > 0) {
3163         // Introduce the global -> local mapping for declarations within this
3164         // module.
3165         GlobalDeclMap.insert(
3166           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3167 
3168         // Introduce the local -> global mapping for declarations within this
3169         // module.
3170         F.DeclRemap.insertOrReplace(
3171           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3172 
3173         // Introduce the global -> local mapping for declarations within this
3174         // module.
3175         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3176 
3177         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3178       }
3179       break;
3180     }
3181 
3182     case TU_UPDATE_LEXICAL: {
3183       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3184       LexicalContents Contents(
3185           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3186               Blob.data()),
3187           static_cast<unsigned int>(Blob.size() / 4));
3188       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3189       TU->setHasExternalLexicalStorage(true);
3190       break;
3191     }
3192 
3193     case UPDATE_VISIBLE: {
3194       unsigned Idx = 0;
3195       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3196       auto *Data = (const unsigned char*)Blob.data();
3197       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3198       // If we've already loaded the decl, perform the updates when we finish
3199       // loading this block.
3200       if (Decl *D = GetExistingDecl(ID))
3201         PendingUpdateRecords.push_back(
3202             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3203       break;
3204     }
3205 
3206     case IDENTIFIER_TABLE:
3207       F.IdentifierTableData =
3208           reinterpret_cast<const unsigned char *>(Blob.data());
3209       if (Record[0]) {
3210         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3211             F.IdentifierTableData + Record[0],
3212             F.IdentifierTableData + sizeof(uint32_t),
3213             F.IdentifierTableData,
3214             ASTIdentifierLookupTrait(*this, F));
3215 
3216         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3217       }
3218       break;
3219 
3220     case IDENTIFIER_OFFSET: {
3221       if (F.LocalNumIdentifiers != 0) {
3222         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3223         return Failure;
3224       }
3225       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3226       F.LocalNumIdentifiers = Record[0];
3227       unsigned LocalBaseIdentifierID = Record[1];
3228       F.BaseIdentifierID = getTotalNumIdentifiers();
3229 
3230       if (F.LocalNumIdentifiers > 0) {
3231         // Introduce the global -> local mapping for identifiers within this
3232         // module.
3233         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3234                                                   &F));
3235 
3236         // Introduce the local -> global mapping for identifiers within this
3237         // module.
3238         F.IdentifierRemap.insertOrReplace(
3239           std::make_pair(LocalBaseIdentifierID,
3240                          F.BaseIdentifierID - LocalBaseIdentifierID));
3241 
3242         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3243                                  + F.LocalNumIdentifiers);
3244       }
3245       break;
3246     }
3247 
3248     case INTERESTING_IDENTIFIERS:
3249       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3250       break;
3251 
3252     case EAGERLY_DESERIALIZED_DECLS:
3253       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3254       // about "interesting" decls (for instance, if we're building a module).
3255       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3256         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3257       break;
3258 
3259     case MODULAR_CODEGEN_DECLS:
3260       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3261       // them (ie: if we're not codegenerating this module).
3262       if (F.Kind == MK_MainFile ||
3263           getContext().getLangOpts().BuildingPCHWithObjectFile)
3264         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3265           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3266       break;
3267 
3268     case SPECIAL_TYPES:
3269       if (SpecialTypes.empty()) {
3270         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3271           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3272         break;
3273       }
3274 
3275       if (SpecialTypes.size() != Record.size()) {
3276         Error("invalid special-types record");
3277         return Failure;
3278       }
3279 
3280       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3281         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3282         if (!SpecialTypes[I])
3283           SpecialTypes[I] = ID;
3284         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3285         // merge step?
3286       }
3287       break;
3288 
3289     case STATISTICS:
3290       TotalNumStatements += Record[0];
3291       TotalNumMacros += Record[1];
3292       TotalLexicalDeclContexts += Record[2];
3293       TotalVisibleDeclContexts += Record[3];
3294       break;
3295 
3296     case UNUSED_FILESCOPED_DECLS:
3297       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3298         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3299       break;
3300 
3301     case DELEGATING_CTORS:
3302       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3303         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3304       break;
3305 
3306     case WEAK_UNDECLARED_IDENTIFIERS:
3307       if (Record.size() % 4 != 0) {
3308         Error("invalid weak identifiers record");
3309         return Failure;
3310       }
3311 
3312       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3313       // files. This isn't the way to do it :)
3314       WeakUndeclaredIdentifiers.clear();
3315 
3316       // Translate the weak, undeclared identifiers into global IDs.
3317       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3318         WeakUndeclaredIdentifiers.push_back(
3319           getGlobalIdentifierID(F, Record[I++]));
3320         WeakUndeclaredIdentifiers.push_back(
3321           getGlobalIdentifierID(F, Record[I++]));
3322         WeakUndeclaredIdentifiers.push_back(
3323           ReadSourceLocation(F, Record, I).getRawEncoding());
3324         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3325       }
3326       break;
3327 
3328     case SELECTOR_OFFSETS: {
3329       F.SelectorOffsets = (const uint32_t *)Blob.data();
3330       F.LocalNumSelectors = Record[0];
3331       unsigned LocalBaseSelectorID = Record[1];
3332       F.BaseSelectorID = getTotalNumSelectors();
3333 
3334       if (F.LocalNumSelectors > 0) {
3335         // Introduce the global -> local mapping for selectors within this
3336         // module.
3337         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3338 
3339         // Introduce the local -> global mapping for selectors within this
3340         // module.
3341         F.SelectorRemap.insertOrReplace(
3342           std::make_pair(LocalBaseSelectorID,
3343                          F.BaseSelectorID - LocalBaseSelectorID));
3344 
3345         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3346       }
3347       break;
3348     }
3349 
3350     case METHOD_POOL:
3351       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3352       if (Record[0])
3353         F.SelectorLookupTable
3354           = ASTSelectorLookupTable::Create(
3355                         F.SelectorLookupTableData + Record[0],
3356                         F.SelectorLookupTableData,
3357                         ASTSelectorLookupTrait(*this, F));
3358       TotalNumMethodPoolEntries += Record[1];
3359       break;
3360 
3361     case REFERENCED_SELECTOR_POOL:
3362       if (!Record.empty()) {
3363         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3364           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3365                                                                 Record[Idx++]));
3366           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3367                                               getRawEncoding());
3368         }
3369       }
3370       break;
3371 
3372     case PP_CONDITIONAL_STACK:
3373       if (!Record.empty()) {
3374         unsigned Idx = 0, End = Record.size() - 1;
3375         bool ReachedEOFWhileSkipping = Record[Idx++];
3376         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3377         if (ReachedEOFWhileSkipping) {
3378           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3379           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3380           bool FoundNonSkipPortion = Record[Idx++];
3381           bool FoundElse = Record[Idx++];
3382           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3383           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3384                            FoundElse, ElseLoc);
3385         }
3386         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3387         while (Idx < End) {
3388           auto Loc = ReadSourceLocation(F, Record, Idx);
3389           bool WasSkipping = Record[Idx++];
3390           bool FoundNonSkip = Record[Idx++];
3391           bool FoundElse = Record[Idx++];
3392           ConditionalStack.push_back(
3393               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3394         }
3395         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3396       }
3397       break;
3398 
3399     case PP_COUNTER_VALUE:
3400       if (!Record.empty() && Listener)
3401         Listener->ReadCounter(F, Record[0]);
3402       break;
3403 
3404     case FILE_SORTED_DECLS:
3405       F.FileSortedDecls = (const DeclID *)Blob.data();
3406       F.NumFileSortedDecls = Record[0];
3407       break;
3408 
3409     case SOURCE_LOCATION_OFFSETS: {
3410       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3411       F.LocalNumSLocEntries = Record[0];
3412       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3413       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3414       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3415           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3416                                               SLocSpaceSize);
3417       if (!F.SLocEntryBaseID) {
3418         Error("ran out of source locations");
3419         break;
3420       }
3421       // Make our entry in the range map. BaseID is negative and growing, so
3422       // we invert it. Because we invert it, though, we need the other end of
3423       // the range.
3424       unsigned RangeStart =
3425           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3426       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3427       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3428 
3429       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3430       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3431       GlobalSLocOffsetMap.insert(
3432           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3433                            - SLocSpaceSize,&F));
3434 
3435       // Initialize the remapping table.
3436       // Invalid stays invalid.
3437       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3438       // This module. Base was 2 when being compiled.
3439       F.SLocRemap.insertOrReplace(std::make_pair(
3440           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3441 
3442       TotalNumSLocEntries += F.LocalNumSLocEntries;
3443       break;
3444     }
3445 
3446     case MODULE_OFFSET_MAP:
3447       F.ModuleOffsetMap = Blob;
3448       break;
3449 
3450     case SOURCE_MANAGER_LINE_TABLE:
3451       if (ParseLineTable(F, Record)) {
3452         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3453         return Failure;
3454       }
3455       break;
3456 
3457     case SOURCE_LOCATION_PRELOADS: {
3458       // Need to transform from the local view (1-based IDs) to the global view,
3459       // which is based off F.SLocEntryBaseID.
3460       if (!F.PreloadSLocEntries.empty()) {
3461         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3462         return Failure;
3463       }
3464 
3465       F.PreloadSLocEntries.swap(Record);
3466       break;
3467     }
3468 
3469     case EXT_VECTOR_DECLS:
3470       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3471         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3472       break;
3473 
3474     case VTABLE_USES:
3475       if (Record.size() % 3 != 0) {
3476         Error("Invalid VTABLE_USES record");
3477         return Failure;
3478       }
3479 
3480       // Later tables overwrite earlier ones.
3481       // FIXME: Modules will have some trouble with this. This is clearly not
3482       // the right way to do this.
3483       VTableUses.clear();
3484 
3485       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3486         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3487         VTableUses.push_back(
3488           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3489         VTableUses.push_back(Record[Idx++]);
3490       }
3491       break;
3492 
3493     case PENDING_IMPLICIT_INSTANTIATIONS:
3494       if (PendingInstantiations.size() % 2 != 0) {
3495         Error("Invalid existing PendingInstantiations");
3496         return Failure;
3497       }
3498 
3499       if (Record.size() % 2 != 0) {
3500         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3501         return Failure;
3502       }
3503 
3504       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3505         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3506         PendingInstantiations.push_back(
3507           ReadSourceLocation(F, Record, I).getRawEncoding());
3508       }
3509       break;
3510 
3511     case SEMA_DECL_REFS:
3512       if (Record.size() != 3) {
3513         Error("Invalid SEMA_DECL_REFS block");
3514         return Failure;
3515       }
3516       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3517         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3518       break;
3519 
3520     case PPD_ENTITIES_OFFSETS: {
3521       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3522       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3523       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3524 
3525       unsigned LocalBasePreprocessedEntityID = Record[0];
3526 
3527       unsigned StartingID;
3528       if (!PP.getPreprocessingRecord())
3529         PP.createPreprocessingRecord();
3530       if (!PP.getPreprocessingRecord()->getExternalSource())
3531         PP.getPreprocessingRecord()->SetExternalSource(*this);
3532       StartingID
3533         = PP.getPreprocessingRecord()
3534             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3535       F.BasePreprocessedEntityID = StartingID;
3536 
3537       if (F.NumPreprocessedEntities > 0) {
3538         // Introduce the global -> local mapping for preprocessed entities in
3539         // this module.
3540         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3541 
3542         // Introduce the local -> global mapping for preprocessed entities in
3543         // this module.
3544         F.PreprocessedEntityRemap.insertOrReplace(
3545           std::make_pair(LocalBasePreprocessedEntityID,
3546             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3547       }
3548 
3549       break;
3550     }
3551 
3552     case PPD_SKIPPED_RANGES: {
3553       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3554       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3555       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3556 
3557       if (!PP.getPreprocessingRecord())
3558         PP.createPreprocessingRecord();
3559       if (!PP.getPreprocessingRecord()->getExternalSource())
3560         PP.getPreprocessingRecord()->SetExternalSource(*this);
3561       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3562           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3563 
3564       if (F.NumPreprocessedSkippedRanges > 0)
3565         GlobalSkippedRangeMap.insert(
3566             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3567       break;
3568     }
3569 
3570     case DECL_UPDATE_OFFSETS:
3571       if (Record.size() % 2 != 0) {
3572         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3573         return Failure;
3574       }
3575       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3576         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3577         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3578 
3579         // If we've already loaded the decl, perform the updates when we finish
3580         // loading this block.
3581         if (Decl *D = GetExistingDecl(ID))
3582           PendingUpdateRecords.push_back(
3583               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3584       }
3585       break;
3586 
3587     case OBJC_CATEGORIES_MAP:
3588       if (F.LocalNumObjCCategoriesInMap != 0) {
3589         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3590         return Failure;
3591       }
3592 
3593       F.LocalNumObjCCategoriesInMap = Record[0];
3594       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3595       break;
3596 
3597     case OBJC_CATEGORIES:
3598       F.ObjCCategories.swap(Record);
3599       break;
3600 
3601     case CUDA_SPECIAL_DECL_REFS:
3602       // Later tables overwrite earlier ones.
3603       // FIXME: Modules will have trouble with this.
3604       CUDASpecialDeclRefs.clear();
3605       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3606         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3607       break;
3608 
3609     case HEADER_SEARCH_TABLE:
3610       F.HeaderFileInfoTableData = Blob.data();
3611       F.LocalNumHeaderFileInfos = Record[1];
3612       if (Record[0]) {
3613         F.HeaderFileInfoTable
3614           = HeaderFileInfoLookupTable::Create(
3615                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3616                    (const unsigned char *)F.HeaderFileInfoTableData,
3617                    HeaderFileInfoTrait(*this, F,
3618                                        &PP.getHeaderSearchInfo(),
3619                                        Blob.data() + Record[2]));
3620 
3621         PP.getHeaderSearchInfo().SetExternalSource(this);
3622         if (!PP.getHeaderSearchInfo().getExternalLookup())
3623           PP.getHeaderSearchInfo().SetExternalLookup(this);
3624       }
3625       break;
3626 
3627     case FP_PRAGMA_OPTIONS:
3628       // Later tables overwrite earlier ones.
3629       FPPragmaOptions.swap(Record);
3630       break;
3631 
3632     case OPENCL_EXTENSIONS:
3633       for (unsigned I = 0, E = Record.size(); I != E; ) {
3634         auto Name = ReadString(Record, I);
3635         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3636         OptInfo.Supported = Record[I++] != 0;
3637         OptInfo.Enabled = Record[I++] != 0;
3638         OptInfo.WithPragma = Record[I++] != 0;
3639         OptInfo.Avail = Record[I++];
3640         OptInfo.Core = Record[I++];
3641         OptInfo.Opt = Record[I++];
3642       }
3643       break;
3644 
3645     case TENTATIVE_DEFINITIONS:
3646       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3647         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3648       break;
3649 
3650     case KNOWN_NAMESPACES:
3651       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3652         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3653       break;
3654 
3655     case UNDEFINED_BUT_USED:
3656       if (UndefinedButUsed.size() % 2 != 0) {
3657         Error("Invalid existing UndefinedButUsed");
3658         return Failure;
3659       }
3660 
3661       if (Record.size() % 2 != 0) {
3662         Error("invalid undefined-but-used record");
3663         return Failure;
3664       }
3665       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3666         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3667         UndefinedButUsed.push_back(
3668             ReadSourceLocation(F, Record, I).getRawEncoding());
3669       }
3670       break;
3671 
3672     case DELETE_EXPRS_TO_ANALYZE:
3673       for (unsigned I = 0, N = Record.size(); I != N;) {
3674         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3675         const uint64_t Count = Record[I++];
3676         DelayedDeleteExprs.push_back(Count);
3677         for (uint64_t C = 0; C < Count; ++C) {
3678           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3679           bool IsArrayForm = Record[I++] == 1;
3680           DelayedDeleteExprs.push_back(IsArrayForm);
3681         }
3682       }
3683       break;
3684 
3685     case IMPORTED_MODULES:
3686       if (!F.isModule()) {
3687         // If we aren't loading a module (which has its own exports), make
3688         // all of the imported modules visible.
3689         // FIXME: Deal with macros-only imports.
3690         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3691           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3692           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3693           if (GlobalID) {
3694             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3695             if (DeserializationListener)
3696               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3697           }
3698         }
3699       }
3700       break;
3701 
3702     case MACRO_OFFSET: {
3703       if (F.LocalNumMacros != 0) {
3704         Error("duplicate MACRO_OFFSET record in AST file");
3705         return Failure;
3706       }
3707       F.MacroOffsets = (const uint32_t *)Blob.data();
3708       F.LocalNumMacros = Record[0];
3709       unsigned LocalBaseMacroID = Record[1];
3710       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3711       F.BaseMacroID = getTotalNumMacros();
3712 
3713       if (F.LocalNumMacros > 0) {
3714         // Introduce the global -> local mapping for macros within this module.
3715         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3716 
3717         // Introduce the local -> global mapping for macros within this module.
3718         F.MacroRemap.insertOrReplace(
3719           std::make_pair(LocalBaseMacroID,
3720                          F.BaseMacroID - LocalBaseMacroID));
3721 
3722         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3723       }
3724       break;
3725     }
3726 
3727     case LATE_PARSED_TEMPLATE:
3728       LateParsedTemplates.emplace_back(
3729           std::piecewise_construct, std::forward_as_tuple(&F),
3730           std::forward_as_tuple(Record.begin(), Record.end()));
3731       break;
3732 
3733     case OPTIMIZE_PRAGMA_OPTIONS:
3734       if (Record.size() != 1) {
3735         Error("invalid pragma optimize record");
3736         return Failure;
3737       }
3738       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3739       break;
3740 
3741     case MSSTRUCT_PRAGMA_OPTIONS:
3742       if (Record.size() != 1) {
3743         Error("invalid pragma ms_struct record");
3744         return Failure;
3745       }
3746       PragmaMSStructState = Record[0];
3747       break;
3748 
3749     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3750       if (Record.size() != 2) {
3751         Error("invalid pragma ms_struct record");
3752         return Failure;
3753       }
3754       PragmaMSPointersToMembersState = Record[0];
3755       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3756       break;
3757 
3758     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3759       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3760         UnusedLocalTypedefNameCandidates.push_back(
3761             getGlobalDeclID(F, Record[I]));
3762       break;
3763 
3764     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3765       if (Record.size() != 1) {
3766         Error("invalid cuda pragma options record");
3767         return Failure;
3768       }
3769       ForceCUDAHostDeviceDepth = Record[0];
3770       break;
3771 
3772     case ALIGN_PACK_PRAGMA_OPTIONS: {
3773       if (Record.size() < 3) {
3774         Error("invalid pragma pack record");
3775         return Failure;
3776       }
3777       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3778       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3779       unsigned NumStackEntries = Record[2];
3780       unsigned Idx = 3;
3781       // Reset the stack when importing a new module.
3782       PragmaAlignPackStack.clear();
3783       for (unsigned I = 0; I < NumStackEntries; ++I) {
3784         PragmaAlignPackStackEntry Entry;
3785         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3786         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3787         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3788         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3789         Entry.SlotLabel = PragmaAlignPackStrings.back();
3790         PragmaAlignPackStack.push_back(Entry);
3791       }
3792       break;
3793     }
3794 
3795     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3796       if (Record.size() < 3) {
3797         Error("invalid pragma pack record");
3798         return Failure;
3799       }
3800       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3801       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3802       unsigned NumStackEntries = Record[2];
3803       unsigned Idx = 3;
3804       // Reset the stack when importing a new module.
3805       FpPragmaStack.clear();
3806       for (unsigned I = 0; I < NumStackEntries; ++I) {
3807         FpPragmaStackEntry Entry;
3808         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3809         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3810         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3811         FpPragmaStrings.push_back(ReadString(Record, Idx));
3812         Entry.SlotLabel = FpPragmaStrings.back();
3813         FpPragmaStack.push_back(Entry);
3814       }
3815       break;
3816     }
3817 
3818     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3819       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3820         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3821       break;
3822     }
3823   }
3824 }
3825 
3826 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3827   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3828 
3829   // Additional remapping information.
3830   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3831   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3832   F.ModuleOffsetMap = StringRef();
3833 
3834   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3835   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3836     F.SLocRemap.insert(std::make_pair(0U, 0));
3837     F.SLocRemap.insert(std::make_pair(2U, 1));
3838   }
3839 
3840   // Continuous range maps we may be updating in our module.
3841   using SLocRemapBuilder =
3842       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3843                          2>::Builder;
3844   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3845   SLocRemapBuilder SLocRemap(F.SLocRemap);
3846   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3847   RemapBuilder MacroRemap(F.MacroRemap);
3848   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3849   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3850   RemapBuilder SelectorRemap(F.SelectorRemap);
3851   RemapBuilder DeclRemap(F.DeclRemap);
3852   RemapBuilder TypeRemap(F.TypeRemap);
3853 
3854   while (Data < DataEnd) {
3855     // FIXME: Looking up dependency modules by filename is horrible. Let's
3856     // start fixing this with prebuilt, explicit and implicit modules and see
3857     // how it goes...
3858     using namespace llvm::support;
3859     ModuleKind Kind = static_cast<ModuleKind>(
3860       endian::readNext<uint8_t, little, unaligned>(Data));
3861     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3862     StringRef Name = StringRef((const char*)Data, Len);
3863     Data += Len;
3864     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3865                               Kind == MK_ImplicitModule
3866                           ? ModuleMgr.lookupByModuleName(Name)
3867                           : ModuleMgr.lookupByFileName(Name));
3868     if (!OM) {
3869       std::string Msg =
3870           "SourceLocation remap refers to unknown module, cannot find ";
3871       Msg.append(std::string(Name));
3872       Error(Msg);
3873       return;
3874     }
3875 
3876     SourceLocation::UIntTy SLocOffset =
3877         endian::readNext<uint32_t, little, unaligned>(Data);
3878     uint32_t IdentifierIDOffset =
3879         endian::readNext<uint32_t, little, unaligned>(Data);
3880     uint32_t MacroIDOffset =
3881         endian::readNext<uint32_t, little, unaligned>(Data);
3882     uint32_t PreprocessedEntityIDOffset =
3883         endian::readNext<uint32_t, little, unaligned>(Data);
3884     uint32_t SubmoduleIDOffset =
3885         endian::readNext<uint32_t, little, unaligned>(Data);
3886     uint32_t SelectorIDOffset =
3887         endian::readNext<uint32_t, little, unaligned>(Data);
3888     uint32_t DeclIDOffset =
3889         endian::readNext<uint32_t, little, unaligned>(Data);
3890     uint32_t TypeIndexOffset =
3891         endian::readNext<uint32_t, little, unaligned>(Data);
3892 
3893     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3894                          RemapBuilder &Remap) {
3895       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3896       if (Offset != None)
3897         Remap.insert(std::make_pair(Offset,
3898                                     static_cast<int>(BaseOffset - Offset)));
3899     };
3900 
3901     constexpr SourceLocation::UIntTy SLocNone =
3902         std::numeric_limits<SourceLocation::UIntTy>::max();
3903     if (SLocOffset != SLocNone)
3904       SLocRemap.insert(std::make_pair(
3905           SLocOffset, static_cast<SourceLocation::IntTy>(
3906                           OM->SLocEntryBaseOffset - SLocOffset)));
3907 
3908     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3909     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3910     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3911               PreprocessedEntityRemap);
3912     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3913     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3914     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3915     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3916 
3917     // Global -> local mappings.
3918     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3919   }
3920 }
3921 
3922 ASTReader::ASTReadResult
3923 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3924                                   const ModuleFile *ImportedBy,
3925                                   unsigned ClientLoadCapabilities) {
3926   unsigned Idx = 0;
3927   F.ModuleMapPath = ReadPath(F, Record, Idx);
3928 
3929   // Try to resolve ModuleName in the current header search context and
3930   // verify that it is found in the same module map file as we saved. If the
3931   // top-level AST file is a main file, skip this check because there is no
3932   // usable header search context.
3933   assert(!F.ModuleName.empty() &&
3934          "MODULE_NAME should come before MODULE_MAP_FILE");
3935   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3936     // An implicitly-loaded module file should have its module listed in some
3937     // module map file that we've already loaded.
3938     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3939     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3940     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3941     // Don't emit module relocation error if we have -fno-validate-pch
3942     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3943               DisableValidationForModuleKind::Module) &&
3944         !ModMap) {
3945       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3946         if (auto ASTFE = M ? M->getASTFile() : None) {
3947           // This module was defined by an imported (explicit) module.
3948           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3949                                                << ASTFE->getName();
3950         } else {
3951           // This module was built with a different module map.
3952           Diag(diag::err_imported_module_not_found)
3953               << F.ModuleName << F.FileName
3954               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3955               << !ImportedBy;
3956           // In case it was imported by a PCH, there's a chance the user is
3957           // just missing to include the search path to the directory containing
3958           // the modulemap.
3959           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3960             Diag(diag::note_imported_by_pch_module_not_found)
3961                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3962         }
3963       }
3964       return OutOfDate;
3965     }
3966 
3967     assert(M && M->Name == F.ModuleName && "found module with different name");
3968 
3969     // Check the primary module map file.
3970     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3971     if (!StoredModMap || *StoredModMap != ModMap) {
3972       assert(ModMap && "found module is missing module map file");
3973       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3974              "top-level import should be verified");
3975       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3976       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3977         Diag(diag::err_imported_module_modmap_changed)
3978             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3979             << ModMap->getName() << F.ModuleMapPath << NotImported;
3980       return OutOfDate;
3981     }
3982 
3983     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3984     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3985       // FIXME: we should use input files rather than storing names.
3986       std::string Filename = ReadPath(F, Record, Idx);
3987       auto SF = FileMgr.getFile(Filename, false, false);
3988       if (!SF) {
3989         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3990           Error("could not find file '" + Filename +"' referenced by AST file");
3991         return OutOfDate;
3992       }
3993       AdditionalStoredMaps.insert(*SF);
3994     }
3995 
3996     // Check any additional module map files (e.g. module.private.modulemap)
3997     // that are not in the pcm.
3998     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3999       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
4000         // Remove files that match
4001         // Note: SmallPtrSet::erase is really remove
4002         if (!AdditionalStoredMaps.erase(ModMap)) {
4003           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
4004             Diag(diag::err_module_different_modmap)
4005               << F.ModuleName << /*new*/0 << ModMap->getName();
4006           return OutOfDate;
4007         }
4008       }
4009     }
4010 
4011     // Check any additional module map files that are in the pcm, but not
4012     // found in header search. Cases that match are already removed.
4013     for (const FileEntry *ModMap : AdditionalStoredMaps) {
4014       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
4015         Diag(diag::err_module_different_modmap)
4016           << F.ModuleName << /*not new*/1 << ModMap->getName();
4017       return OutOfDate;
4018     }
4019   }
4020 
4021   if (Listener)
4022     Listener->ReadModuleMapFile(F.ModuleMapPath);
4023   return Success;
4024 }
4025 
4026 /// Move the given method to the back of the global list of methods.
4027 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4028   // Find the entry for this selector in the method pool.
4029   Sema::GlobalMethodPool::iterator Known
4030     = S.MethodPool.find(Method->getSelector());
4031   if (Known == S.MethodPool.end())
4032     return;
4033 
4034   // Retrieve the appropriate method list.
4035   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4036                                                     : Known->second.second;
4037   bool Found = false;
4038   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4039     if (!Found) {
4040       if (List->getMethod() == Method) {
4041         Found = true;
4042       } else {
4043         // Keep searching.
4044         continue;
4045       }
4046     }
4047 
4048     if (List->getNext())
4049       List->setMethod(List->getNext()->getMethod());
4050     else
4051       List->setMethod(Method);
4052   }
4053 }
4054 
4055 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4056   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4057   for (Decl *D : Names) {
4058     bool wasHidden = !D->isUnconditionallyVisible();
4059     D->setVisibleDespiteOwningModule();
4060 
4061     if (wasHidden && SemaObj) {
4062       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4063         moveMethodToBackOfGlobalList(*SemaObj, Method);
4064       }
4065     }
4066   }
4067 }
4068 
4069 void ASTReader::makeModuleVisible(Module *Mod,
4070                                   Module::NameVisibilityKind NameVisibility,
4071                                   SourceLocation ImportLoc) {
4072   llvm::SmallPtrSet<Module *, 4> Visited;
4073   SmallVector<Module *, 4> Stack;
4074   Stack.push_back(Mod);
4075   while (!Stack.empty()) {
4076     Mod = Stack.pop_back_val();
4077 
4078     if (NameVisibility <= Mod->NameVisibility) {
4079       // This module already has this level of visibility (or greater), so
4080       // there is nothing more to do.
4081       continue;
4082     }
4083 
4084     if (Mod->isUnimportable()) {
4085       // Modules that aren't importable cannot be made visible.
4086       continue;
4087     }
4088 
4089     // Update the module's name visibility.
4090     Mod->NameVisibility = NameVisibility;
4091 
4092     // If we've already deserialized any names from this module,
4093     // mark them as visible.
4094     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4095     if (Hidden != HiddenNamesMap.end()) {
4096       auto HiddenNames = std::move(*Hidden);
4097       HiddenNamesMap.erase(Hidden);
4098       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4099       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4100              "making names visible added hidden names");
4101     }
4102 
4103     // Push any exported modules onto the stack to be marked as visible.
4104     SmallVector<Module *, 16> Exports;
4105     Mod->getExportedModules(Exports);
4106     for (SmallVectorImpl<Module *>::iterator
4107            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4108       Module *Exported = *I;
4109       if (Visited.insert(Exported).second)
4110         Stack.push_back(Exported);
4111     }
4112   }
4113 }
4114 
4115 /// We've merged the definition \p MergedDef into the existing definition
4116 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4117 /// visible.
4118 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4119                                           NamedDecl *MergedDef) {
4120   if (!Def->isUnconditionallyVisible()) {
4121     // If MergedDef is visible or becomes visible, make the definition visible.
4122     if (MergedDef->isUnconditionallyVisible())
4123       Def->setVisibleDespiteOwningModule();
4124     else {
4125       getContext().mergeDefinitionIntoModule(
4126           Def, MergedDef->getImportedOwningModule(),
4127           /*NotifyListeners*/ false);
4128       PendingMergedDefinitionsToDeduplicate.insert(Def);
4129     }
4130   }
4131 }
4132 
4133 bool ASTReader::loadGlobalIndex() {
4134   if (GlobalIndex)
4135     return false;
4136 
4137   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4138       !PP.getLangOpts().Modules)
4139     return true;
4140 
4141   // Try to load the global index.
4142   TriedLoadingGlobalIndex = true;
4143   StringRef ModuleCachePath
4144     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4145   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4146       GlobalModuleIndex::readIndex(ModuleCachePath);
4147   if (llvm::Error Err = std::move(Result.second)) {
4148     assert(!Result.first);
4149     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4150     return true;
4151   }
4152 
4153   GlobalIndex.reset(Result.first);
4154   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4155   return false;
4156 }
4157 
4158 bool ASTReader::isGlobalIndexUnavailable() const {
4159   return PP.getLangOpts().Modules && UseGlobalIndex &&
4160          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4161 }
4162 
4163 static void updateModuleTimestamp(ModuleFile &MF) {
4164   // Overwrite the timestamp file contents so that file's mtime changes.
4165   std::string TimestampFilename = MF.getTimestampFilename();
4166   std::error_code EC;
4167   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4168                           llvm::sys::fs::OF_TextWithCRLF);
4169   if (EC)
4170     return;
4171   OS << "Timestamp file\n";
4172   OS.close();
4173   OS.clear_error(); // Avoid triggering a fatal error.
4174 }
4175 
4176 /// Given a cursor at the start of an AST file, scan ahead and drop the
4177 /// cursor into the start of the given block ID, returning false on success and
4178 /// true on failure.
4179 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4180   while (true) {
4181     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4182     if (!MaybeEntry) {
4183       // FIXME this drops errors on the floor.
4184       consumeError(MaybeEntry.takeError());
4185       return true;
4186     }
4187     llvm::BitstreamEntry Entry = MaybeEntry.get();
4188 
4189     switch (Entry.Kind) {
4190     case llvm::BitstreamEntry::Error:
4191     case llvm::BitstreamEntry::EndBlock:
4192       return true;
4193 
4194     case llvm::BitstreamEntry::Record:
4195       // Ignore top-level records.
4196       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4197         break;
4198       else {
4199         // FIXME this drops errors on the floor.
4200         consumeError(Skipped.takeError());
4201         return true;
4202       }
4203 
4204     case llvm::BitstreamEntry::SubBlock:
4205       if (Entry.ID == BlockID) {
4206         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4207           // FIXME this drops the error on the floor.
4208           consumeError(std::move(Err));
4209           return true;
4210         }
4211         // Found it!
4212         return false;
4213       }
4214 
4215       if (llvm::Error Err = Cursor.SkipBlock()) {
4216         // FIXME this drops the error on the floor.
4217         consumeError(std::move(Err));
4218         return true;
4219       }
4220     }
4221   }
4222 }
4223 
4224 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4225                                             ModuleKind Type,
4226                                             SourceLocation ImportLoc,
4227                                             unsigned ClientLoadCapabilities,
4228                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4229   llvm::SaveAndRestore<SourceLocation>
4230     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4231   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4232       CurrentDeserializingModuleKind, Type);
4233 
4234   // Defer any pending actions until we get to the end of reading the AST file.
4235   Deserializing AnASTFile(this);
4236 
4237   // Bump the generation number.
4238   unsigned PreviousGeneration = 0;
4239   if (ContextObj)
4240     PreviousGeneration = incrementGeneration(*ContextObj);
4241 
4242   unsigned NumModules = ModuleMgr.size();
4243   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4244     assert(ReadResult && "expected to return error");
4245     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4246                             PP.getLangOpts().Modules
4247                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4248                                 : nullptr);
4249 
4250     // If we find that any modules are unusable, the global index is going
4251     // to be out-of-date. Just remove it.
4252     GlobalIndex.reset();
4253     ModuleMgr.setGlobalIndex(nullptr);
4254     return ReadResult;
4255   };
4256 
4257   SmallVector<ImportedModule, 4> Loaded;
4258   switch (ASTReadResult ReadResult =
4259               ReadASTCore(FileName, Type, ImportLoc,
4260                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4261                           ASTFileSignature(), ClientLoadCapabilities)) {
4262   case Failure:
4263   case Missing:
4264   case OutOfDate:
4265   case VersionMismatch:
4266   case ConfigurationMismatch:
4267   case HadErrors:
4268     return removeModulesAndReturn(ReadResult);
4269   case Success:
4270     break;
4271   }
4272 
4273   // Here comes stuff that we only do once the entire chain is loaded.
4274 
4275   // Load the AST blocks of all of the modules that we loaded.  We can still
4276   // hit errors parsing the ASTs at this point.
4277   for (ImportedModule &M : Loaded) {
4278     ModuleFile &F = *M.Mod;
4279 
4280     // Read the AST block.
4281     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4282       return removeModulesAndReturn(Result);
4283 
4284     // The AST block should always have a definition for the main module.
4285     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4286       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4287       return removeModulesAndReturn(Failure);
4288     }
4289 
4290     // Read the extension blocks.
4291     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4292       if (ASTReadResult Result = ReadExtensionBlock(F))
4293         return removeModulesAndReturn(Result);
4294     }
4295 
4296     // Once read, set the ModuleFile bit base offset and update the size in
4297     // bits of all files we've seen.
4298     F.GlobalBitOffset = TotalModulesSizeInBits;
4299     TotalModulesSizeInBits += F.SizeInBits;
4300     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4301   }
4302 
4303   // Preload source locations and interesting indentifiers.
4304   for (ImportedModule &M : Loaded) {
4305     ModuleFile &F = *M.Mod;
4306 
4307     // Preload SLocEntries.
4308     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4309       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4310       // Load it through the SourceManager and don't call ReadSLocEntry()
4311       // directly because the entry may have already been loaded in which case
4312       // calling ReadSLocEntry() directly would trigger an assertion in
4313       // SourceManager.
4314       SourceMgr.getLoadedSLocEntryByID(Index);
4315     }
4316 
4317     // Map the original source file ID into the ID space of the current
4318     // compilation.
4319     if (F.OriginalSourceFileID.isValid()) {
4320       F.OriginalSourceFileID = FileID::get(
4321           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4322     }
4323 
4324     // Preload all the pending interesting identifiers by marking them out of
4325     // date.
4326     for (auto Offset : F.PreloadIdentifierOffsets) {
4327       const unsigned char *Data = F.IdentifierTableData + Offset;
4328 
4329       ASTIdentifierLookupTrait Trait(*this, F);
4330       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4331       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4332       auto &II = PP.getIdentifierTable().getOwn(Key);
4333       II.setOutOfDate(true);
4334 
4335       // Mark this identifier as being from an AST file so that we can track
4336       // whether we need to serialize it.
4337       markIdentifierFromAST(*this, II);
4338 
4339       // Associate the ID with the identifier so that the writer can reuse it.
4340       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4341       SetIdentifierInfo(ID, &II);
4342     }
4343   }
4344 
4345   // Setup the import locations and notify the module manager that we've
4346   // committed to these module files.
4347   for (ImportedModule &M : Loaded) {
4348     ModuleFile &F = *M.Mod;
4349 
4350     ModuleMgr.moduleFileAccepted(&F);
4351 
4352     // Set the import location.
4353     F.DirectImportLoc = ImportLoc;
4354     // FIXME: We assume that locations from PCH / preamble do not need
4355     // any translation.
4356     if (!M.ImportedBy)
4357       F.ImportLoc = M.ImportLoc;
4358     else
4359       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4360   }
4361 
4362   if (!PP.getLangOpts().CPlusPlus ||
4363       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4364        Type != MK_PrebuiltModule)) {
4365     // Mark all of the identifiers in the identifier table as being out of date,
4366     // so that various accessors know to check the loaded modules when the
4367     // identifier is used.
4368     //
4369     // For C++ modules, we don't need information on many identifiers (just
4370     // those that provide macros or are poisoned), so we mark all of
4371     // the interesting ones via PreloadIdentifierOffsets.
4372     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4373                                 IdEnd = PP.getIdentifierTable().end();
4374          Id != IdEnd; ++Id)
4375       Id->second->setOutOfDate(true);
4376   }
4377   // Mark selectors as out of date.
4378   for (auto Sel : SelectorGeneration)
4379     SelectorOutOfDate[Sel.first] = true;
4380 
4381   // Resolve any unresolved module exports.
4382   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4383     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4384     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4385     Module *ResolvedMod = getSubmodule(GlobalID);
4386 
4387     switch (Unresolved.Kind) {
4388     case UnresolvedModuleRef::Conflict:
4389       if (ResolvedMod) {
4390         Module::Conflict Conflict;
4391         Conflict.Other = ResolvedMod;
4392         Conflict.Message = Unresolved.String.str();
4393         Unresolved.Mod->Conflicts.push_back(Conflict);
4394       }
4395       continue;
4396 
4397     case UnresolvedModuleRef::Import:
4398       if (ResolvedMod)
4399         Unresolved.Mod->Imports.insert(ResolvedMod);
4400       continue;
4401 
4402     case UnresolvedModuleRef::Export:
4403       if (ResolvedMod || Unresolved.IsWildcard)
4404         Unresolved.Mod->Exports.push_back(
4405           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4406       continue;
4407     }
4408   }
4409   UnresolvedModuleRefs.clear();
4410 
4411   if (Imported)
4412     Imported->append(ImportedModules.begin(),
4413                      ImportedModules.end());
4414 
4415   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4416   // Might be unnecessary as use declarations are only used to build the
4417   // module itself.
4418 
4419   if (ContextObj)
4420     InitializeContext();
4421 
4422   if (SemaObj)
4423     UpdateSema();
4424 
4425   if (DeserializationListener)
4426     DeserializationListener->ReaderInitialized(this);
4427 
4428   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4429   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4430     // If this AST file is a precompiled preamble, then set the
4431     // preamble file ID of the source manager to the file source file
4432     // from which the preamble was built.
4433     if (Type == MK_Preamble) {
4434       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4435     } else if (Type == MK_MainFile) {
4436       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4437     }
4438   }
4439 
4440   // For any Objective-C class definitions we have already loaded, make sure
4441   // that we load any additional categories.
4442   if (ContextObj) {
4443     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4444       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4445                          ObjCClassesLoaded[I],
4446                          PreviousGeneration);
4447     }
4448   }
4449 
4450   if (PP.getHeaderSearchInfo()
4451           .getHeaderSearchOpts()
4452           .ModulesValidateOncePerBuildSession) {
4453     // Now we are certain that the module and all modules it depends on are
4454     // up to date.  Create or update timestamp files for modules that are
4455     // located in the module cache (not for PCH files that could be anywhere
4456     // in the filesystem).
4457     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4458       ImportedModule &M = Loaded[I];
4459       if (M.Mod->Kind == MK_ImplicitModule) {
4460         updateModuleTimestamp(*M.Mod);
4461       }
4462     }
4463   }
4464 
4465   return Success;
4466 }
4467 
4468 static ASTFileSignature readASTFileSignature(StringRef PCH);
4469 
4470 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4471 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4472   // FIXME checking magic headers is done in other places such as
4473   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4474   // always done the same. Unify it all with a helper.
4475   if (!Stream.canSkipToPos(4))
4476     return llvm::createStringError(std::errc::illegal_byte_sequence,
4477                                    "file too small to contain AST file magic");
4478   for (unsigned C : {'C', 'P', 'C', 'H'})
4479     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4480       if (Res.get() != C)
4481         return llvm::createStringError(
4482             std::errc::illegal_byte_sequence,
4483             "file doesn't start with AST file magic");
4484     } else
4485       return Res.takeError();
4486   return llvm::Error::success();
4487 }
4488 
4489 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4490   switch (Kind) {
4491   case MK_PCH:
4492     return 0; // PCH
4493   case MK_ImplicitModule:
4494   case MK_ExplicitModule:
4495   case MK_PrebuiltModule:
4496     return 1; // module
4497   case MK_MainFile:
4498   case MK_Preamble:
4499     return 2; // main source file
4500   }
4501   llvm_unreachable("unknown module kind");
4502 }
4503 
4504 ASTReader::ASTReadResult
4505 ASTReader::ReadASTCore(StringRef FileName,
4506                        ModuleKind Type,
4507                        SourceLocation ImportLoc,
4508                        ModuleFile *ImportedBy,
4509                        SmallVectorImpl<ImportedModule> &Loaded,
4510                        off_t ExpectedSize, time_t ExpectedModTime,
4511                        ASTFileSignature ExpectedSignature,
4512                        unsigned ClientLoadCapabilities) {
4513   ModuleFile *M;
4514   std::string ErrorStr;
4515   ModuleManager::AddModuleResult AddResult
4516     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4517                           getGeneration(), ExpectedSize, ExpectedModTime,
4518                           ExpectedSignature, readASTFileSignature,
4519                           M, ErrorStr);
4520 
4521   switch (AddResult) {
4522   case ModuleManager::AlreadyLoaded:
4523     Diag(diag::remark_module_import)
4524         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4525         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4526     return Success;
4527 
4528   case ModuleManager::NewlyLoaded:
4529     // Load module file below.
4530     break;
4531 
4532   case ModuleManager::Missing:
4533     // The module file was missing; if the client can handle that, return
4534     // it.
4535     if (ClientLoadCapabilities & ARR_Missing)
4536       return Missing;
4537 
4538     // Otherwise, return an error.
4539     Diag(diag::err_ast_file_not_found)
4540         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4541         << ErrorStr;
4542     return Failure;
4543 
4544   case ModuleManager::OutOfDate:
4545     // We couldn't load the module file because it is out-of-date. If the
4546     // client can handle out-of-date, return it.
4547     if (ClientLoadCapabilities & ARR_OutOfDate)
4548       return OutOfDate;
4549 
4550     // Otherwise, return an error.
4551     Diag(diag::err_ast_file_out_of_date)
4552         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4553         << ErrorStr;
4554     return Failure;
4555   }
4556 
4557   assert(M && "Missing module file");
4558 
4559   bool ShouldFinalizePCM = false;
4560   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4561     auto &MC = getModuleManager().getModuleCache();
4562     if (ShouldFinalizePCM)
4563       MC.finalizePCM(FileName);
4564     else
4565       MC.tryToDropPCM(FileName);
4566   });
4567   ModuleFile &F = *M;
4568   BitstreamCursor &Stream = F.Stream;
4569   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4570   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4571 
4572   // Sniff for the signature.
4573   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4574     Diag(diag::err_ast_file_invalid)
4575         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4576     return Failure;
4577   }
4578 
4579   // This is used for compatibility with older PCH formats.
4580   bool HaveReadControlBlock = false;
4581   while (true) {
4582     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4583     if (!MaybeEntry) {
4584       Error(MaybeEntry.takeError());
4585       return Failure;
4586     }
4587     llvm::BitstreamEntry Entry = MaybeEntry.get();
4588 
4589     switch (Entry.Kind) {
4590     case llvm::BitstreamEntry::Error:
4591     case llvm::BitstreamEntry::Record:
4592     case llvm::BitstreamEntry::EndBlock:
4593       Error("invalid record at top-level of AST file");
4594       return Failure;
4595 
4596     case llvm::BitstreamEntry::SubBlock:
4597       break;
4598     }
4599 
4600     switch (Entry.ID) {
4601     case CONTROL_BLOCK_ID:
4602       HaveReadControlBlock = true;
4603       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4604       case Success:
4605         // Check that we didn't try to load a non-module AST file as a module.
4606         //
4607         // FIXME: Should we also perform the converse check? Loading a module as
4608         // a PCH file sort of works, but it's a bit wonky.
4609         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4610              Type == MK_PrebuiltModule) &&
4611             F.ModuleName.empty()) {
4612           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4613           if (Result != OutOfDate ||
4614               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4615             Diag(diag::err_module_file_not_module) << FileName;
4616           return Result;
4617         }
4618         break;
4619 
4620       case Failure: return Failure;
4621       case Missing: return Missing;
4622       case OutOfDate: return OutOfDate;
4623       case VersionMismatch: return VersionMismatch;
4624       case ConfigurationMismatch: return ConfigurationMismatch;
4625       case HadErrors: return HadErrors;
4626       }
4627       break;
4628 
4629     case AST_BLOCK_ID:
4630       if (!HaveReadControlBlock) {
4631         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4632           Diag(diag::err_pch_version_too_old);
4633         return VersionMismatch;
4634       }
4635 
4636       // Record that we've loaded this module.
4637       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4638       ShouldFinalizePCM = true;
4639       return Success;
4640 
4641     case UNHASHED_CONTROL_BLOCK_ID:
4642       // This block is handled using look-ahead during ReadControlBlock.  We
4643       // shouldn't get here!
4644       Error("malformed block record in AST file");
4645       return Failure;
4646 
4647     default:
4648       if (llvm::Error Err = Stream.SkipBlock()) {
4649         Error(std::move(Err));
4650         return Failure;
4651       }
4652       break;
4653     }
4654   }
4655 
4656   llvm_unreachable("unexpected break; expected return");
4657 }
4658 
4659 ASTReader::ASTReadResult
4660 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4661                                     unsigned ClientLoadCapabilities) {
4662   const HeaderSearchOptions &HSOpts =
4663       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4664   bool AllowCompatibleConfigurationMismatch =
4665       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4666   bool DisableValidation = shouldDisableValidationForFile(F);
4667 
4668   ASTReadResult Result = readUnhashedControlBlockImpl(
4669       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4670       Listener.get(),
4671       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4672 
4673   // If F was directly imported by another module, it's implicitly validated by
4674   // the importing module.
4675   if (DisableValidation || WasImportedBy ||
4676       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4677     return Success;
4678 
4679   if (Result == Failure) {
4680     Error("malformed block record in AST file");
4681     return Failure;
4682   }
4683 
4684   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4685     // If this module has already been finalized in the ModuleCache, we're stuck
4686     // with it; we can only load a single version of each module.
4687     //
4688     // This can happen when a module is imported in two contexts: in one, as a
4689     // user module; in another, as a system module (due to an import from
4690     // another module marked with the [system] flag).  It usually indicates a
4691     // bug in the module map: this module should also be marked with [system].
4692     //
4693     // If -Wno-system-headers (the default), and the first import is as a
4694     // system module, then validation will fail during the as-user import,
4695     // since -Werror flags won't have been validated.  However, it's reasonable
4696     // to treat this consistently as a system module.
4697     //
4698     // If -Wsystem-headers, the PCM on disk was built with
4699     // -Wno-system-headers, and the first import is as a user module, then
4700     // validation will fail during the as-system import since the PCM on disk
4701     // doesn't guarantee that -Werror was respected.  However, the -Werror
4702     // flags were checked during the initial as-user import.
4703     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4704       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4705       return Success;
4706     }
4707   }
4708 
4709   return Result;
4710 }
4711 
4712 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4713     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4714     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4715     bool ValidateDiagnosticOptions) {
4716   // Initialize a stream.
4717   BitstreamCursor Stream(StreamData);
4718 
4719   // Sniff for the signature.
4720   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4721     // FIXME this drops the error on the floor.
4722     consumeError(std::move(Err));
4723     return Failure;
4724   }
4725 
4726   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4727   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4728     return Failure;
4729 
4730   // Read all of the records in the options block.
4731   RecordData Record;
4732   ASTReadResult Result = Success;
4733   while (true) {
4734     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4735     if (!MaybeEntry) {
4736       // FIXME this drops the error on the floor.
4737       consumeError(MaybeEntry.takeError());
4738       return Failure;
4739     }
4740     llvm::BitstreamEntry Entry = MaybeEntry.get();
4741 
4742     switch (Entry.Kind) {
4743     case llvm::BitstreamEntry::Error:
4744     case llvm::BitstreamEntry::SubBlock:
4745       return Failure;
4746 
4747     case llvm::BitstreamEntry::EndBlock:
4748       return Result;
4749 
4750     case llvm::BitstreamEntry::Record:
4751       // The interesting case.
4752       break;
4753     }
4754 
4755     // Read and process a record.
4756     Record.clear();
4757     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4758     if (!MaybeRecordType) {
4759       // FIXME this drops the error.
4760       return Failure;
4761     }
4762     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4763     case SIGNATURE:
4764       if (F)
4765         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4766       break;
4767     case AST_BLOCK_HASH:
4768       if (F)
4769         F->ASTBlockHash =
4770             ASTFileSignature::create(Record.begin(), Record.end());
4771       break;
4772     case DIAGNOSTIC_OPTIONS: {
4773       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4774       if (Listener && ValidateDiagnosticOptions &&
4775           !AllowCompatibleConfigurationMismatch &&
4776           ParseDiagnosticOptions(Record, Complain, *Listener))
4777         Result = OutOfDate; // Don't return early.  Read the signature.
4778       break;
4779     }
4780     case DIAG_PRAGMA_MAPPINGS:
4781       if (!F)
4782         break;
4783       if (F->PragmaDiagMappings.empty())
4784         F->PragmaDiagMappings.swap(Record);
4785       else
4786         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4787                                      Record.begin(), Record.end());
4788       break;
4789     }
4790   }
4791 }
4792 
4793 /// Parse a record and blob containing module file extension metadata.
4794 static bool parseModuleFileExtensionMetadata(
4795               const SmallVectorImpl<uint64_t> &Record,
4796               StringRef Blob,
4797               ModuleFileExtensionMetadata &Metadata) {
4798   if (Record.size() < 4) return true;
4799 
4800   Metadata.MajorVersion = Record[0];
4801   Metadata.MinorVersion = Record[1];
4802 
4803   unsigned BlockNameLen = Record[2];
4804   unsigned UserInfoLen = Record[3];
4805 
4806   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4807 
4808   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4809   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4810                                   Blob.data() + BlockNameLen + UserInfoLen);
4811   return false;
4812 }
4813 
4814 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4815   BitstreamCursor &Stream = F.Stream;
4816 
4817   RecordData Record;
4818   while (true) {
4819     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4820     if (!MaybeEntry) {
4821       Error(MaybeEntry.takeError());
4822       return Failure;
4823     }
4824     llvm::BitstreamEntry Entry = MaybeEntry.get();
4825 
4826     switch (Entry.Kind) {
4827     case llvm::BitstreamEntry::SubBlock:
4828       if (llvm::Error Err = Stream.SkipBlock()) {
4829         Error(std::move(Err));
4830         return Failure;
4831       }
4832       continue;
4833 
4834     case llvm::BitstreamEntry::EndBlock:
4835       return Success;
4836 
4837     case llvm::BitstreamEntry::Error:
4838       return HadErrors;
4839 
4840     case llvm::BitstreamEntry::Record:
4841       break;
4842     }
4843 
4844     Record.clear();
4845     StringRef Blob;
4846     Expected<unsigned> MaybeRecCode =
4847         Stream.readRecord(Entry.ID, Record, &Blob);
4848     if (!MaybeRecCode) {
4849       Error(MaybeRecCode.takeError());
4850       return Failure;
4851     }
4852     switch (MaybeRecCode.get()) {
4853     case EXTENSION_METADATA: {
4854       ModuleFileExtensionMetadata Metadata;
4855       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4856         Error("malformed EXTENSION_METADATA in AST file");
4857         return Failure;
4858       }
4859 
4860       // Find a module file extension with this block name.
4861       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4862       if (Known == ModuleFileExtensions.end()) break;
4863 
4864       // Form a reader.
4865       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4866                                                              F, Stream)) {
4867         F.ExtensionReaders.push_back(std::move(Reader));
4868       }
4869 
4870       break;
4871     }
4872     }
4873   }
4874 
4875   return Success;
4876 }
4877 
4878 void ASTReader::InitializeContext() {
4879   assert(ContextObj && "no context to initialize");
4880   ASTContext &Context = *ContextObj;
4881 
4882   // If there's a listener, notify them that we "read" the translation unit.
4883   if (DeserializationListener)
4884     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4885                                       Context.getTranslationUnitDecl());
4886 
4887   // FIXME: Find a better way to deal with collisions between these
4888   // built-in types. Right now, we just ignore the problem.
4889 
4890   // Load the special types.
4891   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4892     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4893       if (!Context.CFConstantStringTypeDecl)
4894         Context.setCFConstantStringType(GetType(String));
4895     }
4896 
4897     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4898       QualType FileType = GetType(File);
4899       if (FileType.isNull()) {
4900         Error("FILE type is NULL");
4901         return;
4902       }
4903 
4904       if (!Context.FILEDecl) {
4905         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4906           Context.setFILEDecl(Typedef->getDecl());
4907         else {
4908           const TagType *Tag = FileType->getAs<TagType>();
4909           if (!Tag) {
4910             Error("Invalid FILE type in AST file");
4911             return;
4912           }
4913           Context.setFILEDecl(Tag->getDecl());
4914         }
4915       }
4916     }
4917 
4918     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4919       QualType Jmp_bufType = GetType(Jmp_buf);
4920       if (Jmp_bufType.isNull()) {
4921         Error("jmp_buf type is NULL");
4922         return;
4923       }
4924 
4925       if (!Context.jmp_bufDecl) {
4926         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4927           Context.setjmp_bufDecl(Typedef->getDecl());
4928         else {
4929           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4930           if (!Tag) {
4931             Error("Invalid jmp_buf type in AST file");
4932             return;
4933           }
4934           Context.setjmp_bufDecl(Tag->getDecl());
4935         }
4936       }
4937     }
4938 
4939     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4940       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4941       if (Sigjmp_bufType.isNull()) {
4942         Error("sigjmp_buf type is NULL");
4943         return;
4944       }
4945 
4946       if (!Context.sigjmp_bufDecl) {
4947         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4948           Context.setsigjmp_bufDecl(Typedef->getDecl());
4949         else {
4950           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4951           assert(Tag && "Invalid sigjmp_buf type in AST file");
4952           Context.setsigjmp_bufDecl(Tag->getDecl());
4953         }
4954       }
4955     }
4956 
4957     if (unsigned ObjCIdRedef
4958           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4959       if (Context.ObjCIdRedefinitionType.isNull())
4960         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4961     }
4962 
4963     if (unsigned ObjCClassRedef
4964           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4965       if (Context.ObjCClassRedefinitionType.isNull())
4966         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4967     }
4968 
4969     if (unsigned ObjCSelRedef
4970           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4971       if (Context.ObjCSelRedefinitionType.isNull())
4972         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4973     }
4974 
4975     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4976       QualType Ucontext_tType = GetType(Ucontext_t);
4977       if (Ucontext_tType.isNull()) {
4978         Error("ucontext_t type is NULL");
4979         return;
4980       }
4981 
4982       if (!Context.ucontext_tDecl) {
4983         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4984           Context.setucontext_tDecl(Typedef->getDecl());
4985         else {
4986           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4987           assert(Tag && "Invalid ucontext_t type in AST file");
4988           Context.setucontext_tDecl(Tag->getDecl());
4989         }
4990       }
4991     }
4992   }
4993 
4994   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4995 
4996   // If there were any CUDA special declarations, deserialize them.
4997   if (!CUDASpecialDeclRefs.empty()) {
4998     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4999     Context.setcudaConfigureCallDecl(
5000                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
5001   }
5002 
5003   // Re-export any modules that were imported by a non-module AST file.
5004   // FIXME: This does not make macro-only imports visible again.
5005   for (auto &Import : ImportedModules) {
5006     if (Module *Imported = getSubmodule(Import.ID)) {
5007       makeModuleVisible(Imported, Module::AllVisible,
5008                         /*ImportLoc=*/Import.ImportLoc);
5009       if (Import.ImportLoc.isValid())
5010         PP.makeModuleVisible(Imported, Import.ImportLoc);
5011       // This updates visibility for Preprocessor only. For Sema, which can be
5012       // nullptr here, we do the same later, in UpdateSema().
5013     }
5014   }
5015 }
5016 
5017 void ASTReader::finalizeForWriting() {
5018   // Nothing to do for now.
5019 }
5020 
5021 /// Reads and return the signature record from \p PCH's control block, or
5022 /// else returns 0.
5023 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5024   BitstreamCursor Stream(PCH);
5025   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5026     // FIXME this drops the error on the floor.
5027     consumeError(std::move(Err));
5028     return ASTFileSignature();
5029   }
5030 
5031   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5032   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5033     return ASTFileSignature();
5034 
5035   // Scan for SIGNATURE inside the diagnostic options block.
5036   ASTReader::RecordData Record;
5037   while (true) {
5038     Expected<llvm::BitstreamEntry> MaybeEntry =
5039         Stream.advanceSkippingSubblocks();
5040     if (!MaybeEntry) {
5041       // FIXME this drops the error on the floor.
5042       consumeError(MaybeEntry.takeError());
5043       return ASTFileSignature();
5044     }
5045     llvm::BitstreamEntry Entry = MaybeEntry.get();
5046 
5047     if (Entry.Kind != llvm::BitstreamEntry::Record)
5048       return ASTFileSignature();
5049 
5050     Record.clear();
5051     StringRef Blob;
5052     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5053     if (!MaybeRecord) {
5054       // FIXME this drops the error on the floor.
5055       consumeError(MaybeRecord.takeError());
5056       return ASTFileSignature();
5057     }
5058     if (SIGNATURE == MaybeRecord.get())
5059       return ASTFileSignature::create(Record.begin(),
5060                                       Record.begin() + ASTFileSignature::size);
5061   }
5062 }
5063 
5064 /// Retrieve the name of the original source file name
5065 /// directly from the AST file, without actually loading the AST
5066 /// file.
5067 std::string ASTReader::getOriginalSourceFile(
5068     const std::string &ASTFileName, FileManager &FileMgr,
5069     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5070   // Open the AST file.
5071   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5072   if (!Buffer) {
5073     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5074         << ASTFileName << Buffer.getError().message();
5075     return std::string();
5076   }
5077 
5078   // Initialize the stream
5079   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5080 
5081   // Sniff for the signature.
5082   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5083     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5084     return std::string();
5085   }
5086 
5087   // Scan for the CONTROL_BLOCK_ID block.
5088   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5089     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5090     return std::string();
5091   }
5092 
5093   // Scan for ORIGINAL_FILE inside the control block.
5094   RecordData Record;
5095   while (true) {
5096     Expected<llvm::BitstreamEntry> MaybeEntry =
5097         Stream.advanceSkippingSubblocks();
5098     if (!MaybeEntry) {
5099       // FIXME this drops errors on the floor.
5100       consumeError(MaybeEntry.takeError());
5101       return std::string();
5102     }
5103     llvm::BitstreamEntry Entry = MaybeEntry.get();
5104 
5105     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5106       return std::string();
5107 
5108     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5109       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5110       return std::string();
5111     }
5112 
5113     Record.clear();
5114     StringRef Blob;
5115     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5116     if (!MaybeRecord) {
5117       // FIXME this drops the errors on the floor.
5118       consumeError(MaybeRecord.takeError());
5119       return std::string();
5120     }
5121     if (ORIGINAL_FILE == MaybeRecord.get())
5122       return Blob.str();
5123   }
5124 }
5125 
5126 namespace {
5127 
5128   class SimplePCHValidator : public ASTReaderListener {
5129     const LangOptions &ExistingLangOpts;
5130     const TargetOptions &ExistingTargetOpts;
5131     const PreprocessorOptions &ExistingPPOpts;
5132     std::string ExistingModuleCachePath;
5133     FileManager &FileMgr;
5134 
5135   public:
5136     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5137                        const TargetOptions &ExistingTargetOpts,
5138                        const PreprocessorOptions &ExistingPPOpts,
5139                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5140         : ExistingLangOpts(ExistingLangOpts),
5141           ExistingTargetOpts(ExistingTargetOpts),
5142           ExistingPPOpts(ExistingPPOpts),
5143           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5144 
5145     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5146                              bool AllowCompatibleDifferences) override {
5147       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5148                                   AllowCompatibleDifferences);
5149     }
5150 
5151     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5152                            bool AllowCompatibleDifferences) override {
5153       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5154                                 AllowCompatibleDifferences);
5155     }
5156 
5157     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5158                                  StringRef SpecificModuleCachePath,
5159                                  bool Complain) override {
5160       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5161                                       ExistingModuleCachePath, nullptr,
5162                                       ExistingLangOpts, ExistingPPOpts);
5163     }
5164 
5165     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5166                                  bool Complain,
5167                                  std::string &SuggestedPredefines) override {
5168       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5169                                       SuggestedPredefines, ExistingLangOpts);
5170     }
5171   };
5172 
5173 } // namespace
5174 
5175 bool ASTReader::readASTFileControlBlock(
5176     StringRef Filename, FileManager &FileMgr,
5177     const PCHContainerReader &PCHContainerRdr,
5178     bool FindModuleFileExtensions,
5179     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5180   // Open the AST file.
5181   // FIXME: This allows use of the VFS; we do not allow use of the
5182   // VFS when actually loading a module.
5183   auto Buffer = FileMgr.getBufferForFile(Filename);
5184   if (!Buffer) {
5185     return true;
5186   }
5187 
5188   // Initialize the stream
5189   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5190   BitstreamCursor Stream(Bytes);
5191 
5192   // Sniff for the signature.
5193   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5194     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5195     return true;
5196   }
5197 
5198   // Scan for the CONTROL_BLOCK_ID block.
5199   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5200     return true;
5201 
5202   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5203   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5204   bool NeedsImports = Listener.needsImportVisitation();
5205   BitstreamCursor InputFilesCursor;
5206 
5207   RecordData Record;
5208   std::string ModuleDir;
5209   bool DoneWithControlBlock = false;
5210   while (!DoneWithControlBlock) {
5211     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5212     if (!MaybeEntry) {
5213       // FIXME this drops the error on the floor.
5214       consumeError(MaybeEntry.takeError());
5215       return true;
5216     }
5217     llvm::BitstreamEntry Entry = MaybeEntry.get();
5218 
5219     switch (Entry.Kind) {
5220     case llvm::BitstreamEntry::SubBlock: {
5221       switch (Entry.ID) {
5222       case OPTIONS_BLOCK_ID: {
5223         std::string IgnoredSuggestedPredefines;
5224         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5225                              /*AllowCompatibleConfigurationMismatch*/ false,
5226                              Listener, IgnoredSuggestedPredefines) != Success)
5227           return true;
5228         break;
5229       }
5230 
5231       case INPUT_FILES_BLOCK_ID:
5232         InputFilesCursor = Stream;
5233         if (llvm::Error Err = Stream.SkipBlock()) {
5234           // FIXME this drops the error on the floor.
5235           consumeError(std::move(Err));
5236           return true;
5237         }
5238         if (NeedsInputFiles &&
5239             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5240           return true;
5241         break;
5242 
5243       default:
5244         if (llvm::Error Err = Stream.SkipBlock()) {
5245           // FIXME this drops the error on the floor.
5246           consumeError(std::move(Err));
5247           return true;
5248         }
5249         break;
5250       }
5251 
5252       continue;
5253     }
5254 
5255     case llvm::BitstreamEntry::EndBlock:
5256       DoneWithControlBlock = true;
5257       break;
5258 
5259     case llvm::BitstreamEntry::Error:
5260       return true;
5261 
5262     case llvm::BitstreamEntry::Record:
5263       break;
5264     }
5265 
5266     if (DoneWithControlBlock) break;
5267 
5268     Record.clear();
5269     StringRef Blob;
5270     Expected<unsigned> MaybeRecCode =
5271         Stream.readRecord(Entry.ID, Record, &Blob);
5272     if (!MaybeRecCode) {
5273       // FIXME this drops the error.
5274       return Failure;
5275     }
5276     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5277     case METADATA:
5278       if (Record[0] != VERSION_MAJOR)
5279         return true;
5280       if (Listener.ReadFullVersionInformation(Blob))
5281         return true;
5282       break;
5283     case MODULE_NAME:
5284       Listener.ReadModuleName(Blob);
5285       break;
5286     case MODULE_DIRECTORY:
5287       ModuleDir = std::string(Blob);
5288       break;
5289     case MODULE_MAP_FILE: {
5290       unsigned Idx = 0;
5291       auto Path = ReadString(Record, Idx);
5292       ResolveImportedPath(Path, ModuleDir);
5293       Listener.ReadModuleMapFile(Path);
5294       break;
5295     }
5296     case INPUT_FILE_OFFSETS: {
5297       if (!NeedsInputFiles)
5298         break;
5299 
5300       unsigned NumInputFiles = Record[0];
5301       unsigned NumUserFiles = Record[1];
5302       const llvm::support::unaligned_uint64_t *InputFileOffs =
5303           (const llvm::support::unaligned_uint64_t *)Blob.data();
5304       for (unsigned I = 0; I != NumInputFiles; ++I) {
5305         // Go find this input file.
5306         bool isSystemFile = I >= NumUserFiles;
5307 
5308         if (isSystemFile && !NeedsSystemInputFiles)
5309           break; // the rest are system input files
5310 
5311         BitstreamCursor &Cursor = InputFilesCursor;
5312         SavedStreamPosition SavedPosition(Cursor);
5313         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5314           // FIXME this drops errors on the floor.
5315           consumeError(std::move(Err));
5316         }
5317 
5318         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5319         if (!MaybeCode) {
5320           // FIXME this drops errors on the floor.
5321           consumeError(MaybeCode.takeError());
5322         }
5323         unsigned Code = MaybeCode.get();
5324 
5325         RecordData Record;
5326         StringRef Blob;
5327         bool shouldContinue = false;
5328         Expected<unsigned> MaybeRecordType =
5329             Cursor.readRecord(Code, Record, &Blob);
5330         if (!MaybeRecordType) {
5331           // FIXME this drops errors on the floor.
5332           consumeError(MaybeRecordType.takeError());
5333         }
5334         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5335         case INPUT_FILE_HASH:
5336           break;
5337         case INPUT_FILE:
5338           bool Overridden = static_cast<bool>(Record[3]);
5339           std::string Filename = std::string(Blob);
5340           ResolveImportedPath(Filename, ModuleDir);
5341           shouldContinue = Listener.visitInputFile(
5342               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5343           break;
5344         }
5345         if (!shouldContinue)
5346           break;
5347       }
5348       break;
5349     }
5350 
5351     case IMPORTS: {
5352       if (!NeedsImports)
5353         break;
5354 
5355       unsigned Idx = 0, N = Record.size();
5356       while (Idx < N) {
5357         // Read information about the AST file.
5358         Idx +=
5359             1 + 1 + 1 + 1 +
5360             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5361         std::string ModuleName = ReadString(Record, Idx);
5362         std::string Filename = ReadString(Record, Idx);
5363         ResolveImportedPath(Filename, ModuleDir);
5364         Listener.visitImport(ModuleName, Filename);
5365       }
5366       break;
5367     }
5368 
5369     default:
5370       // No other validation to perform.
5371       break;
5372     }
5373   }
5374 
5375   // Look for module file extension blocks, if requested.
5376   if (FindModuleFileExtensions) {
5377     BitstreamCursor SavedStream = Stream;
5378     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5379       bool DoneWithExtensionBlock = false;
5380       while (!DoneWithExtensionBlock) {
5381         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5382         if (!MaybeEntry) {
5383           // FIXME this drops the error.
5384           return true;
5385         }
5386         llvm::BitstreamEntry Entry = MaybeEntry.get();
5387 
5388         switch (Entry.Kind) {
5389         case llvm::BitstreamEntry::SubBlock:
5390           if (llvm::Error Err = Stream.SkipBlock()) {
5391             // FIXME this drops the error on the floor.
5392             consumeError(std::move(Err));
5393             return true;
5394           }
5395           continue;
5396 
5397         case llvm::BitstreamEntry::EndBlock:
5398           DoneWithExtensionBlock = true;
5399           continue;
5400 
5401         case llvm::BitstreamEntry::Error:
5402           return true;
5403 
5404         case llvm::BitstreamEntry::Record:
5405           break;
5406         }
5407 
5408        Record.clear();
5409        StringRef Blob;
5410        Expected<unsigned> MaybeRecCode =
5411            Stream.readRecord(Entry.ID, Record, &Blob);
5412        if (!MaybeRecCode) {
5413          // FIXME this drops the error.
5414          return true;
5415        }
5416        switch (MaybeRecCode.get()) {
5417        case EXTENSION_METADATA: {
5418          ModuleFileExtensionMetadata Metadata;
5419          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5420            return true;
5421 
5422          Listener.readModuleFileExtension(Metadata);
5423          break;
5424        }
5425        }
5426       }
5427     }
5428     Stream = SavedStream;
5429   }
5430 
5431   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5432   if (readUnhashedControlBlockImpl(
5433           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5434           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5435           ValidateDiagnosticOptions) != Success)
5436     return true;
5437 
5438   return false;
5439 }
5440 
5441 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5442                                     const PCHContainerReader &PCHContainerRdr,
5443                                     const LangOptions &LangOpts,
5444                                     const TargetOptions &TargetOpts,
5445                                     const PreprocessorOptions &PPOpts,
5446                                     StringRef ExistingModuleCachePath) {
5447   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5448                                ExistingModuleCachePath, FileMgr);
5449   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5450                                   /*FindModuleFileExtensions=*/false,
5451                                   validator,
5452                                   /*ValidateDiagnosticOptions=*/true);
5453 }
5454 
5455 ASTReader::ASTReadResult
5456 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5457   // Enter the submodule block.
5458   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5459     Error(std::move(Err));
5460     return Failure;
5461   }
5462 
5463   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5464   bool First = true;
5465   Module *CurrentModule = nullptr;
5466   RecordData Record;
5467   while (true) {
5468     Expected<llvm::BitstreamEntry> MaybeEntry =
5469         F.Stream.advanceSkippingSubblocks();
5470     if (!MaybeEntry) {
5471       Error(MaybeEntry.takeError());
5472       return Failure;
5473     }
5474     llvm::BitstreamEntry Entry = MaybeEntry.get();
5475 
5476     switch (Entry.Kind) {
5477     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5478     case llvm::BitstreamEntry::Error:
5479       Error("malformed block record in AST file");
5480       return Failure;
5481     case llvm::BitstreamEntry::EndBlock:
5482       return Success;
5483     case llvm::BitstreamEntry::Record:
5484       // The interesting case.
5485       break;
5486     }
5487 
5488     // Read a record.
5489     StringRef Blob;
5490     Record.clear();
5491     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5492     if (!MaybeKind) {
5493       Error(MaybeKind.takeError());
5494       return Failure;
5495     }
5496     unsigned Kind = MaybeKind.get();
5497 
5498     if ((Kind == SUBMODULE_METADATA) != First) {
5499       Error("submodule metadata record should be at beginning of block");
5500       return Failure;
5501     }
5502     First = false;
5503 
5504     // Submodule information is only valid if we have a current module.
5505     // FIXME: Should we error on these cases?
5506     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5507         Kind != SUBMODULE_DEFINITION)
5508       continue;
5509 
5510     switch (Kind) {
5511     default:  // Default behavior: ignore.
5512       break;
5513 
5514     case SUBMODULE_DEFINITION: {
5515       if (Record.size() < 12) {
5516         Error("malformed module definition");
5517         return Failure;
5518       }
5519 
5520       StringRef Name = Blob;
5521       unsigned Idx = 0;
5522       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5523       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5524       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5525       bool IsFramework = Record[Idx++];
5526       bool IsExplicit = Record[Idx++];
5527       bool IsSystem = Record[Idx++];
5528       bool IsExternC = Record[Idx++];
5529       bool InferSubmodules = Record[Idx++];
5530       bool InferExplicitSubmodules = Record[Idx++];
5531       bool InferExportWildcard = Record[Idx++];
5532       bool ConfigMacrosExhaustive = Record[Idx++];
5533       bool ModuleMapIsPrivate = Record[Idx++];
5534 
5535       Module *ParentModule = nullptr;
5536       if (Parent)
5537         ParentModule = getSubmodule(Parent);
5538 
5539       // Retrieve this (sub)module from the module map, creating it if
5540       // necessary.
5541       CurrentModule =
5542           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5543               .first;
5544 
5545       // FIXME: set the definition loc for CurrentModule, or call
5546       // ModMap.setInferredModuleAllowedBy()
5547 
5548       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5549       if (GlobalIndex >= SubmodulesLoaded.size() ||
5550           SubmodulesLoaded[GlobalIndex]) {
5551         Error("too many submodules");
5552         return Failure;
5553       }
5554 
5555       if (!ParentModule) {
5556         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5557           // Don't emit module relocation error if we have -fno-validate-pch
5558           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5559                     DisableValidationForModuleKind::Module) &&
5560               CurFile != F.File) {
5561             Error(diag::err_module_file_conflict,
5562                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5563                   F.File->getName());
5564             return Failure;
5565           }
5566         }
5567 
5568         F.DidReadTopLevelSubmodule = true;
5569         CurrentModule->setASTFile(F.File);
5570         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5571       }
5572 
5573       CurrentModule->Kind = Kind;
5574       CurrentModule->Signature = F.Signature;
5575       CurrentModule->IsFromModuleFile = true;
5576       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5577       CurrentModule->IsExternC = IsExternC;
5578       CurrentModule->InferSubmodules = InferSubmodules;
5579       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5580       CurrentModule->InferExportWildcard = InferExportWildcard;
5581       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5582       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5583       if (DeserializationListener)
5584         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5585 
5586       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5587 
5588       // Clear out data that will be replaced by what is in the module file.
5589       CurrentModule->LinkLibraries.clear();
5590       CurrentModule->ConfigMacros.clear();
5591       CurrentModule->UnresolvedConflicts.clear();
5592       CurrentModule->Conflicts.clear();
5593 
5594       // The module is available unless it's missing a requirement; relevant
5595       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5596       // Missing headers that were present when the module was built do not
5597       // make it unavailable -- if we got this far, this must be an explicitly
5598       // imported module file.
5599       CurrentModule->Requirements.clear();
5600       CurrentModule->MissingHeaders.clear();
5601       CurrentModule->IsUnimportable =
5602           ParentModule && ParentModule->IsUnimportable;
5603       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5604       break;
5605     }
5606 
5607     case SUBMODULE_UMBRELLA_HEADER: {
5608       std::string Filename = std::string(Blob);
5609       ResolveImportedPath(F, Filename);
5610       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5611         if (!CurrentModule->getUmbrellaHeader())
5612           // FIXME: NameAsWritten
5613           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5614         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5615           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5616             Error("mismatched umbrella headers in submodule");
5617           return OutOfDate;
5618         }
5619       }
5620       break;
5621     }
5622 
5623     case SUBMODULE_HEADER:
5624     case SUBMODULE_EXCLUDED_HEADER:
5625     case SUBMODULE_PRIVATE_HEADER:
5626       // We lazily associate headers with their modules via the HeaderInfo table.
5627       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5628       // of complete filenames or remove it entirely.
5629       break;
5630 
5631     case SUBMODULE_TEXTUAL_HEADER:
5632     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5633       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5634       // them here.
5635       break;
5636 
5637     case SUBMODULE_TOPHEADER:
5638       CurrentModule->addTopHeaderFilename(Blob);
5639       break;
5640 
5641     case SUBMODULE_UMBRELLA_DIR: {
5642       std::string Dirname = std::string(Blob);
5643       ResolveImportedPath(F, Dirname);
5644       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5645         if (!CurrentModule->getUmbrellaDir())
5646           // FIXME: NameAsWritten
5647           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5648         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5649           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5650             Error("mismatched umbrella directories in submodule");
5651           return OutOfDate;
5652         }
5653       }
5654       break;
5655     }
5656 
5657     case SUBMODULE_METADATA: {
5658       F.BaseSubmoduleID = getTotalNumSubmodules();
5659       F.LocalNumSubmodules = Record[0];
5660       unsigned LocalBaseSubmoduleID = Record[1];
5661       if (F.LocalNumSubmodules > 0) {
5662         // Introduce the global -> local mapping for submodules within this
5663         // module.
5664         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5665 
5666         // Introduce the local -> global mapping for submodules within this
5667         // module.
5668         F.SubmoduleRemap.insertOrReplace(
5669           std::make_pair(LocalBaseSubmoduleID,
5670                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5671 
5672         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5673       }
5674       break;
5675     }
5676 
5677     case SUBMODULE_IMPORTS:
5678       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5679         UnresolvedModuleRef Unresolved;
5680         Unresolved.File = &F;
5681         Unresolved.Mod = CurrentModule;
5682         Unresolved.ID = Record[Idx];
5683         Unresolved.Kind = UnresolvedModuleRef::Import;
5684         Unresolved.IsWildcard = false;
5685         UnresolvedModuleRefs.push_back(Unresolved);
5686       }
5687       break;
5688 
5689     case SUBMODULE_EXPORTS:
5690       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5691         UnresolvedModuleRef Unresolved;
5692         Unresolved.File = &F;
5693         Unresolved.Mod = CurrentModule;
5694         Unresolved.ID = Record[Idx];
5695         Unresolved.Kind = UnresolvedModuleRef::Export;
5696         Unresolved.IsWildcard = Record[Idx + 1];
5697         UnresolvedModuleRefs.push_back(Unresolved);
5698       }
5699 
5700       // Once we've loaded the set of exports, there's no reason to keep
5701       // the parsed, unresolved exports around.
5702       CurrentModule->UnresolvedExports.clear();
5703       break;
5704 
5705     case SUBMODULE_REQUIRES:
5706       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5707                                     PP.getTargetInfo());
5708       break;
5709 
5710     case SUBMODULE_LINK_LIBRARY:
5711       ModMap.resolveLinkAsDependencies(CurrentModule);
5712       CurrentModule->LinkLibraries.push_back(
5713           Module::LinkLibrary(std::string(Blob), Record[0]));
5714       break;
5715 
5716     case SUBMODULE_CONFIG_MACRO:
5717       CurrentModule->ConfigMacros.push_back(Blob.str());
5718       break;
5719 
5720     case SUBMODULE_CONFLICT: {
5721       UnresolvedModuleRef Unresolved;
5722       Unresolved.File = &F;
5723       Unresolved.Mod = CurrentModule;
5724       Unresolved.ID = Record[0];
5725       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5726       Unresolved.IsWildcard = false;
5727       Unresolved.String = Blob;
5728       UnresolvedModuleRefs.push_back(Unresolved);
5729       break;
5730     }
5731 
5732     case SUBMODULE_INITIALIZERS: {
5733       if (!ContextObj)
5734         break;
5735       SmallVector<uint32_t, 16> Inits;
5736       for (auto &ID : Record)
5737         Inits.push_back(getGlobalDeclID(F, ID));
5738       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5739       break;
5740     }
5741 
5742     case SUBMODULE_EXPORT_AS:
5743       CurrentModule->ExportAsModule = Blob.str();
5744       ModMap.addLinkAsDependency(CurrentModule);
5745       break;
5746     }
5747   }
5748 }
5749 
5750 /// Parse the record that corresponds to a LangOptions data
5751 /// structure.
5752 ///
5753 /// This routine parses the language options from the AST file and then gives
5754 /// them to the AST listener if one is set.
5755 ///
5756 /// \returns true if the listener deems the file unacceptable, false otherwise.
5757 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5758                                      bool Complain,
5759                                      ASTReaderListener &Listener,
5760                                      bool AllowCompatibleDifferences) {
5761   LangOptions LangOpts;
5762   unsigned Idx = 0;
5763 #define LANGOPT(Name, Bits, Default, Description) \
5764   LangOpts.Name = Record[Idx++];
5765 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5766   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5767 #include "clang/Basic/LangOptions.def"
5768 #define SANITIZER(NAME, ID)                                                    \
5769   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5770 #include "clang/Basic/Sanitizers.def"
5771 
5772   for (unsigned N = Record[Idx++]; N; --N)
5773     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5774 
5775   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5776   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5777   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5778 
5779   LangOpts.CurrentModule = ReadString(Record, Idx);
5780 
5781   // Comment options.
5782   for (unsigned N = Record[Idx++]; N; --N) {
5783     LangOpts.CommentOpts.BlockCommandNames.push_back(
5784       ReadString(Record, Idx));
5785   }
5786   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5787 
5788   // OpenMP offloading options.
5789   for (unsigned N = Record[Idx++]; N; --N) {
5790     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5791   }
5792 
5793   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5794 
5795   return Listener.ReadLanguageOptions(LangOpts, Complain,
5796                                       AllowCompatibleDifferences);
5797 }
5798 
5799 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5800                                    ASTReaderListener &Listener,
5801                                    bool AllowCompatibleDifferences) {
5802   unsigned Idx = 0;
5803   TargetOptions TargetOpts;
5804   TargetOpts.Triple = ReadString(Record, Idx);
5805   TargetOpts.CPU = ReadString(Record, Idx);
5806   TargetOpts.TuneCPU = ReadString(Record, Idx);
5807   TargetOpts.ABI = ReadString(Record, Idx);
5808   for (unsigned N = Record[Idx++]; N; --N) {
5809     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5810   }
5811   for (unsigned N = Record[Idx++]; N; --N) {
5812     TargetOpts.Features.push_back(ReadString(Record, Idx));
5813   }
5814 
5815   return Listener.ReadTargetOptions(TargetOpts, Complain,
5816                                     AllowCompatibleDifferences);
5817 }
5818 
5819 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5820                                        ASTReaderListener &Listener) {
5821   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5822   unsigned Idx = 0;
5823 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5824 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5825   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5826 #include "clang/Basic/DiagnosticOptions.def"
5827 
5828   for (unsigned N = Record[Idx++]; N; --N)
5829     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5830   for (unsigned N = Record[Idx++]; N; --N)
5831     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5832 
5833   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5834 }
5835 
5836 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5837                                        ASTReaderListener &Listener) {
5838   FileSystemOptions FSOpts;
5839   unsigned Idx = 0;
5840   FSOpts.WorkingDir = ReadString(Record, Idx);
5841   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5842 }
5843 
5844 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5845                                          bool Complain,
5846                                          ASTReaderListener &Listener) {
5847   HeaderSearchOptions HSOpts;
5848   unsigned Idx = 0;
5849   HSOpts.Sysroot = ReadString(Record, Idx);
5850 
5851   // Include entries.
5852   for (unsigned N = Record[Idx++]; N; --N) {
5853     std::string Path = ReadString(Record, Idx);
5854     frontend::IncludeDirGroup Group
5855       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5856     bool IsFramework = Record[Idx++];
5857     bool IgnoreSysRoot = Record[Idx++];
5858     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5859                                     IgnoreSysRoot);
5860   }
5861 
5862   // System header prefixes.
5863   for (unsigned N = Record[Idx++]; N; --N) {
5864     std::string Prefix = ReadString(Record, Idx);
5865     bool IsSystemHeader = Record[Idx++];
5866     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5867   }
5868 
5869   HSOpts.ResourceDir = ReadString(Record, Idx);
5870   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5871   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5872   HSOpts.DisableModuleHash = Record[Idx++];
5873   HSOpts.ImplicitModuleMaps = Record[Idx++];
5874   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5875   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5876   HSOpts.UseBuiltinIncludes = Record[Idx++];
5877   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5878   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5879   HSOpts.UseLibcxx = Record[Idx++];
5880   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5881 
5882   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5883                                           Complain);
5884 }
5885 
5886 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5887                                          bool Complain,
5888                                          ASTReaderListener &Listener,
5889                                          std::string &SuggestedPredefines) {
5890   PreprocessorOptions PPOpts;
5891   unsigned Idx = 0;
5892 
5893   // Macro definitions/undefs
5894   for (unsigned N = Record[Idx++]; N; --N) {
5895     std::string Macro = ReadString(Record, Idx);
5896     bool IsUndef = Record[Idx++];
5897     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5898   }
5899 
5900   // Includes
5901   for (unsigned N = Record[Idx++]; N; --N) {
5902     PPOpts.Includes.push_back(ReadString(Record, Idx));
5903   }
5904 
5905   // Macro Includes
5906   for (unsigned N = Record[Idx++]; N; --N) {
5907     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5908   }
5909 
5910   PPOpts.UsePredefines = Record[Idx++];
5911   PPOpts.DetailedRecord = Record[Idx++];
5912   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5913   PPOpts.ObjCXXARCStandardLibrary =
5914     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5915   SuggestedPredefines.clear();
5916   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5917                                           SuggestedPredefines);
5918 }
5919 
5920 std::pair<ModuleFile *, unsigned>
5921 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5922   GlobalPreprocessedEntityMapType::iterator
5923   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5924   assert(I != GlobalPreprocessedEntityMap.end() &&
5925          "Corrupted global preprocessed entity map");
5926   ModuleFile *M = I->second;
5927   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5928   return std::make_pair(M, LocalIndex);
5929 }
5930 
5931 llvm::iterator_range<PreprocessingRecord::iterator>
5932 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5933   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5934     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5935                                              Mod.NumPreprocessedEntities);
5936 
5937   return llvm::make_range(PreprocessingRecord::iterator(),
5938                           PreprocessingRecord::iterator());
5939 }
5940 
5941 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5942                                         unsigned int ClientLoadCapabilities) {
5943   return ClientLoadCapabilities & ARR_OutOfDate &&
5944          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
5945 }
5946 
5947 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5948 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5949   return llvm::make_range(
5950       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5951       ModuleDeclIterator(this, &Mod,
5952                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5953 }
5954 
5955 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5956   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5957   assert(I != GlobalSkippedRangeMap.end() &&
5958     "Corrupted global skipped range map");
5959   ModuleFile *M = I->second;
5960   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5961   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5962   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5963   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5964                     TranslateSourceLocation(*M, RawRange.getEnd()));
5965   assert(Range.isValid());
5966   return Range;
5967 }
5968 
5969 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5970   PreprocessedEntityID PPID = Index+1;
5971   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5972   ModuleFile &M = *PPInfo.first;
5973   unsigned LocalIndex = PPInfo.second;
5974   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5975 
5976   if (!PP.getPreprocessingRecord()) {
5977     Error("no preprocessing record");
5978     return nullptr;
5979   }
5980 
5981   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5982   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5983           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5984     Error(std::move(Err));
5985     return nullptr;
5986   }
5987 
5988   Expected<llvm::BitstreamEntry> MaybeEntry =
5989       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5990   if (!MaybeEntry) {
5991     Error(MaybeEntry.takeError());
5992     return nullptr;
5993   }
5994   llvm::BitstreamEntry Entry = MaybeEntry.get();
5995 
5996   if (Entry.Kind != llvm::BitstreamEntry::Record)
5997     return nullptr;
5998 
5999   // Read the record.
6000   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
6001                     TranslateSourceLocation(M, PPOffs.getEnd()));
6002   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
6003   StringRef Blob;
6004   RecordData Record;
6005   Expected<unsigned> MaybeRecType =
6006       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
6007   if (!MaybeRecType) {
6008     Error(MaybeRecType.takeError());
6009     return nullptr;
6010   }
6011   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
6012   case PPD_MACRO_EXPANSION: {
6013     bool isBuiltin = Record[0];
6014     IdentifierInfo *Name = nullptr;
6015     MacroDefinitionRecord *Def = nullptr;
6016     if (isBuiltin)
6017       Name = getLocalIdentifier(M, Record[1]);
6018     else {
6019       PreprocessedEntityID GlobalID =
6020           getGlobalPreprocessedEntityID(M, Record[1]);
6021       Def = cast<MacroDefinitionRecord>(
6022           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
6023     }
6024 
6025     MacroExpansion *ME;
6026     if (isBuiltin)
6027       ME = new (PPRec) MacroExpansion(Name, Range);
6028     else
6029       ME = new (PPRec) MacroExpansion(Def, Range);
6030 
6031     return ME;
6032   }
6033 
6034   case PPD_MACRO_DEFINITION: {
6035     // Decode the identifier info and then check again; if the macro is
6036     // still defined and associated with the identifier,
6037     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6038     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6039 
6040     if (DeserializationListener)
6041       DeserializationListener->MacroDefinitionRead(PPID, MD);
6042 
6043     return MD;
6044   }
6045 
6046   case PPD_INCLUSION_DIRECTIVE: {
6047     const char *FullFileNameStart = Blob.data() + Record[0];
6048     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6049     const FileEntry *File = nullptr;
6050     if (!FullFileName.empty())
6051       if (auto FE = PP.getFileManager().getFile(FullFileName))
6052         File = *FE;
6053 
6054     // FIXME: Stable encoding
6055     InclusionDirective::InclusionKind Kind
6056       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6057     InclusionDirective *ID
6058       = new (PPRec) InclusionDirective(PPRec, Kind,
6059                                        StringRef(Blob.data(), Record[0]),
6060                                        Record[1], Record[3],
6061                                        File,
6062                                        Range);
6063     return ID;
6064   }
6065   }
6066 
6067   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6068 }
6069 
6070 /// Find the next module that contains entities and return the ID
6071 /// of the first entry.
6072 ///
6073 /// \param SLocMapI points at a chunk of a module that contains no
6074 /// preprocessed entities or the entities it contains are not the ones we are
6075 /// looking for.
6076 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6077                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6078   ++SLocMapI;
6079   for (GlobalSLocOffsetMapType::const_iterator
6080          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6081     ModuleFile &M = *SLocMapI->second;
6082     if (M.NumPreprocessedEntities)
6083       return M.BasePreprocessedEntityID;
6084   }
6085 
6086   return getTotalNumPreprocessedEntities();
6087 }
6088 
6089 namespace {
6090 
6091 struct PPEntityComp {
6092   const ASTReader &Reader;
6093   ModuleFile &M;
6094 
6095   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6096 
6097   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6098     SourceLocation LHS = getLoc(L);
6099     SourceLocation RHS = getLoc(R);
6100     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6101   }
6102 
6103   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6104     SourceLocation LHS = getLoc(L);
6105     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6106   }
6107 
6108   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6109     SourceLocation RHS = getLoc(R);
6110     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6111   }
6112 
6113   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6114     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6115   }
6116 };
6117 
6118 } // namespace
6119 
6120 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6121                                                        bool EndsAfter) const {
6122   if (SourceMgr.isLocalSourceLocation(Loc))
6123     return getTotalNumPreprocessedEntities();
6124 
6125   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6126       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6127   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6128          "Corrupted global sloc offset map");
6129 
6130   if (SLocMapI->second->NumPreprocessedEntities == 0)
6131     return findNextPreprocessedEntity(SLocMapI);
6132 
6133   ModuleFile &M = *SLocMapI->second;
6134 
6135   using pp_iterator = const PPEntityOffset *;
6136 
6137   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6138   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6139 
6140   size_t Count = M.NumPreprocessedEntities;
6141   size_t Half;
6142   pp_iterator First = pp_begin;
6143   pp_iterator PPI;
6144 
6145   if (EndsAfter) {
6146     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6147                            PPEntityComp(*this, M));
6148   } else {
6149     // Do a binary search manually instead of using std::lower_bound because
6150     // The end locations of entities may be unordered (when a macro expansion
6151     // is inside another macro argument), but for this case it is not important
6152     // whether we get the first macro expansion or its containing macro.
6153     while (Count > 0) {
6154       Half = Count / 2;
6155       PPI = First;
6156       std::advance(PPI, Half);
6157       if (SourceMgr.isBeforeInTranslationUnit(
6158               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6159         First = PPI;
6160         ++First;
6161         Count = Count - Half - 1;
6162       } else
6163         Count = Half;
6164     }
6165   }
6166 
6167   if (PPI == pp_end)
6168     return findNextPreprocessedEntity(SLocMapI);
6169 
6170   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6171 }
6172 
6173 /// Returns a pair of [Begin, End) indices of preallocated
6174 /// preprocessed entities that \arg Range encompasses.
6175 std::pair<unsigned, unsigned>
6176     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6177   if (Range.isInvalid())
6178     return std::make_pair(0,0);
6179   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6180 
6181   PreprocessedEntityID BeginID =
6182       findPreprocessedEntity(Range.getBegin(), false);
6183   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6184   return std::make_pair(BeginID, EndID);
6185 }
6186 
6187 /// Optionally returns true or false if the preallocated preprocessed
6188 /// entity with index \arg Index came from file \arg FID.
6189 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6190                                                              FileID FID) {
6191   if (FID.isInvalid())
6192     return false;
6193 
6194   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6195   ModuleFile &M = *PPInfo.first;
6196   unsigned LocalIndex = PPInfo.second;
6197   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6198 
6199   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6200   if (Loc.isInvalid())
6201     return false;
6202 
6203   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6204     return true;
6205   else
6206     return false;
6207 }
6208 
6209 namespace {
6210 
6211   /// Visitor used to search for information about a header file.
6212   class HeaderFileInfoVisitor {
6213     const FileEntry *FE;
6214     Optional<HeaderFileInfo> HFI;
6215 
6216   public:
6217     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6218 
6219     bool operator()(ModuleFile &M) {
6220       HeaderFileInfoLookupTable *Table
6221         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6222       if (!Table)
6223         return false;
6224 
6225       // Look in the on-disk hash table for an entry for this file name.
6226       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6227       if (Pos == Table->end())
6228         return false;
6229 
6230       HFI = *Pos;
6231       return true;
6232     }
6233 
6234     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6235   };
6236 
6237 } // namespace
6238 
6239 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6240   HeaderFileInfoVisitor Visitor(FE);
6241   ModuleMgr.visit(Visitor);
6242   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6243     return *HFI;
6244 
6245   return HeaderFileInfo();
6246 }
6247 
6248 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6249   using DiagState = DiagnosticsEngine::DiagState;
6250   SmallVector<DiagState *, 32> DiagStates;
6251 
6252   for (ModuleFile &F : ModuleMgr) {
6253     unsigned Idx = 0;
6254     auto &Record = F.PragmaDiagMappings;
6255     if (Record.empty())
6256       continue;
6257 
6258     DiagStates.clear();
6259 
6260     auto ReadDiagState =
6261         [&](const DiagState &BasedOn, SourceLocation Loc,
6262             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6263       unsigned BackrefID = Record[Idx++];
6264       if (BackrefID != 0)
6265         return DiagStates[BackrefID - 1];
6266 
6267       // A new DiagState was created here.
6268       Diag.DiagStates.push_back(BasedOn);
6269       DiagState *NewState = &Diag.DiagStates.back();
6270       DiagStates.push_back(NewState);
6271       unsigned Size = Record[Idx++];
6272       assert(Idx + Size * 2 <= Record.size() &&
6273              "Invalid data, not enough diag/map pairs");
6274       while (Size--) {
6275         unsigned DiagID = Record[Idx++];
6276         DiagnosticMapping NewMapping =
6277             DiagnosticMapping::deserialize(Record[Idx++]);
6278         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6279           continue;
6280 
6281         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6282 
6283         // If this mapping was specified as a warning but the severity was
6284         // upgraded due to diagnostic settings, simulate the current diagnostic
6285         // settings (and use a warning).
6286         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6287           NewMapping.setSeverity(diag::Severity::Warning);
6288           NewMapping.setUpgradedFromWarning(false);
6289         }
6290 
6291         Mapping = NewMapping;
6292       }
6293       return NewState;
6294     };
6295 
6296     // Read the first state.
6297     DiagState *FirstState;
6298     if (F.Kind == MK_ImplicitModule) {
6299       // Implicitly-built modules are reused with different diagnostic
6300       // settings.  Use the initial diagnostic state from Diag to simulate this
6301       // compilation's diagnostic settings.
6302       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6303       DiagStates.push_back(FirstState);
6304 
6305       // Skip the initial diagnostic state from the serialized module.
6306       assert(Record[1] == 0 &&
6307              "Invalid data, unexpected backref in initial state");
6308       Idx = 3 + Record[2] * 2;
6309       assert(Idx < Record.size() &&
6310              "Invalid data, not enough state change pairs in initial state");
6311     } else if (F.isModule()) {
6312       // For an explicit module, preserve the flags from the module build
6313       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6314       // -Wblah flags.
6315       unsigned Flags = Record[Idx++];
6316       DiagState Initial;
6317       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6318       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6319       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6320       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6321       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6322       Initial.ExtBehavior = (diag::Severity)Flags;
6323       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6324 
6325       assert(F.OriginalSourceFileID.isValid());
6326 
6327       // Set up the root buffer of the module to start with the initial
6328       // diagnostic state of the module itself, to cover files that contain no
6329       // explicit transitions (for which we did not serialize anything).
6330       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6331           .StateTransitions.push_back({FirstState, 0});
6332     } else {
6333       // For prefix ASTs, start with whatever the user configured on the
6334       // command line.
6335       Idx++; // Skip flags.
6336       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6337                                  SourceLocation(), false);
6338     }
6339 
6340     // Read the state transitions.
6341     unsigned NumLocations = Record[Idx++];
6342     while (NumLocations--) {
6343       assert(Idx < Record.size() &&
6344              "Invalid data, missing pragma diagnostic states");
6345       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6346       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6347       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6348       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6349       unsigned Transitions = Record[Idx++];
6350 
6351       // Note that we don't need to set up Parent/ParentOffset here, because
6352       // we won't be changing the diagnostic state within imported FileIDs
6353       // (other than perhaps appending to the main source file, which has no
6354       // parent).
6355       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6356       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6357       for (unsigned I = 0; I != Transitions; ++I) {
6358         unsigned Offset = Record[Idx++];
6359         auto *State =
6360             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6361         F.StateTransitions.push_back({State, Offset});
6362       }
6363     }
6364 
6365     // Read the final state.
6366     assert(Idx < Record.size() &&
6367            "Invalid data, missing final pragma diagnostic state");
6368     SourceLocation CurStateLoc =
6369         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6370     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6371 
6372     if (!F.isModule()) {
6373       Diag.DiagStatesByLoc.CurDiagState = CurState;
6374       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6375 
6376       // Preserve the property that the imaginary root file describes the
6377       // current state.
6378       FileID NullFile;
6379       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6380       if (T.empty())
6381         T.push_back({CurState, 0});
6382       else
6383         T[0].State = CurState;
6384     }
6385 
6386     // Don't try to read these mappings again.
6387     Record.clear();
6388   }
6389 }
6390 
6391 /// Get the correct cursor and offset for loading a type.
6392 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6393   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6394   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6395   ModuleFile *M = I->second;
6396   return RecordLocation(
6397       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6398              M->DeclsBlockStartOffset);
6399 }
6400 
6401 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6402   switch (code) {
6403 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6404   case TYPE_##CODE_ID: return Type::CLASS_ID;
6405 #include "clang/Serialization/TypeBitCodes.def"
6406   default: return llvm::None;
6407   }
6408 }
6409 
6410 /// Read and return the type with the given index..
6411 ///
6412 /// The index is the type ID, shifted and minus the number of predefs. This
6413 /// routine actually reads the record corresponding to the type at the given
6414 /// location. It is a helper routine for GetType, which deals with reading type
6415 /// IDs.
6416 QualType ASTReader::readTypeRecord(unsigned Index) {
6417   assert(ContextObj && "reading type with no AST context");
6418   ASTContext &Context = *ContextObj;
6419   RecordLocation Loc = TypeCursorForIndex(Index);
6420   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6421 
6422   // Keep track of where we are in the stream, then jump back there
6423   // after reading this type.
6424   SavedStreamPosition SavedPosition(DeclsCursor);
6425 
6426   ReadingKindTracker ReadingKind(Read_Type, *this);
6427 
6428   // Note that we are loading a type record.
6429   Deserializing AType(this);
6430 
6431   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6432     Error(std::move(Err));
6433     return QualType();
6434   }
6435   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6436   if (!RawCode) {
6437     Error(RawCode.takeError());
6438     return QualType();
6439   }
6440 
6441   ASTRecordReader Record(*this, *Loc.F);
6442   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6443   if (!Code) {
6444     Error(Code.takeError());
6445     return QualType();
6446   }
6447   if (Code.get() == TYPE_EXT_QUAL) {
6448     QualType baseType = Record.readQualType();
6449     Qualifiers quals = Record.readQualifiers();
6450     return Context.getQualifiedType(baseType, quals);
6451   }
6452 
6453   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6454   if (!maybeClass) {
6455     Error("Unexpected code for type");
6456     return QualType();
6457   }
6458 
6459   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6460   return TypeReader.read(*maybeClass);
6461 }
6462 
6463 namespace clang {
6464 
6465 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6466   ASTRecordReader &Reader;
6467 
6468   SourceLocation readSourceLocation() {
6469     return Reader.readSourceLocation();
6470   }
6471 
6472   TypeSourceInfo *GetTypeSourceInfo() {
6473     return Reader.readTypeSourceInfo();
6474   }
6475 
6476   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6477     return Reader.readNestedNameSpecifierLoc();
6478   }
6479 
6480   Attr *ReadAttr() {
6481     return Reader.readAttr();
6482   }
6483 
6484 public:
6485   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6486 
6487   // We want compile-time assurance that we've enumerated all of
6488   // these, so unfortunately we have to declare them first, then
6489   // define them out-of-line.
6490 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6491 #define TYPELOC(CLASS, PARENT) \
6492   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6493 #include "clang/AST/TypeLocNodes.def"
6494 
6495   void VisitFunctionTypeLoc(FunctionTypeLoc);
6496   void VisitArrayTypeLoc(ArrayTypeLoc);
6497 };
6498 
6499 } // namespace clang
6500 
6501 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6502   // nothing to do
6503 }
6504 
6505 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6506   TL.setBuiltinLoc(readSourceLocation());
6507   if (TL.needsExtraLocalData()) {
6508     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6509     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6510     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6511     TL.setModeAttr(Reader.readInt());
6512   }
6513 }
6514 
6515 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6516   TL.setNameLoc(readSourceLocation());
6517 }
6518 
6519 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6520   TL.setStarLoc(readSourceLocation());
6521 }
6522 
6523 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6524   // nothing to do
6525 }
6526 
6527 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6528   // nothing to do
6529 }
6530 
6531 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6532   TL.setExpansionLoc(readSourceLocation());
6533 }
6534 
6535 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6536   TL.setCaretLoc(readSourceLocation());
6537 }
6538 
6539 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6540   TL.setAmpLoc(readSourceLocation());
6541 }
6542 
6543 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6544   TL.setAmpAmpLoc(readSourceLocation());
6545 }
6546 
6547 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6548   TL.setStarLoc(readSourceLocation());
6549   TL.setClassTInfo(GetTypeSourceInfo());
6550 }
6551 
6552 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6553   TL.setLBracketLoc(readSourceLocation());
6554   TL.setRBracketLoc(readSourceLocation());
6555   if (Reader.readBool())
6556     TL.setSizeExpr(Reader.readExpr());
6557   else
6558     TL.setSizeExpr(nullptr);
6559 }
6560 
6561 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6562   VisitArrayTypeLoc(TL);
6563 }
6564 
6565 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6566   VisitArrayTypeLoc(TL);
6567 }
6568 
6569 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6570   VisitArrayTypeLoc(TL);
6571 }
6572 
6573 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6574                                             DependentSizedArrayTypeLoc TL) {
6575   VisitArrayTypeLoc(TL);
6576 }
6577 
6578 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6579     DependentAddressSpaceTypeLoc TL) {
6580 
6581     TL.setAttrNameLoc(readSourceLocation());
6582     TL.setAttrOperandParensRange(Reader.readSourceRange());
6583     TL.setAttrExprOperand(Reader.readExpr());
6584 }
6585 
6586 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6587                                         DependentSizedExtVectorTypeLoc TL) {
6588   TL.setNameLoc(readSourceLocation());
6589 }
6590 
6591 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6592   TL.setNameLoc(readSourceLocation());
6593 }
6594 
6595 void TypeLocReader::VisitDependentVectorTypeLoc(
6596     DependentVectorTypeLoc TL) {
6597   TL.setNameLoc(readSourceLocation());
6598 }
6599 
6600 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6601   TL.setNameLoc(readSourceLocation());
6602 }
6603 
6604 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6605   TL.setAttrNameLoc(readSourceLocation());
6606   TL.setAttrOperandParensRange(Reader.readSourceRange());
6607   TL.setAttrRowOperand(Reader.readExpr());
6608   TL.setAttrColumnOperand(Reader.readExpr());
6609 }
6610 
6611 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6612     DependentSizedMatrixTypeLoc TL) {
6613   TL.setAttrNameLoc(readSourceLocation());
6614   TL.setAttrOperandParensRange(Reader.readSourceRange());
6615   TL.setAttrRowOperand(Reader.readExpr());
6616   TL.setAttrColumnOperand(Reader.readExpr());
6617 }
6618 
6619 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6620   TL.setLocalRangeBegin(readSourceLocation());
6621   TL.setLParenLoc(readSourceLocation());
6622   TL.setRParenLoc(readSourceLocation());
6623   TL.setExceptionSpecRange(Reader.readSourceRange());
6624   TL.setLocalRangeEnd(readSourceLocation());
6625   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6626     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6627   }
6628 }
6629 
6630 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6631   VisitFunctionTypeLoc(TL);
6632 }
6633 
6634 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6635   VisitFunctionTypeLoc(TL);
6636 }
6637 
6638 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6639   TL.setNameLoc(readSourceLocation());
6640 }
6641 
6642 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6643   TL.setNameLoc(readSourceLocation());
6644 }
6645 
6646 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6647   TL.setTypeofLoc(readSourceLocation());
6648   TL.setLParenLoc(readSourceLocation());
6649   TL.setRParenLoc(readSourceLocation());
6650 }
6651 
6652 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6653   TL.setTypeofLoc(readSourceLocation());
6654   TL.setLParenLoc(readSourceLocation());
6655   TL.setRParenLoc(readSourceLocation());
6656   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6657 }
6658 
6659 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6660   TL.setNameLoc(readSourceLocation());
6661 }
6662 
6663 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6664   TL.setKWLoc(readSourceLocation());
6665   TL.setLParenLoc(readSourceLocation());
6666   TL.setRParenLoc(readSourceLocation());
6667   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6668 }
6669 
6670 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6671   TL.setNameLoc(readSourceLocation());
6672   if (Reader.readBool()) {
6673     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6674     TL.setTemplateKWLoc(readSourceLocation());
6675     TL.setConceptNameLoc(readSourceLocation());
6676     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6677     TL.setLAngleLoc(readSourceLocation());
6678     TL.setRAngleLoc(readSourceLocation());
6679     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6680       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6681                               TL.getTypePtr()->getArg(i).getKind()));
6682   }
6683 }
6684 
6685 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6686     DeducedTemplateSpecializationTypeLoc TL) {
6687   TL.setTemplateNameLoc(readSourceLocation());
6688 }
6689 
6690 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6691   TL.setNameLoc(readSourceLocation());
6692 }
6693 
6694 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6695   TL.setNameLoc(readSourceLocation());
6696 }
6697 
6698 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6699   TL.setAttr(ReadAttr());
6700 }
6701 
6702 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6703   TL.setNameLoc(readSourceLocation());
6704 }
6705 
6706 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6707                                             SubstTemplateTypeParmTypeLoc TL) {
6708   TL.setNameLoc(readSourceLocation());
6709 }
6710 
6711 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6712                                           SubstTemplateTypeParmPackTypeLoc TL) {
6713   TL.setNameLoc(readSourceLocation());
6714 }
6715 
6716 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6717                                            TemplateSpecializationTypeLoc TL) {
6718   TL.setTemplateKeywordLoc(readSourceLocation());
6719   TL.setTemplateNameLoc(readSourceLocation());
6720   TL.setLAngleLoc(readSourceLocation());
6721   TL.setRAngleLoc(readSourceLocation());
6722   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6723     TL.setArgLocInfo(
6724         i,
6725         Reader.readTemplateArgumentLocInfo(
6726           TL.getTypePtr()->getArg(i).getKind()));
6727 }
6728 
6729 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6730   TL.setLParenLoc(readSourceLocation());
6731   TL.setRParenLoc(readSourceLocation());
6732 }
6733 
6734 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6735   TL.setElaboratedKeywordLoc(readSourceLocation());
6736   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6737 }
6738 
6739 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6740   TL.setNameLoc(readSourceLocation());
6741 }
6742 
6743 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6744   TL.setElaboratedKeywordLoc(readSourceLocation());
6745   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6746   TL.setNameLoc(readSourceLocation());
6747 }
6748 
6749 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6750        DependentTemplateSpecializationTypeLoc TL) {
6751   TL.setElaboratedKeywordLoc(readSourceLocation());
6752   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6753   TL.setTemplateKeywordLoc(readSourceLocation());
6754   TL.setTemplateNameLoc(readSourceLocation());
6755   TL.setLAngleLoc(readSourceLocation());
6756   TL.setRAngleLoc(readSourceLocation());
6757   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6758     TL.setArgLocInfo(
6759         I,
6760         Reader.readTemplateArgumentLocInfo(
6761             TL.getTypePtr()->getArg(I).getKind()));
6762 }
6763 
6764 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6765   TL.setEllipsisLoc(readSourceLocation());
6766 }
6767 
6768 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6769   TL.setNameLoc(readSourceLocation());
6770 }
6771 
6772 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6773   if (TL.getNumProtocols()) {
6774     TL.setProtocolLAngleLoc(readSourceLocation());
6775     TL.setProtocolRAngleLoc(readSourceLocation());
6776   }
6777   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6778     TL.setProtocolLoc(i, readSourceLocation());
6779 }
6780 
6781 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6782   TL.setHasBaseTypeAsWritten(Reader.readBool());
6783   TL.setTypeArgsLAngleLoc(readSourceLocation());
6784   TL.setTypeArgsRAngleLoc(readSourceLocation());
6785   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6786     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6787   TL.setProtocolLAngleLoc(readSourceLocation());
6788   TL.setProtocolRAngleLoc(readSourceLocation());
6789   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6790     TL.setProtocolLoc(i, readSourceLocation());
6791 }
6792 
6793 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6794   TL.setStarLoc(readSourceLocation());
6795 }
6796 
6797 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6798   TL.setKWLoc(readSourceLocation());
6799   TL.setLParenLoc(readSourceLocation());
6800   TL.setRParenLoc(readSourceLocation());
6801 }
6802 
6803 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6804   TL.setKWLoc(readSourceLocation());
6805 }
6806 
6807 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6808   TL.setNameLoc(readSourceLocation());
6809 }
6810 void TypeLocReader::VisitDependentExtIntTypeLoc(
6811     clang::DependentExtIntTypeLoc TL) {
6812   TL.setNameLoc(readSourceLocation());
6813 }
6814 
6815 
6816 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6817   TypeLocReader TLR(*this);
6818   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6819     TLR.Visit(TL);
6820 }
6821 
6822 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6823   QualType InfoTy = readType();
6824   if (InfoTy.isNull())
6825     return nullptr;
6826 
6827   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6828   readTypeLoc(TInfo->getTypeLoc());
6829   return TInfo;
6830 }
6831 
6832 QualType ASTReader::GetType(TypeID ID) {
6833   assert(ContextObj && "reading type with no AST context");
6834   ASTContext &Context = *ContextObj;
6835 
6836   unsigned FastQuals = ID & Qualifiers::FastMask;
6837   unsigned Index = ID >> Qualifiers::FastWidth;
6838 
6839   if (Index < NUM_PREDEF_TYPE_IDS) {
6840     QualType T;
6841     switch ((PredefinedTypeIDs)Index) {
6842     case PREDEF_TYPE_NULL_ID:
6843       return QualType();
6844     case PREDEF_TYPE_VOID_ID:
6845       T = Context.VoidTy;
6846       break;
6847     case PREDEF_TYPE_BOOL_ID:
6848       T = Context.BoolTy;
6849       break;
6850     case PREDEF_TYPE_CHAR_U_ID:
6851     case PREDEF_TYPE_CHAR_S_ID:
6852       // FIXME: Check that the signedness of CharTy is correct!
6853       T = Context.CharTy;
6854       break;
6855     case PREDEF_TYPE_UCHAR_ID:
6856       T = Context.UnsignedCharTy;
6857       break;
6858     case PREDEF_TYPE_USHORT_ID:
6859       T = Context.UnsignedShortTy;
6860       break;
6861     case PREDEF_TYPE_UINT_ID:
6862       T = Context.UnsignedIntTy;
6863       break;
6864     case PREDEF_TYPE_ULONG_ID:
6865       T = Context.UnsignedLongTy;
6866       break;
6867     case PREDEF_TYPE_ULONGLONG_ID:
6868       T = Context.UnsignedLongLongTy;
6869       break;
6870     case PREDEF_TYPE_UINT128_ID:
6871       T = Context.UnsignedInt128Ty;
6872       break;
6873     case PREDEF_TYPE_SCHAR_ID:
6874       T = Context.SignedCharTy;
6875       break;
6876     case PREDEF_TYPE_WCHAR_ID:
6877       T = Context.WCharTy;
6878       break;
6879     case PREDEF_TYPE_SHORT_ID:
6880       T = Context.ShortTy;
6881       break;
6882     case PREDEF_TYPE_INT_ID:
6883       T = Context.IntTy;
6884       break;
6885     case PREDEF_TYPE_LONG_ID:
6886       T = Context.LongTy;
6887       break;
6888     case PREDEF_TYPE_LONGLONG_ID:
6889       T = Context.LongLongTy;
6890       break;
6891     case PREDEF_TYPE_INT128_ID:
6892       T = Context.Int128Ty;
6893       break;
6894     case PREDEF_TYPE_BFLOAT16_ID:
6895       T = Context.BFloat16Ty;
6896       break;
6897     case PREDEF_TYPE_HALF_ID:
6898       T = Context.HalfTy;
6899       break;
6900     case PREDEF_TYPE_FLOAT_ID:
6901       T = Context.FloatTy;
6902       break;
6903     case PREDEF_TYPE_DOUBLE_ID:
6904       T = Context.DoubleTy;
6905       break;
6906     case PREDEF_TYPE_LONGDOUBLE_ID:
6907       T = Context.LongDoubleTy;
6908       break;
6909     case PREDEF_TYPE_SHORT_ACCUM_ID:
6910       T = Context.ShortAccumTy;
6911       break;
6912     case PREDEF_TYPE_ACCUM_ID:
6913       T = Context.AccumTy;
6914       break;
6915     case PREDEF_TYPE_LONG_ACCUM_ID:
6916       T = Context.LongAccumTy;
6917       break;
6918     case PREDEF_TYPE_USHORT_ACCUM_ID:
6919       T = Context.UnsignedShortAccumTy;
6920       break;
6921     case PREDEF_TYPE_UACCUM_ID:
6922       T = Context.UnsignedAccumTy;
6923       break;
6924     case PREDEF_TYPE_ULONG_ACCUM_ID:
6925       T = Context.UnsignedLongAccumTy;
6926       break;
6927     case PREDEF_TYPE_SHORT_FRACT_ID:
6928       T = Context.ShortFractTy;
6929       break;
6930     case PREDEF_TYPE_FRACT_ID:
6931       T = Context.FractTy;
6932       break;
6933     case PREDEF_TYPE_LONG_FRACT_ID:
6934       T = Context.LongFractTy;
6935       break;
6936     case PREDEF_TYPE_USHORT_FRACT_ID:
6937       T = Context.UnsignedShortFractTy;
6938       break;
6939     case PREDEF_TYPE_UFRACT_ID:
6940       T = Context.UnsignedFractTy;
6941       break;
6942     case PREDEF_TYPE_ULONG_FRACT_ID:
6943       T = Context.UnsignedLongFractTy;
6944       break;
6945     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6946       T = Context.SatShortAccumTy;
6947       break;
6948     case PREDEF_TYPE_SAT_ACCUM_ID:
6949       T = Context.SatAccumTy;
6950       break;
6951     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6952       T = Context.SatLongAccumTy;
6953       break;
6954     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6955       T = Context.SatUnsignedShortAccumTy;
6956       break;
6957     case PREDEF_TYPE_SAT_UACCUM_ID:
6958       T = Context.SatUnsignedAccumTy;
6959       break;
6960     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6961       T = Context.SatUnsignedLongAccumTy;
6962       break;
6963     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6964       T = Context.SatShortFractTy;
6965       break;
6966     case PREDEF_TYPE_SAT_FRACT_ID:
6967       T = Context.SatFractTy;
6968       break;
6969     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6970       T = Context.SatLongFractTy;
6971       break;
6972     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6973       T = Context.SatUnsignedShortFractTy;
6974       break;
6975     case PREDEF_TYPE_SAT_UFRACT_ID:
6976       T = Context.SatUnsignedFractTy;
6977       break;
6978     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6979       T = Context.SatUnsignedLongFractTy;
6980       break;
6981     case PREDEF_TYPE_FLOAT16_ID:
6982       T = Context.Float16Ty;
6983       break;
6984     case PREDEF_TYPE_FLOAT128_ID:
6985       T = Context.Float128Ty;
6986       break;
6987     case PREDEF_TYPE_OVERLOAD_ID:
6988       T = Context.OverloadTy;
6989       break;
6990     case PREDEF_TYPE_BOUND_MEMBER:
6991       T = Context.BoundMemberTy;
6992       break;
6993     case PREDEF_TYPE_PSEUDO_OBJECT:
6994       T = Context.PseudoObjectTy;
6995       break;
6996     case PREDEF_TYPE_DEPENDENT_ID:
6997       T = Context.DependentTy;
6998       break;
6999     case PREDEF_TYPE_UNKNOWN_ANY:
7000       T = Context.UnknownAnyTy;
7001       break;
7002     case PREDEF_TYPE_NULLPTR_ID:
7003       T = Context.NullPtrTy;
7004       break;
7005     case PREDEF_TYPE_CHAR8_ID:
7006       T = Context.Char8Ty;
7007       break;
7008     case PREDEF_TYPE_CHAR16_ID:
7009       T = Context.Char16Ty;
7010       break;
7011     case PREDEF_TYPE_CHAR32_ID:
7012       T = Context.Char32Ty;
7013       break;
7014     case PREDEF_TYPE_OBJC_ID:
7015       T = Context.ObjCBuiltinIdTy;
7016       break;
7017     case PREDEF_TYPE_OBJC_CLASS:
7018       T = Context.ObjCBuiltinClassTy;
7019       break;
7020     case PREDEF_TYPE_OBJC_SEL:
7021       T = Context.ObjCBuiltinSelTy;
7022       break;
7023 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
7024     case PREDEF_TYPE_##Id##_ID: \
7025       T = Context.SingletonId; \
7026       break;
7027 #include "clang/Basic/OpenCLImageTypes.def"
7028 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7029     case PREDEF_TYPE_##Id##_ID: \
7030       T = Context.Id##Ty; \
7031       break;
7032 #include "clang/Basic/OpenCLExtensionTypes.def"
7033     case PREDEF_TYPE_SAMPLER_ID:
7034       T = Context.OCLSamplerTy;
7035       break;
7036     case PREDEF_TYPE_EVENT_ID:
7037       T = Context.OCLEventTy;
7038       break;
7039     case PREDEF_TYPE_CLK_EVENT_ID:
7040       T = Context.OCLClkEventTy;
7041       break;
7042     case PREDEF_TYPE_QUEUE_ID:
7043       T = Context.OCLQueueTy;
7044       break;
7045     case PREDEF_TYPE_RESERVE_ID_ID:
7046       T = Context.OCLReserveIDTy;
7047       break;
7048     case PREDEF_TYPE_AUTO_DEDUCT:
7049       T = Context.getAutoDeductType();
7050       break;
7051     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7052       T = Context.getAutoRRefDeductType();
7053       break;
7054     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7055       T = Context.ARCUnbridgedCastTy;
7056       break;
7057     case PREDEF_TYPE_BUILTIN_FN:
7058       T = Context.BuiltinFnTy;
7059       break;
7060     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7061       T = Context.IncompleteMatrixIdxTy;
7062       break;
7063     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7064       T = Context.OMPArraySectionTy;
7065       break;
7066     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7067       T = Context.OMPArraySectionTy;
7068       break;
7069     case PREDEF_TYPE_OMP_ITERATOR:
7070       T = Context.OMPIteratorTy;
7071       break;
7072 #define SVE_TYPE(Name, Id, SingletonId) \
7073     case PREDEF_TYPE_##Id##_ID: \
7074       T = Context.SingletonId; \
7075       break;
7076 #include "clang/Basic/AArch64SVEACLETypes.def"
7077 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7078     case PREDEF_TYPE_##Id##_ID: \
7079       T = Context.Id##Ty; \
7080       break;
7081 #include "clang/Basic/PPCTypes.def"
7082 #define RVV_TYPE(Name, Id, SingletonId) \
7083     case PREDEF_TYPE_##Id##_ID: \
7084       T = Context.SingletonId; \
7085       break;
7086 #include "clang/Basic/RISCVVTypes.def"
7087     }
7088 
7089     assert(!T.isNull() && "Unknown predefined type");
7090     return T.withFastQualifiers(FastQuals);
7091   }
7092 
7093   Index -= NUM_PREDEF_TYPE_IDS;
7094   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7095   if (TypesLoaded[Index].isNull()) {
7096     TypesLoaded[Index] = readTypeRecord(Index);
7097     if (TypesLoaded[Index].isNull())
7098       return QualType();
7099 
7100     TypesLoaded[Index]->setFromAST();
7101     if (DeserializationListener)
7102       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7103                                         TypesLoaded[Index]);
7104   }
7105 
7106   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7107 }
7108 
7109 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7110   return GetType(getGlobalTypeID(F, LocalID));
7111 }
7112 
7113 serialization::TypeID
7114 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7115   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7116   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7117 
7118   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7119     return LocalID;
7120 
7121   if (!F.ModuleOffsetMap.empty())
7122     ReadModuleOffsetMap(F);
7123 
7124   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7125     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7126   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7127 
7128   unsigned GlobalIndex = LocalIndex + I->second;
7129   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7130 }
7131 
7132 TemplateArgumentLocInfo
7133 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7134   switch (Kind) {
7135   case TemplateArgument::Expression:
7136     return readExpr();
7137   case TemplateArgument::Type:
7138     return readTypeSourceInfo();
7139   case TemplateArgument::Template: {
7140     NestedNameSpecifierLoc QualifierLoc =
7141       readNestedNameSpecifierLoc();
7142     SourceLocation TemplateNameLoc = readSourceLocation();
7143     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7144                                    TemplateNameLoc, SourceLocation());
7145   }
7146   case TemplateArgument::TemplateExpansion: {
7147     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7148     SourceLocation TemplateNameLoc = readSourceLocation();
7149     SourceLocation EllipsisLoc = readSourceLocation();
7150     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7151                                    TemplateNameLoc, EllipsisLoc);
7152   }
7153   case TemplateArgument::Null:
7154   case TemplateArgument::Integral:
7155   case TemplateArgument::Declaration:
7156   case TemplateArgument::NullPtr:
7157   case TemplateArgument::Pack:
7158     // FIXME: Is this right?
7159     return TemplateArgumentLocInfo();
7160   }
7161   llvm_unreachable("unexpected template argument loc");
7162 }
7163 
7164 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7165   TemplateArgument Arg = readTemplateArgument();
7166 
7167   if (Arg.getKind() == TemplateArgument::Expression) {
7168     if (readBool()) // bool InfoHasSameExpr.
7169       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7170   }
7171   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7172 }
7173 
7174 const ASTTemplateArgumentListInfo *
7175 ASTRecordReader::readASTTemplateArgumentListInfo() {
7176   SourceLocation LAngleLoc = readSourceLocation();
7177   SourceLocation RAngleLoc = readSourceLocation();
7178   unsigned NumArgsAsWritten = readInt();
7179   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7180   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7181     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7182   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7183 }
7184 
7185 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7186   return GetDecl(ID);
7187 }
7188 
7189 void ASTReader::CompleteRedeclChain(const Decl *D) {
7190   if (NumCurrentElementsDeserializing) {
7191     // We arrange to not care about the complete redeclaration chain while we're
7192     // deserializing. Just remember that the AST has marked this one as complete
7193     // but that it's not actually complete yet, so we know we still need to
7194     // complete it later.
7195     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7196     return;
7197   }
7198 
7199   if (!D->getDeclContext()) {
7200     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7201     return;
7202   }
7203 
7204   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7205 
7206   // If this is a named declaration, complete it by looking it up
7207   // within its context.
7208   //
7209   // FIXME: Merging a function definition should merge
7210   // all mergeable entities within it.
7211   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7212       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7213     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7214       if (!getContext().getLangOpts().CPlusPlus &&
7215           isa<TranslationUnitDecl>(DC)) {
7216         // Outside of C++, we don't have a lookup table for the TU, so update
7217         // the identifier instead. (For C++ modules, we don't store decls
7218         // in the serialized identifier table, so we do the lookup in the TU.)
7219         auto *II = Name.getAsIdentifierInfo();
7220         assert(II && "non-identifier name in C?");
7221         if (II->isOutOfDate())
7222           updateOutOfDateIdentifier(*II);
7223       } else
7224         DC->lookup(Name);
7225     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7226       // Find all declarations of this kind from the relevant context.
7227       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7228         auto *DC = cast<DeclContext>(DCDecl);
7229         SmallVector<Decl*, 8> Decls;
7230         FindExternalLexicalDecls(
7231             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7232       }
7233     }
7234   }
7235 
7236   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7237     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7238   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7239     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7240   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7241     if (auto *Template = FD->getPrimaryTemplate())
7242       Template->LoadLazySpecializations();
7243   }
7244 }
7245 
7246 CXXCtorInitializer **
7247 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7248   RecordLocation Loc = getLocalBitOffset(Offset);
7249   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7250   SavedStreamPosition SavedPosition(Cursor);
7251   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7252     Error(std::move(Err));
7253     return nullptr;
7254   }
7255   ReadingKindTracker ReadingKind(Read_Decl, *this);
7256 
7257   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7258   if (!MaybeCode) {
7259     Error(MaybeCode.takeError());
7260     return nullptr;
7261   }
7262   unsigned Code = MaybeCode.get();
7263 
7264   ASTRecordReader Record(*this, *Loc.F);
7265   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7266   if (!MaybeRecCode) {
7267     Error(MaybeRecCode.takeError());
7268     return nullptr;
7269   }
7270   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7271     Error("malformed AST file: missing C++ ctor initializers");
7272     return nullptr;
7273   }
7274 
7275   return Record.readCXXCtorInitializers();
7276 }
7277 
7278 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7279   assert(ContextObj && "reading base specifiers with no AST context");
7280   ASTContext &Context = *ContextObj;
7281 
7282   RecordLocation Loc = getLocalBitOffset(Offset);
7283   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7284   SavedStreamPosition SavedPosition(Cursor);
7285   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7286     Error(std::move(Err));
7287     return nullptr;
7288   }
7289   ReadingKindTracker ReadingKind(Read_Decl, *this);
7290 
7291   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7292   if (!MaybeCode) {
7293     Error(MaybeCode.takeError());
7294     return nullptr;
7295   }
7296   unsigned Code = MaybeCode.get();
7297 
7298   ASTRecordReader Record(*this, *Loc.F);
7299   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7300   if (!MaybeRecCode) {
7301     Error(MaybeCode.takeError());
7302     return nullptr;
7303   }
7304   unsigned RecCode = MaybeRecCode.get();
7305 
7306   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7307     Error("malformed AST file: missing C++ base specifiers");
7308     return nullptr;
7309   }
7310 
7311   unsigned NumBases = Record.readInt();
7312   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7313   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7314   for (unsigned I = 0; I != NumBases; ++I)
7315     Bases[I] = Record.readCXXBaseSpecifier();
7316   return Bases;
7317 }
7318 
7319 serialization::DeclID
7320 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7321   if (LocalID < NUM_PREDEF_DECL_IDS)
7322     return LocalID;
7323 
7324   if (!F.ModuleOffsetMap.empty())
7325     ReadModuleOffsetMap(F);
7326 
7327   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7328     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7329   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7330 
7331   return LocalID + I->second;
7332 }
7333 
7334 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7335                                    ModuleFile &M) const {
7336   // Predefined decls aren't from any module.
7337   if (ID < NUM_PREDEF_DECL_IDS)
7338     return false;
7339 
7340   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7341          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7342 }
7343 
7344 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7345   if (!D->isFromASTFile())
7346     return nullptr;
7347   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7348   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7349   return I->second;
7350 }
7351 
7352 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7353   if (ID < NUM_PREDEF_DECL_IDS)
7354     return SourceLocation();
7355 
7356   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7357 
7358   if (Index > DeclsLoaded.size()) {
7359     Error("declaration ID out-of-range for AST file");
7360     return SourceLocation();
7361   }
7362 
7363   if (Decl *D = DeclsLoaded[Index])
7364     return D->getLocation();
7365 
7366   SourceLocation Loc;
7367   DeclCursorForID(ID, Loc);
7368   return Loc;
7369 }
7370 
7371 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7372   switch (ID) {
7373   case PREDEF_DECL_NULL_ID:
7374     return nullptr;
7375 
7376   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7377     return Context.getTranslationUnitDecl();
7378 
7379   case PREDEF_DECL_OBJC_ID_ID:
7380     return Context.getObjCIdDecl();
7381 
7382   case PREDEF_DECL_OBJC_SEL_ID:
7383     return Context.getObjCSelDecl();
7384 
7385   case PREDEF_DECL_OBJC_CLASS_ID:
7386     return Context.getObjCClassDecl();
7387 
7388   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7389     return Context.getObjCProtocolDecl();
7390 
7391   case PREDEF_DECL_INT_128_ID:
7392     return Context.getInt128Decl();
7393 
7394   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7395     return Context.getUInt128Decl();
7396 
7397   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7398     return Context.getObjCInstanceTypeDecl();
7399 
7400   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7401     return Context.getBuiltinVaListDecl();
7402 
7403   case PREDEF_DECL_VA_LIST_TAG:
7404     return Context.getVaListTagDecl();
7405 
7406   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7407     return Context.getBuiltinMSVaListDecl();
7408 
7409   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7410     return Context.getMSGuidTagDecl();
7411 
7412   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7413     return Context.getExternCContextDecl();
7414 
7415   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7416     return Context.getMakeIntegerSeqDecl();
7417 
7418   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7419     return Context.getCFConstantStringDecl();
7420 
7421   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7422     return Context.getCFConstantStringTagDecl();
7423 
7424   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7425     return Context.getTypePackElementDecl();
7426   }
7427   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7428 }
7429 
7430 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7431   assert(ContextObj && "reading decl with no AST context");
7432   if (ID < NUM_PREDEF_DECL_IDS) {
7433     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7434     if (D) {
7435       // Track that we have merged the declaration with ID \p ID into the
7436       // pre-existing predefined declaration \p D.
7437       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7438       if (Merged.empty())
7439         Merged.push_back(ID);
7440     }
7441     return D;
7442   }
7443 
7444   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7445 
7446   if (Index >= DeclsLoaded.size()) {
7447     assert(0 && "declaration ID out-of-range for AST file");
7448     Error("declaration ID out-of-range for AST file");
7449     return nullptr;
7450   }
7451 
7452   return DeclsLoaded[Index];
7453 }
7454 
7455 Decl *ASTReader::GetDecl(DeclID ID) {
7456   if (ID < NUM_PREDEF_DECL_IDS)
7457     return GetExistingDecl(ID);
7458 
7459   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7460 
7461   if (Index >= DeclsLoaded.size()) {
7462     assert(0 && "declaration ID out-of-range for AST file");
7463     Error("declaration ID out-of-range for AST file");
7464     return nullptr;
7465   }
7466 
7467   if (!DeclsLoaded[Index]) {
7468     ReadDeclRecord(ID);
7469     if (DeserializationListener)
7470       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7471   }
7472 
7473   return DeclsLoaded[Index];
7474 }
7475 
7476 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7477                                                   DeclID GlobalID) {
7478   if (GlobalID < NUM_PREDEF_DECL_IDS)
7479     return GlobalID;
7480 
7481   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7482   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7483   ModuleFile *Owner = I->second;
7484 
7485   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7486     = M.GlobalToLocalDeclIDs.find(Owner);
7487   if (Pos == M.GlobalToLocalDeclIDs.end())
7488     return 0;
7489 
7490   return GlobalID - Owner->BaseDeclID + Pos->second;
7491 }
7492 
7493 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7494                                             const RecordData &Record,
7495                                             unsigned &Idx) {
7496   if (Idx >= Record.size()) {
7497     Error("Corrupted AST file");
7498     return 0;
7499   }
7500 
7501   return getGlobalDeclID(F, Record[Idx++]);
7502 }
7503 
7504 /// Resolve the offset of a statement into a statement.
7505 ///
7506 /// This operation will read a new statement from the external
7507 /// source each time it is called, and is meant to be used via a
7508 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7509 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7510   // Switch case IDs are per Decl.
7511   ClearSwitchCaseIDs();
7512 
7513   // Offset here is a global offset across the entire chain.
7514   RecordLocation Loc = getLocalBitOffset(Offset);
7515   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7516     Error(std::move(Err));
7517     return nullptr;
7518   }
7519   assert(NumCurrentElementsDeserializing == 0 &&
7520          "should not be called while already deserializing");
7521   Deserializing D(this);
7522   return ReadStmtFromStream(*Loc.F);
7523 }
7524 
7525 void ASTReader::FindExternalLexicalDecls(
7526     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7527     SmallVectorImpl<Decl *> &Decls) {
7528   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7529 
7530   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7531     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7532     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7533       auto K = (Decl::Kind)+LexicalDecls[I];
7534       if (!IsKindWeWant(K))
7535         continue;
7536 
7537       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7538 
7539       // Don't add predefined declarations to the lexical context more
7540       // than once.
7541       if (ID < NUM_PREDEF_DECL_IDS) {
7542         if (PredefsVisited[ID])
7543           continue;
7544 
7545         PredefsVisited[ID] = true;
7546       }
7547 
7548       if (Decl *D = GetLocalDecl(*M, ID)) {
7549         assert(D->getKind() == K && "wrong kind for lexical decl");
7550         if (!DC->isDeclInLexicalTraversal(D))
7551           Decls.push_back(D);
7552       }
7553     }
7554   };
7555 
7556   if (isa<TranslationUnitDecl>(DC)) {
7557     for (auto Lexical : TULexicalDecls)
7558       Visit(Lexical.first, Lexical.second);
7559   } else {
7560     auto I = LexicalDecls.find(DC);
7561     if (I != LexicalDecls.end())
7562       Visit(I->second.first, I->second.second);
7563   }
7564 
7565   ++NumLexicalDeclContextsRead;
7566 }
7567 
7568 namespace {
7569 
7570 class DeclIDComp {
7571   ASTReader &Reader;
7572   ModuleFile &Mod;
7573 
7574 public:
7575   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7576 
7577   bool operator()(LocalDeclID L, LocalDeclID R) const {
7578     SourceLocation LHS = getLocation(L);
7579     SourceLocation RHS = getLocation(R);
7580     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7581   }
7582 
7583   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7584     SourceLocation RHS = getLocation(R);
7585     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7586   }
7587 
7588   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7589     SourceLocation LHS = getLocation(L);
7590     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7591   }
7592 
7593   SourceLocation getLocation(LocalDeclID ID) const {
7594     return Reader.getSourceManager().getFileLoc(
7595             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7596   }
7597 };
7598 
7599 } // namespace
7600 
7601 void ASTReader::FindFileRegionDecls(FileID File,
7602                                     unsigned Offset, unsigned Length,
7603                                     SmallVectorImpl<Decl *> &Decls) {
7604   SourceManager &SM = getSourceManager();
7605 
7606   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7607   if (I == FileDeclIDs.end())
7608     return;
7609 
7610   FileDeclsInfo &DInfo = I->second;
7611   if (DInfo.Decls.empty())
7612     return;
7613 
7614   SourceLocation
7615     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7616   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7617 
7618   DeclIDComp DIDComp(*this, *DInfo.Mod);
7619   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7620       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7621   if (BeginIt != DInfo.Decls.begin())
7622     --BeginIt;
7623 
7624   // If we are pointing at a top-level decl inside an objc container, we need
7625   // to backtrack until we find it otherwise we will fail to report that the
7626   // region overlaps with an objc container.
7627   while (BeginIt != DInfo.Decls.begin() &&
7628          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7629              ->isTopLevelDeclInObjCContainer())
7630     --BeginIt;
7631 
7632   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7633       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7634   if (EndIt != DInfo.Decls.end())
7635     ++EndIt;
7636 
7637   for (ArrayRef<serialization::LocalDeclID>::iterator
7638          DIt = BeginIt; DIt != EndIt; ++DIt)
7639     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7640 }
7641 
7642 bool
7643 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7644                                           DeclarationName Name) {
7645   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7646          "DeclContext has no visible decls in storage");
7647   if (!Name)
7648     return false;
7649 
7650   auto It = Lookups.find(DC);
7651   if (It == Lookups.end())
7652     return false;
7653 
7654   Deserializing LookupResults(this);
7655 
7656   // Load the list of declarations.
7657   SmallVector<NamedDecl *, 64> Decls;
7658   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7659   for (DeclID ID : It->second.Table.find(Name)) {
7660     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7661     if (ND->getDeclName() == Name && Found.insert(ND).second)
7662       Decls.push_back(ND);
7663   }
7664 
7665   ++NumVisibleDeclContextsRead;
7666   SetExternalVisibleDeclsForName(DC, Name, Decls);
7667   return !Decls.empty();
7668 }
7669 
7670 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7671   if (!DC->hasExternalVisibleStorage())
7672     return;
7673 
7674   auto It = Lookups.find(DC);
7675   assert(It != Lookups.end() &&
7676          "have external visible storage but no lookup tables");
7677 
7678   DeclsMap Decls;
7679 
7680   for (DeclID ID : It->second.Table.findAll()) {
7681     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7682     Decls[ND->getDeclName()].push_back(ND);
7683   }
7684 
7685   ++NumVisibleDeclContextsRead;
7686 
7687   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7688     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7689   }
7690   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7691 }
7692 
7693 const serialization::reader::DeclContextLookupTable *
7694 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7695   auto I = Lookups.find(Primary);
7696   return I == Lookups.end() ? nullptr : &I->second;
7697 }
7698 
7699 /// Under non-PCH compilation the consumer receives the objc methods
7700 /// before receiving the implementation, and codegen depends on this.
7701 /// We simulate this by deserializing and passing to consumer the methods of the
7702 /// implementation before passing the deserialized implementation decl.
7703 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7704                                        ASTConsumer *Consumer) {
7705   assert(ImplD && Consumer);
7706 
7707   for (auto *I : ImplD->methods())
7708     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7709 
7710   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7711 }
7712 
7713 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7714   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7715     PassObjCImplDeclToConsumer(ImplD, Consumer);
7716   else
7717     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7718 }
7719 
7720 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7721   this->Consumer = Consumer;
7722 
7723   if (Consumer)
7724     PassInterestingDeclsToConsumer();
7725 
7726   if (DeserializationListener)
7727     DeserializationListener->ReaderInitialized(this);
7728 }
7729 
7730 void ASTReader::PrintStats() {
7731   std::fprintf(stderr, "*** AST File Statistics:\n");
7732 
7733   unsigned NumTypesLoaded
7734     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7735                                       QualType());
7736   unsigned NumDeclsLoaded
7737     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7738                                       (Decl *)nullptr);
7739   unsigned NumIdentifiersLoaded
7740     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7741                                             IdentifiersLoaded.end(),
7742                                             (IdentifierInfo *)nullptr);
7743   unsigned NumMacrosLoaded
7744     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7745                                        MacrosLoaded.end(),
7746                                        (MacroInfo *)nullptr);
7747   unsigned NumSelectorsLoaded
7748     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7749                                           SelectorsLoaded.end(),
7750                                           Selector());
7751 
7752   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7753     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7754                  NumSLocEntriesRead, TotalNumSLocEntries,
7755                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7756   if (!TypesLoaded.empty())
7757     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7758                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7759                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7760   if (!DeclsLoaded.empty())
7761     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7762                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7763                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7764   if (!IdentifiersLoaded.empty())
7765     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7766                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7767                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7768   if (!MacrosLoaded.empty())
7769     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7770                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7771                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7772   if (!SelectorsLoaded.empty())
7773     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7774                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7775                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7776   if (TotalNumStatements)
7777     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7778                  NumStatementsRead, TotalNumStatements,
7779                  ((float)NumStatementsRead/TotalNumStatements * 100));
7780   if (TotalNumMacros)
7781     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7782                  NumMacrosRead, TotalNumMacros,
7783                  ((float)NumMacrosRead/TotalNumMacros * 100));
7784   if (TotalLexicalDeclContexts)
7785     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7786                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7787                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7788                   * 100));
7789   if (TotalVisibleDeclContexts)
7790     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7791                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7792                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7793                   * 100));
7794   if (TotalNumMethodPoolEntries)
7795     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7796                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7797                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7798                   * 100));
7799   if (NumMethodPoolLookups)
7800     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7801                  NumMethodPoolHits, NumMethodPoolLookups,
7802                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7803   if (NumMethodPoolTableLookups)
7804     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7805                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7806                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7807                   * 100.0));
7808   if (NumIdentifierLookupHits)
7809     std::fprintf(stderr,
7810                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7811                  NumIdentifierLookupHits, NumIdentifierLookups,
7812                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7813 
7814   if (GlobalIndex) {
7815     std::fprintf(stderr, "\n");
7816     GlobalIndex->printStats();
7817   }
7818 
7819   std::fprintf(stderr, "\n");
7820   dump();
7821   std::fprintf(stderr, "\n");
7822 }
7823 
7824 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7825 LLVM_DUMP_METHOD static void
7826 dumpModuleIDMap(StringRef Name,
7827                 const ContinuousRangeMap<Key, ModuleFile *,
7828                                          InitialCapacity> &Map) {
7829   if (Map.begin() == Map.end())
7830     return;
7831 
7832   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7833 
7834   llvm::errs() << Name << ":\n";
7835   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7836        I != IEnd; ++I) {
7837     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7838       << "\n";
7839   }
7840 }
7841 
7842 LLVM_DUMP_METHOD void ASTReader::dump() {
7843   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7844   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7845   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7846   dumpModuleIDMap("Global type map", GlobalTypeMap);
7847   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7848   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7849   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7850   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7851   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7852   dumpModuleIDMap("Global preprocessed entity map",
7853                   GlobalPreprocessedEntityMap);
7854 
7855   llvm::errs() << "\n*** PCH/Modules Loaded:";
7856   for (ModuleFile &M : ModuleMgr)
7857     M.dump();
7858 }
7859 
7860 /// Return the amount of memory used by memory buffers, breaking down
7861 /// by heap-backed versus mmap'ed memory.
7862 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7863   for (ModuleFile &I : ModuleMgr) {
7864     if (llvm::MemoryBuffer *buf = I.Buffer) {
7865       size_t bytes = buf->getBufferSize();
7866       switch (buf->getBufferKind()) {
7867         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7868           sizes.malloc_bytes += bytes;
7869           break;
7870         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7871           sizes.mmap_bytes += bytes;
7872           break;
7873       }
7874     }
7875   }
7876 }
7877 
7878 void ASTReader::InitializeSema(Sema &S) {
7879   SemaObj = &S;
7880   S.addExternalSource(this);
7881 
7882   // Makes sure any declarations that were deserialized "too early"
7883   // still get added to the identifier's declaration chains.
7884   for (uint64_t ID : PreloadedDeclIDs) {
7885     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7886     pushExternalDeclIntoScope(D, D->getDeclName());
7887   }
7888   PreloadedDeclIDs.clear();
7889 
7890   // FIXME: What happens if these are changed by a module import?
7891   if (!FPPragmaOptions.empty()) {
7892     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7893     FPOptionsOverride NewOverrides =
7894         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7895     SemaObj->CurFPFeatures =
7896         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7897   }
7898 
7899   SemaObj->OpenCLFeatures = OpenCLExtensions;
7900 
7901   UpdateSema();
7902 }
7903 
7904 void ASTReader::UpdateSema() {
7905   assert(SemaObj && "no Sema to update");
7906 
7907   // Load the offsets of the declarations that Sema references.
7908   // They will be lazily deserialized when needed.
7909   if (!SemaDeclRefs.empty()) {
7910     assert(SemaDeclRefs.size() % 3 == 0);
7911     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7912       if (!SemaObj->StdNamespace)
7913         SemaObj->StdNamespace = SemaDeclRefs[I];
7914       if (!SemaObj->StdBadAlloc)
7915         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7916       if (!SemaObj->StdAlignValT)
7917         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7918     }
7919     SemaDeclRefs.clear();
7920   }
7921 
7922   // Update the state of pragmas. Use the same API as if we had encountered the
7923   // pragma in the source.
7924   if(OptimizeOffPragmaLocation.isValid())
7925     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7926   if (PragmaMSStructState != -1)
7927     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7928   if (PointersToMembersPragmaLocation.isValid()) {
7929     SemaObj->ActOnPragmaMSPointersToMembers(
7930         (LangOptions::PragmaMSPointersToMembersKind)
7931             PragmaMSPointersToMembersState,
7932         PointersToMembersPragmaLocation);
7933   }
7934   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7935 
7936   if (PragmaAlignPackCurrentValue) {
7937     // The bottom of the stack might have a default value. It must be adjusted
7938     // to the current value to ensure that the packing state is preserved after
7939     // popping entries that were included/imported from a PCH/module.
7940     bool DropFirst = false;
7941     if (!PragmaAlignPackStack.empty() &&
7942         PragmaAlignPackStack.front().Location.isInvalid()) {
7943       assert(PragmaAlignPackStack.front().Value ==
7944                  SemaObj->AlignPackStack.DefaultValue &&
7945              "Expected a default alignment value");
7946       SemaObj->AlignPackStack.Stack.emplace_back(
7947           PragmaAlignPackStack.front().SlotLabel,
7948           SemaObj->AlignPackStack.CurrentValue,
7949           SemaObj->AlignPackStack.CurrentPragmaLocation,
7950           PragmaAlignPackStack.front().PushLocation);
7951       DropFirst = true;
7952     }
7953     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7954                                  .drop_front(DropFirst ? 1 : 0)) {
7955       SemaObj->AlignPackStack.Stack.emplace_back(
7956           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7957     }
7958     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7959       assert(*PragmaAlignPackCurrentValue ==
7960                  SemaObj->AlignPackStack.DefaultValue &&
7961              "Expected a default align and pack value");
7962       // Keep the current values.
7963     } else {
7964       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7965       SemaObj->AlignPackStack.CurrentPragmaLocation =
7966           PragmaAlignPackCurrentLocation;
7967     }
7968   }
7969   if (FpPragmaCurrentValue) {
7970     // The bottom of the stack might have a default value. It must be adjusted
7971     // to the current value to ensure that fp-pragma state is preserved after
7972     // popping entries that were included/imported from a PCH/module.
7973     bool DropFirst = false;
7974     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7975       assert(FpPragmaStack.front().Value ==
7976                  SemaObj->FpPragmaStack.DefaultValue &&
7977              "Expected a default pragma float_control value");
7978       SemaObj->FpPragmaStack.Stack.emplace_back(
7979           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7980           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7981           FpPragmaStack.front().PushLocation);
7982       DropFirst = true;
7983     }
7984     for (const auto &Entry :
7985          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7986       SemaObj->FpPragmaStack.Stack.emplace_back(
7987           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7988     if (FpPragmaCurrentLocation.isInvalid()) {
7989       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7990              "Expected a default pragma float_control value");
7991       // Keep the current values.
7992     } else {
7993       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7994       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7995     }
7996   }
7997 
7998   // For non-modular AST files, restore visiblity of modules.
7999   for (auto &Import : ImportedModules) {
8000     if (Import.ImportLoc.isInvalid())
8001       continue;
8002     if (Module *Imported = getSubmodule(Import.ID)) {
8003       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
8004     }
8005   }
8006 }
8007 
8008 IdentifierInfo *ASTReader::get(StringRef Name) {
8009   // Note that we are loading an identifier.
8010   Deserializing AnIdentifier(this);
8011 
8012   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
8013                                   NumIdentifierLookups,
8014                                   NumIdentifierLookupHits);
8015 
8016   // We don't need to do identifier table lookups in C++ modules (we preload
8017   // all interesting declarations, and don't need to use the scope for name
8018   // lookups). Perform the lookup in PCH files, though, since we don't build
8019   // a complete initial identifier table if we're carrying on from a PCH.
8020   if (PP.getLangOpts().CPlusPlus) {
8021     for (auto F : ModuleMgr.pch_modules())
8022       if (Visitor(*F))
8023         break;
8024   } else {
8025     // If there is a global index, look there first to determine which modules
8026     // provably do not have any results for this identifier.
8027     GlobalModuleIndex::HitSet Hits;
8028     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8029     if (!loadGlobalIndex()) {
8030       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8031         HitsPtr = &Hits;
8032       }
8033     }
8034 
8035     ModuleMgr.visit(Visitor, HitsPtr);
8036   }
8037 
8038   IdentifierInfo *II = Visitor.getIdentifierInfo();
8039   markIdentifierUpToDate(II);
8040   return II;
8041 }
8042 
8043 namespace clang {
8044 
8045   /// An identifier-lookup iterator that enumerates all of the
8046   /// identifiers stored within a set of AST files.
8047   class ASTIdentifierIterator : public IdentifierIterator {
8048     /// The AST reader whose identifiers are being enumerated.
8049     const ASTReader &Reader;
8050 
8051     /// The current index into the chain of AST files stored in
8052     /// the AST reader.
8053     unsigned Index;
8054 
8055     /// The current position within the identifier lookup table
8056     /// of the current AST file.
8057     ASTIdentifierLookupTable::key_iterator Current;
8058 
8059     /// The end position within the identifier lookup table of
8060     /// the current AST file.
8061     ASTIdentifierLookupTable::key_iterator End;
8062 
8063     /// Whether to skip any modules in the ASTReader.
8064     bool SkipModules;
8065 
8066   public:
8067     explicit ASTIdentifierIterator(const ASTReader &Reader,
8068                                    bool SkipModules = false);
8069 
8070     StringRef Next() override;
8071   };
8072 
8073 } // namespace clang
8074 
8075 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8076                                              bool SkipModules)
8077     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8078 }
8079 
8080 StringRef ASTIdentifierIterator::Next() {
8081   while (Current == End) {
8082     // If we have exhausted all of our AST files, we're done.
8083     if (Index == 0)
8084       return StringRef();
8085 
8086     --Index;
8087     ModuleFile &F = Reader.ModuleMgr[Index];
8088     if (SkipModules && F.isModule())
8089       continue;
8090 
8091     ASTIdentifierLookupTable *IdTable =
8092         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8093     Current = IdTable->key_begin();
8094     End = IdTable->key_end();
8095   }
8096 
8097   // We have any identifiers remaining in the current AST file; return
8098   // the next one.
8099   StringRef Result = *Current;
8100   ++Current;
8101   return Result;
8102 }
8103 
8104 namespace {
8105 
8106 /// A utility for appending two IdentifierIterators.
8107 class ChainedIdentifierIterator : public IdentifierIterator {
8108   std::unique_ptr<IdentifierIterator> Current;
8109   std::unique_ptr<IdentifierIterator> Queued;
8110 
8111 public:
8112   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8113                             std::unique_ptr<IdentifierIterator> Second)
8114       : Current(std::move(First)), Queued(std::move(Second)) {}
8115 
8116   StringRef Next() override {
8117     if (!Current)
8118       return StringRef();
8119 
8120     StringRef result = Current->Next();
8121     if (!result.empty())
8122       return result;
8123 
8124     // Try the queued iterator, which may itself be empty.
8125     Current.reset();
8126     std::swap(Current, Queued);
8127     return Next();
8128   }
8129 };
8130 
8131 } // namespace
8132 
8133 IdentifierIterator *ASTReader::getIdentifiers() {
8134   if (!loadGlobalIndex()) {
8135     std::unique_ptr<IdentifierIterator> ReaderIter(
8136         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8137     std::unique_ptr<IdentifierIterator> ModulesIter(
8138         GlobalIndex->createIdentifierIterator());
8139     return new ChainedIdentifierIterator(std::move(ReaderIter),
8140                                          std::move(ModulesIter));
8141   }
8142 
8143   return new ASTIdentifierIterator(*this);
8144 }
8145 
8146 namespace clang {
8147 namespace serialization {
8148 
8149   class ReadMethodPoolVisitor {
8150     ASTReader &Reader;
8151     Selector Sel;
8152     unsigned PriorGeneration;
8153     unsigned InstanceBits = 0;
8154     unsigned FactoryBits = 0;
8155     bool InstanceHasMoreThanOneDecl = false;
8156     bool FactoryHasMoreThanOneDecl = false;
8157     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8158     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8159 
8160   public:
8161     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8162                           unsigned PriorGeneration)
8163         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8164 
8165     bool operator()(ModuleFile &M) {
8166       if (!M.SelectorLookupTable)
8167         return false;
8168 
8169       // If we've already searched this module file, skip it now.
8170       if (M.Generation <= PriorGeneration)
8171         return true;
8172 
8173       ++Reader.NumMethodPoolTableLookups;
8174       ASTSelectorLookupTable *PoolTable
8175         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8176       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8177       if (Pos == PoolTable->end())
8178         return false;
8179 
8180       ++Reader.NumMethodPoolTableHits;
8181       ++Reader.NumSelectorsRead;
8182       // FIXME: Not quite happy with the statistics here. We probably should
8183       // disable this tracking when called via LoadSelector.
8184       // Also, should entries without methods count as misses?
8185       ++Reader.NumMethodPoolEntriesRead;
8186       ASTSelectorLookupTrait::data_type Data = *Pos;
8187       if (Reader.DeserializationListener)
8188         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8189 
8190       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8191       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8192       InstanceBits = Data.InstanceBits;
8193       FactoryBits = Data.FactoryBits;
8194       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8195       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8196       return true;
8197     }
8198 
8199     /// Retrieve the instance methods found by this visitor.
8200     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8201       return InstanceMethods;
8202     }
8203 
8204     /// Retrieve the instance methods found by this visitor.
8205     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8206       return FactoryMethods;
8207     }
8208 
8209     unsigned getInstanceBits() const { return InstanceBits; }
8210     unsigned getFactoryBits() const { return FactoryBits; }
8211 
8212     bool instanceHasMoreThanOneDecl() const {
8213       return InstanceHasMoreThanOneDecl;
8214     }
8215 
8216     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8217   };
8218 
8219 } // namespace serialization
8220 } // namespace clang
8221 
8222 /// Add the given set of methods to the method list.
8223 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8224                              ObjCMethodList &List) {
8225   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8226     S.addMethodToGlobalList(&List, Methods[I]);
8227   }
8228 }
8229 
8230 void ASTReader::ReadMethodPool(Selector Sel) {
8231   // Get the selector generation and update it to the current generation.
8232   unsigned &Generation = SelectorGeneration[Sel];
8233   unsigned PriorGeneration = Generation;
8234   Generation = getGeneration();
8235   SelectorOutOfDate[Sel] = false;
8236 
8237   // Search for methods defined with this selector.
8238   ++NumMethodPoolLookups;
8239   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8240   ModuleMgr.visit(Visitor);
8241 
8242   if (Visitor.getInstanceMethods().empty() &&
8243       Visitor.getFactoryMethods().empty())
8244     return;
8245 
8246   ++NumMethodPoolHits;
8247 
8248   if (!getSema())
8249     return;
8250 
8251   Sema &S = *getSema();
8252   Sema::GlobalMethodPool::iterator Pos
8253     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8254 
8255   Pos->second.first.setBits(Visitor.getInstanceBits());
8256   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8257   Pos->second.second.setBits(Visitor.getFactoryBits());
8258   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8259 
8260   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8261   // when building a module we keep every method individually and may need to
8262   // update hasMoreThanOneDecl as we add the methods.
8263   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8264   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8265 }
8266 
8267 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8268   if (SelectorOutOfDate[Sel])
8269     ReadMethodPool(Sel);
8270 }
8271 
8272 void ASTReader::ReadKnownNamespaces(
8273                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8274   Namespaces.clear();
8275 
8276   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8277     if (NamespaceDecl *Namespace
8278                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8279       Namespaces.push_back(Namespace);
8280   }
8281 }
8282 
8283 void ASTReader::ReadUndefinedButUsed(
8284     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8285   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8286     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8287     SourceLocation Loc =
8288         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8289     Undefined.insert(std::make_pair(D, Loc));
8290   }
8291 }
8292 
8293 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8294     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8295                                                      Exprs) {
8296   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8297     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8298     uint64_t Count = DelayedDeleteExprs[Idx++];
8299     for (uint64_t C = 0; C < Count; ++C) {
8300       SourceLocation DeleteLoc =
8301           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8302       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8303       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8304     }
8305   }
8306 }
8307 
8308 void ASTReader::ReadTentativeDefinitions(
8309                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8310   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8311     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8312     if (Var)
8313       TentativeDefs.push_back(Var);
8314   }
8315   TentativeDefinitions.clear();
8316 }
8317 
8318 void ASTReader::ReadUnusedFileScopedDecls(
8319                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8320   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8321     DeclaratorDecl *D
8322       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8323     if (D)
8324       Decls.push_back(D);
8325   }
8326   UnusedFileScopedDecls.clear();
8327 }
8328 
8329 void ASTReader::ReadDelegatingConstructors(
8330                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8331   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8332     CXXConstructorDecl *D
8333       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8334     if (D)
8335       Decls.push_back(D);
8336   }
8337   DelegatingCtorDecls.clear();
8338 }
8339 
8340 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8341   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8342     TypedefNameDecl *D
8343       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8344     if (D)
8345       Decls.push_back(D);
8346   }
8347   ExtVectorDecls.clear();
8348 }
8349 
8350 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8351     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8352   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8353        ++I) {
8354     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8355         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8356     if (D)
8357       Decls.insert(D);
8358   }
8359   UnusedLocalTypedefNameCandidates.clear();
8360 }
8361 
8362 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8363     llvm::SmallSetVector<Decl *, 4> &Decls) {
8364   for (auto I : DeclsToCheckForDeferredDiags) {
8365     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8366     if (D)
8367       Decls.insert(D);
8368   }
8369   DeclsToCheckForDeferredDiags.clear();
8370 }
8371 
8372 void ASTReader::ReadReferencedSelectors(
8373        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8374   if (ReferencedSelectorsData.empty())
8375     return;
8376 
8377   // If there are @selector references added them to its pool. This is for
8378   // implementation of -Wselector.
8379   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8380   unsigned I = 0;
8381   while (I < DataSize) {
8382     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8383     SourceLocation SelLoc
8384       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8385     Sels.push_back(std::make_pair(Sel, SelLoc));
8386   }
8387   ReferencedSelectorsData.clear();
8388 }
8389 
8390 void ASTReader::ReadWeakUndeclaredIdentifiers(
8391        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8392   if (WeakUndeclaredIdentifiers.empty())
8393     return;
8394 
8395   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8396     IdentifierInfo *WeakId
8397       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8398     IdentifierInfo *AliasId
8399       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8400     SourceLocation Loc
8401       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8402     bool Used = WeakUndeclaredIdentifiers[I++];
8403     WeakInfo WI(AliasId, Loc);
8404     WI.setUsed(Used);
8405     WeakIDs.push_back(std::make_pair(WeakId, WI));
8406   }
8407   WeakUndeclaredIdentifiers.clear();
8408 }
8409 
8410 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8411   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8412     ExternalVTableUse VT;
8413     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8414     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8415     VT.DefinitionRequired = VTableUses[Idx++];
8416     VTables.push_back(VT);
8417   }
8418 
8419   VTableUses.clear();
8420 }
8421 
8422 void ASTReader::ReadPendingInstantiations(
8423        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8424   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8425     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8426     SourceLocation Loc
8427       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8428 
8429     Pending.push_back(std::make_pair(D, Loc));
8430   }
8431   PendingInstantiations.clear();
8432 }
8433 
8434 void ASTReader::ReadLateParsedTemplates(
8435     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8436         &LPTMap) {
8437   for (auto &LPT : LateParsedTemplates) {
8438     ModuleFile *FMod = LPT.first;
8439     RecordDataImpl &LateParsed = LPT.second;
8440     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8441          /* In loop */) {
8442       FunctionDecl *FD =
8443           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8444 
8445       auto LT = std::make_unique<LateParsedTemplate>();
8446       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8447 
8448       ModuleFile *F = getOwningModuleFile(LT->D);
8449       assert(F && "No module");
8450 
8451       unsigned TokN = LateParsed[Idx++];
8452       LT->Toks.reserve(TokN);
8453       for (unsigned T = 0; T < TokN; ++T)
8454         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8455 
8456       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8457     }
8458   }
8459 }
8460 
8461 void ASTReader::LoadSelector(Selector Sel) {
8462   // It would be complicated to avoid reading the methods anyway. So don't.
8463   ReadMethodPool(Sel);
8464 }
8465 
8466 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8467   assert(ID && "Non-zero identifier ID required");
8468   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8469   IdentifiersLoaded[ID - 1] = II;
8470   if (DeserializationListener)
8471     DeserializationListener->IdentifierRead(ID, II);
8472 }
8473 
8474 /// Set the globally-visible declarations associated with the given
8475 /// identifier.
8476 ///
8477 /// If the AST reader is currently in a state where the given declaration IDs
8478 /// cannot safely be resolved, they are queued until it is safe to resolve
8479 /// them.
8480 ///
8481 /// \param II an IdentifierInfo that refers to one or more globally-visible
8482 /// declarations.
8483 ///
8484 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8485 /// visible at global scope.
8486 ///
8487 /// \param Decls if non-null, this vector will be populated with the set of
8488 /// deserialized declarations. These declarations will not be pushed into
8489 /// scope.
8490 void
8491 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8492                               const SmallVectorImpl<uint32_t> &DeclIDs,
8493                                    SmallVectorImpl<Decl *> *Decls) {
8494   if (NumCurrentElementsDeserializing && !Decls) {
8495     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8496     return;
8497   }
8498 
8499   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8500     if (!SemaObj) {
8501       // Queue this declaration so that it will be added to the
8502       // translation unit scope and identifier's declaration chain
8503       // once a Sema object is known.
8504       PreloadedDeclIDs.push_back(DeclIDs[I]);
8505       continue;
8506     }
8507 
8508     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8509 
8510     // If we're simply supposed to record the declarations, do so now.
8511     if (Decls) {
8512       Decls->push_back(D);
8513       continue;
8514     }
8515 
8516     // Introduce this declaration into the translation-unit scope
8517     // and add it to the declaration chain for this identifier, so
8518     // that (unqualified) name lookup will find it.
8519     pushExternalDeclIntoScope(D, II);
8520   }
8521 }
8522 
8523 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8524   if (ID == 0)
8525     return nullptr;
8526 
8527   if (IdentifiersLoaded.empty()) {
8528     Error("no identifier table in AST file");
8529     return nullptr;
8530   }
8531 
8532   ID -= 1;
8533   if (!IdentifiersLoaded[ID]) {
8534     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8535     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8536     ModuleFile *M = I->second;
8537     unsigned Index = ID - M->BaseIdentifierID;
8538     const unsigned char *Data =
8539         M->IdentifierTableData + M->IdentifierOffsets[Index];
8540 
8541     ASTIdentifierLookupTrait Trait(*this, *M);
8542     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8543     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8544     auto &II = PP.getIdentifierTable().get(Key);
8545     IdentifiersLoaded[ID] = &II;
8546     markIdentifierFromAST(*this,  II);
8547     if (DeserializationListener)
8548       DeserializationListener->IdentifierRead(ID + 1, &II);
8549   }
8550 
8551   return IdentifiersLoaded[ID];
8552 }
8553 
8554 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8555   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8556 }
8557 
8558 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8559   if (LocalID < NUM_PREDEF_IDENT_IDS)
8560     return LocalID;
8561 
8562   if (!M.ModuleOffsetMap.empty())
8563     ReadModuleOffsetMap(M);
8564 
8565   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8566     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8567   assert(I != M.IdentifierRemap.end()
8568          && "Invalid index into identifier index remap");
8569 
8570   return LocalID + I->second;
8571 }
8572 
8573 MacroInfo *ASTReader::getMacro(MacroID ID) {
8574   if (ID == 0)
8575     return nullptr;
8576 
8577   if (MacrosLoaded.empty()) {
8578     Error("no macro table in AST file");
8579     return nullptr;
8580   }
8581 
8582   ID -= NUM_PREDEF_MACRO_IDS;
8583   if (!MacrosLoaded[ID]) {
8584     GlobalMacroMapType::iterator I
8585       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8586     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8587     ModuleFile *M = I->second;
8588     unsigned Index = ID - M->BaseMacroID;
8589     MacrosLoaded[ID] =
8590         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8591 
8592     if (DeserializationListener)
8593       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8594                                          MacrosLoaded[ID]);
8595   }
8596 
8597   return MacrosLoaded[ID];
8598 }
8599 
8600 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8601   if (LocalID < NUM_PREDEF_MACRO_IDS)
8602     return LocalID;
8603 
8604   if (!M.ModuleOffsetMap.empty())
8605     ReadModuleOffsetMap(M);
8606 
8607   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8608     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8609   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8610 
8611   return LocalID + I->second;
8612 }
8613 
8614 serialization::SubmoduleID
8615 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8616   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8617     return LocalID;
8618 
8619   if (!M.ModuleOffsetMap.empty())
8620     ReadModuleOffsetMap(M);
8621 
8622   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8623     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8624   assert(I != M.SubmoduleRemap.end()
8625          && "Invalid index into submodule index remap");
8626 
8627   return LocalID + I->second;
8628 }
8629 
8630 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8631   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8632     assert(GlobalID == 0 && "Unhandled global submodule ID");
8633     return nullptr;
8634   }
8635 
8636   if (GlobalID > SubmodulesLoaded.size()) {
8637     Error("submodule ID out of range in AST file");
8638     return nullptr;
8639   }
8640 
8641   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8642 }
8643 
8644 Module *ASTReader::getModule(unsigned ID) {
8645   return getSubmodule(ID);
8646 }
8647 
8648 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8649   if (ID & 1) {
8650     // It's a module, look it up by submodule ID.
8651     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8652     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8653   } else {
8654     // It's a prefix (preamble, PCH, ...). Look it up by index.
8655     unsigned IndexFromEnd = ID >> 1;
8656     assert(IndexFromEnd && "got reference to unknown module file");
8657     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8658   }
8659 }
8660 
8661 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8662   if (!F)
8663     return 1;
8664 
8665   // For a file representing a module, use the submodule ID of the top-level
8666   // module as the file ID. For any other kind of file, the number of such
8667   // files loaded beforehand will be the same on reload.
8668   // FIXME: Is this true even if we have an explicit module file and a PCH?
8669   if (F->isModule())
8670     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8671 
8672   auto PCHModules = getModuleManager().pch_modules();
8673   auto I = llvm::find(PCHModules, F);
8674   assert(I != PCHModules.end() && "emitting reference to unknown file");
8675   return (I - PCHModules.end()) << 1;
8676 }
8677 
8678 llvm::Optional<ASTSourceDescriptor>
8679 ASTReader::getSourceDescriptor(unsigned ID) {
8680   if (Module *M = getSubmodule(ID))
8681     return ASTSourceDescriptor(*M);
8682 
8683   // If there is only a single PCH, return it instead.
8684   // Chained PCH are not supported.
8685   const auto &PCHChain = ModuleMgr.pch_modules();
8686   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8687     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8688     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8689     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8690     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8691                                MF.Signature);
8692   }
8693   return None;
8694 }
8695 
8696 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8697   auto I = DefinitionSource.find(FD);
8698   if (I == DefinitionSource.end())
8699     return EK_ReplyHazy;
8700   return I->second ? EK_Never : EK_Always;
8701 }
8702 
8703 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8704   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8705 }
8706 
8707 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8708   if (ID == 0)
8709     return Selector();
8710 
8711   if (ID > SelectorsLoaded.size()) {
8712     Error("selector ID out of range in AST file");
8713     return Selector();
8714   }
8715 
8716   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8717     // Load this selector from the selector table.
8718     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8719     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8720     ModuleFile &M = *I->second;
8721     ASTSelectorLookupTrait Trait(*this, M);
8722     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8723     SelectorsLoaded[ID - 1] =
8724       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8725     if (DeserializationListener)
8726       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8727   }
8728 
8729   return SelectorsLoaded[ID - 1];
8730 }
8731 
8732 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8733   return DecodeSelector(ID);
8734 }
8735 
8736 uint32_t ASTReader::GetNumExternalSelectors() {
8737   // ID 0 (the null selector) is considered an external selector.
8738   return getTotalNumSelectors() + 1;
8739 }
8740 
8741 serialization::SelectorID
8742 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8743   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8744     return LocalID;
8745 
8746   if (!M.ModuleOffsetMap.empty())
8747     ReadModuleOffsetMap(M);
8748 
8749   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8750     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8751   assert(I != M.SelectorRemap.end()
8752          && "Invalid index into selector index remap");
8753 
8754   return LocalID + I->second;
8755 }
8756 
8757 DeclarationNameLoc
8758 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8759   switch (Name.getNameKind()) {
8760   case DeclarationName::CXXConstructorName:
8761   case DeclarationName::CXXDestructorName:
8762   case DeclarationName::CXXConversionFunctionName:
8763     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8764 
8765   case DeclarationName::CXXOperatorName:
8766     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8767 
8768   case DeclarationName::CXXLiteralOperatorName:
8769     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8770         readSourceLocation());
8771 
8772   case DeclarationName::Identifier:
8773   case DeclarationName::ObjCZeroArgSelector:
8774   case DeclarationName::ObjCOneArgSelector:
8775   case DeclarationName::ObjCMultiArgSelector:
8776   case DeclarationName::CXXUsingDirective:
8777   case DeclarationName::CXXDeductionGuideName:
8778     break;
8779   }
8780   return DeclarationNameLoc();
8781 }
8782 
8783 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8784   DeclarationNameInfo NameInfo;
8785   NameInfo.setName(readDeclarationName());
8786   NameInfo.setLoc(readSourceLocation());
8787   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8788   return NameInfo;
8789 }
8790 
8791 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8792   Info.QualifierLoc = readNestedNameSpecifierLoc();
8793   unsigned NumTPLists = readInt();
8794   Info.NumTemplParamLists = NumTPLists;
8795   if (NumTPLists) {
8796     Info.TemplParamLists =
8797         new (getContext()) TemplateParameterList *[NumTPLists];
8798     for (unsigned i = 0; i != NumTPLists; ++i)
8799       Info.TemplParamLists[i] = readTemplateParameterList();
8800   }
8801 }
8802 
8803 TemplateParameterList *
8804 ASTRecordReader::readTemplateParameterList() {
8805   SourceLocation TemplateLoc = readSourceLocation();
8806   SourceLocation LAngleLoc = readSourceLocation();
8807   SourceLocation RAngleLoc = readSourceLocation();
8808 
8809   unsigned NumParams = readInt();
8810   SmallVector<NamedDecl *, 16> Params;
8811   Params.reserve(NumParams);
8812   while (NumParams--)
8813     Params.push_back(readDeclAs<NamedDecl>());
8814 
8815   bool HasRequiresClause = readBool();
8816   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8817 
8818   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8819       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8820   return TemplateParams;
8821 }
8822 
8823 void ASTRecordReader::readTemplateArgumentList(
8824                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8825                         bool Canonicalize) {
8826   unsigned NumTemplateArgs = readInt();
8827   TemplArgs.reserve(NumTemplateArgs);
8828   while (NumTemplateArgs--)
8829     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8830 }
8831 
8832 /// Read a UnresolvedSet structure.
8833 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8834   unsigned NumDecls = readInt();
8835   Set.reserve(getContext(), NumDecls);
8836   while (NumDecls--) {
8837     DeclID ID = readDeclID();
8838     AccessSpecifier AS = (AccessSpecifier) readInt();
8839     Set.addLazyDecl(getContext(), ID, AS);
8840   }
8841 }
8842 
8843 CXXBaseSpecifier
8844 ASTRecordReader::readCXXBaseSpecifier() {
8845   bool isVirtual = readBool();
8846   bool isBaseOfClass = readBool();
8847   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8848   bool inheritConstructors = readBool();
8849   TypeSourceInfo *TInfo = readTypeSourceInfo();
8850   SourceRange Range = readSourceRange();
8851   SourceLocation EllipsisLoc = readSourceLocation();
8852   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8853                           EllipsisLoc);
8854   Result.setInheritConstructors(inheritConstructors);
8855   return Result;
8856 }
8857 
8858 CXXCtorInitializer **
8859 ASTRecordReader::readCXXCtorInitializers() {
8860   ASTContext &Context = getContext();
8861   unsigned NumInitializers = readInt();
8862   assert(NumInitializers && "wrote ctor initializers but have no inits");
8863   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8864   for (unsigned i = 0; i != NumInitializers; ++i) {
8865     TypeSourceInfo *TInfo = nullptr;
8866     bool IsBaseVirtual = false;
8867     FieldDecl *Member = nullptr;
8868     IndirectFieldDecl *IndirectMember = nullptr;
8869 
8870     CtorInitializerType Type = (CtorInitializerType) readInt();
8871     switch (Type) {
8872     case CTOR_INITIALIZER_BASE:
8873       TInfo = readTypeSourceInfo();
8874       IsBaseVirtual = readBool();
8875       break;
8876 
8877     case CTOR_INITIALIZER_DELEGATING:
8878       TInfo = readTypeSourceInfo();
8879       break;
8880 
8881      case CTOR_INITIALIZER_MEMBER:
8882       Member = readDeclAs<FieldDecl>();
8883       break;
8884 
8885      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8886       IndirectMember = readDeclAs<IndirectFieldDecl>();
8887       break;
8888     }
8889 
8890     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8891     Expr *Init = readExpr();
8892     SourceLocation LParenLoc = readSourceLocation();
8893     SourceLocation RParenLoc = readSourceLocation();
8894 
8895     CXXCtorInitializer *BOMInit;
8896     if (Type == CTOR_INITIALIZER_BASE)
8897       BOMInit = new (Context)
8898           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8899                              RParenLoc, MemberOrEllipsisLoc);
8900     else if (Type == CTOR_INITIALIZER_DELEGATING)
8901       BOMInit = new (Context)
8902           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8903     else if (Member)
8904       BOMInit = new (Context)
8905           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8906                              Init, RParenLoc);
8907     else
8908       BOMInit = new (Context)
8909           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8910                              LParenLoc, Init, RParenLoc);
8911 
8912     if (/*IsWritten*/readBool()) {
8913       unsigned SourceOrder = readInt();
8914       BOMInit->setSourceOrder(SourceOrder);
8915     }
8916 
8917     CtorInitializers[i] = BOMInit;
8918   }
8919 
8920   return CtorInitializers;
8921 }
8922 
8923 NestedNameSpecifierLoc
8924 ASTRecordReader::readNestedNameSpecifierLoc() {
8925   ASTContext &Context = getContext();
8926   unsigned N = readInt();
8927   NestedNameSpecifierLocBuilder Builder;
8928   for (unsigned I = 0; I != N; ++I) {
8929     auto Kind = readNestedNameSpecifierKind();
8930     switch (Kind) {
8931     case NestedNameSpecifier::Identifier: {
8932       IdentifierInfo *II = readIdentifier();
8933       SourceRange Range = readSourceRange();
8934       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8935       break;
8936     }
8937 
8938     case NestedNameSpecifier::Namespace: {
8939       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8940       SourceRange Range = readSourceRange();
8941       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8942       break;
8943     }
8944 
8945     case NestedNameSpecifier::NamespaceAlias: {
8946       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8947       SourceRange Range = readSourceRange();
8948       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8949       break;
8950     }
8951 
8952     case NestedNameSpecifier::TypeSpec:
8953     case NestedNameSpecifier::TypeSpecWithTemplate: {
8954       bool Template = readBool();
8955       TypeSourceInfo *T = readTypeSourceInfo();
8956       if (!T)
8957         return NestedNameSpecifierLoc();
8958       SourceLocation ColonColonLoc = readSourceLocation();
8959 
8960       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8961       Builder.Extend(Context,
8962                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8963                      T->getTypeLoc(), ColonColonLoc);
8964       break;
8965     }
8966 
8967     case NestedNameSpecifier::Global: {
8968       SourceLocation ColonColonLoc = readSourceLocation();
8969       Builder.MakeGlobal(Context, ColonColonLoc);
8970       break;
8971     }
8972 
8973     case NestedNameSpecifier::Super: {
8974       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8975       SourceRange Range = readSourceRange();
8976       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8977       break;
8978     }
8979     }
8980   }
8981 
8982   return Builder.getWithLocInContext(Context);
8983 }
8984 
8985 SourceRange
8986 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8987                            unsigned &Idx) {
8988   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8989   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8990   return SourceRange(beg, end);
8991 }
8992 
8993 /// Read a floating-point value
8994 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8995   return llvm::APFloat(Sem, readAPInt());
8996 }
8997 
8998 // Read a string
8999 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
9000   unsigned Len = Record[Idx++];
9001   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
9002   Idx += Len;
9003   return Result;
9004 }
9005 
9006 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
9007                                 unsigned &Idx) {
9008   std::string Filename = ReadString(Record, Idx);
9009   ResolveImportedPath(F, Filename);
9010   return Filename;
9011 }
9012 
9013 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9014                                 const RecordData &Record, unsigned &Idx) {
9015   std::string Filename = ReadString(Record, Idx);
9016   if (!BaseDirectory.empty())
9017     ResolveImportedPath(Filename, BaseDirectory);
9018   return Filename;
9019 }
9020 
9021 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9022                                          unsigned &Idx) {
9023   unsigned Major = Record[Idx++];
9024   unsigned Minor = Record[Idx++];
9025   unsigned Subminor = Record[Idx++];
9026   if (Minor == 0)
9027     return VersionTuple(Major);
9028   if (Subminor == 0)
9029     return VersionTuple(Major, Minor - 1);
9030   return VersionTuple(Major, Minor - 1, Subminor - 1);
9031 }
9032 
9033 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9034                                           const RecordData &Record,
9035                                           unsigned &Idx) {
9036   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9037   return CXXTemporary::Create(getContext(), Decl);
9038 }
9039 
9040 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9041   return Diag(CurrentImportLoc, DiagID);
9042 }
9043 
9044 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9045   return Diags.Report(Loc, DiagID);
9046 }
9047 
9048 /// Retrieve the identifier table associated with the
9049 /// preprocessor.
9050 IdentifierTable &ASTReader::getIdentifierTable() {
9051   return PP.getIdentifierTable();
9052 }
9053 
9054 /// Record that the given ID maps to the given switch-case
9055 /// statement.
9056 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9057   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9058          "Already have a SwitchCase with this ID");
9059   (*CurrSwitchCaseStmts)[ID] = SC;
9060 }
9061 
9062 /// Retrieve the switch-case statement with the given ID.
9063 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9064   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9065   return (*CurrSwitchCaseStmts)[ID];
9066 }
9067 
9068 void ASTReader::ClearSwitchCaseIDs() {
9069   CurrSwitchCaseStmts->clear();
9070 }
9071 
9072 void ASTReader::ReadComments() {
9073   ASTContext &Context = getContext();
9074   std::vector<RawComment *> Comments;
9075   for (SmallVectorImpl<std::pair<BitstreamCursor,
9076                                  serialization::ModuleFile *>>::iterator
9077        I = CommentsCursors.begin(),
9078        E = CommentsCursors.end();
9079        I != E; ++I) {
9080     Comments.clear();
9081     BitstreamCursor &Cursor = I->first;
9082     serialization::ModuleFile &F = *I->second;
9083     SavedStreamPosition SavedPosition(Cursor);
9084 
9085     RecordData Record;
9086     while (true) {
9087       Expected<llvm::BitstreamEntry> MaybeEntry =
9088           Cursor.advanceSkippingSubblocks(
9089               BitstreamCursor::AF_DontPopBlockAtEnd);
9090       if (!MaybeEntry) {
9091         Error(MaybeEntry.takeError());
9092         return;
9093       }
9094       llvm::BitstreamEntry Entry = MaybeEntry.get();
9095 
9096       switch (Entry.Kind) {
9097       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9098       case llvm::BitstreamEntry::Error:
9099         Error("malformed block record in AST file");
9100         return;
9101       case llvm::BitstreamEntry::EndBlock:
9102         goto NextCursor;
9103       case llvm::BitstreamEntry::Record:
9104         // The interesting case.
9105         break;
9106       }
9107 
9108       // Read a record.
9109       Record.clear();
9110       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9111       if (!MaybeComment) {
9112         Error(MaybeComment.takeError());
9113         return;
9114       }
9115       switch ((CommentRecordTypes)MaybeComment.get()) {
9116       case COMMENTS_RAW_COMMENT: {
9117         unsigned Idx = 0;
9118         SourceRange SR = ReadSourceRange(F, Record, Idx);
9119         RawComment::CommentKind Kind =
9120             (RawComment::CommentKind) Record[Idx++];
9121         bool IsTrailingComment = Record[Idx++];
9122         bool IsAlmostTrailingComment = Record[Idx++];
9123         Comments.push_back(new (Context) RawComment(
9124             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9125         break;
9126       }
9127       }
9128     }
9129   NextCursor:
9130     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9131         FileToOffsetToComment;
9132     for (RawComment *C : Comments) {
9133       SourceLocation CommentLoc = C->getBeginLoc();
9134       if (CommentLoc.isValid()) {
9135         std::pair<FileID, unsigned> Loc =
9136             SourceMgr.getDecomposedLoc(CommentLoc);
9137         if (Loc.first.isValid())
9138           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9139       }
9140     }
9141   }
9142 }
9143 
9144 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9145                                 bool IncludeSystem, bool Complain,
9146                     llvm::function_ref<void(const serialization::InputFile &IF,
9147                                             bool isSystem)> Visitor) {
9148   unsigned NumUserInputs = MF.NumUserInputFiles;
9149   unsigned NumInputs = MF.InputFilesLoaded.size();
9150   assert(NumUserInputs <= NumInputs);
9151   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9152   for (unsigned I = 0; I < N; ++I) {
9153     bool IsSystem = I >= NumUserInputs;
9154     InputFile IF = getInputFile(MF, I+1, Complain);
9155     Visitor(IF, IsSystem);
9156   }
9157 }
9158 
9159 void ASTReader::visitTopLevelModuleMaps(
9160     serialization::ModuleFile &MF,
9161     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9162   unsigned NumInputs = MF.InputFilesLoaded.size();
9163   for (unsigned I = 0; I < NumInputs; ++I) {
9164     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9165     if (IFI.TopLevelModuleMap)
9166       // FIXME: This unnecessarily re-reads the InputFileInfo.
9167       if (auto FE = getInputFile(MF, I + 1).getFile())
9168         Visitor(FE);
9169   }
9170 }
9171 
9172 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9173   // If we know the owning module, use it.
9174   if (Module *M = D->getImportedOwningModule())
9175     return M->getFullModuleName();
9176 
9177   // Otherwise, use the name of the top-level module the decl is within.
9178   if (ModuleFile *M = getOwningModuleFile(D))
9179     return M->ModuleName;
9180 
9181   // Not from a module.
9182   return {};
9183 }
9184 
9185 void ASTReader::finishPendingActions() {
9186   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9187          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9188          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9189          !PendingUpdateRecords.empty()) {
9190     // If any identifiers with corresponding top-level declarations have
9191     // been loaded, load those declarations now.
9192     using TopLevelDeclsMap =
9193         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9194     TopLevelDeclsMap TopLevelDecls;
9195 
9196     while (!PendingIdentifierInfos.empty()) {
9197       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9198       SmallVector<uint32_t, 4> DeclIDs =
9199           std::move(PendingIdentifierInfos.back().second);
9200       PendingIdentifierInfos.pop_back();
9201 
9202       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9203     }
9204 
9205     // Load each function type that we deferred loading because it was a
9206     // deduced type that might refer to a local type declared within itself.
9207     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9208       auto *FD = PendingFunctionTypes[I].first;
9209       FD->setType(GetType(PendingFunctionTypes[I].second));
9210 
9211       // If we gave a function a deduced return type, remember that we need to
9212       // propagate that along the redeclaration chain.
9213       auto *DT = FD->getReturnType()->getContainedDeducedType();
9214       if (DT && DT->isDeduced())
9215         PendingDeducedTypeUpdates.insert(
9216             {FD->getCanonicalDecl(), FD->getReturnType()});
9217     }
9218     PendingFunctionTypes.clear();
9219 
9220     // For each decl chain that we wanted to complete while deserializing, mark
9221     // it as "still needs to be completed".
9222     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9223       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9224     }
9225     PendingIncompleteDeclChains.clear();
9226 
9227     // Load pending declaration chains.
9228     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9229       loadPendingDeclChain(PendingDeclChains[I].first,
9230                            PendingDeclChains[I].second);
9231     PendingDeclChains.clear();
9232 
9233     // Make the most recent of the top-level declarations visible.
9234     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9235            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9236       IdentifierInfo *II = TLD->first;
9237       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9238         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9239       }
9240     }
9241 
9242     // Load any pending macro definitions.
9243     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9244       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9245       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9246       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9247       // Initialize the macro history from chained-PCHs ahead of module imports.
9248       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9249            ++IDIdx) {
9250         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9251         if (!Info.M->isModule())
9252           resolvePendingMacro(II, Info);
9253       }
9254       // Handle module imports.
9255       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9256            ++IDIdx) {
9257         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9258         if (Info.M->isModule())
9259           resolvePendingMacro(II, Info);
9260       }
9261     }
9262     PendingMacroIDs.clear();
9263 
9264     // Wire up the DeclContexts for Decls that we delayed setting until
9265     // recursive loading is completed.
9266     while (!PendingDeclContextInfos.empty()) {
9267       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9268       PendingDeclContextInfos.pop_front();
9269       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9270       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9271       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9272     }
9273 
9274     // Perform any pending declaration updates.
9275     while (!PendingUpdateRecords.empty()) {
9276       auto Update = PendingUpdateRecords.pop_back_val();
9277       ReadingKindTracker ReadingKind(Read_Decl, *this);
9278       loadDeclUpdateRecords(Update);
9279     }
9280   }
9281 
9282   // At this point, all update records for loaded decls are in place, so any
9283   // fake class definitions should have become real.
9284   assert(PendingFakeDefinitionData.empty() &&
9285          "faked up a class definition but never saw the real one");
9286 
9287   // If we deserialized any C++ or Objective-C class definitions, any
9288   // Objective-C protocol definitions, or any redeclarable templates, make sure
9289   // that all redeclarations point to the definitions. Note that this can only
9290   // happen now, after the redeclaration chains have been fully wired.
9291   for (Decl *D : PendingDefinitions) {
9292     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9293       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9294         // Make sure that the TagType points at the definition.
9295         const_cast<TagType*>(TagT)->decl = TD;
9296       }
9297 
9298       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9299         for (auto *R = getMostRecentExistingDecl(RD); R;
9300              R = R->getPreviousDecl()) {
9301           assert((R == D) ==
9302                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9303                  "declaration thinks it's the definition but it isn't");
9304           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9305         }
9306       }
9307 
9308       continue;
9309     }
9310 
9311     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9312       // Make sure that the ObjCInterfaceType points at the definition.
9313       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9314         ->Decl = ID;
9315 
9316       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9317         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9318 
9319       continue;
9320     }
9321 
9322     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9323       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9324         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9325 
9326       continue;
9327     }
9328 
9329     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9330     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9331       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9332   }
9333   PendingDefinitions.clear();
9334 
9335   // Load the bodies of any functions or methods we've encountered. We do
9336   // this now (delayed) so that we can be sure that the declaration chains
9337   // have been fully wired up (hasBody relies on this).
9338   // FIXME: We shouldn't require complete redeclaration chains here.
9339   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9340                                PBEnd = PendingBodies.end();
9341        PB != PBEnd; ++PB) {
9342     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9343       // For a function defined inline within a class template, force the
9344       // canonical definition to be the one inside the canonical definition of
9345       // the template. This ensures that we instantiate from a correct view
9346       // of the template.
9347       //
9348       // Sadly we can't do this more generally: we can't be sure that all
9349       // copies of an arbitrary class definition will have the same members
9350       // defined (eg, some member functions may not be instantiated, and some
9351       // special members may or may not have been implicitly defined).
9352       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9353         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9354           continue;
9355 
9356       // FIXME: Check for =delete/=default?
9357       // FIXME: Complain about ODR violations here?
9358       const FunctionDecl *Defn = nullptr;
9359       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9360         FD->setLazyBody(PB->second);
9361       } else {
9362         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9363         mergeDefinitionVisibility(NonConstDefn, FD);
9364 
9365         if (!FD->isLateTemplateParsed() &&
9366             !NonConstDefn->isLateTemplateParsed() &&
9367             FD->getODRHash() != NonConstDefn->getODRHash()) {
9368           if (!isa<CXXMethodDecl>(FD)) {
9369             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9370           } else if (FD->getLexicalParent()->isFileContext() &&
9371                      NonConstDefn->getLexicalParent()->isFileContext()) {
9372             // Only diagnose out-of-line method definitions.  If they are
9373             // in class definitions, then an error will be generated when
9374             // processing the class bodies.
9375             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9376           }
9377         }
9378       }
9379       continue;
9380     }
9381 
9382     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9383     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9384       MD->setLazyBody(PB->second);
9385   }
9386   PendingBodies.clear();
9387 
9388   // Do some cleanup.
9389   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9390     getContext().deduplicateMergedDefinitonsFor(ND);
9391   PendingMergedDefinitionsToDeduplicate.clear();
9392 }
9393 
9394 void ASTReader::diagnoseOdrViolations() {
9395   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9396       PendingFunctionOdrMergeFailures.empty() &&
9397       PendingEnumOdrMergeFailures.empty())
9398     return;
9399 
9400   // Trigger the import of the full definition of each class that had any
9401   // odr-merging problems, so we can produce better diagnostics for them.
9402   // These updates may in turn find and diagnose some ODR failures, so take
9403   // ownership of the set first.
9404   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9405   PendingOdrMergeFailures.clear();
9406   for (auto &Merge : OdrMergeFailures) {
9407     Merge.first->buildLookup();
9408     Merge.first->decls_begin();
9409     Merge.first->bases_begin();
9410     Merge.first->vbases_begin();
9411     for (auto &RecordPair : Merge.second) {
9412       auto *RD = RecordPair.first;
9413       RD->decls_begin();
9414       RD->bases_begin();
9415       RD->vbases_begin();
9416     }
9417   }
9418 
9419   // Trigger the import of functions.
9420   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9421   PendingFunctionOdrMergeFailures.clear();
9422   for (auto &Merge : FunctionOdrMergeFailures) {
9423     Merge.first->buildLookup();
9424     Merge.first->decls_begin();
9425     Merge.first->getBody();
9426     for (auto &FD : Merge.second) {
9427       FD->buildLookup();
9428       FD->decls_begin();
9429       FD->getBody();
9430     }
9431   }
9432 
9433   // Trigger the import of enums.
9434   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9435   PendingEnumOdrMergeFailures.clear();
9436   for (auto &Merge : EnumOdrMergeFailures) {
9437     Merge.first->decls_begin();
9438     for (auto &Enum : Merge.second) {
9439       Enum->decls_begin();
9440     }
9441   }
9442 
9443   // For each declaration from a merged context, check that the canonical
9444   // definition of that context also contains a declaration of the same
9445   // entity.
9446   //
9447   // Caution: this loop does things that might invalidate iterators into
9448   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9449   while (!PendingOdrMergeChecks.empty()) {
9450     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9451 
9452     // FIXME: Skip over implicit declarations for now. This matters for things
9453     // like implicitly-declared special member functions. This isn't entirely
9454     // correct; we can end up with multiple unmerged declarations of the same
9455     // implicit entity.
9456     if (D->isImplicit())
9457       continue;
9458 
9459     DeclContext *CanonDef = D->getDeclContext();
9460 
9461     bool Found = false;
9462     const Decl *DCanon = D->getCanonicalDecl();
9463 
9464     for (auto RI : D->redecls()) {
9465       if (RI->getLexicalDeclContext() == CanonDef) {
9466         Found = true;
9467         break;
9468       }
9469     }
9470     if (Found)
9471       continue;
9472 
9473     // Quick check failed, time to do the slow thing. Note, we can't just
9474     // look up the name of D in CanonDef here, because the member that is
9475     // in CanonDef might not be found by name lookup (it might have been
9476     // replaced by a more recent declaration in the lookup table), and we
9477     // can't necessarily find it in the redeclaration chain because it might
9478     // be merely mergeable, not redeclarable.
9479     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9480     for (auto *CanonMember : CanonDef->decls()) {
9481       if (CanonMember->getCanonicalDecl() == DCanon) {
9482         // This can happen if the declaration is merely mergeable and not
9483         // actually redeclarable (we looked for redeclarations earlier).
9484         //
9485         // FIXME: We should be able to detect this more efficiently, without
9486         // pulling in all of the members of CanonDef.
9487         Found = true;
9488         break;
9489       }
9490       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9491         if (ND->getDeclName() == D->getDeclName())
9492           Candidates.push_back(ND);
9493     }
9494 
9495     if (!Found) {
9496       // The AST doesn't like TagDecls becoming invalid after they've been
9497       // completed. We only really need to mark FieldDecls as invalid here.
9498       if (!isa<TagDecl>(D))
9499         D->setInvalidDecl();
9500 
9501       // Ensure we don't accidentally recursively enter deserialization while
9502       // we're producing our diagnostic.
9503       Deserializing RecursionGuard(this);
9504 
9505       std::string CanonDefModule =
9506           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9507       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9508         << D << getOwningModuleNameForDiagnostic(D)
9509         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9510 
9511       if (Candidates.empty())
9512         Diag(cast<Decl>(CanonDef)->getLocation(),
9513              diag::note_module_odr_violation_no_possible_decls) << D;
9514       else {
9515         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9516           Diag(Candidates[I]->getLocation(),
9517                diag::note_module_odr_violation_possible_decl)
9518             << Candidates[I];
9519       }
9520 
9521       DiagnosedOdrMergeFailures.insert(CanonDef);
9522     }
9523   }
9524 
9525   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9526       EnumOdrMergeFailures.empty())
9527     return;
9528 
9529   // Ensure we don't accidentally recursively enter deserialization while
9530   // we're producing our diagnostics.
9531   Deserializing RecursionGuard(this);
9532 
9533   // Common code for hashing helpers.
9534   ODRHash Hash;
9535   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9536     Hash.clear();
9537     Hash.AddQualType(Ty);
9538     return Hash.CalculateHash();
9539   };
9540 
9541   auto ComputeODRHash = [&Hash](const Stmt *S) {
9542     assert(S);
9543     Hash.clear();
9544     Hash.AddStmt(S);
9545     return Hash.CalculateHash();
9546   };
9547 
9548   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9549     assert(D);
9550     Hash.clear();
9551     Hash.AddSubDecl(D);
9552     return Hash.CalculateHash();
9553   };
9554 
9555   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9556     Hash.clear();
9557     Hash.AddTemplateArgument(TA);
9558     return Hash.CalculateHash();
9559   };
9560 
9561   auto ComputeTemplateParameterListODRHash =
9562       [&Hash](const TemplateParameterList *TPL) {
9563         assert(TPL);
9564         Hash.clear();
9565         Hash.AddTemplateParameterList(TPL);
9566         return Hash.CalculateHash();
9567       };
9568 
9569   // Used with err_module_odr_violation_mismatch_decl and
9570   // note_module_odr_violation_mismatch_decl
9571   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9572   enum ODRMismatchDecl {
9573     EndOfClass,
9574     PublicSpecifer,
9575     PrivateSpecifer,
9576     ProtectedSpecifer,
9577     StaticAssert,
9578     Field,
9579     CXXMethod,
9580     TypeAlias,
9581     TypeDef,
9582     Var,
9583     Friend,
9584     FunctionTemplate,
9585     Other
9586   };
9587 
9588   // Used with err_module_odr_violation_mismatch_decl_diff and
9589   // note_module_odr_violation_mismatch_decl_diff
9590   enum ODRMismatchDeclDifference {
9591     StaticAssertCondition,
9592     StaticAssertMessage,
9593     StaticAssertOnlyMessage,
9594     FieldName,
9595     FieldTypeName,
9596     FieldSingleBitField,
9597     FieldDifferentWidthBitField,
9598     FieldSingleMutable,
9599     FieldSingleInitializer,
9600     FieldDifferentInitializers,
9601     MethodName,
9602     MethodDeleted,
9603     MethodDefaulted,
9604     MethodVirtual,
9605     MethodStatic,
9606     MethodVolatile,
9607     MethodConst,
9608     MethodInline,
9609     MethodNumberParameters,
9610     MethodParameterType,
9611     MethodParameterName,
9612     MethodParameterSingleDefaultArgument,
9613     MethodParameterDifferentDefaultArgument,
9614     MethodNoTemplateArguments,
9615     MethodDifferentNumberTemplateArguments,
9616     MethodDifferentTemplateArgument,
9617     MethodSingleBody,
9618     MethodDifferentBody,
9619     TypedefName,
9620     TypedefType,
9621     VarName,
9622     VarType,
9623     VarSingleInitializer,
9624     VarDifferentInitializer,
9625     VarConstexpr,
9626     FriendTypeFunction,
9627     FriendType,
9628     FriendFunction,
9629     FunctionTemplateDifferentNumberParameters,
9630     FunctionTemplateParameterDifferentKind,
9631     FunctionTemplateParameterName,
9632     FunctionTemplateParameterSingleDefaultArgument,
9633     FunctionTemplateParameterDifferentDefaultArgument,
9634     FunctionTemplateParameterDifferentType,
9635     FunctionTemplatePackParameter,
9636   };
9637 
9638   // These lambdas have the common portions of the ODR diagnostics.  This
9639   // has the same return as Diag(), so addition parameters can be passed
9640   // in with operator<<
9641   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9642                                  SourceLocation Loc, SourceRange Range,
9643                                  ODRMismatchDeclDifference DiffType) {
9644     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9645            << FirstRecord << FirstModule.empty() << FirstModule << Range
9646            << DiffType;
9647   };
9648   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9649                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9650     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9651            << SecondModule << Range << DiffType;
9652   };
9653 
9654   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9655                        &ComputeQualTypeODRHash, &ComputeODRHash](
9656                           NamedDecl *FirstRecord, StringRef FirstModule,
9657                           StringRef SecondModule, FieldDecl *FirstField,
9658                           FieldDecl *SecondField) {
9659     IdentifierInfo *FirstII = FirstField->getIdentifier();
9660     IdentifierInfo *SecondII = SecondField->getIdentifier();
9661     if (FirstII->getName() != SecondII->getName()) {
9662       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9663                        FirstField->getSourceRange(), FieldName)
9664           << FirstII;
9665       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9666                       SecondField->getSourceRange(), FieldName)
9667           << SecondII;
9668 
9669       return true;
9670     }
9671 
9672     assert(getContext().hasSameType(FirstField->getType(),
9673                                     SecondField->getType()));
9674 
9675     QualType FirstType = FirstField->getType();
9676     QualType SecondType = SecondField->getType();
9677     if (ComputeQualTypeODRHash(FirstType) !=
9678         ComputeQualTypeODRHash(SecondType)) {
9679       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9680                        FirstField->getSourceRange(), FieldTypeName)
9681           << FirstII << FirstType;
9682       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9683                       SecondField->getSourceRange(), FieldTypeName)
9684           << SecondII << SecondType;
9685 
9686       return true;
9687     }
9688 
9689     const bool IsFirstBitField = FirstField->isBitField();
9690     const bool IsSecondBitField = SecondField->isBitField();
9691     if (IsFirstBitField != IsSecondBitField) {
9692       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9693                        FirstField->getSourceRange(), FieldSingleBitField)
9694           << FirstII << IsFirstBitField;
9695       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9696                       SecondField->getSourceRange(), FieldSingleBitField)
9697           << SecondII << IsSecondBitField;
9698       return true;
9699     }
9700 
9701     if (IsFirstBitField && IsSecondBitField) {
9702       unsigned FirstBitWidthHash =
9703           ComputeODRHash(FirstField->getBitWidth());
9704       unsigned SecondBitWidthHash =
9705           ComputeODRHash(SecondField->getBitWidth());
9706       if (FirstBitWidthHash != SecondBitWidthHash) {
9707         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9708                          FirstField->getSourceRange(),
9709                          FieldDifferentWidthBitField)
9710             << FirstII << FirstField->getBitWidth()->getSourceRange();
9711         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9712                         SecondField->getSourceRange(),
9713                         FieldDifferentWidthBitField)
9714             << SecondII << SecondField->getBitWidth()->getSourceRange();
9715         return true;
9716       }
9717     }
9718 
9719     if (!PP.getLangOpts().CPlusPlus)
9720       return false;
9721 
9722     const bool IsFirstMutable = FirstField->isMutable();
9723     const bool IsSecondMutable = SecondField->isMutable();
9724     if (IsFirstMutable != IsSecondMutable) {
9725       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9726                        FirstField->getSourceRange(), FieldSingleMutable)
9727           << FirstII << IsFirstMutable;
9728       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9729                       SecondField->getSourceRange(), FieldSingleMutable)
9730           << SecondII << IsSecondMutable;
9731       return true;
9732     }
9733 
9734     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9735     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9736     if ((!FirstInitializer && SecondInitializer) ||
9737         (FirstInitializer && !SecondInitializer)) {
9738       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9739                        FirstField->getSourceRange(), FieldSingleInitializer)
9740           << FirstII << (FirstInitializer != nullptr);
9741       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9742                       SecondField->getSourceRange(), FieldSingleInitializer)
9743           << SecondII << (SecondInitializer != nullptr);
9744       return true;
9745     }
9746 
9747     if (FirstInitializer && SecondInitializer) {
9748       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9749       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9750       if (FirstInitHash != SecondInitHash) {
9751         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9752                          FirstField->getSourceRange(),
9753                          FieldDifferentInitializers)
9754             << FirstII << FirstInitializer->getSourceRange();
9755         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9756                         SecondField->getSourceRange(),
9757                         FieldDifferentInitializers)
9758             << SecondII << SecondInitializer->getSourceRange();
9759         return true;
9760       }
9761     }
9762 
9763     return false;
9764   };
9765 
9766   auto ODRDiagTypeDefOrAlias =
9767       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9768           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9769           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9770           bool IsTypeAlias) {
9771         auto FirstName = FirstTD->getDeclName();
9772         auto SecondName = SecondTD->getDeclName();
9773         if (FirstName != SecondName) {
9774           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9775                            FirstTD->getSourceRange(), TypedefName)
9776               << IsTypeAlias << FirstName;
9777           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9778                           SecondTD->getSourceRange(), TypedefName)
9779               << IsTypeAlias << SecondName;
9780           return true;
9781         }
9782 
9783         QualType FirstType = FirstTD->getUnderlyingType();
9784         QualType SecondType = SecondTD->getUnderlyingType();
9785         if (ComputeQualTypeODRHash(FirstType) !=
9786             ComputeQualTypeODRHash(SecondType)) {
9787           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9788                            FirstTD->getSourceRange(), TypedefType)
9789               << IsTypeAlias << FirstName << FirstType;
9790           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9791                           SecondTD->getSourceRange(), TypedefType)
9792               << IsTypeAlias << SecondName << SecondType;
9793           return true;
9794         }
9795 
9796         return false;
9797   };
9798 
9799   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9800                      &ComputeQualTypeODRHash, &ComputeODRHash,
9801                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9802                            StringRef SecondModule, VarDecl *FirstVD,
9803                            VarDecl *SecondVD) {
9804     auto FirstName = FirstVD->getDeclName();
9805     auto SecondName = SecondVD->getDeclName();
9806     if (FirstName != SecondName) {
9807       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9808                        FirstVD->getSourceRange(), VarName)
9809           << FirstName;
9810       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9811                       SecondVD->getSourceRange(), VarName)
9812           << SecondName;
9813       return true;
9814     }
9815 
9816     QualType FirstType = FirstVD->getType();
9817     QualType SecondType = SecondVD->getType();
9818     if (ComputeQualTypeODRHash(FirstType) !=
9819         ComputeQualTypeODRHash(SecondType)) {
9820       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9821                        FirstVD->getSourceRange(), VarType)
9822           << FirstName << FirstType;
9823       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9824                       SecondVD->getSourceRange(), VarType)
9825           << SecondName << SecondType;
9826       return true;
9827     }
9828 
9829     if (!PP.getLangOpts().CPlusPlus)
9830       return false;
9831 
9832     const Expr *FirstInit = FirstVD->getInit();
9833     const Expr *SecondInit = SecondVD->getInit();
9834     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9835       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9836                        FirstVD->getSourceRange(), VarSingleInitializer)
9837           << FirstName << (FirstInit == nullptr)
9838           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9839       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9840                       SecondVD->getSourceRange(), VarSingleInitializer)
9841           << SecondName << (SecondInit == nullptr)
9842           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9843       return true;
9844     }
9845 
9846     if (FirstInit && SecondInit &&
9847         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9848       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9849                        FirstVD->getSourceRange(), VarDifferentInitializer)
9850           << FirstName << FirstInit->getSourceRange();
9851       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9852                       SecondVD->getSourceRange(), VarDifferentInitializer)
9853           << SecondName << SecondInit->getSourceRange();
9854       return true;
9855     }
9856 
9857     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9858     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9859     if (FirstIsConstexpr != SecondIsConstexpr) {
9860       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9861                        FirstVD->getSourceRange(), VarConstexpr)
9862           << FirstName << FirstIsConstexpr;
9863       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9864                       SecondVD->getSourceRange(), VarConstexpr)
9865           << SecondName << SecondIsConstexpr;
9866       return true;
9867     }
9868     return false;
9869   };
9870 
9871   auto DifferenceSelector = [](Decl *D) {
9872     assert(D && "valid Decl required");
9873     switch (D->getKind()) {
9874     default:
9875       return Other;
9876     case Decl::AccessSpec:
9877       switch (D->getAccess()) {
9878       case AS_public:
9879         return PublicSpecifer;
9880       case AS_private:
9881         return PrivateSpecifer;
9882       case AS_protected:
9883         return ProtectedSpecifer;
9884       case AS_none:
9885         break;
9886       }
9887       llvm_unreachable("Invalid access specifier");
9888     case Decl::StaticAssert:
9889       return StaticAssert;
9890     case Decl::Field:
9891       return Field;
9892     case Decl::CXXMethod:
9893     case Decl::CXXConstructor:
9894     case Decl::CXXDestructor:
9895       return CXXMethod;
9896     case Decl::TypeAlias:
9897       return TypeAlias;
9898     case Decl::Typedef:
9899       return TypeDef;
9900     case Decl::Var:
9901       return Var;
9902     case Decl::Friend:
9903       return Friend;
9904     case Decl::FunctionTemplate:
9905       return FunctionTemplate;
9906     }
9907   };
9908 
9909   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9910   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9911                                                  RecordDecl *Record,
9912                                                  const DeclContext *DC) {
9913     for (auto *D : Record->decls()) {
9914       if (!ODRHash::isDeclToBeProcessed(D, DC))
9915         continue;
9916       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9917     }
9918   };
9919 
9920   struct DiffResult {
9921     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9922     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9923   };
9924 
9925   // If there is a diagnoseable difference, FirstDiffType and
9926   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9927   // filled in if not EndOfClass.
9928   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9929                                              DeclHashes &SecondHashes) {
9930     DiffResult DR;
9931     auto FirstIt = FirstHashes.begin();
9932     auto SecondIt = SecondHashes.begin();
9933     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9934       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9935           FirstIt->second == SecondIt->second) {
9936         ++FirstIt;
9937         ++SecondIt;
9938         continue;
9939       }
9940 
9941       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9942       DR.SecondDecl =
9943           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9944 
9945       DR.FirstDiffType =
9946           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9947       DR.SecondDiffType =
9948           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9949       return DR;
9950     }
9951     return DR;
9952   };
9953 
9954   // Use this to diagnose that an unexpected Decl was encountered
9955   // or no difference was detected. This causes a generic error
9956   // message to be emitted.
9957   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9958                                       StringRef FirstModule,
9959                                       NamedDecl *SecondRecord,
9960                                       StringRef SecondModule) {
9961     Diag(FirstRecord->getLocation(),
9962          diag::err_module_odr_violation_different_definitions)
9963         << FirstRecord << FirstModule.empty() << FirstModule;
9964 
9965     if (DR.FirstDecl) {
9966       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9967           << FirstRecord << DR.FirstDecl->getSourceRange();
9968     }
9969 
9970     Diag(SecondRecord->getLocation(),
9971          diag::note_module_odr_violation_different_definitions)
9972         << SecondModule;
9973 
9974     if (DR.SecondDecl) {
9975       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9976           << DR.SecondDecl->getSourceRange();
9977     }
9978   };
9979 
9980   auto DiagnoseODRMismatch =
9981       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9982              NamedDecl *SecondRecord, StringRef SecondModule) {
9983         SourceLocation FirstLoc;
9984         SourceRange FirstRange;
9985         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9986         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9987           FirstLoc = FirstTag->getBraceRange().getEnd();
9988         } else {
9989           FirstLoc = DR.FirstDecl->getLocation();
9990           FirstRange = DR.FirstDecl->getSourceRange();
9991         }
9992         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9993             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9994             << DR.FirstDiffType;
9995 
9996         SourceLocation SecondLoc;
9997         SourceRange SecondRange;
9998         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9999         if (DR.SecondDiffType == EndOfClass && SecondTag) {
10000           SecondLoc = SecondTag->getBraceRange().getEnd();
10001         } else {
10002           SecondLoc = DR.SecondDecl->getLocation();
10003           SecondRange = DR.SecondDecl->getSourceRange();
10004         }
10005         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
10006             << SecondModule << SecondRange << DR.SecondDiffType;
10007       };
10008 
10009   // Issue any pending ODR-failure diagnostics.
10010   for (auto &Merge : OdrMergeFailures) {
10011     // If we've already pointed out a specific problem with this class, don't
10012     // bother issuing a general "something's different" diagnostic.
10013     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10014       continue;
10015 
10016     bool Diagnosed = false;
10017     CXXRecordDecl *FirstRecord = Merge.first;
10018     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10019     for (auto &RecordPair : Merge.second) {
10020       CXXRecordDecl *SecondRecord = RecordPair.first;
10021       // Multiple different declarations got merged together; tell the user
10022       // where they came from.
10023       if (FirstRecord == SecondRecord)
10024         continue;
10025 
10026       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10027 
10028       auto *FirstDD = FirstRecord->DefinitionData;
10029       auto *SecondDD = RecordPair.second;
10030 
10031       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10032 
10033       // Diagnostics from DefinitionData are emitted here.
10034       if (FirstDD != SecondDD) {
10035         enum ODRDefinitionDataDifference {
10036           NumBases,
10037           NumVBases,
10038           BaseType,
10039           BaseVirtual,
10040           BaseAccess,
10041         };
10042         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10043                                  this](SourceLocation Loc, SourceRange Range,
10044                                        ODRDefinitionDataDifference DiffType) {
10045           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10046                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10047                  << DiffType;
10048         };
10049         auto ODRDiagBaseNote = [&SecondModule,
10050                                 this](SourceLocation Loc, SourceRange Range,
10051                                       ODRDefinitionDataDifference DiffType) {
10052           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10053                  << SecondModule << Range << DiffType;
10054         };
10055 
10056         unsigned FirstNumBases = FirstDD->NumBases;
10057         unsigned FirstNumVBases = FirstDD->NumVBases;
10058         unsigned SecondNumBases = SecondDD->NumBases;
10059         unsigned SecondNumVBases = SecondDD->NumVBases;
10060 
10061         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10062           unsigned NumBases = DD->NumBases;
10063           if (NumBases == 0) return SourceRange();
10064           auto bases = DD->bases();
10065           return SourceRange(bases[0].getBeginLoc(),
10066                              bases[NumBases - 1].getEndLoc());
10067         };
10068 
10069         if (FirstNumBases != SecondNumBases) {
10070           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10071                            NumBases)
10072               << FirstNumBases;
10073           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10074                           NumBases)
10075               << SecondNumBases;
10076           Diagnosed = true;
10077           break;
10078         }
10079 
10080         if (FirstNumVBases != SecondNumVBases) {
10081           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10082                            NumVBases)
10083               << FirstNumVBases;
10084           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10085                           NumVBases)
10086               << SecondNumVBases;
10087           Diagnosed = true;
10088           break;
10089         }
10090 
10091         auto FirstBases = FirstDD->bases();
10092         auto SecondBases = SecondDD->bases();
10093         unsigned i = 0;
10094         for (i = 0; i < FirstNumBases; ++i) {
10095           auto FirstBase = FirstBases[i];
10096           auto SecondBase = SecondBases[i];
10097           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10098               ComputeQualTypeODRHash(SecondBase.getType())) {
10099             ODRDiagBaseError(FirstRecord->getLocation(),
10100                              FirstBase.getSourceRange(), BaseType)
10101                 << (i + 1) << FirstBase.getType();
10102             ODRDiagBaseNote(SecondRecord->getLocation(),
10103                             SecondBase.getSourceRange(), BaseType)
10104                 << (i + 1) << SecondBase.getType();
10105             break;
10106           }
10107 
10108           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10109             ODRDiagBaseError(FirstRecord->getLocation(),
10110                              FirstBase.getSourceRange(), BaseVirtual)
10111                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10112             ODRDiagBaseNote(SecondRecord->getLocation(),
10113                             SecondBase.getSourceRange(), BaseVirtual)
10114                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10115             break;
10116           }
10117 
10118           if (FirstBase.getAccessSpecifierAsWritten() !=
10119               SecondBase.getAccessSpecifierAsWritten()) {
10120             ODRDiagBaseError(FirstRecord->getLocation(),
10121                              FirstBase.getSourceRange(), BaseAccess)
10122                 << (i + 1) << FirstBase.getType()
10123                 << (int)FirstBase.getAccessSpecifierAsWritten();
10124             ODRDiagBaseNote(SecondRecord->getLocation(),
10125                             SecondBase.getSourceRange(), BaseAccess)
10126                 << (i + 1) << SecondBase.getType()
10127                 << (int)SecondBase.getAccessSpecifierAsWritten();
10128             break;
10129           }
10130         }
10131 
10132         if (i != FirstNumBases) {
10133           Diagnosed = true;
10134           break;
10135         }
10136       }
10137 
10138       const ClassTemplateDecl *FirstTemplate =
10139           FirstRecord->getDescribedClassTemplate();
10140       const ClassTemplateDecl *SecondTemplate =
10141           SecondRecord->getDescribedClassTemplate();
10142 
10143       assert(!FirstTemplate == !SecondTemplate &&
10144              "Both pointers should be null or non-null");
10145 
10146       enum ODRTemplateDifference {
10147         ParamEmptyName,
10148         ParamName,
10149         ParamSingleDefaultArgument,
10150         ParamDifferentDefaultArgument,
10151       };
10152 
10153       if (FirstTemplate && SecondTemplate) {
10154         DeclHashes FirstTemplateHashes;
10155         DeclHashes SecondTemplateHashes;
10156 
10157         auto PopulateTemplateParameterHashs =
10158             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10159                                      const ClassTemplateDecl *TD) {
10160               for (auto *D : TD->getTemplateParameters()->asArray()) {
10161                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10162               }
10163             };
10164 
10165         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10166         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10167 
10168         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10169                "Number of template parameters should be equal.");
10170 
10171         auto FirstIt = FirstTemplateHashes.begin();
10172         auto FirstEnd = FirstTemplateHashes.end();
10173         auto SecondIt = SecondTemplateHashes.begin();
10174         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10175           if (FirstIt->second == SecondIt->second)
10176             continue;
10177 
10178           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10179                                           SourceLocation Loc, SourceRange Range,
10180                                           ODRTemplateDifference DiffType) {
10181             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10182                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10183                    << DiffType;
10184           };
10185           auto ODRDiagTemplateNote = [&SecondModule, this](
10186                                          SourceLocation Loc, SourceRange Range,
10187                                          ODRTemplateDifference DiffType) {
10188             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10189                    << SecondModule << Range << DiffType;
10190           };
10191 
10192           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10193           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10194 
10195           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10196                  "Parameter Decl's should be the same kind.");
10197 
10198           DeclarationName FirstName = FirstDecl->getDeclName();
10199           DeclarationName SecondName = SecondDecl->getDeclName();
10200 
10201           if (FirstName != SecondName) {
10202             const bool FirstNameEmpty =
10203                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10204             const bool SecondNameEmpty =
10205                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10206             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10207                    "Both template parameters cannot be unnamed.");
10208             ODRDiagTemplateError(FirstDecl->getLocation(),
10209                                  FirstDecl->getSourceRange(),
10210                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10211                 << FirstName;
10212             ODRDiagTemplateNote(SecondDecl->getLocation(),
10213                                 SecondDecl->getSourceRange(),
10214                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10215                 << SecondName;
10216             break;
10217           }
10218 
10219           switch (FirstDecl->getKind()) {
10220           default:
10221             llvm_unreachable("Invalid template parameter type.");
10222           case Decl::TemplateTypeParm: {
10223             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10224             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10225             const bool HasFirstDefaultArgument =
10226                 FirstParam->hasDefaultArgument() &&
10227                 !FirstParam->defaultArgumentWasInherited();
10228             const bool HasSecondDefaultArgument =
10229                 SecondParam->hasDefaultArgument() &&
10230                 !SecondParam->defaultArgumentWasInherited();
10231 
10232             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10233               ODRDiagTemplateError(FirstDecl->getLocation(),
10234                                    FirstDecl->getSourceRange(),
10235                                    ParamSingleDefaultArgument)
10236                   << HasFirstDefaultArgument;
10237               ODRDiagTemplateNote(SecondDecl->getLocation(),
10238                                   SecondDecl->getSourceRange(),
10239                                   ParamSingleDefaultArgument)
10240                   << HasSecondDefaultArgument;
10241               break;
10242             }
10243 
10244             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10245                    "Expecting default arguments.");
10246 
10247             ODRDiagTemplateError(FirstDecl->getLocation(),
10248                                  FirstDecl->getSourceRange(),
10249                                  ParamDifferentDefaultArgument);
10250             ODRDiagTemplateNote(SecondDecl->getLocation(),
10251                                 SecondDecl->getSourceRange(),
10252                                 ParamDifferentDefaultArgument);
10253 
10254             break;
10255           }
10256           case Decl::NonTypeTemplateParm: {
10257             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10258             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10259             const bool HasFirstDefaultArgument =
10260                 FirstParam->hasDefaultArgument() &&
10261                 !FirstParam->defaultArgumentWasInherited();
10262             const bool HasSecondDefaultArgument =
10263                 SecondParam->hasDefaultArgument() &&
10264                 !SecondParam->defaultArgumentWasInherited();
10265 
10266             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10267               ODRDiagTemplateError(FirstDecl->getLocation(),
10268                                    FirstDecl->getSourceRange(),
10269                                    ParamSingleDefaultArgument)
10270                   << HasFirstDefaultArgument;
10271               ODRDiagTemplateNote(SecondDecl->getLocation(),
10272                                   SecondDecl->getSourceRange(),
10273                                   ParamSingleDefaultArgument)
10274                   << HasSecondDefaultArgument;
10275               break;
10276             }
10277 
10278             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10279                    "Expecting default arguments.");
10280 
10281             ODRDiagTemplateError(FirstDecl->getLocation(),
10282                                  FirstDecl->getSourceRange(),
10283                                  ParamDifferentDefaultArgument);
10284             ODRDiagTemplateNote(SecondDecl->getLocation(),
10285                                 SecondDecl->getSourceRange(),
10286                                 ParamDifferentDefaultArgument);
10287 
10288             break;
10289           }
10290           case Decl::TemplateTemplateParm: {
10291             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10292             const auto *SecondParam =
10293                 cast<TemplateTemplateParmDecl>(SecondDecl);
10294             const bool HasFirstDefaultArgument =
10295                 FirstParam->hasDefaultArgument() &&
10296                 !FirstParam->defaultArgumentWasInherited();
10297             const bool HasSecondDefaultArgument =
10298                 SecondParam->hasDefaultArgument() &&
10299                 !SecondParam->defaultArgumentWasInherited();
10300 
10301             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10302               ODRDiagTemplateError(FirstDecl->getLocation(),
10303                                    FirstDecl->getSourceRange(),
10304                                    ParamSingleDefaultArgument)
10305                   << HasFirstDefaultArgument;
10306               ODRDiagTemplateNote(SecondDecl->getLocation(),
10307                                   SecondDecl->getSourceRange(),
10308                                   ParamSingleDefaultArgument)
10309                   << HasSecondDefaultArgument;
10310               break;
10311             }
10312 
10313             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10314                    "Expecting default arguments.");
10315 
10316             ODRDiagTemplateError(FirstDecl->getLocation(),
10317                                  FirstDecl->getSourceRange(),
10318                                  ParamDifferentDefaultArgument);
10319             ODRDiagTemplateNote(SecondDecl->getLocation(),
10320                                 SecondDecl->getSourceRange(),
10321                                 ParamDifferentDefaultArgument);
10322 
10323             break;
10324           }
10325           }
10326 
10327           break;
10328         }
10329 
10330         if (FirstIt != FirstEnd) {
10331           Diagnosed = true;
10332           break;
10333         }
10334       }
10335 
10336       DeclHashes FirstHashes;
10337       DeclHashes SecondHashes;
10338       const DeclContext *DC = FirstRecord;
10339       PopulateHashes(FirstHashes, FirstRecord, DC);
10340       PopulateHashes(SecondHashes, SecondRecord, DC);
10341 
10342       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10343       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10344       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10345       Decl *FirstDecl = DR.FirstDecl;
10346       Decl *SecondDecl = DR.SecondDecl;
10347 
10348       if (FirstDiffType == Other || SecondDiffType == Other) {
10349         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10350                               SecondModule);
10351         Diagnosed = true;
10352         break;
10353       }
10354 
10355       if (FirstDiffType != SecondDiffType) {
10356         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10357                             SecondModule);
10358         Diagnosed = true;
10359         break;
10360       }
10361 
10362       assert(FirstDiffType == SecondDiffType);
10363 
10364       switch (FirstDiffType) {
10365       case Other:
10366       case EndOfClass:
10367       case PublicSpecifer:
10368       case PrivateSpecifer:
10369       case ProtectedSpecifer:
10370         llvm_unreachable("Invalid diff type");
10371 
10372       case StaticAssert: {
10373         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10374         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10375 
10376         Expr *FirstExpr = FirstSA->getAssertExpr();
10377         Expr *SecondExpr = SecondSA->getAssertExpr();
10378         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10379         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10380         if (FirstODRHash != SecondODRHash) {
10381           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10382                            FirstExpr->getSourceRange(), StaticAssertCondition);
10383           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10384                           SecondExpr->getSourceRange(), StaticAssertCondition);
10385           Diagnosed = true;
10386           break;
10387         }
10388 
10389         StringLiteral *FirstStr = FirstSA->getMessage();
10390         StringLiteral *SecondStr = SecondSA->getMessage();
10391         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10392         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10393           SourceLocation FirstLoc, SecondLoc;
10394           SourceRange FirstRange, SecondRange;
10395           if (FirstStr) {
10396             FirstLoc = FirstStr->getBeginLoc();
10397             FirstRange = FirstStr->getSourceRange();
10398           } else {
10399             FirstLoc = FirstSA->getBeginLoc();
10400             FirstRange = FirstSA->getSourceRange();
10401           }
10402           if (SecondStr) {
10403             SecondLoc = SecondStr->getBeginLoc();
10404             SecondRange = SecondStr->getSourceRange();
10405           } else {
10406             SecondLoc = SecondSA->getBeginLoc();
10407             SecondRange = SecondSA->getSourceRange();
10408           }
10409           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10410                            StaticAssertOnlyMessage)
10411               << (FirstStr == nullptr);
10412           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10413                           StaticAssertOnlyMessage)
10414               << (SecondStr == nullptr);
10415           Diagnosed = true;
10416           break;
10417         }
10418 
10419         if (FirstStr && SecondStr &&
10420             FirstStr->getString() != SecondStr->getString()) {
10421           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10422                            FirstStr->getSourceRange(), StaticAssertMessage);
10423           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10424                           SecondStr->getSourceRange(), StaticAssertMessage);
10425           Diagnosed = true;
10426           break;
10427         }
10428         break;
10429       }
10430       case Field: {
10431         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10432                                  cast<FieldDecl>(FirstDecl),
10433                                  cast<FieldDecl>(SecondDecl));
10434         break;
10435       }
10436       case CXXMethod: {
10437         enum {
10438           DiagMethod,
10439           DiagConstructor,
10440           DiagDestructor,
10441         } FirstMethodType,
10442             SecondMethodType;
10443         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10444           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10445           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10446           return DiagMethod;
10447         };
10448         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10449         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10450         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10451         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10452         auto FirstName = FirstMethod->getDeclName();
10453         auto SecondName = SecondMethod->getDeclName();
10454         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10455           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10456                            FirstMethod->getSourceRange(), MethodName)
10457               << FirstMethodType << FirstName;
10458           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10459                           SecondMethod->getSourceRange(), MethodName)
10460               << SecondMethodType << SecondName;
10461 
10462           Diagnosed = true;
10463           break;
10464         }
10465 
10466         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10467         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10468         if (FirstDeleted != SecondDeleted) {
10469           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10470                            FirstMethod->getSourceRange(), MethodDeleted)
10471               << FirstMethodType << FirstName << FirstDeleted;
10472 
10473           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10474                           SecondMethod->getSourceRange(), MethodDeleted)
10475               << SecondMethodType << SecondName << SecondDeleted;
10476           Diagnosed = true;
10477           break;
10478         }
10479 
10480         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10481         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10482         if (FirstDefaulted != SecondDefaulted) {
10483           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10484                            FirstMethod->getSourceRange(), MethodDefaulted)
10485               << FirstMethodType << FirstName << FirstDefaulted;
10486 
10487           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10488                           SecondMethod->getSourceRange(), MethodDefaulted)
10489               << SecondMethodType << SecondName << SecondDefaulted;
10490           Diagnosed = true;
10491           break;
10492         }
10493 
10494         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10495         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10496         const bool FirstPure = FirstMethod->isPure();
10497         const bool SecondPure = SecondMethod->isPure();
10498         if ((FirstVirtual || SecondVirtual) &&
10499             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10500           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10501                            FirstMethod->getSourceRange(), MethodVirtual)
10502               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10503           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10504                           SecondMethod->getSourceRange(), MethodVirtual)
10505               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10506           Diagnosed = true;
10507           break;
10508         }
10509 
10510         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10511         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10512         // class needs to be checked instead.
10513         const auto FirstStorage = FirstMethod->getStorageClass();
10514         const auto SecondStorage = SecondMethod->getStorageClass();
10515         const bool FirstStatic = FirstStorage == SC_Static;
10516         const bool SecondStatic = SecondStorage == SC_Static;
10517         if (FirstStatic != SecondStatic) {
10518           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10519                            FirstMethod->getSourceRange(), MethodStatic)
10520               << FirstMethodType << FirstName << FirstStatic;
10521           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10522                           SecondMethod->getSourceRange(), MethodStatic)
10523               << SecondMethodType << SecondName << SecondStatic;
10524           Diagnosed = true;
10525           break;
10526         }
10527 
10528         const bool FirstVolatile = FirstMethod->isVolatile();
10529         const bool SecondVolatile = SecondMethod->isVolatile();
10530         if (FirstVolatile != SecondVolatile) {
10531           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10532                            FirstMethod->getSourceRange(), MethodVolatile)
10533               << FirstMethodType << FirstName << FirstVolatile;
10534           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10535                           SecondMethod->getSourceRange(), MethodVolatile)
10536               << SecondMethodType << SecondName << SecondVolatile;
10537           Diagnosed = true;
10538           break;
10539         }
10540 
10541         const bool FirstConst = FirstMethod->isConst();
10542         const bool SecondConst = SecondMethod->isConst();
10543         if (FirstConst != SecondConst) {
10544           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10545                            FirstMethod->getSourceRange(), MethodConst)
10546               << FirstMethodType << FirstName << FirstConst;
10547           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10548                           SecondMethod->getSourceRange(), MethodConst)
10549               << SecondMethodType << SecondName << SecondConst;
10550           Diagnosed = true;
10551           break;
10552         }
10553 
10554         const bool FirstInline = FirstMethod->isInlineSpecified();
10555         const bool SecondInline = SecondMethod->isInlineSpecified();
10556         if (FirstInline != SecondInline) {
10557           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10558                            FirstMethod->getSourceRange(), MethodInline)
10559               << FirstMethodType << FirstName << FirstInline;
10560           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10561                           SecondMethod->getSourceRange(), MethodInline)
10562               << SecondMethodType << SecondName << SecondInline;
10563           Diagnosed = true;
10564           break;
10565         }
10566 
10567         const unsigned FirstNumParameters = FirstMethod->param_size();
10568         const unsigned SecondNumParameters = SecondMethod->param_size();
10569         if (FirstNumParameters != SecondNumParameters) {
10570           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10571                            FirstMethod->getSourceRange(),
10572                            MethodNumberParameters)
10573               << FirstMethodType << FirstName << FirstNumParameters;
10574           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10575                           SecondMethod->getSourceRange(),
10576                           MethodNumberParameters)
10577               << SecondMethodType << SecondName << SecondNumParameters;
10578           Diagnosed = true;
10579           break;
10580         }
10581 
10582         // Need this status boolean to know when break out of the switch.
10583         bool ParameterMismatch = false;
10584         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10585           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10586           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10587 
10588           QualType FirstParamType = FirstParam->getType();
10589           QualType SecondParamType = SecondParam->getType();
10590           if (FirstParamType != SecondParamType &&
10591               ComputeQualTypeODRHash(FirstParamType) !=
10592                   ComputeQualTypeODRHash(SecondParamType)) {
10593             if (const DecayedType *ParamDecayedType =
10594                     FirstParamType->getAs<DecayedType>()) {
10595               ODRDiagDeclError(
10596                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10597                   FirstMethod->getSourceRange(), MethodParameterType)
10598                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10599                   << true << ParamDecayedType->getOriginalType();
10600             } else {
10601               ODRDiagDeclError(
10602                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10603                   FirstMethod->getSourceRange(), MethodParameterType)
10604                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10605                   << false;
10606             }
10607 
10608             if (const DecayedType *ParamDecayedType =
10609                     SecondParamType->getAs<DecayedType>()) {
10610               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10611                               SecondMethod->getSourceRange(),
10612                               MethodParameterType)
10613                   << SecondMethodType << SecondName << (I + 1)
10614                   << SecondParamType << true
10615                   << ParamDecayedType->getOriginalType();
10616             } else {
10617               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10618                               SecondMethod->getSourceRange(),
10619                               MethodParameterType)
10620                   << SecondMethodType << SecondName << (I + 1)
10621                   << SecondParamType << false;
10622             }
10623             ParameterMismatch = true;
10624             break;
10625           }
10626 
10627           DeclarationName FirstParamName = FirstParam->getDeclName();
10628           DeclarationName SecondParamName = SecondParam->getDeclName();
10629           if (FirstParamName != SecondParamName) {
10630             ODRDiagDeclError(FirstRecord, FirstModule,
10631                              FirstMethod->getLocation(),
10632                              FirstMethod->getSourceRange(), MethodParameterName)
10633                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10634             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10635                             SecondMethod->getSourceRange(), MethodParameterName)
10636                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10637             ParameterMismatch = true;
10638             break;
10639           }
10640 
10641           const Expr *FirstInit = FirstParam->getInit();
10642           const Expr *SecondInit = SecondParam->getInit();
10643           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10644             ODRDiagDeclError(FirstRecord, FirstModule,
10645                              FirstMethod->getLocation(),
10646                              FirstMethod->getSourceRange(),
10647                              MethodParameterSingleDefaultArgument)
10648                 << FirstMethodType << FirstName << (I + 1)
10649                 << (FirstInit == nullptr)
10650                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10651             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10652                             SecondMethod->getSourceRange(),
10653                             MethodParameterSingleDefaultArgument)
10654                 << SecondMethodType << SecondName << (I + 1)
10655                 << (SecondInit == nullptr)
10656                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10657             ParameterMismatch = true;
10658             break;
10659           }
10660 
10661           if (FirstInit && SecondInit &&
10662               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10663             ODRDiagDeclError(FirstRecord, FirstModule,
10664                              FirstMethod->getLocation(),
10665                              FirstMethod->getSourceRange(),
10666                              MethodParameterDifferentDefaultArgument)
10667                 << FirstMethodType << FirstName << (I + 1)
10668                 << FirstInit->getSourceRange();
10669             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10670                             SecondMethod->getSourceRange(),
10671                             MethodParameterDifferentDefaultArgument)
10672                 << SecondMethodType << SecondName << (I + 1)
10673                 << SecondInit->getSourceRange();
10674             ParameterMismatch = true;
10675             break;
10676 
10677           }
10678         }
10679 
10680         if (ParameterMismatch) {
10681           Diagnosed = true;
10682           break;
10683         }
10684 
10685         const auto *FirstTemplateArgs =
10686             FirstMethod->getTemplateSpecializationArgs();
10687         const auto *SecondTemplateArgs =
10688             SecondMethod->getTemplateSpecializationArgs();
10689 
10690         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10691             (!FirstTemplateArgs && SecondTemplateArgs)) {
10692           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10693                            FirstMethod->getSourceRange(),
10694                            MethodNoTemplateArguments)
10695               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10696           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10697                           SecondMethod->getSourceRange(),
10698                           MethodNoTemplateArguments)
10699               << SecondMethodType << SecondName
10700               << (SecondTemplateArgs != nullptr);
10701 
10702           Diagnosed = true;
10703           break;
10704         }
10705 
10706         if (FirstTemplateArgs && SecondTemplateArgs) {
10707           // Remove pack expansions from argument list.
10708           auto ExpandTemplateArgumentList =
10709               [](const TemplateArgumentList *TAL) {
10710                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10711                 for (const TemplateArgument &TA : TAL->asArray()) {
10712                   if (TA.getKind() != TemplateArgument::Pack) {
10713                     ExpandedList.push_back(&TA);
10714                     continue;
10715                   }
10716                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10717                     ExpandedList.push_back(&PackTA);
10718                   }
10719                 }
10720                 return ExpandedList;
10721               };
10722           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10723               ExpandTemplateArgumentList(FirstTemplateArgs);
10724           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10725               ExpandTemplateArgumentList(SecondTemplateArgs);
10726 
10727           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10728             ODRDiagDeclError(FirstRecord, FirstModule,
10729                              FirstMethod->getLocation(),
10730                              FirstMethod->getSourceRange(),
10731                              MethodDifferentNumberTemplateArguments)
10732                 << FirstMethodType << FirstName
10733                 << (unsigned)FirstExpandedList.size();
10734             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10735                             SecondMethod->getSourceRange(),
10736                             MethodDifferentNumberTemplateArguments)
10737                 << SecondMethodType << SecondName
10738                 << (unsigned)SecondExpandedList.size();
10739 
10740             Diagnosed = true;
10741             break;
10742           }
10743 
10744           bool TemplateArgumentMismatch = false;
10745           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10746             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10747                                    &SecondTA = *SecondExpandedList[i];
10748             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10749                 ComputeTemplateArgumentODRHash(SecondTA)) {
10750               continue;
10751             }
10752 
10753             ODRDiagDeclError(
10754                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10755                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10756                 << FirstMethodType << FirstName << FirstTA << i + 1;
10757             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10758                             SecondMethod->getSourceRange(),
10759                             MethodDifferentTemplateArgument)
10760                 << SecondMethodType << SecondName << SecondTA << i + 1;
10761 
10762             TemplateArgumentMismatch = true;
10763             break;
10764           }
10765 
10766           if (TemplateArgumentMismatch) {
10767             Diagnosed = true;
10768             break;
10769           }
10770         }
10771 
10772         // Compute the hash of the method as if it has no body.
10773         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10774           Hash.clear();
10775           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10776           return Hash.CalculateHash();
10777         };
10778 
10779         // Compare the hash generated to the hash stored.  A difference means
10780         // that a body was present in the original source.  Due to merging,
10781         // the stardard way of detecting a body will not work.
10782         const bool HasFirstBody =
10783             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10784         const bool HasSecondBody =
10785             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10786 
10787         if (HasFirstBody != HasSecondBody) {
10788           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10789                            FirstMethod->getSourceRange(), MethodSingleBody)
10790               << FirstMethodType << FirstName << HasFirstBody;
10791           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10792                           SecondMethod->getSourceRange(), MethodSingleBody)
10793               << SecondMethodType << SecondName << HasSecondBody;
10794           Diagnosed = true;
10795           break;
10796         }
10797 
10798         if (HasFirstBody && HasSecondBody) {
10799           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10800                            FirstMethod->getSourceRange(), MethodDifferentBody)
10801               << FirstMethodType << FirstName;
10802           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10803                           SecondMethod->getSourceRange(), MethodDifferentBody)
10804               << SecondMethodType << SecondName;
10805           Diagnosed = true;
10806           break;
10807         }
10808 
10809         break;
10810       }
10811       case TypeAlias:
10812       case TypeDef: {
10813         Diagnosed = ODRDiagTypeDefOrAlias(
10814             FirstRecord, FirstModule, SecondModule,
10815             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10816             FirstDiffType == TypeAlias);
10817         break;
10818       }
10819       case Var: {
10820         Diagnosed =
10821             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10822                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10823         break;
10824       }
10825       case Friend: {
10826         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10827         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10828 
10829         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10830         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10831 
10832         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10833         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10834 
10835         if (FirstND && SecondND) {
10836           ODRDiagDeclError(FirstRecord, FirstModule,
10837                            FirstFriend->getFriendLoc(),
10838                            FirstFriend->getSourceRange(), FriendFunction)
10839               << FirstND;
10840           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10841                           SecondFriend->getSourceRange(), FriendFunction)
10842               << SecondND;
10843 
10844           Diagnosed = true;
10845           break;
10846         }
10847 
10848         if (FirstTSI && SecondTSI) {
10849           QualType FirstFriendType = FirstTSI->getType();
10850           QualType SecondFriendType = SecondTSI->getType();
10851           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10852                  ComputeQualTypeODRHash(SecondFriendType));
10853           ODRDiagDeclError(FirstRecord, FirstModule,
10854                            FirstFriend->getFriendLoc(),
10855                            FirstFriend->getSourceRange(), FriendType)
10856               << FirstFriendType;
10857           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10858                           SecondFriend->getSourceRange(), FriendType)
10859               << SecondFriendType;
10860           Diagnosed = true;
10861           break;
10862         }
10863 
10864         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10865                          FirstFriend->getSourceRange(), FriendTypeFunction)
10866             << (FirstTSI == nullptr);
10867         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10868                         SecondFriend->getSourceRange(), FriendTypeFunction)
10869             << (SecondTSI == nullptr);
10870 
10871         Diagnosed = true;
10872         break;
10873       }
10874       case FunctionTemplate: {
10875         FunctionTemplateDecl *FirstTemplate =
10876             cast<FunctionTemplateDecl>(FirstDecl);
10877         FunctionTemplateDecl *SecondTemplate =
10878             cast<FunctionTemplateDecl>(SecondDecl);
10879 
10880         TemplateParameterList *FirstTPL =
10881             FirstTemplate->getTemplateParameters();
10882         TemplateParameterList *SecondTPL =
10883             SecondTemplate->getTemplateParameters();
10884 
10885         if (FirstTPL->size() != SecondTPL->size()) {
10886           ODRDiagDeclError(FirstRecord, FirstModule,
10887                            FirstTemplate->getLocation(),
10888                            FirstTemplate->getSourceRange(),
10889                            FunctionTemplateDifferentNumberParameters)
10890               << FirstTemplate << FirstTPL->size();
10891           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10892                           SecondTemplate->getSourceRange(),
10893                           FunctionTemplateDifferentNumberParameters)
10894               << SecondTemplate << SecondTPL->size();
10895 
10896           Diagnosed = true;
10897           break;
10898         }
10899 
10900         bool ParameterMismatch = false;
10901         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10902           NamedDecl *FirstParam = FirstTPL->getParam(i);
10903           NamedDecl *SecondParam = SecondTPL->getParam(i);
10904 
10905           if (FirstParam->getKind() != SecondParam->getKind()) {
10906             enum {
10907               TemplateTypeParameter,
10908               NonTypeTemplateParameter,
10909               TemplateTemplateParameter,
10910             };
10911             auto GetParamType = [](NamedDecl *D) {
10912               switch (D->getKind()) {
10913                 default:
10914                   llvm_unreachable("Unexpected template parameter type");
10915                 case Decl::TemplateTypeParm:
10916                   return TemplateTypeParameter;
10917                 case Decl::NonTypeTemplateParm:
10918                   return NonTypeTemplateParameter;
10919                 case Decl::TemplateTemplateParm:
10920                   return TemplateTemplateParameter;
10921               }
10922             };
10923 
10924             ODRDiagDeclError(FirstRecord, FirstModule,
10925                              FirstTemplate->getLocation(),
10926                              FirstTemplate->getSourceRange(),
10927                              FunctionTemplateParameterDifferentKind)
10928                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10929             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10930                             SecondTemplate->getSourceRange(),
10931                             FunctionTemplateParameterDifferentKind)
10932                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10933 
10934             ParameterMismatch = true;
10935             break;
10936           }
10937 
10938           if (FirstParam->getName() != SecondParam->getName()) {
10939             ODRDiagDeclError(
10940                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10941                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10942                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10943                 << FirstParam;
10944             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10945                             SecondTemplate->getSourceRange(),
10946                             FunctionTemplateParameterName)
10947                 << SecondTemplate << (i + 1)
10948                 << (bool)SecondParam->getIdentifier() << SecondParam;
10949             ParameterMismatch = true;
10950             break;
10951           }
10952 
10953           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10954               isa<TemplateTypeParmDecl>(SecondParam)) {
10955             TemplateTypeParmDecl *FirstTTPD =
10956                 cast<TemplateTypeParmDecl>(FirstParam);
10957             TemplateTypeParmDecl *SecondTTPD =
10958                 cast<TemplateTypeParmDecl>(SecondParam);
10959             bool HasFirstDefaultArgument =
10960                 FirstTTPD->hasDefaultArgument() &&
10961                 !FirstTTPD->defaultArgumentWasInherited();
10962             bool HasSecondDefaultArgument =
10963                 SecondTTPD->hasDefaultArgument() &&
10964                 !SecondTTPD->defaultArgumentWasInherited();
10965             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10966               ODRDiagDeclError(FirstRecord, FirstModule,
10967                                FirstTemplate->getLocation(),
10968                                FirstTemplate->getSourceRange(),
10969                                FunctionTemplateParameterSingleDefaultArgument)
10970                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10971               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10972                               SecondTemplate->getSourceRange(),
10973                               FunctionTemplateParameterSingleDefaultArgument)
10974                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10975               ParameterMismatch = true;
10976               break;
10977             }
10978 
10979             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10980               QualType FirstType = FirstTTPD->getDefaultArgument();
10981               QualType SecondType = SecondTTPD->getDefaultArgument();
10982               if (ComputeQualTypeODRHash(FirstType) !=
10983                   ComputeQualTypeODRHash(SecondType)) {
10984                 ODRDiagDeclError(
10985                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10986                     FirstTemplate->getSourceRange(),
10987                     FunctionTemplateParameterDifferentDefaultArgument)
10988                     << FirstTemplate << (i + 1) << FirstType;
10989                 ODRDiagDeclNote(
10990                     SecondModule, SecondTemplate->getLocation(),
10991                     SecondTemplate->getSourceRange(),
10992                     FunctionTemplateParameterDifferentDefaultArgument)
10993                     << SecondTemplate << (i + 1) << SecondType;
10994                 ParameterMismatch = true;
10995                 break;
10996               }
10997             }
10998 
10999             if (FirstTTPD->isParameterPack() !=
11000                 SecondTTPD->isParameterPack()) {
11001               ODRDiagDeclError(FirstRecord, FirstModule,
11002                                FirstTemplate->getLocation(),
11003                                FirstTemplate->getSourceRange(),
11004                                FunctionTemplatePackParameter)
11005                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11006               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11007                               SecondTemplate->getSourceRange(),
11008                               FunctionTemplatePackParameter)
11009                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11010               ParameterMismatch = true;
11011               break;
11012             }
11013           }
11014 
11015           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11016               isa<TemplateTemplateParmDecl>(SecondParam)) {
11017             TemplateTemplateParmDecl *FirstTTPD =
11018                 cast<TemplateTemplateParmDecl>(FirstParam);
11019             TemplateTemplateParmDecl *SecondTTPD =
11020                 cast<TemplateTemplateParmDecl>(SecondParam);
11021 
11022             TemplateParameterList *FirstTPL =
11023                 FirstTTPD->getTemplateParameters();
11024             TemplateParameterList *SecondTPL =
11025                 SecondTTPD->getTemplateParameters();
11026 
11027             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11028                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11029               ODRDiagDeclError(FirstRecord, FirstModule,
11030                                FirstTemplate->getLocation(),
11031                                FirstTemplate->getSourceRange(),
11032                                FunctionTemplateParameterDifferentType)
11033                   << FirstTemplate << (i + 1);
11034               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11035                               SecondTemplate->getSourceRange(),
11036                               FunctionTemplateParameterDifferentType)
11037                   << SecondTemplate << (i + 1);
11038               ParameterMismatch = true;
11039               break;
11040             }
11041 
11042             bool HasFirstDefaultArgument =
11043                 FirstTTPD->hasDefaultArgument() &&
11044                 !FirstTTPD->defaultArgumentWasInherited();
11045             bool HasSecondDefaultArgument =
11046                 SecondTTPD->hasDefaultArgument() &&
11047                 !SecondTTPD->defaultArgumentWasInherited();
11048             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11049               ODRDiagDeclError(FirstRecord, FirstModule,
11050                                FirstTemplate->getLocation(),
11051                                FirstTemplate->getSourceRange(),
11052                                FunctionTemplateParameterSingleDefaultArgument)
11053                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11054               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11055                               SecondTemplate->getSourceRange(),
11056                               FunctionTemplateParameterSingleDefaultArgument)
11057                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11058               ParameterMismatch = true;
11059               break;
11060             }
11061 
11062             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11063               TemplateArgument FirstTA =
11064                   FirstTTPD->getDefaultArgument().getArgument();
11065               TemplateArgument SecondTA =
11066                   SecondTTPD->getDefaultArgument().getArgument();
11067               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11068                   ComputeTemplateArgumentODRHash(SecondTA)) {
11069                 ODRDiagDeclError(
11070                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11071                     FirstTemplate->getSourceRange(),
11072                     FunctionTemplateParameterDifferentDefaultArgument)
11073                     << FirstTemplate << (i + 1) << FirstTA;
11074                 ODRDiagDeclNote(
11075                     SecondModule, SecondTemplate->getLocation(),
11076                     SecondTemplate->getSourceRange(),
11077                     FunctionTemplateParameterDifferentDefaultArgument)
11078                     << SecondTemplate << (i + 1) << SecondTA;
11079                 ParameterMismatch = true;
11080                 break;
11081               }
11082             }
11083 
11084             if (FirstTTPD->isParameterPack() !=
11085                 SecondTTPD->isParameterPack()) {
11086               ODRDiagDeclError(FirstRecord, FirstModule,
11087                                FirstTemplate->getLocation(),
11088                                FirstTemplate->getSourceRange(),
11089                                FunctionTemplatePackParameter)
11090                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11091               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11092                               SecondTemplate->getSourceRange(),
11093                               FunctionTemplatePackParameter)
11094                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11095               ParameterMismatch = true;
11096               break;
11097             }
11098           }
11099 
11100           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11101               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11102             NonTypeTemplateParmDecl *FirstNTTPD =
11103                 cast<NonTypeTemplateParmDecl>(FirstParam);
11104             NonTypeTemplateParmDecl *SecondNTTPD =
11105                 cast<NonTypeTemplateParmDecl>(SecondParam);
11106 
11107             QualType FirstType = FirstNTTPD->getType();
11108             QualType SecondType = SecondNTTPD->getType();
11109             if (ComputeQualTypeODRHash(FirstType) !=
11110                 ComputeQualTypeODRHash(SecondType)) {
11111               ODRDiagDeclError(FirstRecord, FirstModule,
11112                                FirstTemplate->getLocation(),
11113                                FirstTemplate->getSourceRange(),
11114                                FunctionTemplateParameterDifferentType)
11115                   << FirstTemplate << (i + 1);
11116               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11117                               SecondTemplate->getSourceRange(),
11118                               FunctionTemplateParameterDifferentType)
11119                   << SecondTemplate << (i + 1);
11120               ParameterMismatch = true;
11121               break;
11122             }
11123 
11124             bool HasFirstDefaultArgument =
11125                 FirstNTTPD->hasDefaultArgument() &&
11126                 !FirstNTTPD->defaultArgumentWasInherited();
11127             bool HasSecondDefaultArgument =
11128                 SecondNTTPD->hasDefaultArgument() &&
11129                 !SecondNTTPD->defaultArgumentWasInherited();
11130             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11131               ODRDiagDeclError(FirstRecord, FirstModule,
11132                                FirstTemplate->getLocation(),
11133                                FirstTemplate->getSourceRange(),
11134                                FunctionTemplateParameterSingleDefaultArgument)
11135                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11136               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11137                               SecondTemplate->getSourceRange(),
11138                               FunctionTemplateParameterSingleDefaultArgument)
11139                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11140               ParameterMismatch = true;
11141               break;
11142             }
11143 
11144             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11145               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11146               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11147               if (ComputeODRHash(FirstDefaultArgument) !=
11148                   ComputeODRHash(SecondDefaultArgument)) {
11149                 ODRDiagDeclError(
11150                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11151                     FirstTemplate->getSourceRange(),
11152                     FunctionTemplateParameterDifferentDefaultArgument)
11153                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11154                 ODRDiagDeclNote(
11155                     SecondModule, SecondTemplate->getLocation(),
11156                     SecondTemplate->getSourceRange(),
11157                     FunctionTemplateParameterDifferentDefaultArgument)
11158                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11159                 ParameterMismatch = true;
11160                 break;
11161               }
11162             }
11163 
11164             if (FirstNTTPD->isParameterPack() !=
11165                 SecondNTTPD->isParameterPack()) {
11166               ODRDiagDeclError(FirstRecord, FirstModule,
11167                                FirstTemplate->getLocation(),
11168                                FirstTemplate->getSourceRange(),
11169                                FunctionTemplatePackParameter)
11170                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11171               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11172                               SecondTemplate->getSourceRange(),
11173                               FunctionTemplatePackParameter)
11174                   << SecondTemplate << (i + 1)
11175                   << SecondNTTPD->isParameterPack();
11176               ParameterMismatch = true;
11177               break;
11178             }
11179           }
11180         }
11181 
11182         if (ParameterMismatch) {
11183           Diagnosed = true;
11184           break;
11185         }
11186 
11187         break;
11188       }
11189       }
11190 
11191       if (Diagnosed)
11192         continue;
11193 
11194       Diag(FirstDecl->getLocation(),
11195            diag::err_module_odr_violation_mismatch_decl_unknown)
11196           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11197           << FirstDecl->getSourceRange();
11198       Diag(SecondDecl->getLocation(),
11199            diag::note_module_odr_violation_mismatch_decl_unknown)
11200           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11201       Diagnosed = true;
11202     }
11203 
11204     if (!Diagnosed) {
11205       // All definitions are updates to the same declaration. This happens if a
11206       // module instantiates the declaration of a class template specialization
11207       // and two or more other modules instantiate its definition.
11208       //
11209       // FIXME: Indicate which modules had instantiations of this definition.
11210       // FIXME: How can this even happen?
11211       Diag(Merge.first->getLocation(),
11212            diag::err_module_odr_violation_different_instantiations)
11213         << Merge.first;
11214     }
11215   }
11216 
11217   // Issue ODR failures diagnostics for functions.
11218   for (auto &Merge : FunctionOdrMergeFailures) {
11219     enum ODRFunctionDifference {
11220       ReturnType,
11221       ParameterName,
11222       ParameterType,
11223       ParameterSingleDefaultArgument,
11224       ParameterDifferentDefaultArgument,
11225       FunctionBody,
11226     };
11227 
11228     FunctionDecl *FirstFunction = Merge.first;
11229     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11230 
11231     bool Diagnosed = false;
11232     for (auto &SecondFunction : Merge.second) {
11233 
11234       if (FirstFunction == SecondFunction)
11235         continue;
11236 
11237       std::string SecondModule =
11238           getOwningModuleNameForDiagnostic(SecondFunction);
11239 
11240       auto ODRDiagError = [FirstFunction, &FirstModule,
11241                            this](SourceLocation Loc, SourceRange Range,
11242                                  ODRFunctionDifference DiffType) {
11243         return Diag(Loc, diag::err_module_odr_violation_function)
11244                << FirstFunction << FirstModule.empty() << FirstModule << Range
11245                << DiffType;
11246       };
11247       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11248                                                SourceRange Range,
11249                                                ODRFunctionDifference DiffType) {
11250         return Diag(Loc, diag::note_module_odr_violation_function)
11251                << SecondModule << Range << DiffType;
11252       };
11253 
11254       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11255           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11256         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11257                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11258             << FirstFunction->getReturnType();
11259         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11260                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11261             << SecondFunction->getReturnType();
11262         Diagnosed = true;
11263         break;
11264       }
11265 
11266       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11267              "Merged functions with different number of parameters");
11268 
11269       auto ParamSize = FirstFunction->param_size();
11270       bool ParameterMismatch = false;
11271       for (unsigned I = 0; I < ParamSize; ++I) {
11272         auto *FirstParam = FirstFunction->getParamDecl(I);
11273         auto *SecondParam = SecondFunction->getParamDecl(I);
11274 
11275         assert(getContext().hasSameType(FirstParam->getType(),
11276                                       SecondParam->getType()) &&
11277                "Merged function has different parameter types.");
11278 
11279         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11280           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11281                        ParameterName)
11282               << I + 1 << FirstParam->getDeclName();
11283           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11284                       ParameterName)
11285               << I + 1 << SecondParam->getDeclName();
11286           ParameterMismatch = true;
11287           break;
11288         };
11289 
11290         QualType FirstParamType = FirstParam->getType();
11291         QualType SecondParamType = SecondParam->getType();
11292         if (FirstParamType != SecondParamType &&
11293             ComputeQualTypeODRHash(FirstParamType) !=
11294                 ComputeQualTypeODRHash(SecondParamType)) {
11295           if (const DecayedType *ParamDecayedType =
11296                   FirstParamType->getAs<DecayedType>()) {
11297             ODRDiagError(FirstParam->getLocation(),
11298                          FirstParam->getSourceRange(), ParameterType)
11299                 << (I + 1) << FirstParamType << true
11300                 << ParamDecayedType->getOriginalType();
11301           } else {
11302             ODRDiagError(FirstParam->getLocation(),
11303                          FirstParam->getSourceRange(), ParameterType)
11304                 << (I + 1) << FirstParamType << false;
11305           }
11306 
11307           if (const DecayedType *ParamDecayedType =
11308                   SecondParamType->getAs<DecayedType>()) {
11309             ODRDiagNote(SecondParam->getLocation(),
11310                         SecondParam->getSourceRange(), ParameterType)
11311                 << (I + 1) << SecondParamType << true
11312                 << ParamDecayedType->getOriginalType();
11313           } else {
11314             ODRDiagNote(SecondParam->getLocation(),
11315                         SecondParam->getSourceRange(), ParameterType)
11316                 << (I + 1) << SecondParamType << false;
11317           }
11318           ParameterMismatch = true;
11319           break;
11320         }
11321 
11322         const Expr *FirstInit = FirstParam->getInit();
11323         const Expr *SecondInit = SecondParam->getInit();
11324         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11325           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11326                        ParameterSingleDefaultArgument)
11327               << (I + 1) << (FirstInit == nullptr)
11328               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11329           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11330                       ParameterSingleDefaultArgument)
11331               << (I + 1) << (SecondInit == nullptr)
11332               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11333           ParameterMismatch = true;
11334           break;
11335         }
11336 
11337         if (FirstInit && SecondInit &&
11338             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11339           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11340                        ParameterDifferentDefaultArgument)
11341               << (I + 1) << FirstInit->getSourceRange();
11342           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11343                       ParameterDifferentDefaultArgument)
11344               << (I + 1) << SecondInit->getSourceRange();
11345           ParameterMismatch = true;
11346           break;
11347         }
11348 
11349         assert(ComputeSubDeclODRHash(FirstParam) ==
11350                    ComputeSubDeclODRHash(SecondParam) &&
11351                "Undiagnosed parameter difference.");
11352       }
11353 
11354       if (ParameterMismatch) {
11355         Diagnosed = true;
11356         break;
11357       }
11358 
11359       // If no error has been generated before now, assume the problem is in
11360       // the body and generate a message.
11361       ODRDiagError(FirstFunction->getLocation(),
11362                    FirstFunction->getSourceRange(), FunctionBody);
11363       ODRDiagNote(SecondFunction->getLocation(),
11364                   SecondFunction->getSourceRange(), FunctionBody);
11365       Diagnosed = true;
11366       break;
11367     }
11368     (void)Diagnosed;
11369     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11370   }
11371 
11372   // Issue ODR failures diagnostics for enums.
11373   for (auto &Merge : EnumOdrMergeFailures) {
11374     enum ODREnumDifference {
11375       SingleScopedEnum,
11376       EnumTagKeywordMismatch,
11377       SingleSpecifiedType,
11378       DifferentSpecifiedTypes,
11379       DifferentNumberEnumConstants,
11380       EnumConstantName,
11381       EnumConstantSingleInitilizer,
11382       EnumConstantDifferentInitilizer,
11383     };
11384 
11385     // If we've already pointed out a specific problem with this enum, don't
11386     // bother issuing a general "something's different" diagnostic.
11387     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11388       continue;
11389 
11390     EnumDecl *FirstEnum = Merge.first;
11391     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11392 
11393     using DeclHashes =
11394         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11395     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11396                               DeclHashes &Hashes, EnumDecl *Enum) {
11397       for (auto *D : Enum->decls()) {
11398         // Due to decl merging, the first EnumDecl is the parent of
11399         // Decls in both records.
11400         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11401           continue;
11402         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11403         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11404                             ComputeSubDeclODRHash(D));
11405       }
11406     };
11407     DeclHashes FirstHashes;
11408     PopulateHashes(FirstHashes, FirstEnum);
11409     bool Diagnosed = false;
11410     for (auto &SecondEnum : Merge.second) {
11411 
11412       if (FirstEnum == SecondEnum)
11413         continue;
11414 
11415       std::string SecondModule =
11416           getOwningModuleNameForDiagnostic(SecondEnum);
11417 
11418       auto ODRDiagError = [FirstEnum, &FirstModule,
11419                            this](SourceLocation Loc, SourceRange Range,
11420                                  ODREnumDifference DiffType) {
11421         return Diag(Loc, diag::err_module_odr_violation_enum)
11422                << FirstEnum << FirstModule.empty() << FirstModule << Range
11423                << DiffType;
11424       };
11425       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11426                                                SourceRange Range,
11427                                                ODREnumDifference DiffType) {
11428         return Diag(Loc, diag::note_module_odr_violation_enum)
11429                << SecondModule << Range << DiffType;
11430       };
11431 
11432       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11433         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11434                      SingleScopedEnum)
11435             << FirstEnum->isScoped();
11436         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11437                     SingleScopedEnum)
11438             << SecondEnum->isScoped();
11439         Diagnosed = true;
11440         continue;
11441       }
11442 
11443       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11444         if (FirstEnum->isScopedUsingClassTag() !=
11445             SecondEnum->isScopedUsingClassTag()) {
11446           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11447                        EnumTagKeywordMismatch)
11448               << FirstEnum->isScopedUsingClassTag();
11449           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11450                       EnumTagKeywordMismatch)
11451               << SecondEnum->isScopedUsingClassTag();
11452           Diagnosed = true;
11453           continue;
11454         }
11455       }
11456 
11457       QualType FirstUnderlyingType =
11458           FirstEnum->getIntegerTypeSourceInfo()
11459               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11460               : QualType();
11461       QualType SecondUnderlyingType =
11462           SecondEnum->getIntegerTypeSourceInfo()
11463               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11464               : QualType();
11465       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11466           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11467                        SingleSpecifiedType)
11468               << !FirstUnderlyingType.isNull();
11469           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11470                       SingleSpecifiedType)
11471               << !SecondUnderlyingType.isNull();
11472           Diagnosed = true;
11473           continue;
11474       }
11475 
11476       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11477         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11478             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11479           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11480                        DifferentSpecifiedTypes)
11481               << FirstUnderlyingType;
11482           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11483                       DifferentSpecifiedTypes)
11484               << SecondUnderlyingType;
11485           Diagnosed = true;
11486           continue;
11487         }
11488       }
11489 
11490       DeclHashes SecondHashes;
11491       PopulateHashes(SecondHashes, SecondEnum);
11492 
11493       if (FirstHashes.size() != SecondHashes.size()) {
11494         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11495                      DifferentNumberEnumConstants)
11496             << (int)FirstHashes.size();
11497         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11498                     DifferentNumberEnumConstants)
11499             << (int)SecondHashes.size();
11500         Diagnosed = true;
11501         continue;
11502       }
11503 
11504       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11505         if (FirstHashes[I].second == SecondHashes[I].second)
11506           continue;
11507         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11508         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11509 
11510         if (FirstEnumConstant->getDeclName() !=
11511             SecondEnumConstant->getDeclName()) {
11512 
11513           ODRDiagError(FirstEnumConstant->getLocation(),
11514                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11515               << I + 1 << FirstEnumConstant;
11516           ODRDiagNote(SecondEnumConstant->getLocation(),
11517                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11518               << I + 1 << SecondEnumConstant;
11519           Diagnosed = true;
11520           break;
11521         }
11522 
11523         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11524         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11525         if (!FirstInit && !SecondInit)
11526           continue;
11527 
11528         if (!FirstInit || !SecondInit) {
11529           ODRDiagError(FirstEnumConstant->getLocation(),
11530                        FirstEnumConstant->getSourceRange(),
11531                        EnumConstantSingleInitilizer)
11532               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11533           ODRDiagNote(SecondEnumConstant->getLocation(),
11534                       SecondEnumConstant->getSourceRange(),
11535                       EnumConstantSingleInitilizer)
11536               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11537           Diagnosed = true;
11538           break;
11539         }
11540 
11541         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11542           ODRDiagError(FirstEnumConstant->getLocation(),
11543                        FirstEnumConstant->getSourceRange(),
11544                        EnumConstantDifferentInitilizer)
11545               << I + 1 << FirstEnumConstant;
11546           ODRDiagNote(SecondEnumConstant->getLocation(),
11547                       SecondEnumConstant->getSourceRange(),
11548                       EnumConstantDifferentInitilizer)
11549               << I + 1 << SecondEnumConstant;
11550           Diagnosed = true;
11551           break;
11552         }
11553       }
11554     }
11555 
11556     (void)Diagnosed;
11557     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11558   }
11559 }
11560 
11561 void ASTReader::StartedDeserializing() {
11562   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11563     ReadTimer->startTimer();
11564 }
11565 
11566 void ASTReader::FinishedDeserializing() {
11567   assert(NumCurrentElementsDeserializing &&
11568          "FinishedDeserializing not paired with StartedDeserializing");
11569   if (NumCurrentElementsDeserializing == 1) {
11570     // We decrease NumCurrentElementsDeserializing only after pending actions
11571     // are finished, to avoid recursively re-calling finishPendingActions().
11572     finishPendingActions();
11573   }
11574   --NumCurrentElementsDeserializing;
11575 
11576   if (NumCurrentElementsDeserializing == 0) {
11577     // Propagate exception specification and deduced type updates along
11578     // redeclaration chains.
11579     //
11580     // We do this now rather than in finishPendingActions because we want to
11581     // be able to walk the complete redeclaration chains of the updated decls.
11582     while (!PendingExceptionSpecUpdates.empty() ||
11583            !PendingDeducedTypeUpdates.empty()) {
11584       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11585       PendingExceptionSpecUpdates.clear();
11586       for (auto Update : ESUpdates) {
11587         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11588         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11589         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11590         if (auto *Listener = getContext().getASTMutationListener())
11591           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11592         for (auto *Redecl : Update.second->redecls())
11593           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11594       }
11595 
11596       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11597       PendingDeducedTypeUpdates.clear();
11598       for (auto Update : DTUpdates) {
11599         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11600         // FIXME: If the return type is already deduced, check that it matches.
11601         getContext().adjustDeducedFunctionResultType(Update.first,
11602                                                      Update.second);
11603       }
11604     }
11605 
11606     if (ReadTimer)
11607       ReadTimer->stopTimer();
11608 
11609     diagnoseOdrViolations();
11610 
11611     // We are not in recursive loading, so it's safe to pass the "interesting"
11612     // decls to the consumer.
11613     if (Consumer)
11614       PassInterestingDeclsToConsumer();
11615   }
11616 }
11617 
11618 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11619   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11620     // Remove any fake results before adding any real ones.
11621     auto It = PendingFakeLookupResults.find(II);
11622     if (It != PendingFakeLookupResults.end()) {
11623       for (auto *ND : It->second)
11624         SemaObj->IdResolver.RemoveDecl(ND);
11625       // FIXME: this works around module+PCH performance issue.
11626       // Rather than erase the result from the map, which is O(n), just clear
11627       // the vector of NamedDecls.
11628       It->second.clear();
11629     }
11630   }
11631 
11632   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11633     SemaObj->TUScope->AddDecl(D);
11634   } else if (SemaObj->TUScope) {
11635     // Adding the decl to IdResolver may have failed because it was already in
11636     // (even though it was not added in scope). If it is already in, make sure
11637     // it gets in the scope as well.
11638     if (std::find(SemaObj->IdResolver.begin(Name),
11639                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11640       SemaObj->TUScope->AddDecl(D);
11641   }
11642 }
11643 
11644 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11645                      ASTContext *Context,
11646                      const PCHContainerReader &PCHContainerRdr,
11647                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11648                      StringRef isysroot,
11649                      DisableValidationForModuleKind DisableValidationKind,
11650                      bool AllowASTWithCompilerErrors,
11651                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11652                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11653                      std::unique_ptr<llvm::Timer> ReadTimer)
11654     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11655                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11656                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11657       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11658       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11659       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11660                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11661       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11662       DisableValidationKind(DisableValidationKind),
11663       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11664       AllowConfigurationMismatch(AllowConfigurationMismatch),
11665       ValidateSystemInputs(ValidateSystemInputs),
11666       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11667       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11668   SourceMgr.setExternalSLocEntrySource(this);
11669 
11670   for (const auto &Ext : Extensions) {
11671     auto BlockName = Ext->getExtensionMetadata().BlockName;
11672     auto Known = ModuleFileExtensions.find(BlockName);
11673     if (Known != ModuleFileExtensions.end()) {
11674       Diags.Report(diag::warn_duplicate_module_file_extension)
11675         << BlockName;
11676       continue;
11677     }
11678 
11679     ModuleFileExtensions.insert({BlockName, Ext});
11680   }
11681 }
11682 
11683 ASTReader::~ASTReader() {
11684   if (OwnsDeserializationListener)
11685     delete DeserializationListener;
11686 }
11687 
11688 IdentifierResolver &ASTReader::getIdResolver() {
11689   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11690 }
11691 
11692 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11693                                                unsigned AbbrevID) {
11694   Idx = 0;
11695   Record.clear();
11696   return Cursor.readRecord(AbbrevID, Record);
11697 }
11698 //===----------------------------------------------------------------------===//
11699 //// OMPClauseReader implementation
11700 ////===----------------------------------------------------------------------===//
11701 
11702 // This has to be in namespace clang because it's friended by all
11703 // of the OMP clauses.
11704 namespace clang {
11705 
11706 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11707   ASTRecordReader &Record;
11708   ASTContext &Context;
11709 
11710 public:
11711   OMPClauseReader(ASTRecordReader &Record)
11712       : Record(Record), Context(Record.getContext()) {}
11713 #define GEN_CLANG_CLAUSE_CLASS
11714 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11715 #include "llvm/Frontend/OpenMP/OMP.inc"
11716   OMPClause *readClause();
11717   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11718   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11719 };
11720 
11721 } // end namespace clang
11722 
11723 OMPClause *ASTRecordReader::readOMPClause() {
11724   return OMPClauseReader(*this).readClause();
11725 }
11726 
11727 OMPClause *OMPClauseReader::readClause() {
11728   OMPClause *C = nullptr;
11729   switch (llvm::omp::Clause(Record.readInt())) {
11730   case llvm::omp::OMPC_if:
11731     C = new (Context) OMPIfClause();
11732     break;
11733   case llvm::omp::OMPC_final:
11734     C = new (Context) OMPFinalClause();
11735     break;
11736   case llvm::omp::OMPC_num_threads:
11737     C = new (Context) OMPNumThreadsClause();
11738     break;
11739   case llvm::omp::OMPC_safelen:
11740     C = new (Context) OMPSafelenClause();
11741     break;
11742   case llvm::omp::OMPC_simdlen:
11743     C = new (Context) OMPSimdlenClause();
11744     break;
11745   case llvm::omp::OMPC_sizes: {
11746     unsigned NumSizes = Record.readInt();
11747     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11748     break;
11749   }
11750   case llvm::omp::OMPC_full:
11751     C = OMPFullClause::CreateEmpty(Context);
11752     break;
11753   case llvm::omp::OMPC_partial:
11754     C = OMPPartialClause::CreateEmpty(Context);
11755     break;
11756   case llvm::omp::OMPC_allocator:
11757     C = new (Context) OMPAllocatorClause();
11758     break;
11759   case llvm::omp::OMPC_collapse:
11760     C = new (Context) OMPCollapseClause();
11761     break;
11762   case llvm::omp::OMPC_default:
11763     C = new (Context) OMPDefaultClause();
11764     break;
11765   case llvm::omp::OMPC_proc_bind:
11766     C = new (Context) OMPProcBindClause();
11767     break;
11768   case llvm::omp::OMPC_schedule:
11769     C = new (Context) OMPScheduleClause();
11770     break;
11771   case llvm::omp::OMPC_ordered:
11772     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11773     break;
11774   case llvm::omp::OMPC_nowait:
11775     C = new (Context) OMPNowaitClause();
11776     break;
11777   case llvm::omp::OMPC_untied:
11778     C = new (Context) OMPUntiedClause();
11779     break;
11780   case llvm::omp::OMPC_mergeable:
11781     C = new (Context) OMPMergeableClause();
11782     break;
11783   case llvm::omp::OMPC_read:
11784     C = new (Context) OMPReadClause();
11785     break;
11786   case llvm::omp::OMPC_write:
11787     C = new (Context) OMPWriteClause();
11788     break;
11789   case llvm::omp::OMPC_update:
11790     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11791     break;
11792   case llvm::omp::OMPC_capture:
11793     C = new (Context) OMPCaptureClause();
11794     break;
11795   case llvm::omp::OMPC_seq_cst:
11796     C = new (Context) OMPSeqCstClause();
11797     break;
11798   case llvm::omp::OMPC_acq_rel:
11799     C = new (Context) OMPAcqRelClause();
11800     break;
11801   case llvm::omp::OMPC_acquire:
11802     C = new (Context) OMPAcquireClause();
11803     break;
11804   case llvm::omp::OMPC_release:
11805     C = new (Context) OMPReleaseClause();
11806     break;
11807   case llvm::omp::OMPC_relaxed:
11808     C = new (Context) OMPRelaxedClause();
11809     break;
11810   case llvm::omp::OMPC_threads:
11811     C = new (Context) OMPThreadsClause();
11812     break;
11813   case llvm::omp::OMPC_simd:
11814     C = new (Context) OMPSIMDClause();
11815     break;
11816   case llvm::omp::OMPC_nogroup:
11817     C = new (Context) OMPNogroupClause();
11818     break;
11819   case llvm::omp::OMPC_unified_address:
11820     C = new (Context) OMPUnifiedAddressClause();
11821     break;
11822   case llvm::omp::OMPC_unified_shared_memory:
11823     C = new (Context) OMPUnifiedSharedMemoryClause();
11824     break;
11825   case llvm::omp::OMPC_reverse_offload:
11826     C = new (Context) OMPReverseOffloadClause();
11827     break;
11828   case llvm::omp::OMPC_dynamic_allocators:
11829     C = new (Context) OMPDynamicAllocatorsClause();
11830     break;
11831   case llvm::omp::OMPC_atomic_default_mem_order:
11832     C = new (Context) OMPAtomicDefaultMemOrderClause();
11833     break;
11834  case llvm::omp::OMPC_private:
11835     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11836     break;
11837   case llvm::omp::OMPC_firstprivate:
11838     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11839     break;
11840   case llvm::omp::OMPC_lastprivate:
11841     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11842     break;
11843   case llvm::omp::OMPC_shared:
11844     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11845     break;
11846   case llvm::omp::OMPC_reduction: {
11847     unsigned N = Record.readInt();
11848     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11849     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11850     break;
11851   }
11852   case llvm::omp::OMPC_task_reduction:
11853     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11854     break;
11855   case llvm::omp::OMPC_in_reduction:
11856     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11857     break;
11858   case llvm::omp::OMPC_linear:
11859     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11860     break;
11861   case llvm::omp::OMPC_aligned:
11862     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11863     break;
11864   case llvm::omp::OMPC_copyin:
11865     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11866     break;
11867   case llvm::omp::OMPC_copyprivate:
11868     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11869     break;
11870   case llvm::omp::OMPC_flush:
11871     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11872     break;
11873   case llvm::omp::OMPC_depobj:
11874     C = OMPDepobjClause::CreateEmpty(Context);
11875     break;
11876   case llvm::omp::OMPC_depend: {
11877     unsigned NumVars = Record.readInt();
11878     unsigned NumLoops = Record.readInt();
11879     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11880     break;
11881   }
11882   case llvm::omp::OMPC_device:
11883     C = new (Context) OMPDeviceClause();
11884     break;
11885   case llvm::omp::OMPC_map: {
11886     OMPMappableExprListSizeTy Sizes;
11887     Sizes.NumVars = Record.readInt();
11888     Sizes.NumUniqueDeclarations = Record.readInt();
11889     Sizes.NumComponentLists = Record.readInt();
11890     Sizes.NumComponents = Record.readInt();
11891     C = OMPMapClause::CreateEmpty(Context, Sizes);
11892     break;
11893   }
11894   case llvm::omp::OMPC_num_teams:
11895     C = new (Context) OMPNumTeamsClause();
11896     break;
11897   case llvm::omp::OMPC_thread_limit:
11898     C = new (Context) OMPThreadLimitClause();
11899     break;
11900   case llvm::omp::OMPC_priority:
11901     C = new (Context) OMPPriorityClause();
11902     break;
11903   case llvm::omp::OMPC_grainsize:
11904     C = new (Context) OMPGrainsizeClause();
11905     break;
11906   case llvm::omp::OMPC_num_tasks:
11907     C = new (Context) OMPNumTasksClause();
11908     break;
11909   case llvm::omp::OMPC_hint:
11910     C = new (Context) OMPHintClause();
11911     break;
11912   case llvm::omp::OMPC_dist_schedule:
11913     C = new (Context) OMPDistScheduleClause();
11914     break;
11915   case llvm::omp::OMPC_defaultmap:
11916     C = new (Context) OMPDefaultmapClause();
11917     break;
11918   case llvm::omp::OMPC_to: {
11919     OMPMappableExprListSizeTy Sizes;
11920     Sizes.NumVars = Record.readInt();
11921     Sizes.NumUniqueDeclarations = Record.readInt();
11922     Sizes.NumComponentLists = Record.readInt();
11923     Sizes.NumComponents = Record.readInt();
11924     C = OMPToClause::CreateEmpty(Context, Sizes);
11925     break;
11926   }
11927   case llvm::omp::OMPC_from: {
11928     OMPMappableExprListSizeTy Sizes;
11929     Sizes.NumVars = Record.readInt();
11930     Sizes.NumUniqueDeclarations = Record.readInt();
11931     Sizes.NumComponentLists = Record.readInt();
11932     Sizes.NumComponents = Record.readInt();
11933     C = OMPFromClause::CreateEmpty(Context, Sizes);
11934     break;
11935   }
11936   case llvm::omp::OMPC_use_device_ptr: {
11937     OMPMappableExprListSizeTy Sizes;
11938     Sizes.NumVars = Record.readInt();
11939     Sizes.NumUniqueDeclarations = Record.readInt();
11940     Sizes.NumComponentLists = Record.readInt();
11941     Sizes.NumComponents = Record.readInt();
11942     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11943     break;
11944   }
11945   case llvm::omp::OMPC_use_device_addr: {
11946     OMPMappableExprListSizeTy Sizes;
11947     Sizes.NumVars = Record.readInt();
11948     Sizes.NumUniqueDeclarations = Record.readInt();
11949     Sizes.NumComponentLists = Record.readInt();
11950     Sizes.NumComponents = Record.readInt();
11951     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11952     break;
11953   }
11954   case llvm::omp::OMPC_is_device_ptr: {
11955     OMPMappableExprListSizeTy Sizes;
11956     Sizes.NumVars = Record.readInt();
11957     Sizes.NumUniqueDeclarations = Record.readInt();
11958     Sizes.NumComponentLists = Record.readInt();
11959     Sizes.NumComponents = Record.readInt();
11960     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11961     break;
11962   }
11963   case llvm::omp::OMPC_allocate:
11964     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11965     break;
11966   case llvm::omp::OMPC_nontemporal:
11967     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11968     break;
11969   case llvm::omp::OMPC_inclusive:
11970     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11971     break;
11972   case llvm::omp::OMPC_exclusive:
11973     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11974     break;
11975   case llvm::omp::OMPC_order:
11976     C = new (Context) OMPOrderClause();
11977     break;
11978   case llvm::omp::OMPC_init:
11979     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11980     break;
11981   case llvm::omp::OMPC_use:
11982     C = new (Context) OMPUseClause();
11983     break;
11984   case llvm::omp::OMPC_destroy:
11985     C = new (Context) OMPDestroyClause();
11986     break;
11987   case llvm::omp::OMPC_novariants:
11988     C = new (Context) OMPNovariantsClause();
11989     break;
11990   case llvm::omp::OMPC_nocontext:
11991     C = new (Context) OMPNocontextClause();
11992     break;
11993   case llvm::omp::OMPC_detach:
11994     C = new (Context) OMPDetachClause();
11995     break;
11996   case llvm::omp::OMPC_uses_allocators:
11997     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11998     break;
11999   case llvm::omp::OMPC_affinity:
12000     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
12001     break;
12002   case llvm::omp::OMPC_filter:
12003     C = new (Context) OMPFilterClause();
12004     break;
12005 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
12006   case llvm::omp::Enum:                                                        \
12007     break;
12008 #include "llvm/Frontend/OpenMP/OMPKinds.def"
12009   default:
12010     break;
12011   }
12012   assert(C && "Unknown OMPClause type");
12013 
12014   Visit(C);
12015   C->setLocStart(Record.readSourceLocation());
12016   C->setLocEnd(Record.readSourceLocation());
12017 
12018   return C;
12019 }
12020 
12021 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12022   C->setPreInitStmt(Record.readSubStmt(),
12023                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12024 }
12025 
12026 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12027   VisitOMPClauseWithPreInit(C);
12028   C->setPostUpdateExpr(Record.readSubExpr());
12029 }
12030 
12031 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12032   VisitOMPClauseWithPreInit(C);
12033   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12034   C->setNameModifierLoc(Record.readSourceLocation());
12035   C->setColonLoc(Record.readSourceLocation());
12036   C->setCondition(Record.readSubExpr());
12037   C->setLParenLoc(Record.readSourceLocation());
12038 }
12039 
12040 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12041   VisitOMPClauseWithPreInit(C);
12042   C->setCondition(Record.readSubExpr());
12043   C->setLParenLoc(Record.readSourceLocation());
12044 }
12045 
12046 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12047   VisitOMPClauseWithPreInit(C);
12048   C->setNumThreads(Record.readSubExpr());
12049   C->setLParenLoc(Record.readSourceLocation());
12050 }
12051 
12052 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12053   C->setSafelen(Record.readSubExpr());
12054   C->setLParenLoc(Record.readSourceLocation());
12055 }
12056 
12057 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12058   C->setSimdlen(Record.readSubExpr());
12059   C->setLParenLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12063   for (Expr *&E : C->getSizesRefs())
12064     E = Record.readSubExpr();
12065   C->setLParenLoc(Record.readSourceLocation());
12066 }
12067 
12068 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12069 
12070 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12071   C->setFactor(Record.readSubExpr());
12072   C->setLParenLoc(Record.readSourceLocation());
12073 }
12074 
12075 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12076   C->setAllocator(Record.readExpr());
12077   C->setLParenLoc(Record.readSourceLocation());
12078 }
12079 
12080 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12081   C->setNumForLoops(Record.readSubExpr());
12082   C->setLParenLoc(Record.readSourceLocation());
12083 }
12084 
12085 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12086   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12087   C->setLParenLoc(Record.readSourceLocation());
12088   C->setDefaultKindKwLoc(Record.readSourceLocation());
12089 }
12090 
12091 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12092   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12093   C->setLParenLoc(Record.readSourceLocation());
12094   C->setProcBindKindKwLoc(Record.readSourceLocation());
12095 }
12096 
12097 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12098   VisitOMPClauseWithPreInit(C);
12099   C->setScheduleKind(
12100        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12101   C->setFirstScheduleModifier(
12102       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12103   C->setSecondScheduleModifier(
12104       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12105   C->setChunkSize(Record.readSubExpr());
12106   C->setLParenLoc(Record.readSourceLocation());
12107   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12108   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12109   C->setScheduleKindLoc(Record.readSourceLocation());
12110   C->setCommaLoc(Record.readSourceLocation());
12111 }
12112 
12113 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12114   C->setNumForLoops(Record.readSubExpr());
12115   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12116     C->setLoopNumIterations(I, Record.readSubExpr());
12117   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12118     C->setLoopCounter(I, Record.readSubExpr());
12119   C->setLParenLoc(Record.readSourceLocation());
12120 }
12121 
12122 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12123   C->setEventHandler(Record.readSubExpr());
12124   C->setLParenLoc(Record.readSourceLocation());
12125 }
12126 
12127 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12128 
12129 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12130 
12131 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12132 
12133 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12134 
12135 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12136 
12137 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12138   if (C->isExtended()) {
12139     C->setLParenLoc(Record.readSourceLocation());
12140     C->setArgumentLoc(Record.readSourceLocation());
12141     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12142   }
12143 }
12144 
12145 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12146 
12147 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12148 
12149 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12150 
12151 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12152 
12153 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12154 
12155 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12156 
12157 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12158 
12159 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12160 
12161 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12162 
12163 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12164   unsigned NumVars = C->varlist_size();
12165   SmallVector<Expr *, 16> Vars;
12166   Vars.reserve(NumVars);
12167   for (unsigned I = 0; I != NumVars; ++I)
12168     Vars.push_back(Record.readSubExpr());
12169   C->setVarRefs(Vars);
12170   C->setIsTarget(Record.readBool());
12171   C->setIsTargetSync(Record.readBool());
12172   C->setLParenLoc(Record.readSourceLocation());
12173   C->setVarLoc(Record.readSourceLocation());
12174 }
12175 
12176 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12177   C->setInteropVar(Record.readSubExpr());
12178   C->setLParenLoc(Record.readSourceLocation());
12179   C->setVarLoc(Record.readSourceLocation());
12180 }
12181 
12182 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12183   C->setInteropVar(Record.readSubExpr());
12184   C->setLParenLoc(Record.readSourceLocation());
12185   C->setVarLoc(Record.readSourceLocation());
12186 }
12187 
12188 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12189   VisitOMPClauseWithPreInit(C);
12190   C->setCondition(Record.readSubExpr());
12191   C->setLParenLoc(Record.readSourceLocation());
12192 }
12193 
12194 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12195   VisitOMPClauseWithPreInit(C);
12196   C->setCondition(Record.readSubExpr());
12197   C->setLParenLoc(Record.readSourceLocation());
12198 }
12199 
12200 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12201 
12202 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12203     OMPUnifiedSharedMemoryClause *) {}
12204 
12205 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12206 
12207 void
12208 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12209 }
12210 
12211 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12212     OMPAtomicDefaultMemOrderClause *C) {
12213   C->setAtomicDefaultMemOrderKind(
12214       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12215   C->setLParenLoc(Record.readSourceLocation());
12216   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12217 }
12218 
12219 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12220   C->setLParenLoc(Record.readSourceLocation());
12221   unsigned NumVars = C->varlist_size();
12222   SmallVector<Expr *, 16> Vars;
12223   Vars.reserve(NumVars);
12224   for (unsigned i = 0; i != NumVars; ++i)
12225     Vars.push_back(Record.readSubExpr());
12226   C->setVarRefs(Vars);
12227   Vars.clear();
12228   for (unsigned i = 0; i != NumVars; ++i)
12229     Vars.push_back(Record.readSubExpr());
12230   C->setPrivateCopies(Vars);
12231 }
12232 
12233 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12234   VisitOMPClauseWithPreInit(C);
12235   C->setLParenLoc(Record.readSourceLocation());
12236   unsigned NumVars = C->varlist_size();
12237   SmallVector<Expr *, 16> Vars;
12238   Vars.reserve(NumVars);
12239   for (unsigned i = 0; i != NumVars; ++i)
12240     Vars.push_back(Record.readSubExpr());
12241   C->setVarRefs(Vars);
12242   Vars.clear();
12243   for (unsigned i = 0; i != NumVars; ++i)
12244     Vars.push_back(Record.readSubExpr());
12245   C->setPrivateCopies(Vars);
12246   Vars.clear();
12247   for (unsigned i = 0; i != NumVars; ++i)
12248     Vars.push_back(Record.readSubExpr());
12249   C->setInits(Vars);
12250 }
12251 
12252 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12253   VisitOMPClauseWithPostUpdate(C);
12254   C->setLParenLoc(Record.readSourceLocation());
12255   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12256   C->setKindLoc(Record.readSourceLocation());
12257   C->setColonLoc(Record.readSourceLocation());
12258   unsigned NumVars = C->varlist_size();
12259   SmallVector<Expr *, 16> Vars;
12260   Vars.reserve(NumVars);
12261   for (unsigned i = 0; i != NumVars; ++i)
12262     Vars.push_back(Record.readSubExpr());
12263   C->setVarRefs(Vars);
12264   Vars.clear();
12265   for (unsigned i = 0; i != NumVars; ++i)
12266     Vars.push_back(Record.readSubExpr());
12267   C->setPrivateCopies(Vars);
12268   Vars.clear();
12269   for (unsigned i = 0; i != NumVars; ++i)
12270     Vars.push_back(Record.readSubExpr());
12271   C->setSourceExprs(Vars);
12272   Vars.clear();
12273   for (unsigned i = 0; i != NumVars; ++i)
12274     Vars.push_back(Record.readSubExpr());
12275   C->setDestinationExprs(Vars);
12276   Vars.clear();
12277   for (unsigned i = 0; i != NumVars; ++i)
12278     Vars.push_back(Record.readSubExpr());
12279   C->setAssignmentOps(Vars);
12280 }
12281 
12282 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12283   C->setLParenLoc(Record.readSourceLocation());
12284   unsigned NumVars = C->varlist_size();
12285   SmallVector<Expr *, 16> Vars;
12286   Vars.reserve(NumVars);
12287   for (unsigned i = 0; i != NumVars; ++i)
12288     Vars.push_back(Record.readSubExpr());
12289   C->setVarRefs(Vars);
12290 }
12291 
12292 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12293   VisitOMPClauseWithPostUpdate(C);
12294   C->setLParenLoc(Record.readSourceLocation());
12295   C->setModifierLoc(Record.readSourceLocation());
12296   C->setColonLoc(Record.readSourceLocation());
12297   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12298   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12299   C->setQualifierLoc(NNSL);
12300   C->setNameInfo(DNI);
12301 
12302   unsigned NumVars = C->varlist_size();
12303   SmallVector<Expr *, 16> Vars;
12304   Vars.reserve(NumVars);
12305   for (unsigned i = 0; i != NumVars; ++i)
12306     Vars.push_back(Record.readSubExpr());
12307   C->setVarRefs(Vars);
12308   Vars.clear();
12309   for (unsigned i = 0; i != NumVars; ++i)
12310     Vars.push_back(Record.readSubExpr());
12311   C->setPrivates(Vars);
12312   Vars.clear();
12313   for (unsigned i = 0; i != NumVars; ++i)
12314     Vars.push_back(Record.readSubExpr());
12315   C->setLHSExprs(Vars);
12316   Vars.clear();
12317   for (unsigned i = 0; i != NumVars; ++i)
12318     Vars.push_back(Record.readSubExpr());
12319   C->setRHSExprs(Vars);
12320   Vars.clear();
12321   for (unsigned i = 0; i != NumVars; ++i)
12322     Vars.push_back(Record.readSubExpr());
12323   C->setReductionOps(Vars);
12324   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12325     Vars.clear();
12326     for (unsigned i = 0; i != NumVars; ++i)
12327       Vars.push_back(Record.readSubExpr());
12328     C->setInscanCopyOps(Vars);
12329     Vars.clear();
12330     for (unsigned i = 0; i != NumVars; ++i)
12331       Vars.push_back(Record.readSubExpr());
12332     C->setInscanCopyArrayTemps(Vars);
12333     Vars.clear();
12334     for (unsigned i = 0; i != NumVars; ++i)
12335       Vars.push_back(Record.readSubExpr());
12336     C->setInscanCopyArrayElems(Vars);
12337   }
12338 }
12339 
12340 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12341   VisitOMPClauseWithPostUpdate(C);
12342   C->setLParenLoc(Record.readSourceLocation());
12343   C->setColonLoc(Record.readSourceLocation());
12344   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12345   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12346   C->setQualifierLoc(NNSL);
12347   C->setNameInfo(DNI);
12348 
12349   unsigned NumVars = C->varlist_size();
12350   SmallVector<Expr *, 16> Vars;
12351   Vars.reserve(NumVars);
12352   for (unsigned I = 0; I != NumVars; ++I)
12353     Vars.push_back(Record.readSubExpr());
12354   C->setVarRefs(Vars);
12355   Vars.clear();
12356   for (unsigned I = 0; I != NumVars; ++I)
12357     Vars.push_back(Record.readSubExpr());
12358   C->setPrivates(Vars);
12359   Vars.clear();
12360   for (unsigned I = 0; I != NumVars; ++I)
12361     Vars.push_back(Record.readSubExpr());
12362   C->setLHSExprs(Vars);
12363   Vars.clear();
12364   for (unsigned I = 0; I != NumVars; ++I)
12365     Vars.push_back(Record.readSubExpr());
12366   C->setRHSExprs(Vars);
12367   Vars.clear();
12368   for (unsigned I = 0; I != NumVars; ++I)
12369     Vars.push_back(Record.readSubExpr());
12370   C->setReductionOps(Vars);
12371 }
12372 
12373 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12374   VisitOMPClauseWithPostUpdate(C);
12375   C->setLParenLoc(Record.readSourceLocation());
12376   C->setColonLoc(Record.readSourceLocation());
12377   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12378   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12379   C->setQualifierLoc(NNSL);
12380   C->setNameInfo(DNI);
12381 
12382   unsigned NumVars = C->varlist_size();
12383   SmallVector<Expr *, 16> Vars;
12384   Vars.reserve(NumVars);
12385   for (unsigned I = 0; I != NumVars; ++I)
12386     Vars.push_back(Record.readSubExpr());
12387   C->setVarRefs(Vars);
12388   Vars.clear();
12389   for (unsigned I = 0; I != NumVars; ++I)
12390     Vars.push_back(Record.readSubExpr());
12391   C->setPrivates(Vars);
12392   Vars.clear();
12393   for (unsigned I = 0; I != NumVars; ++I)
12394     Vars.push_back(Record.readSubExpr());
12395   C->setLHSExprs(Vars);
12396   Vars.clear();
12397   for (unsigned I = 0; I != NumVars; ++I)
12398     Vars.push_back(Record.readSubExpr());
12399   C->setRHSExprs(Vars);
12400   Vars.clear();
12401   for (unsigned I = 0; I != NumVars; ++I)
12402     Vars.push_back(Record.readSubExpr());
12403   C->setReductionOps(Vars);
12404   Vars.clear();
12405   for (unsigned I = 0; I != NumVars; ++I)
12406     Vars.push_back(Record.readSubExpr());
12407   C->setTaskgroupDescriptors(Vars);
12408 }
12409 
12410 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12411   VisitOMPClauseWithPostUpdate(C);
12412   C->setLParenLoc(Record.readSourceLocation());
12413   C->setColonLoc(Record.readSourceLocation());
12414   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12415   C->setModifierLoc(Record.readSourceLocation());
12416   unsigned NumVars = C->varlist_size();
12417   SmallVector<Expr *, 16> Vars;
12418   Vars.reserve(NumVars);
12419   for (unsigned i = 0; i != NumVars; ++i)
12420     Vars.push_back(Record.readSubExpr());
12421   C->setVarRefs(Vars);
12422   Vars.clear();
12423   for (unsigned i = 0; i != NumVars; ++i)
12424     Vars.push_back(Record.readSubExpr());
12425   C->setPrivates(Vars);
12426   Vars.clear();
12427   for (unsigned i = 0; i != NumVars; ++i)
12428     Vars.push_back(Record.readSubExpr());
12429   C->setInits(Vars);
12430   Vars.clear();
12431   for (unsigned i = 0; i != NumVars; ++i)
12432     Vars.push_back(Record.readSubExpr());
12433   C->setUpdates(Vars);
12434   Vars.clear();
12435   for (unsigned i = 0; i != NumVars; ++i)
12436     Vars.push_back(Record.readSubExpr());
12437   C->setFinals(Vars);
12438   C->setStep(Record.readSubExpr());
12439   C->setCalcStep(Record.readSubExpr());
12440   Vars.clear();
12441   for (unsigned I = 0; I != NumVars + 1; ++I)
12442     Vars.push_back(Record.readSubExpr());
12443   C->setUsedExprs(Vars);
12444 }
12445 
12446 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12447   C->setLParenLoc(Record.readSourceLocation());
12448   C->setColonLoc(Record.readSourceLocation());
12449   unsigned NumVars = C->varlist_size();
12450   SmallVector<Expr *, 16> Vars;
12451   Vars.reserve(NumVars);
12452   for (unsigned i = 0; i != NumVars; ++i)
12453     Vars.push_back(Record.readSubExpr());
12454   C->setVarRefs(Vars);
12455   C->setAlignment(Record.readSubExpr());
12456 }
12457 
12458 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12459   C->setLParenLoc(Record.readSourceLocation());
12460   unsigned NumVars = C->varlist_size();
12461   SmallVector<Expr *, 16> Exprs;
12462   Exprs.reserve(NumVars);
12463   for (unsigned i = 0; i != NumVars; ++i)
12464     Exprs.push_back(Record.readSubExpr());
12465   C->setVarRefs(Exprs);
12466   Exprs.clear();
12467   for (unsigned i = 0; i != NumVars; ++i)
12468     Exprs.push_back(Record.readSubExpr());
12469   C->setSourceExprs(Exprs);
12470   Exprs.clear();
12471   for (unsigned i = 0; i != NumVars; ++i)
12472     Exprs.push_back(Record.readSubExpr());
12473   C->setDestinationExprs(Exprs);
12474   Exprs.clear();
12475   for (unsigned i = 0; i != NumVars; ++i)
12476     Exprs.push_back(Record.readSubExpr());
12477   C->setAssignmentOps(Exprs);
12478 }
12479 
12480 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12481   C->setLParenLoc(Record.readSourceLocation());
12482   unsigned NumVars = C->varlist_size();
12483   SmallVector<Expr *, 16> Exprs;
12484   Exprs.reserve(NumVars);
12485   for (unsigned i = 0; i != NumVars; ++i)
12486     Exprs.push_back(Record.readSubExpr());
12487   C->setVarRefs(Exprs);
12488   Exprs.clear();
12489   for (unsigned i = 0; i != NumVars; ++i)
12490     Exprs.push_back(Record.readSubExpr());
12491   C->setSourceExprs(Exprs);
12492   Exprs.clear();
12493   for (unsigned i = 0; i != NumVars; ++i)
12494     Exprs.push_back(Record.readSubExpr());
12495   C->setDestinationExprs(Exprs);
12496   Exprs.clear();
12497   for (unsigned i = 0; i != NumVars; ++i)
12498     Exprs.push_back(Record.readSubExpr());
12499   C->setAssignmentOps(Exprs);
12500 }
12501 
12502 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12503   C->setLParenLoc(Record.readSourceLocation());
12504   unsigned NumVars = C->varlist_size();
12505   SmallVector<Expr *, 16> Vars;
12506   Vars.reserve(NumVars);
12507   for (unsigned i = 0; i != NumVars; ++i)
12508     Vars.push_back(Record.readSubExpr());
12509   C->setVarRefs(Vars);
12510 }
12511 
12512 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12513   C->setDepobj(Record.readSubExpr());
12514   C->setLParenLoc(Record.readSourceLocation());
12515 }
12516 
12517 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12518   C->setLParenLoc(Record.readSourceLocation());
12519   C->setModifier(Record.readSubExpr());
12520   C->setDependencyKind(
12521       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12522   C->setDependencyLoc(Record.readSourceLocation());
12523   C->setColonLoc(Record.readSourceLocation());
12524   unsigned NumVars = C->varlist_size();
12525   SmallVector<Expr *, 16> Vars;
12526   Vars.reserve(NumVars);
12527   for (unsigned I = 0; I != NumVars; ++I)
12528     Vars.push_back(Record.readSubExpr());
12529   C->setVarRefs(Vars);
12530   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12531     C->setLoopData(I, Record.readSubExpr());
12532 }
12533 
12534 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12535   VisitOMPClauseWithPreInit(C);
12536   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12537   C->setDevice(Record.readSubExpr());
12538   C->setModifierLoc(Record.readSourceLocation());
12539   C->setLParenLoc(Record.readSourceLocation());
12540 }
12541 
12542 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12543   C->setLParenLoc(Record.readSourceLocation());
12544   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12545     C->setMapTypeModifier(
12546         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12547     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12548   }
12549   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12550   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12551   C->setMapType(
12552      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12553   C->setMapLoc(Record.readSourceLocation());
12554   C->setColonLoc(Record.readSourceLocation());
12555   auto NumVars = C->varlist_size();
12556   auto UniqueDecls = C->getUniqueDeclarationsNum();
12557   auto TotalLists = C->getTotalComponentListNum();
12558   auto TotalComponents = C->getTotalComponentsNum();
12559 
12560   SmallVector<Expr *, 16> Vars;
12561   Vars.reserve(NumVars);
12562   for (unsigned i = 0; i != NumVars; ++i)
12563     Vars.push_back(Record.readExpr());
12564   C->setVarRefs(Vars);
12565 
12566   SmallVector<Expr *, 16> UDMappers;
12567   UDMappers.reserve(NumVars);
12568   for (unsigned I = 0; I < NumVars; ++I)
12569     UDMappers.push_back(Record.readExpr());
12570   C->setUDMapperRefs(UDMappers);
12571 
12572   SmallVector<ValueDecl *, 16> Decls;
12573   Decls.reserve(UniqueDecls);
12574   for (unsigned i = 0; i < UniqueDecls; ++i)
12575     Decls.push_back(Record.readDeclAs<ValueDecl>());
12576   C->setUniqueDecls(Decls);
12577 
12578   SmallVector<unsigned, 16> ListsPerDecl;
12579   ListsPerDecl.reserve(UniqueDecls);
12580   for (unsigned i = 0; i < UniqueDecls; ++i)
12581     ListsPerDecl.push_back(Record.readInt());
12582   C->setDeclNumLists(ListsPerDecl);
12583 
12584   SmallVector<unsigned, 32> ListSizes;
12585   ListSizes.reserve(TotalLists);
12586   for (unsigned i = 0; i < TotalLists; ++i)
12587     ListSizes.push_back(Record.readInt());
12588   C->setComponentListSizes(ListSizes);
12589 
12590   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12591   Components.reserve(TotalComponents);
12592   for (unsigned i = 0; i < TotalComponents; ++i) {
12593     Expr *AssociatedExprPr = Record.readExpr();
12594     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12595     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12596                             /*IsNonContiguous=*/false);
12597   }
12598   C->setComponents(Components, ListSizes);
12599 }
12600 
12601 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12602   C->setLParenLoc(Record.readSourceLocation());
12603   C->setColonLoc(Record.readSourceLocation());
12604   C->setAllocator(Record.readSubExpr());
12605   unsigned NumVars = C->varlist_size();
12606   SmallVector<Expr *, 16> Vars;
12607   Vars.reserve(NumVars);
12608   for (unsigned i = 0; i != NumVars; ++i)
12609     Vars.push_back(Record.readSubExpr());
12610   C->setVarRefs(Vars);
12611 }
12612 
12613 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12614   VisitOMPClauseWithPreInit(C);
12615   C->setNumTeams(Record.readSubExpr());
12616   C->setLParenLoc(Record.readSourceLocation());
12617 }
12618 
12619 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12620   VisitOMPClauseWithPreInit(C);
12621   C->setThreadLimit(Record.readSubExpr());
12622   C->setLParenLoc(Record.readSourceLocation());
12623 }
12624 
12625 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12626   VisitOMPClauseWithPreInit(C);
12627   C->setPriority(Record.readSubExpr());
12628   C->setLParenLoc(Record.readSourceLocation());
12629 }
12630 
12631 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12632   VisitOMPClauseWithPreInit(C);
12633   C->setGrainsize(Record.readSubExpr());
12634   C->setLParenLoc(Record.readSourceLocation());
12635 }
12636 
12637 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12638   VisitOMPClauseWithPreInit(C);
12639   C->setNumTasks(Record.readSubExpr());
12640   C->setLParenLoc(Record.readSourceLocation());
12641 }
12642 
12643 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12644   C->setHint(Record.readSubExpr());
12645   C->setLParenLoc(Record.readSourceLocation());
12646 }
12647 
12648 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12649   VisitOMPClauseWithPreInit(C);
12650   C->setDistScheduleKind(
12651       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12652   C->setChunkSize(Record.readSubExpr());
12653   C->setLParenLoc(Record.readSourceLocation());
12654   C->setDistScheduleKindLoc(Record.readSourceLocation());
12655   C->setCommaLoc(Record.readSourceLocation());
12656 }
12657 
12658 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12659   C->setDefaultmapKind(
12660        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12661   C->setDefaultmapModifier(
12662       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12663   C->setLParenLoc(Record.readSourceLocation());
12664   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12665   C->setDefaultmapKindLoc(Record.readSourceLocation());
12666 }
12667 
12668 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12669   C->setLParenLoc(Record.readSourceLocation());
12670   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12671     C->setMotionModifier(
12672         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12673     C->setMotionModifierLoc(I, Record.readSourceLocation());
12674   }
12675   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12676   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12677   C->setColonLoc(Record.readSourceLocation());
12678   auto NumVars = C->varlist_size();
12679   auto UniqueDecls = C->getUniqueDeclarationsNum();
12680   auto TotalLists = C->getTotalComponentListNum();
12681   auto TotalComponents = C->getTotalComponentsNum();
12682 
12683   SmallVector<Expr *, 16> Vars;
12684   Vars.reserve(NumVars);
12685   for (unsigned i = 0; i != NumVars; ++i)
12686     Vars.push_back(Record.readSubExpr());
12687   C->setVarRefs(Vars);
12688 
12689   SmallVector<Expr *, 16> UDMappers;
12690   UDMappers.reserve(NumVars);
12691   for (unsigned I = 0; I < NumVars; ++I)
12692     UDMappers.push_back(Record.readSubExpr());
12693   C->setUDMapperRefs(UDMappers);
12694 
12695   SmallVector<ValueDecl *, 16> Decls;
12696   Decls.reserve(UniqueDecls);
12697   for (unsigned i = 0; i < UniqueDecls; ++i)
12698     Decls.push_back(Record.readDeclAs<ValueDecl>());
12699   C->setUniqueDecls(Decls);
12700 
12701   SmallVector<unsigned, 16> ListsPerDecl;
12702   ListsPerDecl.reserve(UniqueDecls);
12703   for (unsigned i = 0; i < UniqueDecls; ++i)
12704     ListsPerDecl.push_back(Record.readInt());
12705   C->setDeclNumLists(ListsPerDecl);
12706 
12707   SmallVector<unsigned, 32> ListSizes;
12708   ListSizes.reserve(TotalLists);
12709   for (unsigned i = 0; i < TotalLists; ++i)
12710     ListSizes.push_back(Record.readInt());
12711   C->setComponentListSizes(ListSizes);
12712 
12713   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12714   Components.reserve(TotalComponents);
12715   for (unsigned i = 0; i < TotalComponents; ++i) {
12716     Expr *AssociatedExprPr = Record.readSubExpr();
12717     bool IsNonContiguous = Record.readBool();
12718     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12719     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12720   }
12721   C->setComponents(Components, ListSizes);
12722 }
12723 
12724 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12725   C->setLParenLoc(Record.readSourceLocation());
12726   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12727     C->setMotionModifier(
12728         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12729     C->setMotionModifierLoc(I, Record.readSourceLocation());
12730   }
12731   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12732   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12733   C->setColonLoc(Record.readSourceLocation());
12734   auto NumVars = C->varlist_size();
12735   auto UniqueDecls = C->getUniqueDeclarationsNum();
12736   auto TotalLists = C->getTotalComponentListNum();
12737   auto TotalComponents = C->getTotalComponentsNum();
12738 
12739   SmallVector<Expr *, 16> Vars;
12740   Vars.reserve(NumVars);
12741   for (unsigned i = 0; i != NumVars; ++i)
12742     Vars.push_back(Record.readSubExpr());
12743   C->setVarRefs(Vars);
12744 
12745   SmallVector<Expr *, 16> UDMappers;
12746   UDMappers.reserve(NumVars);
12747   for (unsigned I = 0; I < NumVars; ++I)
12748     UDMappers.push_back(Record.readSubExpr());
12749   C->setUDMapperRefs(UDMappers);
12750 
12751   SmallVector<ValueDecl *, 16> Decls;
12752   Decls.reserve(UniqueDecls);
12753   for (unsigned i = 0; i < UniqueDecls; ++i)
12754     Decls.push_back(Record.readDeclAs<ValueDecl>());
12755   C->setUniqueDecls(Decls);
12756 
12757   SmallVector<unsigned, 16> ListsPerDecl;
12758   ListsPerDecl.reserve(UniqueDecls);
12759   for (unsigned i = 0; i < UniqueDecls; ++i)
12760     ListsPerDecl.push_back(Record.readInt());
12761   C->setDeclNumLists(ListsPerDecl);
12762 
12763   SmallVector<unsigned, 32> ListSizes;
12764   ListSizes.reserve(TotalLists);
12765   for (unsigned i = 0; i < TotalLists; ++i)
12766     ListSizes.push_back(Record.readInt());
12767   C->setComponentListSizes(ListSizes);
12768 
12769   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12770   Components.reserve(TotalComponents);
12771   for (unsigned i = 0; i < TotalComponents; ++i) {
12772     Expr *AssociatedExprPr = Record.readSubExpr();
12773     bool IsNonContiguous = Record.readBool();
12774     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12775     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12776   }
12777   C->setComponents(Components, ListSizes);
12778 }
12779 
12780 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12781   C->setLParenLoc(Record.readSourceLocation());
12782   auto NumVars = C->varlist_size();
12783   auto UniqueDecls = C->getUniqueDeclarationsNum();
12784   auto TotalLists = C->getTotalComponentListNum();
12785   auto TotalComponents = C->getTotalComponentsNum();
12786 
12787   SmallVector<Expr *, 16> Vars;
12788   Vars.reserve(NumVars);
12789   for (unsigned i = 0; i != NumVars; ++i)
12790     Vars.push_back(Record.readSubExpr());
12791   C->setVarRefs(Vars);
12792   Vars.clear();
12793   for (unsigned i = 0; i != NumVars; ++i)
12794     Vars.push_back(Record.readSubExpr());
12795   C->setPrivateCopies(Vars);
12796   Vars.clear();
12797   for (unsigned i = 0; i != NumVars; ++i)
12798     Vars.push_back(Record.readSubExpr());
12799   C->setInits(Vars);
12800 
12801   SmallVector<ValueDecl *, 16> Decls;
12802   Decls.reserve(UniqueDecls);
12803   for (unsigned i = 0; i < UniqueDecls; ++i)
12804     Decls.push_back(Record.readDeclAs<ValueDecl>());
12805   C->setUniqueDecls(Decls);
12806 
12807   SmallVector<unsigned, 16> ListsPerDecl;
12808   ListsPerDecl.reserve(UniqueDecls);
12809   for (unsigned i = 0; i < UniqueDecls; ++i)
12810     ListsPerDecl.push_back(Record.readInt());
12811   C->setDeclNumLists(ListsPerDecl);
12812 
12813   SmallVector<unsigned, 32> ListSizes;
12814   ListSizes.reserve(TotalLists);
12815   for (unsigned i = 0; i < TotalLists; ++i)
12816     ListSizes.push_back(Record.readInt());
12817   C->setComponentListSizes(ListSizes);
12818 
12819   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12820   Components.reserve(TotalComponents);
12821   for (unsigned i = 0; i < TotalComponents; ++i) {
12822     auto *AssociatedExprPr = Record.readSubExpr();
12823     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12824     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12825                             /*IsNonContiguous=*/false);
12826   }
12827   C->setComponents(Components, ListSizes);
12828 }
12829 
12830 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12831   C->setLParenLoc(Record.readSourceLocation());
12832   auto NumVars = C->varlist_size();
12833   auto UniqueDecls = C->getUniqueDeclarationsNum();
12834   auto TotalLists = C->getTotalComponentListNum();
12835   auto TotalComponents = C->getTotalComponentsNum();
12836 
12837   SmallVector<Expr *, 16> Vars;
12838   Vars.reserve(NumVars);
12839   for (unsigned i = 0; i != NumVars; ++i)
12840     Vars.push_back(Record.readSubExpr());
12841   C->setVarRefs(Vars);
12842 
12843   SmallVector<ValueDecl *, 16> Decls;
12844   Decls.reserve(UniqueDecls);
12845   for (unsigned i = 0; i < UniqueDecls; ++i)
12846     Decls.push_back(Record.readDeclAs<ValueDecl>());
12847   C->setUniqueDecls(Decls);
12848 
12849   SmallVector<unsigned, 16> ListsPerDecl;
12850   ListsPerDecl.reserve(UniqueDecls);
12851   for (unsigned i = 0; i < UniqueDecls; ++i)
12852     ListsPerDecl.push_back(Record.readInt());
12853   C->setDeclNumLists(ListsPerDecl);
12854 
12855   SmallVector<unsigned, 32> ListSizes;
12856   ListSizes.reserve(TotalLists);
12857   for (unsigned i = 0; i < TotalLists; ++i)
12858     ListSizes.push_back(Record.readInt());
12859   C->setComponentListSizes(ListSizes);
12860 
12861   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12862   Components.reserve(TotalComponents);
12863   for (unsigned i = 0; i < TotalComponents; ++i) {
12864     Expr *AssociatedExpr = Record.readSubExpr();
12865     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12866     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12867                             /*IsNonContiguous*/ false);
12868   }
12869   C->setComponents(Components, ListSizes);
12870 }
12871 
12872 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12873   C->setLParenLoc(Record.readSourceLocation());
12874   auto NumVars = C->varlist_size();
12875   auto UniqueDecls = C->getUniqueDeclarationsNum();
12876   auto TotalLists = C->getTotalComponentListNum();
12877   auto TotalComponents = C->getTotalComponentsNum();
12878 
12879   SmallVector<Expr *, 16> Vars;
12880   Vars.reserve(NumVars);
12881   for (unsigned i = 0; i != NumVars; ++i)
12882     Vars.push_back(Record.readSubExpr());
12883   C->setVarRefs(Vars);
12884   Vars.clear();
12885 
12886   SmallVector<ValueDecl *, 16> Decls;
12887   Decls.reserve(UniqueDecls);
12888   for (unsigned i = 0; i < UniqueDecls; ++i)
12889     Decls.push_back(Record.readDeclAs<ValueDecl>());
12890   C->setUniqueDecls(Decls);
12891 
12892   SmallVector<unsigned, 16> ListsPerDecl;
12893   ListsPerDecl.reserve(UniqueDecls);
12894   for (unsigned i = 0; i < UniqueDecls; ++i)
12895     ListsPerDecl.push_back(Record.readInt());
12896   C->setDeclNumLists(ListsPerDecl);
12897 
12898   SmallVector<unsigned, 32> ListSizes;
12899   ListSizes.reserve(TotalLists);
12900   for (unsigned i = 0; i < TotalLists; ++i)
12901     ListSizes.push_back(Record.readInt());
12902   C->setComponentListSizes(ListSizes);
12903 
12904   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12905   Components.reserve(TotalComponents);
12906   for (unsigned i = 0; i < TotalComponents; ++i) {
12907     Expr *AssociatedExpr = Record.readSubExpr();
12908     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12909     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12910                             /*IsNonContiguous=*/false);
12911   }
12912   C->setComponents(Components, ListSizes);
12913 }
12914 
12915 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12916   C->setLParenLoc(Record.readSourceLocation());
12917   unsigned NumVars = C->varlist_size();
12918   SmallVector<Expr *, 16> Vars;
12919   Vars.reserve(NumVars);
12920   for (unsigned i = 0; i != NumVars; ++i)
12921     Vars.push_back(Record.readSubExpr());
12922   C->setVarRefs(Vars);
12923   Vars.clear();
12924   Vars.reserve(NumVars);
12925   for (unsigned i = 0; i != NumVars; ++i)
12926     Vars.push_back(Record.readSubExpr());
12927   C->setPrivateRefs(Vars);
12928 }
12929 
12930 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12931   C->setLParenLoc(Record.readSourceLocation());
12932   unsigned NumVars = C->varlist_size();
12933   SmallVector<Expr *, 16> Vars;
12934   Vars.reserve(NumVars);
12935   for (unsigned i = 0; i != NumVars; ++i)
12936     Vars.push_back(Record.readSubExpr());
12937   C->setVarRefs(Vars);
12938 }
12939 
12940 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12941   C->setLParenLoc(Record.readSourceLocation());
12942   unsigned NumVars = C->varlist_size();
12943   SmallVector<Expr *, 16> Vars;
12944   Vars.reserve(NumVars);
12945   for (unsigned i = 0; i != NumVars; ++i)
12946     Vars.push_back(Record.readSubExpr());
12947   C->setVarRefs(Vars);
12948 }
12949 
12950 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12951   C->setLParenLoc(Record.readSourceLocation());
12952   unsigned NumOfAllocators = C->getNumberOfAllocators();
12953   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12954   Data.reserve(NumOfAllocators);
12955   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12956     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12957     D.Allocator = Record.readSubExpr();
12958     D.AllocatorTraits = Record.readSubExpr();
12959     D.LParenLoc = Record.readSourceLocation();
12960     D.RParenLoc = Record.readSourceLocation();
12961   }
12962   C->setAllocatorsData(Data);
12963 }
12964 
12965 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12966   C->setLParenLoc(Record.readSourceLocation());
12967   C->setModifier(Record.readSubExpr());
12968   C->setColonLoc(Record.readSourceLocation());
12969   unsigned NumOfLocators = C->varlist_size();
12970   SmallVector<Expr *, 4> Locators;
12971   Locators.reserve(NumOfLocators);
12972   for (unsigned I = 0; I != NumOfLocators; ++I)
12973     Locators.push_back(Record.readSubExpr());
12974   C->setVarRefs(Locators);
12975 }
12976 
12977 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12978   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12979   C->setLParenLoc(Record.readSourceLocation());
12980   C->setKindKwLoc(Record.readSourceLocation());
12981 }
12982 
12983 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12984   VisitOMPClauseWithPreInit(C);
12985   C->setThreadID(Record.readSubExpr());
12986   C->setLParenLoc(Record.readSourceLocation());
12987 }
12988 
12989 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12990   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12991   TI.Sets.resize(readUInt32());
12992   for (auto &Set : TI.Sets) {
12993     Set.Kind = readEnum<llvm::omp::TraitSet>();
12994     Set.Selectors.resize(readUInt32());
12995     for (auto &Selector : Set.Selectors) {
12996       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12997       Selector.ScoreOrCondition = nullptr;
12998       if (readBool())
12999         Selector.ScoreOrCondition = readExprRef();
13000       Selector.Properties.resize(readUInt32());
13001       for (auto &Property : Selector.Properties)
13002         Property.Kind = readEnum<llvm::omp::TraitProperty>();
13003     }
13004   }
13005   return &TI;
13006 }
13007 
13008 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
13009   if (!Data)
13010     return;
13011   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
13012     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13013     skipInts(3);
13014   }
13015   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13016   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13017     Clauses[I] = readOMPClause();
13018   Data->setClauses(Clauses);
13019   if (Data->hasAssociatedStmt())
13020     Data->setAssociatedStmt(readStmt());
13021   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13022     Data->getChildren()[I] = readStmt();
13023 }
13024