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   if (LangOpts.Modules) {
788     if (SpecificModuleCachePath != ExistingModuleCachePath) {
789       if (Diags)
790         Diags->Report(diag::err_pch_modulecache_mismatch)
791           << SpecificModuleCachePath << ExistingModuleCachePath;
792       return true;
793     }
794   }
795 
796   return false;
797 }
798 
799 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
800                                            StringRef SpecificModuleCachePath,
801                                            bool Complain) {
802   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
803                                   PP.getHeaderSearchInfo().getModuleCachePath(),
804                                   Complain ? &Reader.Diags : nullptr,
805                                   PP.getLangOpts());
806 }
807 
808 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
809   PP.setCounterValue(Value);
810 }
811 
812 //===----------------------------------------------------------------------===//
813 // AST reader implementation
814 //===----------------------------------------------------------------------===//
815 
816 static uint64_t readULEB(const unsigned char *&P) {
817   unsigned Length = 0;
818   const char *Error = nullptr;
819 
820   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
821   if (Error)
822     llvm::report_fatal_error(Error);
823   P += Length;
824   return Val;
825 }
826 
827 /// Read ULEB-encoded key length and data length.
828 static std::pair<unsigned, unsigned>
829 readULEBKeyDataLength(const unsigned char *&P) {
830   unsigned KeyLen = readULEB(P);
831   if ((unsigned)KeyLen != KeyLen)
832     llvm::report_fatal_error("key too large");
833 
834   unsigned DataLen = readULEB(P);
835   if ((unsigned)DataLen != DataLen)
836     llvm::report_fatal_error("data too large");
837 
838   return std::make_pair(KeyLen, DataLen);
839 }
840 
841 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
842                                            bool TakeOwnership) {
843   DeserializationListener = Listener;
844   OwnsDeserializationListener = TakeOwnership;
845 }
846 
847 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
848   return serialization::ComputeHash(Sel);
849 }
850 
851 std::pair<unsigned, unsigned>
852 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
853   return readULEBKeyDataLength(d);
854 }
855 
856 ASTSelectorLookupTrait::internal_key_type
857 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
858   using namespace llvm::support;
859 
860   SelectorTable &SelTable = Reader.getContext().Selectors;
861   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
862   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
863       F, endian::readNext<uint32_t, little, unaligned>(d));
864   if (N == 0)
865     return SelTable.getNullarySelector(FirstII);
866   else if (N == 1)
867     return SelTable.getUnarySelector(FirstII);
868 
869   SmallVector<IdentifierInfo *, 16> Args;
870   Args.push_back(FirstII);
871   for (unsigned I = 1; I != N; ++I)
872     Args.push_back(Reader.getLocalIdentifier(
873         F, endian::readNext<uint32_t, little, unaligned>(d)));
874 
875   return SelTable.getSelector(N, Args.data());
876 }
877 
878 ASTSelectorLookupTrait::data_type
879 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
880                                  unsigned DataLen) {
881   using namespace llvm::support;
882 
883   data_type Result;
884 
885   Result.ID = Reader.getGlobalSelectorID(
886       F, endian::readNext<uint32_t, little, unaligned>(d));
887   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
888   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
889   Result.InstanceBits = FullInstanceBits & 0x3;
890   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
891   Result.FactoryBits = FullFactoryBits & 0x3;
892   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
893   unsigned NumInstanceMethods = FullInstanceBits >> 3;
894   unsigned NumFactoryMethods = FullFactoryBits >> 3;
895 
896   // Load instance methods
897   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
898     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
899             F, endian::readNext<uint32_t, little, unaligned>(d)))
900       Result.Instance.push_back(Method);
901   }
902 
903   // Load factory methods
904   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
905     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
906             F, endian::readNext<uint32_t, little, unaligned>(d)))
907       Result.Factory.push_back(Method);
908   }
909 
910   return Result;
911 }
912 
913 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
914   return llvm::djbHash(a);
915 }
916 
917 std::pair<unsigned, unsigned>
918 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
919   return readULEBKeyDataLength(d);
920 }
921 
922 ASTIdentifierLookupTraitBase::internal_key_type
923 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
924   assert(n >= 2 && d[n-1] == '\0');
925   return StringRef((const char*) d, n-1);
926 }
927 
928 /// Whether the given identifier is "interesting".
929 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
930                                     bool IsModule) {
931   return II.hadMacroDefinition() || II.isPoisoned() ||
932          (!IsModule && II.getObjCOrBuiltinID()) ||
933          II.hasRevertedTokenIDToIdentifier() ||
934          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
935           II.getFETokenInfo());
936 }
937 
938 static bool readBit(unsigned &Bits) {
939   bool Value = Bits & 0x1;
940   Bits >>= 1;
941   return Value;
942 }
943 
944 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
945   using namespace llvm::support;
946 
947   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
948   return Reader.getGlobalIdentifierID(F, RawID >> 1);
949 }
950 
951 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
952   if (!II.isFromAST()) {
953     II.setIsFromAST();
954     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
955     if (isInterestingIdentifier(Reader, II, IsModule))
956       II.setChangedSinceDeserialization();
957   }
958 }
959 
960 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
961                                                    const unsigned char* d,
962                                                    unsigned DataLen) {
963   using namespace llvm::support;
964 
965   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
966   bool IsInteresting = RawID & 0x01;
967 
968   // Wipe out the "is interesting" bit.
969   RawID = RawID >> 1;
970 
971   // Build the IdentifierInfo and link the identifier ID with it.
972   IdentifierInfo *II = KnownII;
973   if (!II) {
974     II = &Reader.getIdentifierTable().getOwn(k);
975     KnownII = II;
976   }
977   markIdentifierFromAST(Reader, *II);
978   Reader.markIdentifierUpToDate(II);
979 
980   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
981   if (!IsInteresting) {
982     // For uninteresting identifiers, there's nothing else to do. Just notify
983     // the reader that we've finished loading this identifier.
984     Reader.SetIdentifierInfo(ID, II);
985     return II;
986   }
987 
988   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
989   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
990   bool CPlusPlusOperatorKeyword = readBit(Bits);
991   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
992   bool Poisoned = readBit(Bits);
993   bool ExtensionToken = readBit(Bits);
994   bool HadMacroDefinition = readBit(Bits);
995 
996   assert(Bits == 0 && "Extra bits in the identifier?");
997   DataLen -= 8;
998 
999   // Set or check the various bits in the IdentifierInfo structure.
1000   // Token IDs are read-only.
1001   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1002     II->revertTokenIDToIdentifier();
1003   if (!F.isModule())
1004     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1005   assert(II->isExtensionToken() == ExtensionToken &&
1006          "Incorrect extension token flag");
1007   (void)ExtensionToken;
1008   if (Poisoned)
1009     II->setIsPoisoned(true);
1010   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1011          "Incorrect C++ operator keyword flag");
1012   (void)CPlusPlusOperatorKeyword;
1013 
1014   // If this identifier is a macro, deserialize the macro
1015   // definition.
1016   if (HadMacroDefinition) {
1017     uint32_t MacroDirectivesOffset =
1018         endian::readNext<uint32_t, little, unaligned>(d);
1019     DataLen -= 4;
1020 
1021     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1022   }
1023 
1024   Reader.SetIdentifierInfo(ID, II);
1025 
1026   // Read all of the declarations visible at global scope with this
1027   // name.
1028   if (DataLen > 0) {
1029     SmallVector<uint32_t, 4> DeclIDs;
1030     for (; DataLen > 0; DataLen -= 4)
1031       DeclIDs.push_back(Reader.getGlobalDeclID(
1032           F, endian::readNext<uint32_t, little, unaligned>(d)));
1033     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1034   }
1035 
1036   return II;
1037 }
1038 
1039 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1040     : Kind(Name.getNameKind()) {
1041   switch (Kind) {
1042   case DeclarationName::Identifier:
1043     Data = (uint64_t)Name.getAsIdentifierInfo();
1044     break;
1045   case DeclarationName::ObjCZeroArgSelector:
1046   case DeclarationName::ObjCOneArgSelector:
1047   case DeclarationName::ObjCMultiArgSelector:
1048     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1049     break;
1050   case DeclarationName::CXXOperatorName:
1051     Data = Name.getCXXOverloadedOperator();
1052     break;
1053   case DeclarationName::CXXLiteralOperatorName:
1054     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1055     break;
1056   case DeclarationName::CXXDeductionGuideName:
1057     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1058                ->getDeclName().getAsIdentifierInfo();
1059     break;
1060   case DeclarationName::CXXConstructorName:
1061   case DeclarationName::CXXDestructorName:
1062   case DeclarationName::CXXConversionFunctionName:
1063   case DeclarationName::CXXUsingDirective:
1064     Data = 0;
1065     break;
1066   }
1067 }
1068 
1069 unsigned DeclarationNameKey::getHash() const {
1070   llvm::FoldingSetNodeID ID;
1071   ID.AddInteger(Kind);
1072 
1073   switch (Kind) {
1074   case DeclarationName::Identifier:
1075   case DeclarationName::CXXLiteralOperatorName:
1076   case DeclarationName::CXXDeductionGuideName:
1077     ID.AddString(((IdentifierInfo*)Data)->getName());
1078     break;
1079   case DeclarationName::ObjCZeroArgSelector:
1080   case DeclarationName::ObjCOneArgSelector:
1081   case DeclarationName::ObjCMultiArgSelector:
1082     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1083     break;
1084   case DeclarationName::CXXOperatorName:
1085     ID.AddInteger((OverloadedOperatorKind)Data);
1086     break;
1087   case DeclarationName::CXXConstructorName:
1088   case DeclarationName::CXXDestructorName:
1089   case DeclarationName::CXXConversionFunctionName:
1090   case DeclarationName::CXXUsingDirective:
1091     break;
1092   }
1093 
1094   return ID.ComputeHash();
1095 }
1096 
1097 ModuleFile *
1098 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1099   using namespace llvm::support;
1100 
1101   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1102   return Reader.getLocalModuleFile(F, ModuleFileID);
1103 }
1104 
1105 std::pair<unsigned, unsigned>
1106 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1107   return readULEBKeyDataLength(d);
1108 }
1109 
1110 ASTDeclContextNameLookupTrait::internal_key_type
1111 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1112   using namespace llvm::support;
1113 
1114   auto Kind = (DeclarationName::NameKind)*d++;
1115   uint64_t Data;
1116   switch (Kind) {
1117   case DeclarationName::Identifier:
1118   case DeclarationName::CXXLiteralOperatorName:
1119   case DeclarationName::CXXDeductionGuideName:
1120     Data = (uint64_t)Reader.getLocalIdentifier(
1121         F, endian::readNext<uint32_t, little, unaligned>(d));
1122     break;
1123   case DeclarationName::ObjCZeroArgSelector:
1124   case DeclarationName::ObjCOneArgSelector:
1125   case DeclarationName::ObjCMultiArgSelector:
1126     Data =
1127         (uint64_t)Reader.getLocalSelector(
1128                              F, endian::readNext<uint32_t, little, unaligned>(
1129                                     d)).getAsOpaquePtr();
1130     break;
1131   case DeclarationName::CXXOperatorName:
1132     Data = *d++; // OverloadedOperatorKind
1133     break;
1134   case DeclarationName::CXXConstructorName:
1135   case DeclarationName::CXXDestructorName:
1136   case DeclarationName::CXXConversionFunctionName:
1137   case DeclarationName::CXXUsingDirective:
1138     Data = 0;
1139     break;
1140   }
1141 
1142   return DeclarationNameKey(Kind, Data);
1143 }
1144 
1145 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1146                                                  const unsigned char *d,
1147                                                  unsigned DataLen,
1148                                                  data_type_builder &Val) {
1149   using namespace llvm::support;
1150 
1151   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1152     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1153     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1154   }
1155 }
1156 
1157 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1158                                               BitstreamCursor &Cursor,
1159                                               uint64_t Offset,
1160                                               DeclContext *DC) {
1161   assert(Offset != 0);
1162 
1163   SavedStreamPosition SavedPosition(Cursor);
1164   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1165     Error(std::move(Err));
1166     return true;
1167   }
1168 
1169   RecordData Record;
1170   StringRef Blob;
1171   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1172   if (!MaybeCode) {
1173     Error(MaybeCode.takeError());
1174     return true;
1175   }
1176   unsigned Code = MaybeCode.get();
1177 
1178   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1179   if (!MaybeRecCode) {
1180     Error(MaybeRecCode.takeError());
1181     return true;
1182   }
1183   unsigned RecCode = MaybeRecCode.get();
1184   if (RecCode != DECL_CONTEXT_LEXICAL) {
1185     Error("Expected lexical block");
1186     return true;
1187   }
1188 
1189   assert(!isa<TranslationUnitDecl>(DC) &&
1190          "expected a TU_UPDATE_LEXICAL record for TU");
1191   // If we are handling a C++ class template instantiation, we can see multiple
1192   // lexical updates for the same record. It's important that we select only one
1193   // of them, so that field numbering works properly. Just pick the first one we
1194   // see.
1195   auto &Lex = LexicalDecls[DC];
1196   if (!Lex.first) {
1197     Lex = std::make_pair(
1198         &M, llvm::makeArrayRef(
1199                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1200                     Blob.data()),
1201                 Blob.size() / 4));
1202   }
1203   DC->setHasExternalLexicalStorage(true);
1204   return false;
1205 }
1206 
1207 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1208                                               BitstreamCursor &Cursor,
1209                                               uint64_t Offset,
1210                                               DeclID ID) {
1211   assert(Offset != 0);
1212 
1213   SavedStreamPosition SavedPosition(Cursor);
1214   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1215     Error(std::move(Err));
1216     return true;
1217   }
1218 
1219   RecordData Record;
1220   StringRef Blob;
1221   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1222   if (!MaybeCode) {
1223     Error(MaybeCode.takeError());
1224     return true;
1225   }
1226   unsigned Code = MaybeCode.get();
1227 
1228   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1229   if (!MaybeRecCode) {
1230     Error(MaybeRecCode.takeError());
1231     return true;
1232   }
1233   unsigned RecCode = MaybeRecCode.get();
1234   if (RecCode != DECL_CONTEXT_VISIBLE) {
1235     Error("Expected visible lookup table block");
1236     return true;
1237   }
1238 
1239   // We can't safely determine the primary context yet, so delay attaching the
1240   // lookup table until we're done with recursive deserialization.
1241   auto *Data = (const unsigned char*)Blob.data();
1242   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1243   return false;
1244 }
1245 
1246 void ASTReader::Error(StringRef Msg) const {
1247   Error(diag::err_fe_pch_malformed, Msg);
1248   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1249       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1250     Diag(diag::note_module_cache_path)
1251       << PP.getHeaderSearchInfo().getModuleCachePath();
1252   }
1253 }
1254 
1255 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1256                       StringRef Arg3) const {
1257   if (Diags.isDiagnosticInFlight())
1258     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1259   else
1260     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1261 }
1262 
1263 void ASTReader::Error(llvm::Error &&Err) const {
1264   Error(toString(std::move(Err)));
1265 }
1266 
1267 //===----------------------------------------------------------------------===//
1268 // Source Manager Deserialization
1269 //===----------------------------------------------------------------------===//
1270 
1271 /// Read the line table in the source manager block.
1272 /// \returns true if there was an error.
1273 bool ASTReader::ParseLineTable(ModuleFile &F,
1274                                const RecordData &Record) {
1275   unsigned Idx = 0;
1276   LineTableInfo &LineTable = SourceMgr.getLineTable();
1277 
1278   // Parse the file names
1279   std::map<int, int> FileIDs;
1280   FileIDs[-1] = -1; // For unspecified filenames.
1281   for (unsigned I = 0; Record[Idx]; ++I) {
1282     // Extract the file name
1283     auto Filename = ReadPath(F, Record, Idx);
1284     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1285   }
1286   ++Idx;
1287 
1288   // Parse the line entries
1289   std::vector<LineEntry> Entries;
1290   while (Idx < Record.size()) {
1291     int FID = Record[Idx++];
1292     assert(FID >= 0 && "Serialized line entries for non-local file.");
1293     // Remap FileID from 1-based old view.
1294     FID += F.SLocEntryBaseID - 1;
1295 
1296     // Extract the line entries
1297     unsigned NumEntries = Record[Idx++];
1298     assert(NumEntries && "no line entries for file ID");
1299     Entries.clear();
1300     Entries.reserve(NumEntries);
1301     for (unsigned I = 0; I != NumEntries; ++I) {
1302       unsigned FileOffset = Record[Idx++];
1303       unsigned LineNo = Record[Idx++];
1304       int FilenameID = FileIDs[Record[Idx++]];
1305       SrcMgr::CharacteristicKind FileKind
1306         = (SrcMgr::CharacteristicKind)Record[Idx++];
1307       unsigned IncludeOffset = Record[Idx++];
1308       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1309                                        FileKind, IncludeOffset));
1310     }
1311     LineTable.AddEntry(FileID::get(FID), Entries);
1312   }
1313 
1314   return false;
1315 }
1316 
1317 /// Read a source manager block
1318 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1319   using namespace SrcMgr;
1320 
1321   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1322 
1323   // Set the source-location entry cursor to the current position in
1324   // the stream. This cursor will be used to read the contents of the
1325   // source manager block initially, and then lazily read
1326   // source-location entries as needed.
1327   SLocEntryCursor = F.Stream;
1328 
1329   // The stream itself is going to skip over the source manager block.
1330   if (llvm::Error Err = F.Stream.SkipBlock()) {
1331     Error(std::move(Err));
1332     return true;
1333   }
1334 
1335   // Enter the source manager block.
1336   if (llvm::Error Err =
1337           SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1338     Error(std::move(Err));
1339     return true;
1340   }
1341   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1342 
1343   RecordData Record;
1344   while (true) {
1345     Expected<llvm::BitstreamEntry> MaybeE =
1346         SLocEntryCursor.advanceSkippingSubblocks();
1347     if (!MaybeE) {
1348       Error(MaybeE.takeError());
1349       return true;
1350     }
1351     llvm::BitstreamEntry E = MaybeE.get();
1352 
1353     switch (E.Kind) {
1354     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1355     case llvm::BitstreamEntry::Error:
1356       Error("malformed block record in AST file");
1357       return true;
1358     case llvm::BitstreamEntry::EndBlock:
1359       return false;
1360     case llvm::BitstreamEntry::Record:
1361       // The interesting case.
1362       break;
1363     }
1364 
1365     // Read a record.
1366     Record.clear();
1367     StringRef Blob;
1368     Expected<unsigned> MaybeRecord =
1369         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1370     if (!MaybeRecord) {
1371       Error(MaybeRecord.takeError());
1372       return true;
1373     }
1374     switch (MaybeRecord.get()) {
1375     default:  // Default behavior: ignore.
1376       break;
1377 
1378     case SM_SLOC_FILE_ENTRY:
1379     case SM_SLOC_BUFFER_ENTRY:
1380     case SM_SLOC_EXPANSION_ENTRY:
1381       // Once we hit one of the source location entries, we're done.
1382       return false;
1383     }
1384   }
1385 }
1386 
1387 /// If a header file is not found at the path that we expect it to be
1388 /// and the PCH file was moved from its original location, try to resolve the
1389 /// file by assuming that header+PCH were moved together and the header is in
1390 /// the same place relative to the PCH.
1391 static std::string
1392 resolveFileRelativeToOriginalDir(const std::string &Filename,
1393                                  const std::string &OriginalDir,
1394                                  const std::string &CurrDir) {
1395   assert(OriginalDir != CurrDir &&
1396          "No point trying to resolve the file if the PCH dir didn't change");
1397 
1398   using namespace llvm::sys;
1399 
1400   SmallString<128> filePath(Filename);
1401   fs::make_absolute(filePath);
1402   assert(path::is_absolute(OriginalDir));
1403   SmallString<128> currPCHPath(CurrDir);
1404 
1405   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1406                        fileDirE = path::end(path::parent_path(filePath));
1407   path::const_iterator origDirI = path::begin(OriginalDir),
1408                        origDirE = path::end(OriginalDir);
1409   // Skip the common path components from filePath and OriginalDir.
1410   while (fileDirI != fileDirE && origDirI != origDirE &&
1411          *fileDirI == *origDirI) {
1412     ++fileDirI;
1413     ++origDirI;
1414   }
1415   for (; origDirI != origDirE; ++origDirI)
1416     path::append(currPCHPath, "..");
1417   path::append(currPCHPath, fileDirI, fileDirE);
1418   path::append(currPCHPath, path::filename(Filename));
1419   return std::string(currPCHPath.str());
1420 }
1421 
1422 bool ASTReader::ReadSLocEntry(int ID) {
1423   if (ID == 0)
1424     return false;
1425 
1426   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1427     Error("source location entry ID out-of-range for AST file");
1428     return true;
1429   }
1430 
1431   // Local helper to read the (possibly-compressed) buffer data following the
1432   // entry record.
1433   auto ReadBuffer = [this](
1434       BitstreamCursor &SLocEntryCursor,
1435       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1436     RecordData Record;
1437     StringRef Blob;
1438     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1439     if (!MaybeCode) {
1440       Error(MaybeCode.takeError());
1441       return nullptr;
1442     }
1443     unsigned Code = MaybeCode.get();
1444 
1445     Expected<unsigned> MaybeRecCode =
1446         SLocEntryCursor.readRecord(Code, Record, &Blob);
1447     if (!MaybeRecCode) {
1448       Error(MaybeRecCode.takeError());
1449       return nullptr;
1450     }
1451     unsigned RecCode = MaybeRecCode.get();
1452 
1453     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1454       if (!llvm::zlib::isAvailable()) {
1455         Error("zlib is not available");
1456         return nullptr;
1457       }
1458       SmallString<0> Uncompressed;
1459       if (llvm::Error E =
1460               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1461         Error("could not decompress embedded file contents: " +
1462               llvm::toString(std::move(E)));
1463         return nullptr;
1464       }
1465       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1466     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1467       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1468     } else {
1469       Error("AST record has invalid code");
1470       return nullptr;
1471     }
1472   };
1473 
1474   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1475   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1476           F->SLocEntryOffsetsBase +
1477           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1478     Error(std::move(Err));
1479     return true;
1480   }
1481 
1482   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1483   unsigned BaseOffset = F->SLocEntryBaseOffset;
1484 
1485   ++NumSLocEntriesRead;
1486   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1487   if (!MaybeEntry) {
1488     Error(MaybeEntry.takeError());
1489     return true;
1490   }
1491   llvm::BitstreamEntry Entry = MaybeEntry.get();
1492 
1493   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1494     Error("incorrectly-formatted source location entry in AST file");
1495     return true;
1496   }
1497 
1498   RecordData Record;
1499   StringRef Blob;
1500   Expected<unsigned> MaybeSLOC =
1501       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1502   if (!MaybeSLOC) {
1503     Error(MaybeSLOC.takeError());
1504     return true;
1505   }
1506   switch (MaybeSLOC.get()) {
1507   default:
1508     Error("incorrectly-formatted source location entry in AST file");
1509     return true;
1510 
1511   case SM_SLOC_FILE_ENTRY: {
1512     // We will detect whether a file changed and return 'Failure' for it, but
1513     // we will also try to fail gracefully by setting up the SLocEntry.
1514     unsigned InputID = Record[4];
1515     InputFile IF = getInputFile(*F, InputID);
1516     Optional<FileEntryRef> File = IF.getFile();
1517     bool OverriddenBuffer = IF.isOverridden();
1518 
1519     // Note that we only check if a File was returned. If it was out-of-date
1520     // we have complained but we will continue creating a FileID to recover
1521     // gracefully.
1522     if (!File)
1523       return true;
1524 
1525     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1526     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1527       // This is the module's main file.
1528       IncludeLoc = getImportLocation(F);
1529     }
1530     SrcMgr::CharacteristicKind
1531       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1532     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1533                                         BaseOffset + Record[0]);
1534     SrcMgr::FileInfo &FileInfo =
1535           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1536     FileInfo.NumCreatedFIDs = Record[5];
1537     if (Record[3])
1538       FileInfo.setHasLineDirectives();
1539 
1540     unsigned NumFileDecls = Record[7];
1541     if (NumFileDecls && ContextObj) {
1542       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1543       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1544       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1545                                                              NumFileDecls));
1546     }
1547 
1548     const SrcMgr::ContentCache &ContentCache =
1549         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1550     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1551         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1552         !ContentCache.getBufferIfLoaded()) {
1553       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1554       if (!Buffer)
1555         return true;
1556       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1557     }
1558 
1559     break;
1560   }
1561 
1562   case SM_SLOC_BUFFER_ENTRY: {
1563     const char *Name = Blob.data();
1564     unsigned Offset = Record[0];
1565     SrcMgr::CharacteristicKind
1566       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1567     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1568     if (IncludeLoc.isInvalid() && F->isModule()) {
1569       IncludeLoc = getImportLocation(F);
1570     }
1571 
1572     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1573     if (!Buffer)
1574       return true;
1575     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1576                            BaseOffset + Offset, IncludeLoc);
1577     break;
1578   }
1579 
1580   case SM_SLOC_EXPANSION_ENTRY: {
1581     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1582     SourceMgr.createExpansionLoc(SpellingLoc,
1583                                      ReadSourceLocation(*F, Record[2]),
1584                                      ReadSourceLocation(*F, Record[3]),
1585                                      Record[5],
1586                                      Record[4],
1587                                      ID,
1588                                      BaseOffset + Record[0]);
1589     break;
1590   }
1591   }
1592 
1593   return false;
1594 }
1595 
1596 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1597   if (ID == 0)
1598     return std::make_pair(SourceLocation(), "");
1599 
1600   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1601     Error("source location entry ID out-of-range for AST file");
1602     return std::make_pair(SourceLocation(), "");
1603   }
1604 
1605   // Find which module file this entry lands in.
1606   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1607   if (!M->isModule())
1608     return std::make_pair(SourceLocation(), "");
1609 
1610   // FIXME: Can we map this down to a particular submodule? That would be
1611   // ideal.
1612   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1613 }
1614 
1615 /// Find the location where the module F is imported.
1616 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1617   if (F->ImportLoc.isValid())
1618     return F->ImportLoc;
1619 
1620   // Otherwise we have a PCH. It's considered to be "imported" at the first
1621   // location of its includer.
1622   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1623     // Main file is the importer.
1624     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1625     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1626   }
1627   return F->ImportedBy[0]->FirstLoc;
1628 }
1629 
1630 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1631 /// the abbreviations that are at the top of the block and then leave the cursor
1632 /// pointing into the block.
1633 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID,
1634                                  uint64_t *StartOfBlockOffset) {
1635   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1636     // FIXME this drops errors on the floor.
1637     consumeError(std::move(Err));
1638     return true;
1639   }
1640 
1641   if (StartOfBlockOffset)
1642     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1643 
1644   while (true) {
1645     uint64_t Offset = Cursor.GetCurrentBitNo();
1646     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1647     if (!MaybeCode) {
1648       // FIXME this drops errors on the floor.
1649       consumeError(MaybeCode.takeError());
1650       return true;
1651     }
1652     unsigned Code = MaybeCode.get();
1653 
1654     // We expect all abbrevs to be at the start of the block.
1655     if (Code != llvm::bitc::DEFINE_ABBREV) {
1656       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1657         // FIXME this drops errors on the floor.
1658         consumeError(std::move(Err));
1659         return true;
1660       }
1661       return false;
1662     }
1663     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1664       // FIXME this drops errors on the floor.
1665       consumeError(std::move(Err));
1666       return true;
1667     }
1668   }
1669 }
1670 
1671 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1672                            unsigned &Idx) {
1673   Token Tok;
1674   Tok.startToken();
1675   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1676   Tok.setLength(Record[Idx++]);
1677   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1678     Tok.setIdentifierInfo(II);
1679   Tok.setKind((tok::TokenKind)Record[Idx++]);
1680   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1681   return Tok;
1682 }
1683 
1684 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1685   BitstreamCursor &Stream = F.MacroCursor;
1686 
1687   // Keep track of where we are in the stream, then jump back there
1688   // after reading this macro.
1689   SavedStreamPosition SavedPosition(Stream);
1690 
1691   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1692     // FIXME this drops errors on the floor.
1693     consumeError(std::move(Err));
1694     return nullptr;
1695   }
1696   RecordData Record;
1697   SmallVector<IdentifierInfo*, 16> MacroParams;
1698   MacroInfo *Macro = nullptr;
1699 
1700   while (true) {
1701     // Advance to the next record, but if we get to the end of the block, don't
1702     // pop it (removing all the abbreviations from the cursor) since we want to
1703     // be able to reseek within the block and read entries.
1704     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1705     Expected<llvm::BitstreamEntry> MaybeEntry =
1706         Stream.advanceSkippingSubblocks(Flags);
1707     if (!MaybeEntry) {
1708       Error(MaybeEntry.takeError());
1709       return Macro;
1710     }
1711     llvm::BitstreamEntry Entry = MaybeEntry.get();
1712 
1713     switch (Entry.Kind) {
1714     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1715     case llvm::BitstreamEntry::Error:
1716       Error("malformed block record in AST file");
1717       return Macro;
1718     case llvm::BitstreamEntry::EndBlock:
1719       return Macro;
1720     case llvm::BitstreamEntry::Record:
1721       // The interesting case.
1722       break;
1723     }
1724 
1725     // Read a record.
1726     Record.clear();
1727     PreprocessorRecordTypes RecType;
1728     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1729       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1730     else {
1731       Error(MaybeRecType.takeError());
1732       return Macro;
1733     }
1734     switch (RecType) {
1735     case PP_MODULE_MACRO:
1736     case PP_MACRO_DIRECTIVE_HISTORY:
1737       return Macro;
1738 
1739     case PP_MACRO_OBJECT_LIKE:
1740     case PP_MACRO_FUNCTION_LIKE: {
1741       // If we already have a macro, that means that we've hit the end
1742       // of the definition of the macro we were looking for. We're
1743       // done.
1744       if (Macro)
1745         return Macro;
1746 
1747       unsigned NextIndex = 1; // Skip identifier ID.
1748       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1749       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1750       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1751       MI->setIsUsed(Record[NextIndex++]);
1752       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1753 
1754       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1755         // Decode function-like macro info.
1756         bool isC99VarArgs = Record[NextIndex++];
1757         bool isGNUVarArgs = Record[NextIndex++];
1758         bool hasCommaPasting = Record[NextIndex++];
1759         MacroParams.clear();
1760         unsigned NumArgs = Record[NextIndex++];
1761         for (unsigned i = 0; i != NumArgs; ++i)
1762           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1763 
1764         // Install function-like macro info.
1765         MI->setIsFunctionLike();
1766         if (isC99VarArgs) MI->setIsC99Varargs();
1767         if (isGNUVarArgs) MI->setIsGNUVarargs();
1768         if (hasCommaPasting) MI->setHasCommaPasting();
1769         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1770       }
1771 
1772       // Remember that we saw this macro last so that we add the tokens that
1773       // form its body to it.
1774       Macro = MI;
1775 
1776       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1777           Record[NextIndex]) {
1778         // We have a macro definition. Register the association
1779         PreprocessedEntityID
1780             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1781         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1782         PreprocessingRecord::PPEntityID PPID =
1783             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1784         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1785             PPRec.getPreprocessedEntity(PPID));
1786         if (PPDef)
1787           PPRec.RegisterMacroDefinition(Macro, PPDef);
1788       }
1789 
1790       ++NumMacrosRead;
1791       break;
1792     }
1793 
1794     case PP_TOKEN: {
1795       // If we see a TOKEN before a PP_MACRO_*, then the file is
1796       // erroneous, just pretend we didn't see this.
1797       if (!Macro) break;
1798 
1799       unsigned Idx = 0;
1800       Token Tok = ReadToken(F, Record, Idx);
1801       Macro->AddTokenToBody(Tok);
1802       break;
1803     }
1804     }
1805   }
1806 }
1807 
1808 PreprocessedEntityID
1809 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1810                                          unsigned LocalID) const {
1811   if (!M.ModuleOffsetMap.empty())
1812     ReadModuleOffsetMap(M);
1813 
1814   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1815     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1816   assert(I != M.PreprocessedEntityRemap.end()
1817          && "Invalid index into preprocessed entity index remap");
1818 
1819   return LocalID + I->second;
1820 }
1821 
1822 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1823   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1824 }
1825 
1826 HeaderFileInfoTrait::internal_key_type
1827 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1828   internal_key_type ikey = {FE->getSize(),
1829                             M.HasTimestamps ? FE->getModificationTime() : 0,
1830                             FE->getName(), /*Imported*/ false};
1831   return ikey;
1832 }
1833 
1834 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1835   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1836     return false;
1837 
1838   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1839     return true;
1840 
1841   // Determine whether the actual files are equivalent.
1842   FileManager &FileMgr = Reader.getFileManager();
1843   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1844     if (!Key.Imported) {
1845       if (auto File = FileMgr.getFile(Key.Filename))
1846         return *File;
1847       return nullptr;
1848     }
1849 
1850     std::string Resolved = std::string(Key.Filename);
1851     Reader.ResolveImportedPath(M, Resolved);
1852     if (auto File = FileMgr.getFile(Resolved))
1853       return *File;
1854     return nullptr;
1855   };
1856 
1857   const FileEntry *FEA = GetFile(a);
1858   const FileEntry *FEB = GetFile(b);
1859   return FEA && FEA == FEB;
1860 }
1861 
1862 std::pair<unsigned, unsigned>
1863 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1864   return readULEBKeyDataLength(d);
1865 }
1866 
1867 HeaderFileInfoTrait::internal_key_type
1868 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1869   using namespace llvm::support;
1870 
1871   internal_key_type ikey;
1872   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1873   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1874   ikey.Filename = (const char *)d;
1875   ikey.Imported = true;
1876   return ikey;
1877 }
1878 
1879 HeaderFileInfoTrait::data_type
1880 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1881                               unsigned DataLen) {
1882   using namespace llvm::support;
1883 
1884   const unsigned char *End = d + DataLen;
1885   HeaderFileInfo HFI;
1886   unsigned Flags = *d++;
1887   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1888   HFI.isImport |= (Flags >> 5) & 0x01;
1889   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1890   HFI.DirInfo = (Flags >> 1) & 0x07;
1891   HFI.IndexHeaderMapHeader = Flags & 0x01;
1892   // FIXME: Find a better way to handle this. Maybe just store a
1893   // "has been included" flag?
1894   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1895                              HFI.NumIncludes);
1896   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1897       M, endian::readNext<uint32_t, little, unaligned>(d));
1898   if (unsigned FrameworkOffset =
1899           endian::readNext<uint32_t, little, unaligned>(d)) {
1900     // The framework offset is 1 greater than the actual offset,
1901     // since 0 is used as an indicator for "no framework name".
1902     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1903     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1904   }
1905 
1906   assert((End - d) % 4 == 0 &&
1907          "Wrong data length in HeaderFileInfo deserialization");
1908   while (d != End) {
1909     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1910     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1911     LocalSMID >>= 2;
1912 
1913     // This header is part of a module. Associate it with the module to enable
1914     // implicit module import.
1915     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1916     Module *Mod = Reader.getSubmodule(GlobalSMID);
1917     FileManager &FileMgr = Reader.getFileManager();
1918     ModuleMap &ModMap =
1919         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1920 
1921     std::string Filename = std::string(key.Filename);
1922     if (key.Imported)
1923       Reader.ResolveImportedPath(M, Filename);
1924     // FIXME: This is not always the right filename-as-written, but we're not
1925     // going to use this information to rebuild the module, so it doesn't make
1926     // a lot of difference.
1927     Module::Header H = {std::string(key.Filename),
1928                         *FileMgr.getOptionalFileRef(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, mark modules on error as out-of-date.
2765         if (F.Kind == MK_ImplicitModule &&
2766             (ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate))
2767           return OutOfDate;
2768 
2769         if (!AllowASTWithCompilerErrors) {
2770           Diag(diag::err_pch_with_compiler_errors);
2771           return HadErrors;
2772         }
2773       }
2774       if (hasErrors) {
2775         Diags.ErrorOccurred = true;
2776         Diags.UncompilableErrorOccurred = true;
2777         Diags.UnrecoverableErrorOccurred = true;
2778       }
2779 
2780       F.RelocatablePCH = Record[4];
2781       // Relative paths in a relocatable PCH are relative to our sysroot.
2782       if (F.RelocatablePCH)
2783         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2784 
2785       F.HasTimestamps = Record[5];
2786 
2787       const std::string &CurBranch = getClangFullRepositoryVersion();
2788       StringRef ASTBranch = Blob;
2789       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2790         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2791           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2792         return VersionMismatch;
2793       }
2794       break;
2795     }
2796 
2797     case IMPORTS: {
2798       // Validate the AST before processing any imports (otherwise, untangling
2799       // them can be error-prone and expensive).  A module will have a name and
2800       // will already have been validated, but this catches the PCH case.
2801       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2802         return Result;
2803 
2804       // Load each of the imported PCH files.
2805       unsigned Idx = 0, N = Record.size();
2806       while (Idx < N) {
2807         // Read information about the AST file.
2808         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2809         // The import location will be the local one for now; we will adjust
2810         // all import locations of module imports after the global source
2811         // location info are setup, in ReadAST.
2812         SourceLocation ImportLoc =
2813             ReadUntranslatedSourceLocation(Record[Idx++]);
2814         off_t StoredSize = (off_t)Record[Idx++];
2815         time_t StoredModTime = (time_t)Record[Idx++];
2816         auto FirstSignatureByte = Record.begin() + Idx;
2817         ASTFileSignature StoredSignature = ASTFileSignature::create(
2818             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2819         Idx += ASTFileSignature::size;
2820 
2821         std::string ImportedName = ReadString(Record, Idx);
2822         std::string ImportedFile;
2823 
2824         // For prebuilt and explicit modules first consult the file map for
2825         // an override. Note that here we don't search prebuilt module
2826         // directories, only the explicit name to file mappings. Also, we will
2827         // still verify the size/signature making sure it is essentially the
2828         // same file but perhaps in a different location.
2829         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2830           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2831             ImportedName, /*FileMapOnly*/ true);
2832 
2833         if (ImportedFile.empty())
2834           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2835           // ModuleCache as when writing.
2836           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2837         else
2838           SkipPath(Record, Idx);
2839 
2840         // If our client can't cope with us being out of date, we can't cope with
2841         // our dependency being missing.
2842         unsigned Capabilities = ClientLoadCapabilities;
2843         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2844           Capabilities &= ~ARR_Missing;
2845 
2846         // Load the AST file.
2847         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2848                                   Loaded, StoredSize, StoredModTime,
2849                                   StoredSignature, Capabilities);
2850 
2851         // If we diagnosed a problem, produce a backtrace.
2852         if (isDiagnosedResult(Result, Capabilities))
2853           Diag(diag::note_module_file_imported_by)
2854               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2855 
2856         switch (Result) {
2857         case Failure: return Failure;
2858           // If we have to ignore the dependency, we'll have to ignore this too.
2859         case Missing:
2860         case OutOfDate: return OutOfDate;
2861         case VersionMismatch: return VersionMismatch;
2862         case ConfigurationMismatch: return ConfigurationMismatch;
2863         case HadErrors: return HadErrors;
2864         case Success: break;
2865         }
2866       }
2867       break;
2868     }
2869 
2870     case ORIGINAL_FILE:
2871       F.OriginalSourceFileID = FileID::get(Record[0]);
2872       F.ActualOriginalSourceFileName = std::string(Blob);
2873       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2874       ResolveImportedPath(F, F.OriginalSourceFileName);
2875       break;
2876 
2877     case ORIGINAL_FILE_ID:
2878       F.OriginalSourceFileID = FileID::get(Record[0]);
2879       break;
2880 
2881     case ORIGINAL_PCH_DIR:
2882       F.OriginalDir = std::string(Blob);
2883       break;
2884 
2885     case MODULE_NAME:
2886       F.ModuleName = std::string(Blob);
2887       Diag(diag::remark_module_import)
2888           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2889           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2890       if (Listener)
2891         Listener->ReadModuleName(F.ModuleName);
2892 
2893       // Validate the AST as soon as we have a name so we can exit early on
2894       // failure.
2895       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2896         return Result;
2897 
2898       break;
2899 
2900     case MODULE_DIRECTORY: {
2901       // Save the BaseDirectory as written in the PCM for computing the module
2902       // filename for the ModuleCache.
2903       BaseDirectoryAsWritten = Blob;
2904       assert(!F.ModuleName.empty() &&
2905              "MODULE_DIRECTORY found before MODULE_NAME");
2906       // If we've already loaded a module map file covering this module, we may
2907       // have a better path for it (relative to the current build).
2908       Module *M = PP.getHeaderSearchInfo().lookupModule(
2909           F.ModuleName, /*AllowSearch*/ true,
2910           /*AllowExtraModuleMapSearch*/ true);
2911       if (M && M->Directory) {
2912         // If we're implicitly loading a module, the base directory can't
2913         // change between the build and use.
2914         // Don't emit module relocation error if we have -fno-validate-pch
2915         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2916                   DisableValidationForModuleKind::Module) &&
2917             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2918           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2919           if (!BuildDir || *BuildDir != M->Directory) {
2920             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2921               Diag(diag::err_imported_module_relocated)
2922                   << F.ModuleName << Blob << M->Directory->getName();
2923             return OutOfDate;
2924           }
2925         }
2926         F.BaseDirectory = std::string(M->Directory->getName());
2927       } else {
2928         F.BaseDirectory = std::string(Blob);
2929       }
2930       break;
2931     }
2932 
2933     case MODULE_MAP_FILE:
2934       if (ASTReadResult Result =
2935               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2936         return Result;
2937       break;
2938 
2939     case INPUT_FILE_OFFSETS:
2940       NumInputs = Record[0];
2941       NumUserInputs = Record[1];
2942       F.InputFileOffsets =
2943           (const llvm::support::unaligned_uint64_t *)Blob.data();
2944       F.InputFilesLoaded.resize(NumInputs);
2945       F.NumUserInputFiles = NumUserInputs;
2946       break;
2947     }
2948   }
2949 }
2950 
2951 ASTReader::ASTReadResult
2952 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2953   BitstreamCursor &Stream = F.Stream;
2954 
2955   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2956     Error(std::move(Err));
2957     return Failure;
2958   }
2959   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2960 
2961   // Read all of the records and blocks for the AST file.
2962   RecordData Record;
2963   while (true) {
2964     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2965     if (!MaybeEntry) {
2966       Error(MaybeEntry.takeError());
2967       return Failure;
2968     }
2969     llvm::BitstreamEntry Entry = MaybeEntry.get();
2970 
2971     switch (Entry.Kind) {
2972     case llvm::BitstreamEntry::Error:
2973       Error("error at end of module block in AST file");
2974       return Failure;
2975     case llvm::BitstreamEntry::EndBlock:
2976       // Outside of C++, we do not store a lookup map for the translation unit.
2977       // Instead, mark it as needing a lookup map to be built if this module
2978       // contains any declarations lexically within it (which it always does!).
2979       // This usually has no cost, since we very rarely need the lookup map for
2980       // the translation unit outside C++.
2981       if (ASTContext *Ctx = ContextObj) {
2982         DeclContext *DC = Ctx->getTranslationUnitDecl();
2983         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2984           DC->setMustBuildLookupTable();
2985       }
2986 
2987       return Success;
2988     case llvm::BitstreamEntry::SubBlock:
2989       switch (Entry.ID) {
2990       case DECLTYPES_BLOCK_ID:
2991         // We lazily load the decls block, but we want to set up the
2992         // DeclsCursor cursor to point into it.  Clone our current bitcode
2993         // cursor to it, enter the block and read the abbrevs in that block.
2994         // With the main cursor, we just skip over it.
2995         F.DeclsCursor = Stream;
2996         if (llvm::Error Err = Stream.SkipBlock()) {
2997           Error(std::move(Err));
2998           return Failure;
2999         }
3000         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID,
3001                              &F.DeclsBlockStartOffset)) {
3002           Error("malformed block record in AST file");
3003           return Failure;
3004         }
3005         break;
3006 
3007       case PREPROCESSOR_BLOCK_ID:
3008         F.MacroCursor = Stream;
3009         if (!PP.getExternalSource())
3010           PP.setExternalSource(this);
3011 
3012         if (llvm::Error Err = Stream.SkipBlock()) {
3013           Error(std::move(Err));
3014           return Failure;
3015         }
3016         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
3017           Error("malformed block record in AST file");
3018           return Failure;
3019         }
3020         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3021         break;
3022 
3023       case PREPROCESSOR_DETAIL_BLOCK_ID:
3024         F.PreprocessorDetailCursor = Stream;
3025 
3026         if (llvm::Error Err = Stream.SkipBlock()) {
3027           Error(std::move(Err));
3028           return Failure;
3029         }
3030         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3031                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3032           Error("malformed preprocessor detail record in AST file");
3033           return Failure;
3034         }
3035         F.PreprocessorDetailStartOffset
3036         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3037 
3038         if (!PP.getPreprocessingRecord())
3039           PP.createPreprocessingRecord();
3040         if (!PP.getPreprocessingRecord()->getExternalSource())
3041           PP.getPreprocessingRecord()->SetExternalSource(*this);
3042         break;
3043 
3044       case SOURCE_MANAGER_BLOCK_ID:
3045         if (ReadSourceManagerBlock(F))
3046           return Failure;
3047         break;
3048 
3049       case SUBMODULE_BLOCK_ID:
3050         if (ASTReadResult Result =
3051                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3052           return Result;
3053         break;
3054 
3055       case COMMENTS_BLOCK_ID: {
3056         BitstreamCursor C = Stream;
3057 
3058         if (llvm::Error Err = Stream.SkipBlock()) {
3059           Error(std::move(Err));
3060           return Failure;
3061         }
3062         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3063           Error("malformed comments block in AST file");
3064           return Failure;
3065         }
3066         CommentsCursors.push_back(std::make_pair(C, &F));
3067         break;
3068       }
3069 
3070       default:
3071         if (llvm::Error Err = Stream.SkipBlock()) {
3072           Error(std::move(Err));
3073           return Failure;
3074         }
3075         break;
3076       }
3077       continue;
3078 
3079     case llvm::BitstreamEntry::Record:
3080       // The interesting case.
3081       break;
3082     }
3083 
3084     // Read and process a record.
3085     Record.clear();
3086     StringRef Blob;
3087     Expected<unsigned> MaybeRecordType =
3088         Stream.readRecord(Entry.ID, Record, &Blob);
3089     if (!MaybeRecordType) {
3090       Error(MaybeRecordType.takeError());
3091       return Failure;
3092     }
3093     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3094 
3095     // If we're not loading an AST context, we don't care about most records.
3096     if (!ContextObj) {
3097       switch (RecordType) {
3098       case IDENTIFIER_TABLE:
3099       case IDENTIFIER_OFFSET:
3100       case INTERESTING_IDENTIFIERS:
3101       case STATISTICS:
3102       case PP_CONDITIONAL_STACK:
3103       case PP_COUNTER_VALUE:
3104       case SOURCE_LOCATION_OFFSETS:
3105       case MODULE_OFFSET_MAP:
3106       case SOURCE_MANAGER_LINE_TABLE:
3107       case SOURCE_LOCATION_PRELOADS:
3108       case PPD_ENTITIES_OFFSETS:
3109       case HEADER_SEARCH_TABLE:
3110       case IMPORTED_MODULES:
3111       case MACRO_OFFSET:
3112         break;
3113       default:
3114         continue;
3115       }
3116     }
3117 
3118     switch (RecordType) {
3119     default:  // Default behavior: ignore.
3120       break;
3121 
3122     case TYPE_OFFSET: {
3123       if (F.LocalNumTypes != 0) {
3124         Error("duplicate TYPE_OFFSET record in AST file");
3125         return Failure;
3126       }
3127       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3128       F.LocalNumTypes = Record[0];
3129       unsigned LocalBaseTypeIndex = Record[1];
3130       F.BaseTypeIndex = getTotalNumTypes();
3131 
3132       if (F.LocalNumTypes > 0) {
3133         // Introduce the global -> local mapping for types within this module.
3134         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3135 
3136         // Introduce the local -> global mapping for types within this module.
3137         F.TypeRemap.insertOrReplace(
3138           std::make_pair(LocalBaseTypeIndex,
3139                          F.BaseTypeIndex - LocalBaseTypeIndex));
3140 
3141         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3142       }
3143       break;
3144     }
3145 
3146     case DECL_OFFSET: {
3147       if (F.LocalNumDecls != 0) {
3148         Error("duplicate DECL_OFFSET record in AST file");
3149         return Failure;
3150       }
3151       F.DeclOffsets = (const DeclOffset *)Blob.data();
3152       F.LocalNumDecls = Record[0];
3153       unsigned LocalBaseDeclID = Record[1];
3154       F.BaseDeclID = getTotalNumDecls();
3155 
3156       if (F.LocalNumDecls > 0) {
3157         // Introduce the global -> local mapping for declarations within this
3158         // module.
3159         GlobalDeclMap.insert(
3160           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3161 
3162         // Introduce the local -> global mapping for declarations within this
3163         // module.
3164         F.DeclRemap.insertOrReplace(
3165           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3166 
3167         // Introduce the global -> local mapping for declarations within this
3168         // module.
3169         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3170 
3171         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3172       }
3173       break;
3174     }
3175 
3176     case TU_UPDATE_LEXICAL: {
3177       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3178       LexicalContents Contents(
3179           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3180               Blob.data()),
3181           static_cast<unsigned int>(Blob.size() / 4));
3182       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3183       TU->setHasExternalLexicalStorage(true);
3184       break;
3185     }
3186 
3187     case UPDATE_VISIBLE: {
3188       unsigned Idx = 0;
3189       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3190       auto *Data = (const unsigned char*)Blob.data();
3191       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3192       // If we've already loaded the decl, perform the updates when we finish
3193       // loading this block.
3194       if (Decl *D = GetExistingDecl(ID))
3195         PendingUpdateRecords.push_back(
3196             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3197       break;
3198     }
3199 
3200     case IDENTIFIER_TABLE:
3201       F.IdentifierTableData =
3202           reinterpret_cast<const unsigned char *>(Blob.data());
3203       if (Record[0]) {
3204         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3205             F.IdentifierTableData + Record[0],
3206             F.IdentifierTableData + sizeof(uint32_t),
3207             F.IdentifierTableData,
3208             ASTIdentifierLookupTrait(*this, F));
3209 
3210         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3211       }
3212       break;
3213 
3214     case IDENTIFIER_OFFSET: {
3215       if (F.LocalNumIdentifiers != 0) {
3216         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3217         return Failure;
3218       }
3219       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3220       F.LocalNumIdentifiers = Record[0];
3221       unsigned LocalBaseIdentifierID = Record[1];
3222       F.BaseIdentifierID = getTotalNumIdentifiers();
3223 
3224       if (F.LocalNumIdentifiers > 0) {
3225         // Introduce the global -> local mapping for identifiers within this
3226         // module.
3227         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3228                                                   &F));
3229 
3230         // Introduce the local -> global mapping for identifiers within this
3231         // module.
3232         F.IdentifierRemap.insertOrReplace(
3233           std::make_pair(LocalBaseIdentifierID,
3234                          F.BaseIdentifierID - LocalBaseIdentifierID));
3235 
3236         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3237                                  + F.LocalNumIdentifiers);
3238       }
3239       break;
3240     }
3241 
3242     case INTERESTING_IDENTIFIERS:
3243       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3244       break;
3245 
3246     case EAGERLY_DESERIALIZED_DECLS:
3247       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3248       // about "interesting" decls (for instance, if we're building a module).
3249       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3250         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3251       break;
3252 
3253     case MODULAR_CODEGEN_DECLS:
3254       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3255       // them (ie: if we're not codegenerating this module).
3256       if (F.Kind == MK_MainFile ||
3257           getContext().getLangOpts().BuildingPCHWithObjectFile)
3258         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3259           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3260       break;
3261 
3262     case SPECIAL_TYPES:
3263       if (SpecialTypes.empty()) {
3264         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3265           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3266         break;
3267       }
3268 
3269       if (SpecialTypes.size() != Record.size()) {
3270         Error("invalid special-types record");
3271         return Failure;
3272       }
3273 
3274       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3275         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3276         if (!SpecialTypes[I])
3277           SpecialTypes[I] = ID;
3278         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3279         // merge step?
3280       }
3281       break;
3282 
3283     case STATISTICS:
3284       TotalNumStatements += Record[0];
3285       TotalNumMacros += Record[1];
3286       TotalLexicalDeclContexts += Record[2];
3287       TotalVisibleDeclContexts += Record[3];
3288       break;
3289 
3290     case UNUSED_FILESCOPED_DECLS:
3291       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3292         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3293       break;
3294 
3295     case DELEGATING_CTORS:
3296       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3297         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3298       break;
3299 
3300     case WEAK_UNDECLARED_IDENTIFIERS:
3301       if (Record.size() % 4 != 0) {
3302         Error("invalid weak identifiers record");
3303         return Failure;
3304       }
3305 
3306       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3307       // files. This isn't the way to do it :)
3308       WeakUndeclaredIdentifiers.clear();
3309 
3310       // Translate the weak, undeclared identifiers into global IDs.
3311       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3312         WeakUndeclaredIdentifiers.push_back(
3313           getGlobalIdentifierID(F, Record[I++]));
3314         WeakUndeclaredIdentifiers.push_back(
3315           getGlobalIdentifierID(F, Record[I++]));
3316         WeakUndeclaredIdentifiers.push_back(
3317           ReadSourceLocation(F, Record, I).getRawEncoding());
3318         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3319       }
3320       break;
3321 
3322     case SELECTOR_OFFSETS: {
3323       F.SelectorOffsets = (const uint32_t *)Blob.data();
3324       F.LocalNumSelectors = Record[0];
3325       unsigned LocalBaseSelectorID = Record[1];
3326       F.BaseSelectorID = getTotalNumSelectors();
3327 
3328       if (F.LocalNumSelectors > 0) {
3329         // Introduce the global -> local mapping for selectors within this
3330         // module.
3331         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3332 
3333         // Introduce the local -> global mapping for selectors within this
3334         // module.
3335         F.SelectorRemap.insertOrReplace(
3336           std::make_pair(LocalBaseSelectorID,
3337                          F.BaseSelectorID - LocalBaseSelectorID));
3338 
3339         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3340       }
3341       break;
3342     }
3343 
3344     case METHOD_POOL:
3345       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3346       if (Record[0])
3347         F.SelectorLookupTable
3348           = ASTSelectorLookupTable::Create(
3349                         F.SelectorLookupTableData + Record[0],
3350                         F.SelectorLookupTableData,
3351                         ASTSelectorLookupTrait(*this, F));
3352       TotalNumMethodPoolEntries += Record[1];
3353       break;
3354 
3355     case REFERENCED_SELECTOR_POOL:
3356       if (!Record.empty()) {
3357         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3358           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3359                                                                 Record[Idx++]));
3360           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3361                                               getRawEncoding());
3362         }
3363       }
3364       break;
3365 
3366     case PP_CONDITIONAL_STACK:
3367       if (!Record.empty()) {
3368         unsigned Idx = 0, End = Record.size() - 1;
3369         bool ReachedEOFWhileSkipping = Record[Idx++];
3370         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3371         if (ReachedEOFWhileSkipping) {
3372           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3373           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3374           bool FoundNonSkipPortion = Record[Idx++];
3375           bool FoundElse = Record[Idx++];
3376           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3377           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3378                            FoundElse, ElseLoc);
3379         }
3380         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3381         while (Idx < End) {
3382           auto Loc = ReadSourceLocation(F, Record, Idx);
3383           bool WasSkipping = Record[Idx++];
3384           bool FoundNonSkip = Record[Idx++];
3385           bool FoundElse = Record[Idx++];
3386           ConditionalStack.push_back(
3387               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3388         }
3389         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3390       }
3391       break;
3392 
3393     case PP_COUNTER_VALUE:
3394       if (!Record.empty() && Listener)
3395         Listener->ReadCounter(F, Record[0]);
3396       break;
3397 
3398     case FILE_SORTED_DECLS:
3399       F.FileSortedDecls = (const DeclID *)Blob.data();
3400       F.NumFileSortedDecls = Record[0];
3401       break;
3402 
3403     case SOURCE_LOCATION_OFFSETS: {
3404       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3405       F.LocalNumSLocEntries = Record[0];
3406       unsigned SLocSpaceSize = Record[1];
3407       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3408       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3409           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3410                                               SLocSpaceSize);
3411       if (!F.SLocEntryBaseID) {
3412         Error("ran out of source locations");
3413         break;
3414       }
3415       // Make our entry in the range map. BaseID is negative and growing, so
3416       // we invert it. Because we invert it, though, we need the other end of
3417       // the range.
3418       unsigned RangeStart =
3419           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3420       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3421       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3422 
3423       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3424       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
3425       GlobalSLocOffsetMap.insert(
3426           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3427                            - SLocSpaceSize,&F));
3428 
3429       // Initialize the remapping table.
3430       // Invalid stays invalid.
3431       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3432       // This module. Base was 2 when being compiled.
3433       F.SLocRemap.insertOrReplace(std::make_pair(2U,
3434                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
3435 
3436       TotalNumSLocEntries += F.LocalNumSLocEntries;
3437       break;
3438     }
3439 
3440     case MODULE_OFFSET_MAP:
3441       F.ModuleOffsetMap = Blob;
3442       break;
3443 
3444     case SOURCE_MANAGER_LINE_TABLE:
3445       if (ParseLineTable(F, Record)) {
3446         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3447         return Failure;
3448       }
3449       break;
3450 
3451     case SOURCE_LOCATION_PRELOADS: {
3452       // Need to transform from the local view (1-based IDs) to the global view,
3453       // which is based off F.SLocEntryBaseID.
3454       if (!F.PreloadSLocEntries.empty()) {
3455         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3456         return Failure;
3457       }
3458 
3459       F.PreloadSLocEntries.swap(Record);
3460       break;
3461     }
3462 
3463     case EXT_VECTOR_DECLS:
3464       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3465         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3466       break;
3467 
3468     case VTABLE_USES:
3469       if (Record.size() % 3 != 0) {
3470         Error("Invalid VTABLE_USES record");
3471         return Failure;
3472       }
3473 
3474       // Later tables overwrite earlier ones.
3475       // FIXME: Modules will have some trouble with this. This is clearly not
3476       // the right way to do this.
3477       VTableUses.clear();
3478 
3479       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3480         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3481         VTableUses.push_back(
3482           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3483         VTableUses.push_back(Record[Idx++]);
3484       }
3485       break;
3486 
3487     case PENDING_IMPLICIT_INSTANTIATIONS:
3488       if (PendingInstantiations.size() % 2 != 0) {
3489         Error("Invalid existing PendingInstantiations");
3490         return Failure;
3491       }
3492 
3493       if (Record.size() % 2 != 0) {
3494         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3495         return Failure;
3496       }
3497 
3498       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3499         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3500         PendingInstantiations.push_back(
3501           ReadSourceLocation(F, Record, I).getRawEncoding());
3502       }
3503       break;
3504 
3505     case SEMA_DECL_REFS:
3506       if (Record.size() != 3) {
3507         Error("Invalid SEMA_DECL_REFS block");
3508         return Failure;
3509       }
3510       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3511         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3512       break;
3513 
3514     case PPD_ENTITIES_OFFSETS: {
3515       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3516       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3517       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3518 
3519       unsigned LocalBasePreprocessedEntityID = Record[0];
3520 
3521       unsigned StartingID;
3522       if (!PP.getPreprocessingRecord())
3523         PP.createPreprocessingRecord();
3524       if (!PP.getPreprocessingRecord()->getExternalSource())
3525         PP.getPreprocessingRecord()->SetExternalSource(*this);
3526       StartingID
3527         = PP.getPreprocessingRecord()
3528             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3529       F.BasePreprocessedEntityID = StartingID;
3530 
3531       if (F.NumPreprocessedEntities > 0) {
3532         // Introduce the global -> local mapping for preprocessed entities in
3533         // this module.
3534         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3535 
3536         // Introduce the local -> global mapping for preprocessed entities in
3537         // this module.
3538         F.PreprocessedEntityRemap.insertOrReplace(
3539           std::make_pair(LocalBasePreprocessedEntityID,
3540             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3541       }
3542 
3543       break;
3544     }
3545 
3546     case PPD_SKIPPED_RANGES: {
3547       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3548       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3549       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3550 
3551       if (!PP.getPreprocessingRecord())
3552         PP.createPreprocessingRecord();
3553       if (!PP.getPreprocessingRecord()->getExternalSource())
3554         PP.getPreprocessingRecord()->SetExternalSource(*this);
3555       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3556           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3557 
3558       if (F.NumPreprocessedSkippedRanges > 0)
3559         GlobalSkippedRangeMap.insert(
3560             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3561       break;
3562     }
3563 
3564     case DECL_UPDATE_OFFSETS:
3565       if (Record.size() % 2 != 0) {
3566         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3567         return Failure;
3568       }
3569       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3570         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3571         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3572 
3573         // If we've already loaded the decl, perform the updates when we finish
3574         // loading this block.
3575         if (Decl *D = GetExistingDecl(ID))
3576           PendingUpdateRecords.push_back(
3577               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3578       }
3579       break;
3580 
3581     case OBJC_CATEGORIES_MAP:
3582       if (F.LocalNumObjCCategoriesInMap != 0) {
3583         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3584         return Failure;
3585       }
3586 
3587       F.LocalNumObjCCategoriesInMap = Record[0];
3588       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3589       break;
3590 
3591     case OBJC_CATEGORIES:
3592       F.ObjCCategories.swap(Record);
3593       break;
3594 
3595     case CUDA_SPECIAL_DECL_REFS:
3596       // Later tables overwrite earlier ones.
3597       // FIXME: Modules will have trouble with this.
3598       CUDASpecialDeclRefs.clear();
3599       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3600         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3601       break;
3602 
3603     case HEADER_SEARCH_TABLE:
3604       F.HeaderFileInfoTableData = Blob.data();
3605       F.LocalNumHeaderFileInfos = Record[1];
3606       if (Record[0]) {
3607         F.HeaderFileInfoTable
3608           = HeaderFileInfoLookupTable::Create(
3609                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3610                    (const unsigned char *)F.HeaderFileInfoTableData,
3611                    HeaderFileInfoTrait(*this, F,
3612                                        &PP.getHeaderSearchInfo(),
3613                                        Blob.data() + Record[2]));
3614 
3615         PP.getHeaderSearchInfo().SetExternalSource(this);
3616         if (!PP.getHeaderSearchInfo().getExternalLookup())
3617           PP.getHeaderSearchInfo().SetExternalLookup(this);
3618       }
3619       break;
3620 
3621     case FP_PRAGMA_OPTIONS:
3622       // Later tables overwrite earlier ones.
3623       FPPragmaOptions.swap(Record);
3624       break;
3625 
3626     case OPENCL_EXTENSIONS:
3627       for (unsigned I = 0, E = Record.size(); I != E; ) {
3628         auto Name = ReadString(Record, I);
3629         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3630         OptInfo.Supported = Record[I++] != 0;
3631         OptInfo.Enabled = Record[I++] != 0;
3632         OptInfo.Avail = Record[I++];
3633         OptInfo.Core = Record[I++];
3634         OptInfo.Opt = Record[I++];
3635       }
3636       break;
3637 
3638     case OPENCL_EXTENSION_TYPES:
3639       for (unsigned I = 0, E = Record.size(); I != E;) {
3640         auto TypeID = static_cast<::TypeID>(Record[I++]);
3641         auto *Type = GetType(TypeID).getTypePtr();
3642         auto NumExt = static_cast<unsigned>(Record[I++]);
3643         for (unsigned II = 0; II != NumExt; ++II) {
3644           auto Ext = ReadString(Record, I);
3645           OpenCLTypeExtMap[Type].insert(Ext);
3646         }
3647       }
3648       break;
3649 
3650     case OPENCL_EXTENSION_DECLS:
3651       for (unsigned I = 0, E = Record.size(); I != E;) {
3652         auto DeclID = static_cast<::DeclID>(Record[I++]);
3653         auto *Decl = GetDecl(DeclID);
3654         auto NumExt = static_cast<unsigned>(Record[I++]);
3655         for (unsigned II = 0; II != NumExt; ++II) {
3656           auto Ext = ReadString(Record, I);
3657           OpenCLDeclExtMap[Decl].insert(Ext);
3658         }
3659       }
3660       break;
3661 
3662     case TENTATIVE_DEFINITIONS:
3663       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3664         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3665       break;
3666 
3667     case KNOWN_NAMESPACES:
3668       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3669         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3670       break;
3671 
3672     case UNDEFINED_BUT_USED:
3673       if (UndefinedButUsed.size() % 2 != 0) {
3674         Error("Invalid existing UndefinedButUsed");
3675         return Failure;
3676       }
3677 
3678       if (Record.size() % 2 != 0) {
3679         Error("invalid undefined-but-used record");
3680         return Failure;
3681       }
3682       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3683         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3684         UndefinedButUsed.push_back(
3685             ReadSourceLocation(F, Record, I).getRawEncoding());
3686       }
3687       break;
3688 
3689     case DELETE_EXPRS_TO_ANALYZE:
3690       for (unsigned I = 0, N = Record.size(); I != N;) {
3691         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3692         const uint64_t Count = Record[I++];
3693         DelayedDeleteExprs.push_back(Count);
3694         for (uint64_t C = 0; C < Count; ++C) {
3695           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3696           bool IsArrayForm = Record[I++] == 1;
3697           DelayedDeleteExprs.push_back(IsArrayForm);
3698         }
3699       }
3700       break;
3701 
3702     case IMPORTED_MODULES:
3703       if (!F.isModule()) {
3704         // If we aren't loading a module (which has its own exports), make
3705         // all of the imported modules visible.
3706         // FIXME: Deal with macros-only imports.
3707         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3708           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3709           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3710           if (GlobalID) {
3711             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3712             if (DeserializationListener)
3713               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3714           }
3715         }
3716       }
3717       break;
3718 
3719     case MACRO_OFFSET: {
3720       if (F.LocalNumMacros != 0) {
3721         Error("duplicate MACRO_OFFSET record in AST file");
3722         return Failure;
3723       }
3724       F.MacroOffsets = (const uint32_t *)Blob.data();
3725       F.LocalNumMacros = Record[0];
3726       unsigned LocalBaseMacroID = Record[1];
3727       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3728       F.BaseMacroID = getTotalNumMacros();
3729 
3730       if (F.LocalNumMacros > 0) {
3731         // Introduce the global -> local mapping for macros within this module.
3732         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3733 
3734         // Introduce the local -> global mapping for macros within this module.
3735         F.MacroRemap.insertOrReplace(
3736           std::make_pair(LocalBaseMacroID,
3737                          F.BaseMacroID - LocalBaseMacroID));
3738 
3739         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3740       }
3741       break;
3742     }
3743 
3744     case LATE_PARSED_TEMPLATE:
3745       LateParsedTemplates.emplace_back(
3746           std::piecewise_construct, std::forward_as_tuple(&F),
3747           std::forward_as_tuple(Record.begin(), Record.end()));
3748       break;
3749 
3750     case OPTIMIZE_PRAGMA_OPTIONS:
3751       if (Record.size() != 1) {
3752         Error("invalid pragma optimize record");
3753         return Failure;
3754       }
3755       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3756       break;
3757 
3758     case MSSTRUCT_PRAGMA_OPTIONS:
3759       if (Record.size() != 1) {
3760         Error("invalid pragma ms_struct record");
3761         return Failure;
3762       }
3763       PragmaMSStructState = Record[0];
3764       break;
3765 
3766     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3767       if (Record.size() != 2) {
3768         Error("invalid pragma ms_struct record");
3769         return Failure;
3770       }
3771       PragmaMSPointersToMembersState = Record[0];
3772       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3773       break;
3774 
3775     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3776       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3777         UnusedLocalTypedefNameCandidates.push_back(
3778             getGlobalDeclID(F, Record[I]));
3779       break;
3780 
3781     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3782       if (Record.size() != 1) {
3783         Error("invalid cuda pragma options record");
3784         return Failure;
3785       }
3786       ForceCUDAHostDeviceDepth = Record[0];
3787       break;
3788 
3789     case ALIGN_PACK_PRAGMA_OPTIONS: {
3790       if (Record.size() < 3) {
3791         Error("invalid pragma pack record");
3792         return Failure;
3793       }
3794       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3795       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3796       unsigned NumStackEntries = Record[2];
3797       unsigned Idx = 3;
3798       // Reset the stack when importing a new module.
3799       PragmaAlignPackStack.clear();
3800       for (unsigned I = 0; I < NumStackEntries; ++I) {
3801         PragmaAlignPackStackEntry Entry;
3802         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3803         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3804         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3805         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3806         Entry.SlotLabel = PragmaAlignPackStrings.back();
3807         PragmaAlignPackStack.push_back(Entry);
3808       }
3809       break;
3810     }
3811 
3812     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3813       if (Record.size() < 3) {
3814         Error("invalid pragma pack record");
3815         return Failure;
3816       }
3817       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3818       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3819       unsigned NumStackEntries = Record[2];
3820       unsigned Idx = 3;
3821       // Reset the stack when importing a new module.
3822       FpPragmaStack.clear();
3823       for (unsigned I = 0; I < NumStackEntries; ++I) {
3824         FpPragmaStackEntry Entry;
3825         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3826         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3827         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3828         FpPragmaStrings.push_back(ReadString(Record, Idx));
3829         Entry.SlotLabel = FpPragmaStrings.back();
3830         FpPragmaStack.push_back(Entry);
3831       }
3832       break;
3833     }
3834 
3835     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3836       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3837         DeclsToCheckForDeferredDiags.push_back(getGlobalDeclID(F, Record[I]));
3838       break;
3839     }
3840   }
3841 }
3842 
3843 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3844   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3845 
3846   // Additional remapping information.
3847   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3848   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3849   F.ModuleOffsetMap = StringRef();
3850 
3851   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3852   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3853     F.SLocRemap.insert(std::make_pair(0U, 0));
3854     F.SLocRemap.insert(std::make_pair(2U, 1));
3855   }
3856 
3857   // Continuous range maps we may be updating in our module.
3858   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3859   RemapBuilder SLocRemap(F.SLocRemap);
3860   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3861   RemapBuilder MacroRemap(F.MacroRemap);
3862   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3863   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3864   RemapBuilder SelectorRemap(F.SelectorRemap);
3865   RemapBuilder DeclRemap(F.DeclRemap);
3866   RemapBuilder TypeRemap(F.TypeRemap);
3867 
3868   while (Data < DataEnd) {
3869     // FIXME: Looking up dependency modules by filename is horrible. Let's
3870     // start fixing this with prebuilt, explicit and implicit modules and see
3871     // how it goes...
3872     using namespace llvm::support;
3873     ModuleKind Kind = static_cast<ModuleKind>(
3874       endian::readNext<uint8_t, little, unaligned>(Data));
3875     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3876     StringRef Name = StringRef((const char*)Data, Len);
3877     Data += Len;
3878     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3879                               Kind == MK_ImplicitModule
3880                           ? ModuleMgr.lookupByModuleName(Name)
3881                           : ModuleMgr.lookupByFileName(Name));
3882     if (!OM) {
3883       std::string Msg =
3884           "SourceLocation remap refers to unknown module, cannot find ";
3885       Msg.append(std::string(Name));
3886       Error(Msg);
3887       return;
3888     }
3889 
3890     uint32_t SLocOffset =
3891         endian::readNext<uint32_t, little, unaligned>(Data);
3892     uint32_t IdentifierIDOffset =
3893         endian::readNext<uint32_t, little, unaligned>(Data);
3894     uint32_t MacroIDOffset =
3895         endian::readNext<uint32_t, little, unaligned>(Data);
3896     uint32_t PreprocessedEntityIDOffset =
3897         endian::readNext<uint32_t, little, unaligned>(Data);
3898     uint32_t SubmoduleIDOffset =
3899         endian::readNext<uint32_t, little, unaligned>(Data);
3900     uint32_t SelectorIDOffset =
3901         endian::readNext<uint32_t, little, unaligned>(Data);
3902     uint32_t DeclIDOffset =
3903         endian::readNext<uint32_t, little, unaligned>(Data);
3904     uint32_t TypeIndexOffset =
3905         endian::readNext<uint32_t, little, unaligned>(Data);
3906 
3907     uint32_t None = std::numeric_limits<uint32_t>::max();
3908 
3909     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3910                          RemapBuilder &Remap) {
3911       if (Offset != None)
3912         Remap.insert(std::make_pair(Offset,
3913                                     static_cast<int>(BaseOffset - Offset)));
3914     };
3915     mapOffset(SLocOffset, OM->SLocEntryBaseOffset, SLocRemap);
3916     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3917     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3918     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3919               PreprocessedEntityRemap);
3920     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3921     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3922     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3923     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3924 
3925     // Global -> local mappings.
3926     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3927   }
3928 }
3929 
3930 ASTReader::ASTReadResult
3931 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3932                                   const ModuleFile *ImportedBy,
3933                                   unsigned ClientLoadCapabilities) {
3934   unsigned Idx = 0;
3935   F.ModuleMapPath = ReadPath(F, Record, Idx);
3936 
3937   // Try to resolve ModuleName in the current header search context and
3938   // verify that it is found in the same module map file as we saved. If the
3939   // top-level AST file is a main file, skip this check because there is no
3940   // usable header search context.
3941   assert(!F.ModuleName.empty() &&
3942          "MODULE_NAME should come before MODULE_MAP_FILE");
3943   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3944     // An implicitly-loaded module file should have its module listed in some
3945     // module map file that we've already loaded.
3946     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3947     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3948     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3949     // Don't emit module relocation error if we have -fno-validate-pch
3950     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3951               DisableValidationForModuleKind::Module) &&
3952         !ModMap) {
3953       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0) {
3954         if (auto ASTFE = M ? M->getASTFile() : None) {
3955           // This module was defined by an imported (explicit) module.
3956           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3957                                                << ASTFE->getName();
3958         } else {
3959           // This module was built with a different module map.
3960           Diag(diag::err_imported_module_not_found)
3961               << F.ModuleName << F.FileName
3962               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3963               << !ImportedBy;
3964           // In case it was imported by a PCH, there's a chance the user is
3965           // just missing to include the search path to the directory containing
3966           // the modulemap.
3967           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3968             Diag(diag::note_imported_by_pch_module_not_found)
3969                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3970         }
3971       }
3972       return OutOfDate;
3973     }
3974 
3975     assert(M && M->Name == F.ModuleName && "found module with different name");
3976 
3977     // Check the primary module map file.
3978     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3979     if (!StoredModMap || *StoredModMap != ModMap) {
3980       assert(ModMap && "found module is missing module map file");
3981       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3982              "top-level import should be verified");
3983       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3984       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3985         Diag(diag::err_imported_module_modmap_changed)
3986             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3987             << ModMap->getName() << F.ModuleMapPath << NotImported;
3988       return OutOfDate;
3989     }
3990 
3991     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3992     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3993       // FIXME: we should use input files rather than storing names.
3994       std::string Filename = ReadPath(F, Record, Idx);
3995       auto F = FileMgr.getFile(Filename, false, false);
3996       if (!F) {
3997         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
3998           Error("could not find file '" + Filename +"' referenced by AST file");
3999         return OutOfDate;
4000       }
4001       AdditionalStoredMaps.insert(*F);
4002     }
4003 
4004     // Check any additional module map files (e.g. module.private.modulemap)
4005     // that are not in the pcm.
4006     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
4007       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
4008         // Remove files that match
4009         // Note: SmallPtrSet::erase is really remove
4010         if (!AdditionalStoredMaps.erase(ModMap)) {
4011           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4012             Diag(diag::err_module_different_modmap)
4013               << F.ModuleName << /*new*/0 << ModMap->getName();
4014           return OutOfDate;
4015         }
4016       }
4017     }
4018 
4019     // Check any additional module map files that are in the pcm, but not
4020     // found in header search. Cases that match are already removed.
4021     for (const FileEntry *ModMap : AdditionalStoredMaps) {
4022       if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
4023         Diag(diag::err_module_different_modmap)
4024           << F.ModuleName << /*not new*/1 << ModMap->getName();
4025       return OutOfDate;
4026     }
4027   }
4028 
4029   if (Listener)
4030     Listener->ReadModuleMapFile(F.ModuleMapPath);
4031   return Success;
4032 }
4033 
4034 /// Move the given method to the back of the global list of methods.
4035 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4036   // Find the entry for this selector in the method pool.
4037   Sema::GlobalMethodPool::iterator Known
4038     = S.MethodPool.find(Method->getSelector());
4039   if (Known == S.MethodPool.end())
4040     return;
4041 
4042   // Retrieve the appropriate method list.
4043   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4044                                                     : Known->second.second;
4045   bool Found = false;
4046   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4047     if (!Found) {
4048       if (List->getMethod() == Method) {
4049         Found = true;
4050       } else {
4051         // Keep searching.
4052         continue;
4053       }
4054     }
4055 
4056     if (List->getNext())
4057       List->setMethod(List->getNext()->getMethod());
4058     else
4059       List->setMethod(Method);
4060   }
4061 }
4062 
4063 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4064   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4065   for (Decl *D : Names) {
4066     bool wasHidden = !D->isUnconditionallyVisible();
4067     D->setVisibleDespiteOwningModule();
4068 
4069     if (wasHidden && SemaObj) {
4070       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4071         moveMethodToBackOfGlobalList(*SemaObj, Method);
4072       }
4073     }
4074   }
4075 }
4076 
4077 void ASTReader::makeModuleVisible(Module *Mod,
4078                                   Module::NameVisibilityKind NameVisibility,
4079                                   SourceLocation ImportLoc) {
4080   llvm::SmallPtrSet<Module *, 4> Visited;
4081   SmallVector<Module *, 4> Stack;
4082   Stack.push_back(Mod);
4083   while (!Stack.empty()) {
4084     Mod = Stack.pop_back_val();
4085 
4086     if (NameVisibility <= Mod->NameVisibility) {
4087       // This module already has this level of visibility (or greater), so
4088       // there is nothing more to do.
4089       continue;
4090     }
4091 
4092     if (Mod->isUnimportable()) {
4093       // Modules that aren't importable cannot be made visible.
4094       continue;
4095     }
4096 
4097     // Update the module's name visibility.
4098     Mod->NameVisibility = NameVisibility;
4099 
4100     // If we've already deserialized any names from this module,
4101     // mark them as visible.
4102     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4103     if (Hidden != HiddenNamesMap.end()) {
4104       auto HiddenNames = std::move(*Hidden);
4105       HiddenNamesMap.erase(Hidden);
4106       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4107       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4108              "making names visible added hidden names");
4109     }
4110 
4111     // Push any exported modules onto the stack to be marked as visible.
4112     SmallVector<Module *, 16> Exports;
4113     Mod->getExportedModules(Exports);
4114     for (SmallVectorImpl<Module *>::iterator
4115            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4116       Module *Exported = *I;
4117       if (Visited.insert(Exported).second)
4118         Stack.push_back(Exported);
4119     }
4120   }
4121 }
4122 
4123 /// We've merged the definition \p MergedDef into the existing definition
4124 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4125 /// visible.
4126 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4127                                           NamedDecl *MergedDef) {
4128   if (!Def->isUnconditionallyVisible()) {
4129     // If MergedDef is visible or becomes visible, make the definition visible.
4130     if (MergedDef->isUnconditionallyVisible())
4131       Def->setVisibleDespiteOwningModule();
4132     else {
4133       getContext().mergeDefinitionIntoModule(
4134           Def, MergedDef->getImportedOwningModule(),
4135           /*NotifyListeners*/ false);
4136       PendingMergedDefinitionsToDeduplicate.insert(Def);
4137     }
4138   }
4139 }
4140 
4141 bool ASTReader::loadGlobalIndex() {
4142   if (GlobalIndex)
4143     return false;
4144 
4145   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4146       !PP.getLangOpts().Modules)
4147     return true;
4148 
4149   // Try to load the global index.
4150   TriedLoadingGlobalIndex = true;
4151   StringRef ModuleCachePath
4152     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4153   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4154       GlobalModuleIndex::readIndex(ModuleCachePath);
4155   if (llvm::Error Err = std::move(Result.second)) {
4156     assert(!Result.first);
4157     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4158     return true;
4159   }
4160 
4161   GlobalIndex.reset(Result.first);
4162   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4163   return false;
4164 }
4165 
4166 bool ASTReader::isGlobalIndexUnavailable() const {
4167   return PP.getLangOpts().Modules && UseGlobalIndex &&
4168          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4169 }
4170 
4171 static void updateModuleTimestamp(ModuleFile &MF) {
4172   // Overwrite the timestamp file contents so that file's mtime changes.
4173   std::string TimestampFilename = MF.getTimestampFilename();
4174   std::error_code EC;
4175   llvm::raw_fd_ostream OS(TimestampFilename, EC, llvm::sys::fs::OF_Text);
4176   if (EC)
4177     return;
4178   OS << "Timestamp file\n";
4179   OS.close();
4180   OS.clear_error(); // Avoid triggering a fatal error.
4181 }
4182 
4183 /// Given a cursor at the start of an AST file, scan ahead and drop the
4184 /// cursor into the start of the given block ID, returning false on success and
4185 /// true on failure.
4186 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4187   while (true) {
4188     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4189     if (!MaybeEntry) {
4190       // FIXME this drops errors on the floor.
4191       consumeError(MaybeEntry.takeError());
4192       return true;
4193     }
4194     llvm::BitstreamEntry Entry = MaybeEntry.get();
4195 
4196     switch (Entry.Kind) {
4197     case llvm::BitstreamEntry::Error:
4198     case llvm::BitstreamEntry::EndBlock:
4199       return true;
4200 
4201     case llvm::BitstreamEntry::Record:
4202       // Ignore top-level records.
4203       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4204         break;
4205       else {
4206         // FIXME this drops errors on the floor.
4207         consumeError(Skipped.takeError());
4208         return true;
4209       }
4210 
4211     case llvm::BitstreamEntry::SubBlock:
4212       if (Entry.ID == BlockID) {
4213         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4214           // FIXME this drops the error on the floor.
4215           consumeError(std::move(Err));
4216           return true;
4217         }
4218         // Found it!
4219         return false;
4220       }
4221 
4222       if (llvm::Error Err = Cursor.SkipBlock()) {
4223         // FIXME this drops the error on the floor.
4224         consumeError(std::move(Err));
4225         return true;
4226       }
4227     }
4228   }
4229 }
4230 
4231 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4232                                             ModuleKind Type,
4233                                             SourceLocation ImportLoc,
4234                                             unsigned ClientLoadCapabilities,
4235                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4236   llvm::SaveAndRestore<SourceLocation>
4237     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4238   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4239       CurrentDeserializingModuleKind, Type);
4240 
4241   // Defer any pending actions until we get to the end of reading the AST file.
4242   Deserializing AnASTFile(this);
4243 
4244   // Bump the generation number.
4245   unsigned PreviousGeneration = 0;
4246   if (ContextObj)
4247     PreviousGeneration = incrementGeneration(*ContextObj);
4248 
4249   unsigned NumModules = ModuleMgr.size();
4250   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4251     assert(ReadResult && "expected to return error");
4252     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4253                             PP.getLangOpts().Modules
4254                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4255                                 : nullptr);
4256 
4257     // If we find that any modules are unusable, the global index is going
4258     // to be out-of-date. Just remove it.
4259     GlobalIndex.reset();
4260     ModuleMgr.setGlobalIndex(nullptr);
4261     return ReadResult;
4262   };
4263 
4264   SmallVector<ImportedModule, 4> Loaded;
4265   switch (ASTReadResult ReadResult =
4266               ReadASTCore(FileName, Type, ImportLoc,
4267                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4268                           ASTFileSignature(), ClientLoadCapabilities)) {
4269   case Failure:
4270   case Missing:
4271   case OutOfDate:
4272   case VersionMismatch:
4273   case ConfigurationMismatch:
4274   case HadErrors:
4275     return removeModulesAndReturn(ReadResult);
4276   case Success:
4277     break;
4278   }
4279 
4280   // Here comes stuff that we only do once the entire chain is loaded.
4281 
4282   // Load the AST blocks of all of the modules that we loaded.  We can still
4283   // hit errors parsing the ASTs at this point.
4284   for (ImportedModule &M : Loaded) {
4285     ModuleFile &F = *M.Mod;
4286 
4287     // Read the AST block.
4288     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4289       return removeModulesAndReturn(Result);
4290 
4291     // The AST block should always have a definition for the main module.
4292     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4293       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4294       return removeModulesAndReturn(Failure);
4295     }
4296 
4297     // Read the extension blocks.
4298     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4299       if (ASTReadResult Result = ReadExtensionBlock(F))
4300         return removeModulesAndReturn(Result);
4301     }
4302 
4303     // Once read, set the ModuleFile bit base offset and update the size in
4304     // bits of all files we've seen.
4305     F.GlobalBitOffset = TotalModulesSizeInBits;
4306     TotalModulesSizeInBits += F.SizeInBits;
4307     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4308   }
4309 
4310   // Preload source locations and interesting indentifiers.
4311   for (ImportedModule &M : Loaded) {
4312     ModuleFile &F = *M.Mod;
4313 
4314     // Preload SLocEntries.
4315     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4316       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4317       // Load it through the SourceManager and don't call ReadSLocEntry()
4318       // directly because the entry may have already been loaded in which case
4319       // calling ReadSLocEntry() directly would trigger an assertion in
4320       // SourceManager.
4321       SourceMgr.getLoadedSLocEntryByID(Index);
4322     }
4323 
4324     // Map the original source file ID into the ID space of the current
4325     // compilation.
4326     if (F.OriginalSourceFileID.isValid()) {
4327       F.OriginalSourceFileID = FileID::get(
4328           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4329     }
4330 
4331     // Preload all the pending interesting identifiers by marking them out of
4332     // date.
4333     for (auto Offset : F.PreloadIdentifierOffsets) {
4334       const unsigned char *Data = F.IdentifierTableData + Offset;
4335 
4336       ASTIdentifierLookupTrait Trait(*this, F);
4337       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4338       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4339       auto &II = PP.getIdentifierTable().getOwn(Key);
4340       II.setOutOfDate(true);
4341 
4342       // Mark this identifier as being from an AST file so that we can track
4343       // whether we need to serialize it.
4344       markIdentifierFromAST(*this, II);
4345 
4346       // Associate the ID with the identifier so that the writer can reuse it.
4347       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4348       SetIdentifierInfo(ID, &II);
4349     }
4350   }
4351 
4352   // Setup the import locations and notify the module manager that we've
4353   // committed to these module files.
4354   for (ImportedModule &M : Loaded) {
4355     ModuleFile &F = *M.Mod;
4356 
4357     ModuleMgr.moduleFileAccepted(&F);
4358 
4359     // Set the import location.
4360     F.DirectImportLoc = ImportLoc;
4361     // FIXME: We assume that locations from PCH / preamble do not need
4362     // any translation.
4363     if (!M.ImportedBy)
4364       F.ImportLoc = M.ImportLoc;
4365     else
4366       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4367   }
4368 
4369   if (!PP.getLangOpts().CPlusPlus ||
4370       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4371        Type != MK_PrebuiltModule)) {
4372     // Mark all of the identifiers in the identifier table as being out of date,
4373     // so that various accessors know to check the loaded modules when the
4374     // identifier is used.
4375     //
4376     // For C++ modules, we don't need information on many identifiers (just
4377     // those that provide macros or are poisoned), so we mark all of
4378     // the interesting ones via PreloadIdentifierOffsets.
4379     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4380                                 IdEnd = PP.getIdentifierTable().end();
4381          Id != IdEnd; ++Id)
4382       Id->second->setOutOfDate(true);
4383   }
4384   // Mark selectors as out of date.
4385   for (auto Sel : SelectorGeneration)
4386     SelectorOutOfDate[Sel.first] = true;
4387 
4388   // Resolve any unresolved module exports.
4389   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4390     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4391     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4392     Module *ResolvedMod = getSubmodule(GlobalID);
4393 
4394     switch (Unresolved.Kind) {
4395     case UnresolvedModuleRef::Conflict:
4396       if (ResolvedMod) {
4397         Module::Conflict Conflict;
4398         Conflict.Other = ResolvedMod;
4399         Conflict.Message = Unresolved.String.str();
4400         Unresolved.Mod->Conflicts.push_back(Conflict);
4401       }
4402       continue;
4403 
4404     case UnresolvedModuleRef::Import:
4405       if (ResolvedMod)
4406         Unresolved.Mod->Imports.insert(ResolvedMod);
4407       continue;
4408 
4409     case UnresolvedModuleRef::Export:
4410       if (ResolvedMod || Unresolved.IsWildcard)
4411         Unresolved.Mod->Exports.push_back(
4412           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4413       continue;
4414     }
4415   }
4416   UnresolvedModuleRefs.clear();
4417 
4418   if (Imported)
4419     Imported->append(ImportedModules.begin(),
4420                      ImportedModules.end());
4421 
4422   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4423   // Might be unnecessary as use declarations are only used to build the
4424   // module itself.
4425 
4426   if (ContextObj)
4427     InitializeContext();
4428 
4429   if (SemaObj)
4430     UpdateSema();
4431 
4432   if (DeserializationListener)
4433     DeserializationListener->ReaderInitialized(this);
4434 
4435   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4436   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4437     // If this AST file is a precompiled preamble, then set the
4438     // preamble file ID of the source manager to the file source file
4439     // from which the preamble was built.
4440     if (Type == MK_Preamble) {
4441       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4442     } else if (Type == MK_MainFile) {
4443       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4444     }
4445   }
4446 
4447   // For any Objective-C class definitions we have already loaded, make sure
4448   // that we load any additional categories.
4449   if (ContextObj) {
4450     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4451       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4452                          ObjCClassesLoaded[I],
4453                          PreviousGeneration);
4454     }
4455   }
4456 
4457   if (PP.getHeaderSearchInfo()
4458           .getHeaderSearchOpts()
4459           .ModulesValidateOncePerBuildSession) {
4460     // Now we are certain that the module and all modules it depends on are
4461     // up to date.  Create or update timestamp files for modules that are
4462     // located in the module cache (not for PCH files that could be anywhere
4463     // in the filesystem).
4464     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4465       ImportedModule &M = Loaded[I];
4466       if (M.Mod->Kind == MK_ImplicitModule) {
4467         updateModuleTimestamp(*M.Mod);
4468       }
4469     }
4470   }
4471 
4472   return Success;
4473 }
4474 
4475 static ASTFileSignature readASTFileSignature(StringRef PCH);
4476 
4477 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4478 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4479   // FIXME checking magic headers is done in other places such as
4480   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4481   // always done the same. Unify it all with a helper.
4482   if (!Stream.canSkipToPos(4))
4483     return llvm::createStringError(std::errc::illegal_byte_sequence,
4484                                    "file too small to contain AST file magic");
4485   for (unsigned C : {'C', 'P', 'C', 'H'})
4486     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4487       if (Res.get() != C)
4488         return llvm::createStringError(
4489             std::errc::illegal_byte_sequence,
4490             "file doesn't start with AST file magic");
4491     } else
4492       return Res.takeError();
4493   return llvm::Error::success();
4494 }
4495 
4496 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4497   switch (Kind) {
4498   case MK_PCH:
4499     return 0; // PCH
4500   case MK_ImplicitModule:
4501   case MK_ExplicitModule:
4502   case MK_PrebuiltModule:
4503     return 1; // module
4504   case MK_MainFile:
4505   case MK_Preamble:
4506     return 2; // main source file
4507   }
4508   llvm_unreachable("unknown module kind");
4509 }
4510 
4511 ASTReader::ASTReadResult
4512 ASTReader::ReadASTCore(StringRef FileName,
4513                        ModuleKind Type,
4514                        SourceLocation ImportLoc,
4515                        ModuleFile *ImportedBy,
4516                        SmallVectorImpl<ImportedModule> &Loaded,
4517                        off_t ExpectedSize, time_t ExpectedModTime,
4518                        ASTFileSignature ExpectedSignature,
4519                        unsigned ClientLoadCapabilities) {
4520   ModuleFile *M;
4521   std::string ErrorStr;
4522   ModuleManager::AddModuleResult AddResult
4523     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4524                           getGeneration(), ExpectedSize, ExpectedModTime,
4525                           ExpectedSignature, readASTFileSignature,
4526                           M, ErrorStr);
4527 
4528   switch (AddResult) {
4529   case ModuleManager::AlreadyLoaded:
4530     Diag(diag::remark_module_import)
4531         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4532         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4533     return Success;
4534 
4535   case ModuleManager::NewlyLoaded:
4536     // Load module file below.
4537     break;
4538 
4539   case ModuleManager::Missing:
4540     // The module file was missing; if the client can handle that, return
4541     // it.
4542     if (ClientLoadCapabilities & ARR_Missing)
4543       return Missing;
4544 
4545     // Otherwise, return an error.
4546     Diag(diag::err_ast_file_not_found)
4547         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4548         << ErrorStr;
4549     return Failure;
4550 
4551   case ModuleManager::OutOfDate:
4552     // We couldn't load the module file because it is out-of-date. If the
4553     // client can handle out-of-date, return it.
4554     if (ClientLoadCapabilities & ARR_OutOfDate)
4555       return OutOfDate;
4556 
4557     // Otherwise, return an error.
4558     Diag(diag::err_ast_file_out_of_date)
4559         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4560         << ErrorStr;
4561     return Failure;
4562   }
4563 
4564   assert(M && "Missing module file");
4565 
4566   bool ShouldFinalizePCM = false;
4567   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4568     auto &MC = getModuleManager().getModuleCache();
4569     if (ShouldFinalizePCM)
4570       MC.finalizePCM(FileName);
4571     else
4572       MC.tryToDropPCM(FileName);
4573   });
4574   ModuleFile &F = *M;
4575   BitstreamCursor &Stream = F.Stream;
4576   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4577   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4578 
4579   // Sniff for the signature.
4580   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4581     Diag(diag::err_ast_file_invalid)
4582         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4583     return Failure;
4584   }
4585 
4586   // This is used for compatibility with older PCH formats.
4587   bool HaveReadControlBlock = false;
4588   while (true) {
4589     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4590     if (!MaybeEntry) {
4591       Error(MaybeEntry.takeError());
4592       return Failure;
4593     }
4594     llvm::BitstreamEntry Entry = MaybeEntry.get();
4595 
4596     switch (Entry.Kind) {
4597     case llvm::BitstreamEntry::Error:
4598     case llvm::BitstreamEntry::Record:
4599     case llvm::BitstreamEntry::EndBlock:
4600       Error("invalid record at top-level of AST file");
4601       return Failure;
4602 
4603     case llvm::BitstreamEntry::SubBlock:
4604       break;
4605     }
4606 
4607     switch (Entry.ID) {
4608     case CONTROL_BLOCK_ID:
4609       HaveReadControlBlock = true;
4610       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4611       case Success:
4612         // Check that we didn't try to load a non-module AST file as a module.
4613         //
4614         // FIXME: Should we also perform the converse check? Loading a module as
4615         // a PCH file sort of works, but it's a bit wonky.
4616         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4617              Type == MK_PrebuiltModule) &&
4618             F.ModuleName.empty()) {
4619           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4620           if (Result != OutOfDate ||
4621               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4622             Diag(diag::err_module_file_not_module) << FileName;
4623           return Result;
4624         }
4625         break;
4626 
4627       case Failure: return Failure;
4628       case Missing: return Missing;
4629       case OutOfDate: return OutOfDate;
4630       case VersionMismatch: return VersionMismatch;
4631       case ConfigurationMismatch: return ConfigurationMismatch;
4632       case HadErrors: return HadErrors;
4633       }
4634       break;
4635 
4636     case AST_BLOCK_ID:
4637       if (!HaveReadControlBlock) {
4638         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4639           Diag(diag::err_pch_version_too_old);
4640         return VersionMismatch;
4641       }
4642 
4643       // Record that we've loaded this module.
4644       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4645       ShouldFinalizePCM = true;
4646       return Success;
4647 
4648     case UNHASHED_CONTROL_BLOCK_ID:
4649       // This block is handled using look-ahead during ReadControlBlock.  We
4650       // shouldn't get here!
4651       Error("malformed block record in AST file");
4652       return Failure;
4653 
4654     default:
4655       if (llvm::Error Err = Stream.SkipBlock()) {
4656         Error(std::move(Err));
4657         return Failure;
4658       }
4659       break;
4660     }
4661   }
4662 
4663   llvm_unreachable("unexpected break; expected return");
4664 }
4665 
4666 ASTReader::ASTReadResult
4667 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4668                                     unsigned ClientLoadCapabilities) {
4669   const HeaderSearchOptions &HSOpts =
4670       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4671   bool AllowCompatibleConfigurationMismatch =
4672       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4673   bool DisableValidation = shouldDisableValidationForFile(F);
4674 
4675   ASTReadResult Result = readUnhashedControlBlockImpl(
4676       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4677       Listener.get(),
4678       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4679 
4680   // If F was directly imported by another module, it's implicitly validated by
4681   // the importing module.
4682   if (DisableValidation || WasImportedBy ||
4683       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4684     return Success;
4685 
4686   if (Result == Failure) {
4687     Error("malformed block record in AST file");
4688     return Failure;
4689   }
4690 
4691   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4692     // If this module has already been finalized in the ModuleCache, we're stuck
4693     // with it; we can only load a single version of each module.
4694     //
4695     // This can happen when a module is imported in two contexts: in one, as a
4696     // user module; in another, as a system module (due to an import from
4697     // another module marked with the [system] flag).  It usually indicates a
4698     // bug in the module map: this module should also be marked with [system].
4699     //
4700     // If -Wno-system-headers (the default), and the first import is as a
4701     // system module, then validation will fail during the as-user import,
4702     // since -Werror flags won't have been validated.  However, it's reasonable
4703     // to treat this consistently as a system module.
4704     //
4705     // If -Wsystem-headers, the PCM on disk was built with
4706     // -Wno-system-headers, and the first import is as a user module, then
4707     // validation will fail during the as-system import since the PCM on disk
4708     // doesn't guarantee that -Werror was respected.  However, the -Werror
4709     // flags were checked during the initial as-user import.
4710     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4711       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4712       return Success;
4713     }
4714   }
4715 
4716   return Result;
4717 }
4718 
4719 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4720     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4721     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4722     bool ValidateDiagnosticOptions) {
4723   // Initialize a stream.
4724   BitstreamCursor Stream(StreamData);
4725 
4726   // Sniff for the signature.
4727   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4728     // FIXME this drops the error on the floor.
4729     consumeError(std::move(Err));
4730     return Failure;
4731   }
4732 
4733   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4734   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4735     return Failure;
4736 
4737   // Read all of the records in the options block.
4738   RecordData Record;
4739   ASTReadResult Result = Success;
4740   while (true) {
4741     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4742     if (!MaybeEntry) {
4743       // FIXME this drops the error on the floor.
4744       consumeError(MaybeEntry.takeError());
4745       return Failure;
4746     }
4747     llvm::BitstreamEntry Entry = MaybeEntry.get();
4748 
4749     switch (Entry.Kind) {
4750     case llvm::BitstreamEntry::Error:
4751     case llvm::BitstreamEntry::SubBlock:
4752       return Failure;
4753 
4754     case llvm::BitstreamEntry::EndBlock:
4755       return Result;
4756 
4757     case llvm::BitstreamEntry::Record:
4758       // The interesting case.
4759       break;
4760     }
4761 
4762     // Read and process a record.
4763     Record.clear();
4764     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4765     if (!MaybeRecordType) {
4766       // FIXME this drops the error.
4767       return Failure;
4768     }
4769     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4770     case SIGNATURE:
4771       if (F)
4772         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4773       break;
4774     case AST_BLOCK_HASH:
4775       if (F)
4776         F->ASTBlockHash =
4777             ASTFileSignature::create(Record.begin(), Record.end());
4778       break;
4779     case DIAGNOSTIC_OPTIONS: {
4780       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4781       if (Listener && ValidateDiagnosticOptions &&
4782           !AllowCompatibleConfigurationMismatch &&
4783           ParseDiagnosticOptions(Record, Complain, *Listener))
4784         Result = OutOfDate; // Don't return early.  Read the signature.
4785       break;
4786     }
4787     case DIAG_PRAGMA_MAPPINGS:
4788       if (!F)
4789         break;
4790       if (F->PragmaDiagMappings.empty())
4791         F->PragmaDiagMappings.swap(Record);
4792       else
4793         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4794                                      Record.begin(), Record.end());
4795       break;
4796     }
4797   }
4798 }
4799 
4800 /// Parse a record and blob containing module file extension metadata.
4801 static bool parseModuleFileExtensionMetadata(
4802               const SmallVectorImpl<uint64_t> &Record,
4803               StringRef Blob,
4804               ModuleFileExtensionMetadata &Metadata) {
4805   if (Record.size() < 4) return true;
4806 
4807   Metadata.MajorVersion = Record[0];
4808   Metadata.MinorVersion = Record[1];
4809 
4810   unsigned BlockNameLen = Record[2];
4811   unsigned UserInfoLen = Record[3];
4812 
4813   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4814 
4815   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4816   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4817                                   Blob.data() + BlockNameLen + UserInfoLen);
4818   return false;
4819 }
4820 
4821 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4822   BitstreamCursor &Stream = F.Stream;
4823 
4824   RecordData Record;
4825   while (true) {
4826     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4827     if (!MaybeEntry) {
4828       Error(MaybeEntry.takeError());
4829       return Failure;
4830     }
4831     llvm::BitstreamEntry Entry = MaybeEntry.get();
4832 
4833     switch (Entry.Kind) {
4834     case llvm::BitstreamEntry::SubBlock:
4835       if (llvm::Error Err = Stream.SkipBlock()) {
4836         Error(std::move(Err));
4837         return Failure;
4838       }
4839       continue;
4840 
4841     case llvm::BitstreamEntry::EndBlock:
4842       return Success;
4843 
4844     case llvm::BitstreamEntry::Error:
4845       return HadErrors;
4846 
4847     case llvm::BitstreamEntry::Record:
4848       break;
4849     }
4850 
4851     Record.clear();
4852     StringRef Blob;
4853     Expected<unsigned> MaybeRecCode =
4854         Stream.readRecord(Entry.ID, Record, &Blob);
4855     if (!MaybeRecCode) {
4856       Error(MaybeRecCode.takeError());
4857       return Failure;
4858     }
4859     switch (MaybeRecCode.get()) {
4860     case EXTENSION_METADATA: {
4861       ModuleFileExtensionMetadata Metadata;
4862       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4863         Error("malformed EXTENSION_METADATA in AST file");
4864         return Failure;
4865       }
4866 
4867       // Find a module file extension with this block name.
4868       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4869       if (Known == ModuleFileExtensions.end()) break;
4870 
4871       // Form a reader.
4872       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4873                                                              F, Stream)) {
4874         F.ExtensionReaders.push_back(std::move(Reader));
4875       }
4876 
4877       break;
4878     }
4879     }
4880   }
4881 
4882   return Success;
4883 }
4884 
4885 void ASTReader::InitializeContext() {
4886   assert(ContextObj && "no context to initialize");
4887   ASTContext &Context = *ContextObj;
4888 
4889   // If there's a listener, notify them that we "read" the translation unit.
4890   if (DeserializationListener)
4891     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4892                                       Context.getTranslationUnitDecl());
4893 
4894   // FIXME: Find a better way to deal with collisions between these
4895   // built-in types. Right now, we just ignore the problem.
4896 
4897   // Load the special types.
4898   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4899     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4900       if (!Context.CFConstantStringTypeDecl)
4901         Context.setCFConstantStringType(GetType(String));
4902     }
4903 
4904     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4905       QualType FileType = GetType(File);
4906       if (FileType.isNull()) {
4907         Error("FILE type is NULL");
4908         return;
4909       }
4910 
4911       if (!Context.FILEDecl) {
4912         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4913           Context.setFILEDecl(Typedef->getDecl());
4914         else {
4915           const TagType *Tag = FileType->getAs<TagType>();
4916           if (!Tag) {
4917             Error("Invalid FILE type in AST file");
4918             return;
4919           }
4920           Context.setFILEDecl(Tag->getDecl());
4921         }
4922       }
4923     }
4924 
4925     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4926       QualType Jmp_bufType = GetType(Jmp_buf);
4927       if (Jmp_bufType.isNull()) {
4928         Error("jmp_buf type is NULL");
4929         return;
4930       }
4931 
4932       if (!Context.jmp_bufDecl) {
4933         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4934           Context.setjmp_bufDecl(Typedef->getDecl());
4935         else {
4936           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4937           if (!Tag) {
4938             Error("Invalid jmp_buf type in AST file");
4939             return;
4940           }
4941           Context.setjmp_bufDecl(Tag->getDecl());
4942         }
4943       }
4944     }
4945 
4946     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4947       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4948       if (Sigjmp_bufType.isNull()) {
4949         Error("sigjmp_buf type is NULL");
4950         return;
4951       }
4952 
4953       if (!Context.sigjmp_bufDecl) {
4954         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4955           Context.setsigjmp_bufDecl(Typedef->getDecl());
4956         else {
4957           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4958           assert(Tag && "Invalid sigjmp_buf type in AST file");
4959           Context.setsigjmp_bufDecl(Tag->getDecl());
4960         }
4961       }
4962     }
4963 
4964     if (unsigned ObjCIdRedef
4965           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4966       if (Context.ObjCIdRedefinitionType.isNull())
4967         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4968     }
4969 
4970     if (unsigned ObjCClassRedef
4971           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4972       if (Context.ObjCClassRedefinitionType.isNull())
4973         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4974     }
4975 
4976     if (unsigned ObjCSelRedef
4977           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4978       if (Context.ObjCSelRedefinitionType.isNull())
4979         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4980     }
4981 
4982     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4983       QualType Ucontext_tType = GetType(Ucontext_t);
4984       if (Ucontext_tType.isNull()) {
4985         Error("ucontext_t type is NULL");
4986         return;
4987       }
4988 
4989       if (!Context.ucontext_tDecl) {
4990         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4991           Context.setucontext_tDecl(Typedef->getDecl());
4992         else {
4993           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4994           assert(Tag && "Invalid ucontext_t type in AST file");
4995           Context.setucontext_tDecl(Tag->getDecl());
4996         }
4997       }
4998     }
4999   }
5000 
5001   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
5002 
5003   // If there were any CUDA special declarations, deserialize them.
5004   if (!CUDASpecialDeclRefs.empty()) {
5005     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
5006     Context.setcudaConfigureCallDecl(
5007                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
5008   }
5009 
5010   // Re-export any modules that were imported by a non-module AST file.
5011   // FIXME: This does not make macro-only imports visible again.
5012   for (auto &Import : ImportedModules) {
5013     if (Module *Imported = getSubmodule(Import.ID)) {
5014       makeModuleVisible(Imported, Module::AllVisible,
5015                         /*ImportLoc=*/Import.ImportLoc);
5016       if (Import.ImportLoc.isValid())
5017         PP.makeModuleVisible(Imported, Import.ImportLoc);
5018       // This updates visibility for Preprocessor only. For Sema, which can be
5019       // nullptr here, we do the same later, in UpdateSema().
5020     }
5021   }
5022 }
5023 
5024 void ASTReader::finalizeForWriting() {
5025   // Nothing to do for now.
5026 }
5027 
5028 /// Reads and return the signature record from \p PCH's control block, or
5029 /// else returns 0.
5030 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5031   BitstreamCursor Stream(PCH);
5032   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5033     // FIXME this drops the error on the floor.
5034     consumeError(std::move(Err));
5035     return ASTFileSignature();
5036   }
5037 
5038   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5039   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5040     return ASTFileSignature();
5041 
5042   // Scan for SIGNATURE inside the diagnostic options block.
5043   ASTReader::RecordData Record;
5044   while (true) {
5045     Expected<llvm::BitstreamEntry> MaybeEntry =
5046         Stream.advanceSkippingSubblocks();
5047     if (!MaybeEntry) {
5048       // FIXME this drops the error on the floor.
5049       consumeError(MaybeEntry.takeError());
5050       return ASTFileSignature();
5051     }
5052     llvm::BitstreamEntry Entry = MaybeEntry.get();
5053 
5054     if (Entry.Kind != llvm::BitstreamEntry::Record)
5055       return ASTFileSignature();
5056 
5057     Record.clear();
5058     StringRef Blob;
5059     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5060     if (!MaybeRecord) {
5061       // FIXME this drops the error on the floor.
5062       consumeError(MaybeRecord.takeError());
5063       return ASTFileSignature();
5064     }
5065     if (SIGNATURE == MaybeRecord.get())
5066       return ASTFileSignature::create(Record.begin(),
5067                                       Record.begin() + ASTFileSignature::size);
5068   }
5069 }
5070 
5071 /// Retrieve the name of the original source file name
5072 /// directly from the AST file, without actually loading the AST
5073 /// file.
5074 std::string ASTReader::getOriginalSourceFile(
5075     const std::string &ASTFileName, FileManager &FileMgr,
5076     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5077   // Open the AST file.
5078   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5079   if (!Buffer) {
5080     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5081         << ASTFileName << Buffer.getError().message();
5082     return std::string();
5083   }
5084 
5085   // Initialize the stream
5086   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5087 
5088   // Sniff for the signature.
5089   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5090     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5091     return std::string();
5092   }
5093 
5094   // Scan for the CONTROL_BLOCK_ID block.
5095   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5096     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5097     return std::string();
5098   }
5099 
5100   // Scan for ORIGINAL_FILE inside the control block.
5101   RecordData Record;
5102   while (true) {
5103     Expected<llvm::BitstreamEntry> MaybeEntry =
5104         Stream.advanceSkippingSubblocks();
5105     if (!MaybeEntry) {
5106       // FIXME this drops errors on the floor.
5107       consumeError(MaybeEntry.takeError());
5108       return std::string();
5109     }
5110     llvm::BitstreamEntry Entry = MaybeEntry.get();
5111 
5112     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5113       return std::string();
5114 
5115     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5116       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5117       return std::string();
5118     }
5119 
5120     Record.clear();
5121     StringRef Blob;
5122     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5123     if (!MaybeRecord) {
5124       // FIXME this drops the errors on the floor.
5125       consumeError(MaybeRecord.takeError());
5126       return std::string();
5127     }
5128     if (ORIGINAL_FILE == MaybeRecord.get())
5129       return Blob.str();
5130   }
5131 }
5132 
5133 namespace {
5134 
5135   class SimplePCHValidator : public ASTReaderListener {
5136     const LangOptions &ExistingLangOpts;
5137     const TargetOptions &ExistingTargetOpts;
5138     const PreprocessorOptions &ExistingPPOpts;
5139     std::string ExistingModuleCachePath;
5140     FileManager &FileMgr;
5141 
5142   public:
5143     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5144                        const TargetOptions &ExistingTargetOpts,
5145                        const PreprocessorOptions &ExistingPPOpts,
5146                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5147         : ExistingLangOpts(ExistingLangOpts),
5148           ExistingTargetOpts(ExistingTargetOpts),
5149           ExistingPPOpts(ExistingPPOpts),
5150           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5151 
5152     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5153                              bool AllowCompatibleDifferences) override {
5154       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5155                                   AllowCompatibleDifferences);
5156     }
5157 
5158     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5159                            bool AllowCompatibleDifferences) override {
5160       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5161                                 AllowCompatibleDifferences);
5162     }
5163 
5164     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5165                                  StringRef SpecificModuleCachePath,
5166                                  bool Complain) override {
5167       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5168                                       ExistingModuleCachePath,
5169                                       nullptr, ExistingLangOpts);
5170     }
5171 
5172     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5173                                  bool Complain,
5174                                  std::string &SuggestedPredefines) override {
5175       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5176                                       SuggestedPredefines, ExistingLangOpts);
5177     }
5178   };
5179 
5180 } // namespace
5181 
5182 bool ASTReader::readASTFileControlBlock(
5183     StringRef Filename, FileManager &FileMgr,
5184     const PCHContainerReader &PCHContainerRdr,
5185     bool FindModuleFileExtensions,
5186     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5187   // Open the AST file.
5188   // FIXME: This allows use of the VFS; we do not allow use of the
5189   // VFS when actually loading a module.
5190   auto Buffer = FileMgr.getBufferForFile(Filename);
5191   if (!Buffer) {
5192     return true;
5193   }
5194 
5195   // Initialize the stream
5196   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5197   BitstreamCursor Stream(Bytes);
5198 
5199   // Sniff for the signature.
5200   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5201     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5202     return true;
5203   }
5204 
5205   // Scan for the CONTROL_BLOCK_ID block.
5206   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5207     return true;
5208 
5209   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5210   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5211   bool NeedsImports = Listener.needsImportVisitation();
5212   BitstreamCursor InputFilesCursor;
5213 
5214   RecordData Record;
5215   std::string ModuleDir;
5216   bool DoneWithControlBlock = false;
5217   while (!DoneWithControlBlock) {
5218     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5219     if (!MaybeEntry) {
5220       // FIXME this drops the error on the floor.
5221       consumeError(MaybeEntry.takeError());
5222       return true;
5223     }
5224     llvm::BitstreamEntry Entry = MaybeEntry.get();
5225 
5226     switch (Entry.Kind) {
5227     case llvm::BitstreamEntry::SubBlock: {
5228       switch (Entry.ID) {
5229       case OPTIONS_BLOCK_ID: {
5230         std::string IgnoredSuggestedPredefines;
5231         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5232                              /*AllowCompatibleConfigurationMismatch*/ false,
5233                              Listener, IgnoredSuggestedPredefines) != Success)
5234           return true;
5235         break;
5236       }
5237 
5238       case INPUT_FILES_BLOCK_ID:
5239         InputFilesCursor = Stream;
5240         if (llvm::Error Err = Stream.SkipBlock()) {
5241           // FIXME this drops the error on the floor.
5242           consumeError(std::move(Err));
5243           return true;
5244         }
5245         if (NeedsInputFiles &&
5246             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5247           return true;
5248         break;
5249 
5250       default:
5251         if (llvm::Error Err = Stream.SkipBlock()) {
5252           // FIXME this drops the error on the floor.
5253           consumeError(std::move(Err));
5254           return true;
5255         }
5256         break;
5257       }
5258 
5259       continue;
5260     }
5261 
5262     case llvm::BitstreamEntry::EndBlock:
5263       DoneWithControlBlock = true;
5264       break;
5265 
5266     case llvm::BitstreamEntry::Error:
5267       return true;
5268 
5269     case llvm::BitstreamEntry::Record:
5270       break;
5271     }
5272 
5273     if (DoneWithControlBlock) break;
5274 
5275     Record.clear();
5276     StringRef Blob;
5277     Expected<unsigned> MaybeRecCode =
5278         Stream.readRecord(Entry.ID, Record, &Blob);
5279     if (!MaybeRecCode) {
5280       // FIXME this drops the error.
5281       return Failure;
5282     }
5283     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5284     case METADATA:
5285       if (Record[0] != VERSION_MAJOR)
5286         return true;
5287       if (Listener.ReadFullVersionInformation(Blob))
5288         return true;
5289       break;
5290     case MODULE_NAME:
5291       Listener.ReadModuleName(Blob);
5292       break;
5293     case MODULE_DIRECTORY:
5294       ModuleDir = std::string(Blob);
5295       break;
5296     case MODULE_MAP_FILE: {
5297       unsigned Idx = 0;
5298       auto Path = ReadString(Record, Idx);
5299       ResolveImportedPath(Path, ModuleDir);
5300       Listener.ReadModuleMapFile(Path);
5301       break;
5302     }
5303     case INPUT_FILE_OFFSETS: {
5304       if (!NeedsInputFiles)
5305         break;
5306 
5307       unsigned NumInputFiles = Record[0];
5308       unsigned NumUserFiles = Record[1];
5309       const llvm::support::unaligned_uint64_t *InputFileOffs =
5310           (const llvm::support::unaligned_uint64_t *)Blob.data();
5311       for (unsigned I = 0; I != NumInputFiles; ++I) {
5312         // Go find this input file.
5313         bool isSystemFile = I >= NumUserFiles;
5314 
5315         if (isSystemFile && !NeedsSystemInputFiles)
5316           break; // the rest are system input files
5317 
5318         BitstreamCursor &Cursor = InputFilesCursor;
5319         SavedStreamPosition SavedPosition(Cursor);
5320         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5321           // FIXME this drops errors on the floor.
5322           consumeError(std::move(Err));
5323         }
5324 
5325         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5326         if (!MaybeCode) {
5327           // FIXME this drops errors on the floor.
5328           consumeError(MaybeCode.takeError());
5329         }
5330         unsigned Code = MaybeCode.get();
5331 
5332         RecordData Record;
5333         StringRef Blob;
5334         bool shouldContinue = false;
5335         Expected<unsigned> MaybeRecordType =
5336             Cursor.readRecord(Code, Record, &Blob);
5337         if (!MaybeRecordType) {
5338           // FIXME this drops errors on the floor.
5339           consumeError(MaybeRecordType.takeError());
5340         }
5341         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5342         case INPUT_FILE_HASH:
5343           break;
5344         case INPUT_FILE:
5345           bool Overridden = static_cast<bool>(Record[3]);
5346           std::string Filename = std::string(Blob);
5347           ResolveImportedPath(Filename, ModuleDir);
5348           shouldContinue = Listener.visitInputFile(
5349               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5350           break;
5351         }
5352         if (!shouldContinue)
5353           break;
5354       }
5355       break;
5356     }
5357 
5358     case IMPORTS: {
5359       if (!NeedsImports)
5360         break;
5361 
5362       unsigned Idx = 0, N = Record.size();
5363       while (Idx < N) {
5364         // Read information about the AST file.
5365         Idx +=
5366             1 + 1 + 1 + 1 +
5367             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5368         std::string ModuleName = ReadString(Record, Idx);
5369         std::string Filename = ReadString(Record, Idx);
5370         ResolveImportedPath(Filename, ModuleDir);
5371         Listener.visitImport(ModuleName, Filename);
5372       }
5373       break;
5374     }
5375 
5376     default:
5377       // No other validation to perform.
5378       break;
5379     }
5380   }
5381 
5382   // Look for module file extension blocks, if requested.
5383   if (FindModuleFileExtensions) {
5384     BitstreamCursor SavedStream = Stream;
5385     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5386       bool DoneWithExtensionBlock = false;
5387       while (!DoneWithExtensionBlock) {
5388         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5389         if (!MaybeEntry) {
5390           // FIXME this drops the error.
5391           return true;
5392         }
5393         llvm::BitstreamEntry Entry = MaybeEntry.get();
5394 
5395         switch (Entry.Kind) {
5396         case llvm::BitstreamEntry::SubBlock:
5397           if (llvm::Error Err = Stream.SkipBlock()) {
5398             // FIXME this drops the error on the floor.
5399             consumeError(std::move(Err));
5400             return true;
5401           }
5402           continue;
5403 
5404         case llvm::BitstreamEntry::EndBlock:
5405           DoneWithExtensionBlock = true;
5406           continue;
5407 
5408         case llvm::BitstreamEntry::Error:
5409           return true;
5410 
5411         case llvm::BitstreamEntry::Record:
5412           break;
5413         }
5414 
5415        Record.clear();
5416        StringRef Blob;
5417        Expected<unsigned> MaybeRecCode =
5418            Stream.readRecord(Entry.ID, Record, &Blob);
5419        if (!MaybeRecCode) {
5420          // FIXME this drops the error.
5421          return true;
5422        }
5423        switch (MaybeRecCode.get()) {
5424        case EXTENSION_METADATA: {
5425          ModuleFileExtensionMetadata Metadata;
5426          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5427            return true;
5428 
5429          Listener.readModuleFileExtension(Metadata);
5430          break;
5431        }
5432        }
5433       }
5434     }
5435     Stream = SavedStream;
5436   }
5437 
5438   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5439   if (readUnhashedControlBlockImpl(
5440           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5441           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5442           ValidateDiagnosticOptions) != Success)
5443     return true;
5444 
5445   return false;
5446 }
5447 
5448 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5449                                     const PCHContainerReader &PCHContainerRdr,
5450                                     const LangOptions &LangOpts,
5451                                     const TargetOptions &TargetOpts,
5452                                     const PreprocessorOptions &PPOpts,
5453                                     StringRef ExistingModuleCachePath) {
5454   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5455                                ExistingModuleCachePath, FileMgr);
5456   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5457                                   /*FindModuleFileExtensions=*/false,
5458                                   validator,
5459                                   /*ValidateDiagnosticOptions=*/true);
5460 }
5461 
5462 ASTReader::ASTReadResult
5463 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5464   // Enter the submodule block.
5465   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5466     Error(std::move(Err));
5467     return Failure;
5468   }
5469 
5470   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5471   bool First = true;
5472   Module *CurrentModule = nullptr;
5473   RecordData Record;
5474   while (true) {
5475     Expected<llvm::BitstreamEntry> MaybeEntry =
5476         F.Stream.advanceSkippingSubblocks();
5477     if (!MaybeEntry) {
5478       Error(MaybeEntry.takeError());
5479       return Failure;
5480     }
5481     llvm::BitstreamEntry Entry = MaybeEntry.get();
5482 
5483     switch (Entry.Kind) {
5484     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5485     case llvm::BitstreamEntry::Error:
5486       Error("malformed block record in AST file");
5487       return Failure;
5488     case llvm::BitstreamEntry::EndBlock:
5489       return Success;
5490     case llvm::BitstreamEntry::Record:
5491       // The interesting case.
5492       break;
5493     }
5494 
5495     // Read a record.
5496     StringRef Blob;
5497     Record.clear();
5498     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5499     if (!MaybeKind) {
5500       Error(MaybeKind.takeError());
5501       return Failure;
5502     }
5503     unsigned Kind = MaybeKind.get();
5504 
5505     if ((Kind == SUBMODULE_METADATA) != First) {
5506       Error("submodule metadata record should be at beginning of block");
5507       return Failure;
5508     }
5509     First = false;
5510 
5511     // Submodule information is only valid if we have a current module.
5512     // FIXME: Should we error on these cases?
5513     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5514         Kind != SUBMODULE_DEFINITION)
5515       continue;
5516 
5517     switch (Kind) {
5518     default:  // Default behavior: ignore.
5519       break;
5520 
5521     case SUBMODULE_DEFINITION: {
5522       if (Record.size() < 12) {
5523         Error("malformed module definition");
5524         return Failure;
5525       }
5526 
5527       StringRef Name = Blob;
5528       unsigned Idx = 0;
5529       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5530       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5531       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5532       bool IsFramework = Record[Idx++];
5533       bool IsExplicit = Record[Idx++];
5534       bool IsSystem = Record[Idx++];
5535       bool IsExternC = Record[Idx++];
5536       bool InferSubmodules = Record[Idx++];
5537       bool InferExplicitSubmodules = Record[Idx++];
5538       bool InferExportWildcard = Record[Idx++];
5539       bool ConfigMacrosExhaustive = Record[Idx++];
5540       bool ModuleMapIsPrivate = Record[Idx++];
5541 
5542       Module *ParentModule = nullptr;
5543       if (Parent)
5544         ParentModule = getSubmodule(Parent);
5545 
5546       // Retrieve this (sub)module from the module map, creating it if
5547       // necessary.
5548       CurrentModule =
5549           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5550               .first;
5551 
5552       // FIXME: set the definition loc for CurrentModule, or call
5553       // ModMap.setInferredModuleAllowedBy()
5554 
5555       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5556       if (GlobalIndex >= SubmodulesLoaded.size() ||
5557           SubmodulesLoaded[GlobalIndex]) {
5558         Error("too many submodules");
5559         return Failure;
5560       }
5561 
5562       if (!ParentModule) {
5563         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5564           // Don't emit module relocation error if we have -fno-validate-pch
5565           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5566                     DisableValidationForModuleKind::Module) &&
5567               CurFile != F.File) {
5568             Error(diag::err_module_file_conflict,
5569                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5570                   F.File->getName());
5571             return Failure;
5572           }
5573         }
5574 
5575         F.DidReadTopLevelSubmodule = true;
5576         CurrentModule->setASTFile(F.File);
5577         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5578       }
5579 
5580       CurrentModule->Kind = Kind;
5581       CurrentModule->Signature = F.Signature;
5582       CurrentModule->IsFromModuleFile = true;
5583       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5584       CurrentModule->IsExternC = IsExternC;
5585       CurrentModule->InferSubmodules = InferSubmodules;
5586       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5587       CurrentModule->InferExportWildcard = InferExportWildcard;
5588       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5589       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5590       if (DeserializationListener)
5591         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5592 
5593       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5594 
5595       // Clear out data that will be replaced by what is in the module file.
5596       CurrentModule->LinkLibraries.clear();
5597       CurrentModule->ConfigMacros.clear();
5598       CurrentModule->UnresolvedConflicts.clear();
5599       CurrentModule->Conflicts.clear();
5600 
5601       // The module is available unless it's missing a requirement; relevant
5602       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5603       // Missing headers that were present when the module was built do not
5604       // make it unavailable -- if we got this far, this must be an explicitly
5605       // imported module file.
5606       CurrentModule->Requirements.clear();
5607       CurrentModule->MissingHeaders.clear();
5608       CurrentModule->IsUnimportable =
5609           ParentModule && ParentModule->IsUnimportable;
5610       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5611       break;
5612     }
5613 
5614     case SUBMODULE_UMBRELLA_HEADER: {
5615       std::string Filename = std::string(Blob);
5616       ResolveImportedPath(F, Filename);
5617       if (auto Umbrella = PP.getFileManager().getOptionalFileRef(Filename)) {
5618         if (!CurrentModule->getUmbrellaHeader())
5619           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5620         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5621           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5622             Error("mismatched umbrella headers in submodule");
5623           return OutOfDate;
5624         }
5625       }
5626       break;
5627     }
5628 
5629     case SUBMODULE_HEADER:
5630     case SUBMODULE_EXCLUDED_HEADER:
5631     case SUBMODULE_PRIVATE_HEADER:
5632       // We lazily associate headers with their modules via the HeaderInfo table.
5633       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5634       // of complete filenames or remove it entirely.
5635       break;
5636 
5637     case SUBMODULE_TEXTUAL_HEADER:
5638     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5639       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5640       // them here.
5641       break;
5642 
5643     case SUBMODULE_TOPHEADER:
5644       CurrentModule->addTopHeaderFilename(Blob);
5645       break;
5646 
5647     case SUBMODULE_UMBRELLA_DIR: {
5648       std::string Dirname = std::string(Blob);
5649       ResolveImportedPath(F, Dirname);
5650       if (auto Umbrella =
5651               PP.getFileManager().getOptionalDirectoryRef(Dirname)) {
5652         if (!CurrentModule->getUmbrellaDir())
5653           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob);
5654         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5655           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5656             Error("mismatched umbrella directories in submodule");
5657           return OutOfDate;
5658         }
5659       }
5660       break;
5661     }
5662 
5663     case SUBMODULE_METADATA: {
5664       F.BaseSubmoduleID = getTotalNumSubmodules();
5665       F.LocalNumSubmodules = Record[0];
5666       unsigned LocalBaseSubmoduleID = Record[1];
5667       if (F.LocalNumSubmodules > 0) {
5668         // Introduce the global -> local mapping for submodules within this
5669         // module.
5670         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5671 
5672         // Introduce the local -> global mapping for submodules within this
5673         // module.
5674         F.SubmoduleRemap.insertOrReplace(
5675           std::make_pair(LocalBaseSubmoduleID,
5676                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5677 
5678         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5679       }
5680       break;
5681     }
5682 
5683     case SUBMODULE_IMPORTS:
5684       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5685         UnresolvedModuleRef Unresolved;
5686         Unresolved.File = &F;
5687         Unresolved.Mod = CurrentModule;
5688         Unresolved.ID = Record[Idx];
5689         Unresolved.Kind = UnresolvedModuleRef::Import;
5690         Unresolved.IsWildcard = false;
5691         UnresolvedModuleRefs.push_back(Unresolved);
5692       }
5693       break;
5694 
5695     case SUBMODULE_EXPORTS:
5696       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5697         UnresolvedModuleRef Unresolved;
5698         Unresolved.File = &F;
5699         Unresolved.Mod = CurrentModule;
5700         Unresolved.ID = Record[Idx];
5701         Unresolved.Kind = UnresolvedModuleRef::Export;
5702         Unresolved.IsWildcard = Record[Idx + 1];
5703         UnresolvedModuleRefs.push_back(Unresolved);
5704       }
5705 
5706       // Once we've loaded the set of exports, there's no reason to keep
5707       // the parsed, unresolved exports around.
5708       CurrentModule->UnresolvedExports.clear();
5709       break;
5710 
5711     case SUBMODULE_REQUIRES:
5712       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5713                                     PP.getTargetInfo());
5714       break;
5715 
5716     case SUBMODULE_LINK_LIBRARY:
5717       ModMap.resolveLinkAsDependencies(CurrentModule);
5718       CurrentModule->LinkLibraries.push_back(
5719           Module::LinkLibrary(std::string(Blob), Record[0]));
5720       break;
5721 
5722     case SUBMODULE_CONFIG_MACRO:
5723       CurrentModule->ConfigMacros.push_back(Blob.str());
5724       break;
5725 
5726     case SUBMODULE_CONFLICT: {
5727       UnresolvedModuleRef Unresolved;
5728       Unresolved.File = &F;
5729       Unresolved.Mod = CurrentModule;
5730       Unresolved.ID = Record[0];
5731       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5732       Unresolved.IsWildcard = false;
5733       Unresolved.String = Blob;
5734       UnresolvedModuleRefs.push_back(Unresolved);
5735       break;
5736     }
5737 
5738     case SUBMODULE_INITIALIZERS: {
5739       if (!ContextObj)
5740         break;
5741       SmallVector<uint32_t, 16> Inits;
5742       for (auto &ID : Record)
5743         Inits.push_back(getGlobalDeclID(F, ID));
5744       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5745       break;
5746     }
5747 
5748     case SUBMODULE_EXPORT_AS:
5749       CurrentModule->ExportAsModule = Blob.str();
5750       ModMap.addLinkAsDependency(CurrentModule);
5751       break;
5752     }
5753   }
5754 }
5755 
5756 /// Parse the record that corresponds to a LangOptions data
5757 /// structure.
5758 ///
5759 /// This routine parses the language options from the AST file and then gives
5760 /// them to the AST listener if one is set.
5761 ///
5762 /// \returns true if the listener deems the file unacceptable, false otherwise.
5763 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5764                                      bool Complain,
5765                                      ASTReaderListener &Listener,
5766                                      bool AllowCompatibleDifferences) {
5767   LangOptions LangOpts;
5768   unsigned Idx = 0;
5769 #define LANGOPT(Name, Bits, Default, Description) \
5770   LangOpts.Name = Record[Idx++];
5771 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5772   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5773 #include "clang/Basic/LangOptions.def"
5774 #define SANITIZER(NAME, ID)                                                    \
5775   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5776 #include "clang/Basic/Sanitizers.def"
5777 
5778   for (unsigned N = Record[Idx++]; N; --N)
5779     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5780 
5781   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5782   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5783   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5784 
5785   LangOpts.CurrentModule = ReadString(Record, Idx);
5786 
5787   // Comment options.
5788   for (unsigned N = Record[Idx++]; N; --N) {
5789     LangOpts.CommentOpts.BlockCommandNames.push_back(
5790       ReadString(Record, Idx));
5791   }
5792   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5793 
5794   // OpenMP offloading options.
5795   for (unsigned N = Record[Idx++]; N; --N) {
5796     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5797   }
5798 
5799   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5800 
5801   return Listener.ReadLanguageOptions(LangOpts, Complain,
5802                                       AllowCompatibleDifferences);
5803 }
5804 
5805 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5806                                    ASTReaderListener &Listener,
5807                                    bool AllowCompatibleDifferences) {
5808   unsigned Idx = 0;
5809   TargetOptions TargetOpts;
5810   TargetOpts.Triple = ReadString(Record, Idx);
5811   TargetOpts.CPU = ReadString(Record, Idx);
5812   TargetOpts.TuneCPU = ReadString(Record, Idx);
5813   TargetOpts.ABI = ReadString(Record, Idx);
5814   for (unsigned N = Record[Idx++]; N; --N) {
5815     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5816   }
5817   for (unsigned N = Record[Idx++]; N; --N) {
5818     TargetOpts.Features.push_back(ReadString(Record, Idx));
5819   }
5820 
5821   return Listener.ReadTargetOptions(TargetOpts, Complain,
5822                                     AllowCompatibleDifferences);
5823 }
5824 
5825 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5826                                        ASTReaderListener &Listener) {
5827   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5828   unsigned Idx = 0;
5829 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5830 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5831   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5832 #include "clang/Basic/DiagnosticOptions.def"
5833 
5834   for (unsigned N = Record[Idx++]; N; --N)
5835     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5836   for (unsigned N = Record[Idx++]; N; --N)
5837     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5838 
5839   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5840 }
5841 
5842 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5843                                        ASTReaderListener &Listener) {
5844   FileSystemOptions FSOpts;
5845   unsigned Idx = 0;
5846   FSOpts.WorkingDir = ReadString(Record, Idx);
5847   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5848 }
5849 
5850 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5851                                          bool Complain,
5852                                          ASTReaderListener &Listener) {
5853   HeaderSearchOptions HSOpts;
5854   unsigned Idx = 0;
5855   HSOpts.Sysroot = ReadString(Record, Idx);
5856 
5857   // Include entries.
5858   for (unsigned N = Record[Idx++]; N; --N) {
5859     std::string Path = ReadString(Record, Idx);
5860     frontend::IncludeDirGroup Group
5861       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5862     bool IsFramework = Record[Idx++];
5863     bool IgnoreSysRoot = Record[Idx++];
5864     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5865                                     IgnoreSysRoot);
5866   }
5867 
5868   // System header prefixes.
5869   for (unsigned N = Record[Idx++]; N; --N) {
5870     std::string Prefix = ReadString(Record, Idx);
5871     bool IsSystemHeader = Record[Idx++];
5872     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5873   }
5874 
5875   HSOpts.ResourceDir = ReadString(Record, Idx);
5876   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5877   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5878   HSOpts.DisableModuleHash = Record[Idx++];
5879   HSOpts.ImplicitModuleMaps = Record[Idx++];
5880   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5881   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5882   HSOpts.UseBuiltinIncludes = Record[Idx++];
5883   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5884   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5885   HSOpts.UseLibcxx = Record[Idx++];
5886   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5887 
5888   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5889                                           Complain);
5890 }
5891 
5892 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5893                                          bool Complain,
5894                                          ASTReaderListener &Listener,
5895                                          std::string &SuggestedPredefines) {
5896   PreprocessorOptions PPOpts;
5897   unsigned Idx = 0;
5898 
5899   // Macro definitions/undefs
5900   for (unsigned N = Record[Idx++]; N; --N) {
5901     std::string Macro = ReadString(Record, Idx);
5902     bool IsUndef = Record[Idx++];
5903     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5904   }
5905 
5906   // Includes
5907   for (unsigned N = Record[Idx++]; N; --N) {
5908     PPOpts.Includes.push_back(ReadString(Record, Idx));
5909   }
5910 
5911   // Macro Includes
5912   for (unsigned N = Record[Idx++]; N; --N) {
5913     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5914   }
5915 
5916   PPOpts.UsePredefines = Record[Idx++];
5917   PPOpts.DetailedRecord = Record[Idx++];
5918   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5919   PPOpts.ObjCXXARCStandardLibrary =
5920     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5921   SuggestedPredefines.clear();
5922   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5923                                           SuggestedPredefines);
5924 }
5925 
5926 std::pair<ModuleFile *, unsigned>
5927 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5928   GlobalPreprocessedEntityMapType::iterator
5929   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5930   assert(I != GlobalPreprocessedEntityMap.end() &&
5931          "Corrupted global preprocessed entity map");
5932   ModuleFile *M = I->second;
5933   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5934   return std::make_pair(M, LocalIndex);
5935 }
5936 
5937 llvm::iterator_range<PreprocessingRecord::iterator>
5938 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5939   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5940     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5941                                              Mod.NumPreprocessedEntities);
5942 
5943   return llvm::make_range(PreprocessingRecord::iterator(),
5944                           PreprocessingRecord::iterator());
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   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7200 
7201   // If this is a named declaration, complete it by looking it up
7202   // within its context.
7203   //
7204   // FIXME: Merging a function definition should merge
7205   // all mergeable entities within it.
7206   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7207       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7208     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7209       if (!getContext().getLangOpts().CPlusPlus &&
7210           isa<TranslationUnitDecl>(DC)) {
7211         // Outside of C++, we don't have a lookup table for the TU, so update
7212         // the identifier instead. (For C++ modules, we don't store decls
7213         // in the serialized identifier table, so we do the lookup in the TU.)
7214         auto *II = Name.getAsIdentifierInfo();
7215         assert(II && "non-identifier name in C?");
7216         if (II->isOutOfDate())
7217           updateOutOfDateIdentifier(*II);
7218       } else
7219         DC->lookup(Name);
7220     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7221       // Find all declarations of this kind from the relevant context.
7222       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7223         auto *DC = cast<DeclContext>(DCDecl);
7224         SmallVector<Decl*, 8> Decls;
7225         FindExternalLexicalDecls(
7226             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7227       }
7228     }
7229   }
7230 
7231   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7232     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7233   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7234     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7235   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7236     if (auto *Template = FD->getPrimaryTemplate())
7237       Template->LoadLazySpecializations();
7238   }
7239 }
7240 
7241 CXXCtorInitializer **
7242 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7243   RecordLocation Loc = getLocalBitOffset(Offset);
7244   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7245   SavedStreamPosition SavedPosition(Cursor);
7246   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7247     Error(std::move(Err));
7248     return nullptr;
7249   }
7250   ReadingKindTracker ReadingKind(Read_Decl, *this);
7251 
7252   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7253   if (!MaybeCode) {
7254     Error(MaybeCode.takeError());
7255     return nullptr;
7256   }
7257   unsigned Code = MaybeCode.get();
7258 
7259   ASTRecordReader Record(*this, *Loc.F);
7260   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7261   if (!MaybeRecCode) {
7262     Error(MaybeRecCode.takeError());
7263     return nullptr;
7264   }
7265   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7266     Error("malformed AST file: missing C++ ctor initializers");
7267     return nullptr;
7268   }
7269 
7270   return Record.readCXXCtorInitializers();
7271 }
7272 
7273 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7274   assert(ContextObj && "reading base specifiers with no AST context");
7275   ASTContext &Context = *ContextObj;
7276 
7277   RecordLocation Loc = getLocalBitOffset(Offset);
7278   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7279   SavedStreamPosition SavedPosition(Cursor);
7280   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7281     Error(std::move(Err));
7282     return nullptr;
7283   }
7284   ReadingKindTracker ReadingKind(Read_Decl, *this);
7285 
7286   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7287   if (!MaybeCode) {
7288     Error(MaybeCode.takeError());
7289     return nullptr;
7290   }
7291   unsigned Code = MaybeCode.get();
7292 
7293   ASTRecordReader Record(*this, *Loc.F);
7294   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7295   if (!MaybeRecCode) {
7296     Error(MaybeCode.takeError());
7297     return nullptr;
7298   }
7299   unsigned RecCode = MaybeRecCode.get();
7300 
7301   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7302     Error("malformed AST file: missing C++ base specifiers");
7303     return nullptr;
7304   }
7305 
7306   unsigned NumBases = Record.readInt();
7307   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7308   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7309   for (unsigned I = 0; I != NumBases; ++I)
7310     Bases[I] = Record.readCXXBaseSpecifier();
7311   return Bases;
7312 }
7313 
7314 serialization::DeclID
7315 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7316   if (LocalID < NUM_PREDEF_DECL_IDS)
7317     return LocalID;
7318 
7319   if (!F.ModuleOffsetMap.empty())
7320     ReadModuleOffsetMap(F);
7321 
7322   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7323     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7324   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7325 
7326   return LocalID + I->second;
7327 }
7328 
7329 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7330                                    ModuleFile &M) const {
7331   // Predefined decls aren't from any module.
7332   if (ID < NUM_PREDEF_DECL_IDS)
7333     return false;
7334 
7335   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7336          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7337 }
7338 
7339 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7340   if (!D->isFromASTFile())
7341     return nullptr;
7342   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7343   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7344   return I->second;
7345 }
7346 
7347 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7348   if (ID < NUM_PREDEF_DECL_IDS)
7349     return SourceLocation();
7350 
7351   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7352 
7353   if (Index > DeclsLoaded.size()) {
7354     Error("declaration ID out-of-range for AST file");
7355     return SourceLocation();
7356   }
7357 
7358   if (Decl *D = DeclsLoaded[Index])
7359     return D->getLocation();
7360 
7361   SourceLocation Loc;
7362   DeclCursorForID(ID, Loc);
7363   return Loc;
7364 }
7365 
7366 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7367   switch (ID) {
7368   case PREDEF_DECL_NULL_ID:
7369     return nullptr;
7370 
7371   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7372     return Context.getTranslationUnitDecl();
7373 
7374   case PREDEF_DECL_OBJC_ID_ID:
7375     return Context.getObjCIdDecl();
7376 
7377   case PREDEF_DECL_OBJC_SEL_ID:
7378     return Context.getObjCSelDecl();
7379 
7380   case PREDEF_DECL_OBJC_CLASS_ID:
7381     return Context.getObjCClassDecl();
7382 
7383   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7384     return Context.getObjCProtocolDecl();
7385 
7386   case PREDEF_DECL_INT_128_ID:
7387     return Context.getInt128Decl();
7388 
7389   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7390     return Context.getUInt128Decl();
7391 
7392   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7393     return Context.getObjCInstanceTypeDecl();
7394 
7395   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7396     return Context.getBuiltinVaListDecl();
7397 
7398   case PREDEF_DECL_VA_LIST_TAG:
7399     return Context.getVaListTagDecl();
7400 
7401   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7402     return Context.getBuiltinMSVaListDecl();
7403 
7404   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7405     return Context.getMSGuidTagDecl();
7406 
7407   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7408     return Context.getExternCContextDecl();
7409 
7410   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7411     return Context.getMakeIntegerSeqDecl();
7412 
7413   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7414     return Context.getCFConstantStringDecl();
7415 
7416   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7417     return Context.getCFConstantStringTagDecl();
7418 
7419   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7420     return Context.getTypePackElementDecl();
7421   }
7422   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7423 }
7424 
7425 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7426   assert(ContextObj && "reading decl with no AST context");
7427   if (ID < NUM_PREDEF_DECL_IDS) {
7428     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7429     if (D) {
7430       // Track that we have merged the declaration with ID \p ID into the
7431       // pre-existing predefined declaration \p D.
7432       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7433       if (Merged.empty())
7434         Merged.push_back(ID);
7435     }
7436     return D;
7437   }
7438 
7439   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7440 
7441   if (Index >= DeclsLoaded.size()) {
7442     assert(0 && "declaration ID out-of-range for AST file");
7443     Error("declaration ID out-of-range for AST file");
7444     return nullptr;
7445   }
7446 
7447   return DeclsLoaded[Index];
7448 }
7449 
7450 Decl *ASTReader::GetDecl(DeclID ID) {
7451   if (ID < NUM_PREDEF_DECL_IDS)
7452     return GetExistingDecl(ID);
7453 
7454   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7455 
7456   if (Index >= DeclsLoaded.size()) {
7457     assert(0 && "declaration ID out-of-range for AST file");
7458     Error("declaration ID out-of-range for AST file");
7459     return nullptr;
7460   }
7461 
7462   if (!DeclsLoaded[Index]) {
7463     ReadDeclRecord(ID);
7464     if (DeserializationListener)
7465       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7466   }
7467 
7468   return DeclsLoaded[Index];
7469 }
7470 
7471 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7472                                                   DeclID GlobalID) {
7473   if (GlobalID < NUM_PREDEF_DECL_IDS)
7474     return GlobalID;
7475 
7476   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7477   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7478   ModuleFile *Owner = I->second;
7479 
7480   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7481     = M.GlobalToLocalDeclIDs.find(Owner);
7482   if (Pos == M.GlobalToLocalDeclIDs.end())
7483     return 0;
7484 
7485   return GlobalID - Owner->BaseDeclID + Pos->second;
7486 }
7487 
7488 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7489                                             const RecordData &Record,
7490                                             unsigned &Idx) {
7491   if (Idx >= Record.size()) {
7492     Error("Corrupted AST file");
7493     return 0;
7494   }
7495 
7496   return getGlobalDeclID(F, Record[Idx++]);
7497 }
7498 
7499 /// Resolve the offset of a statement into a statement.
7500 ///
7501 /// This operation will read a new statement from the external
7502 /// source each time it is called, and is meant to be used via a
7503 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7504 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7505   // Switch case IDs are per Decl.
7506   ClearSwitchCaseIDs();
7507 
7508   // Offset here is a global offset across the entire chain.
7509   RecordLocation Loc = getLocalBitOffset(Offset);
7510   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7511     Error(std::move(Err));
7512     return nullptr;
7513   }
7514   assert(NumCurrentElementsDeserializing == 0 &&
7515          "should not be called while already deserializing");
7516   Deserializing D(this);
7517   return ReadStmtFromStream(*Loc.F);
7518 }
7519 
7520 void ASTReader::FindExternalLexicalDecls(
7521     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7522     SmallVectorImpl<Decl *> &Decls) {
7523   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7524 
7525   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7526     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7527     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7528       auto K = (Decl::Kind)+LexicalDecls[I];
7529       if (!IsKindWeWant(K))
7530         continue;
7531 
7532       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7533 
7534       // Don't add predefined declarations to the lexical context more
7535       // than once.
7536       if (ID < NUM_PREDEF_DECL_IDS) {
7537         if (PredefsVisited[ID])
7538           continue;
7539 
7540         PredefsVisited[ID] = true;
7541       }
7542 
7543       if (Decl *D = GetLocalDecl(*M, ID)) {
7544         assert(D->getKind() == K && "wrong kind for lexical decl");
7545         if (!DC->isDeclInLexicalTraversal(D))
7546           Decls.push_back(D);
7547       }
7548     }
7549   };
7550 
7551   if (isa<TranslationUnitDecl>(DC)) {
7552     for (auto Lexical : TULexicalDecls)
7553       Visit(Lexical.first, Lexical.second);
7554   } else {
7555     auto I = LexicalDecls.find(DC);
7556     if (I != LexicalDecls.end())
7557       Visit(I->second.first, I->second.second);
7558   }
7559 
7560   ++NumLexicalDeclContextsRead;
7561 }
7562 
7563 namespace {
7564 
7565 class DeclIDComp {
7566   ASTReader &Reader;
7567   ModuleFile &Mod;
7568 
7569 public:
7570   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7571 
7572   bool operator()(LocalDeclID L, LocalDeclID R) const {
7573     SourceLocation LHS = getLocation(L);
7574     SourceLocation RHS = getLocation(R);
7575     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7576   }
7577 
7578   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7579     SourceLocation RHS = getLocation(R);
7580     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7581   }
7582 
7583   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7584     SourceLocation LHS = getLocation(L);
7585     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7586   }
7587 
7588   SourceLocation getLocation(LocalDeclID ID) const {
7589     return Reader.getSourceManager().getFileLoc(
7590             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7591   }
7592 };
7593 
7594 } // namespace
7595 
7596 void ASTReader::FindFileRegionDecls(FileID File,
7597                                     unsigned Offset, unsigned Length,
7598                                     SmallVectorImpl<Decl *> &Decls) {
7599   SourceManager &SM = getSourceManager();
7600 
7601   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7602   if (I == FileDeclIDs.end())
7603     return;
7604 
7605   FileDeclsInfo &DInfo = I->second;
7606   if (DInfo.Decls.empty())
7607     return;
7608 
7609   SourceLocation
7610     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7611   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7612 
7613   DeclIDComp DIDComp(*this, *DInfo.Mod);
7614   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7615       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7616   if (BeginIt != DInfo.Decls.begin())
7617     --BeginIt;
7618 
7619   // If we are pointing at a top-level decl inside an objc container, we need
7620   // to backtrack until we find it otherwise we will fail to report that the
7621   // region overlaps with an objc container.
7622   while (BeginIt != DInfo.Decls.begin() &&
7623          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7624              ->isTopLevelDeclInObjCContainer())
7625     --BeginIt;
7626 
7627   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7628       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7629   if (EndIt != DInfo.Decls.end())
7630     ++EndIt;
7631 
7632   for (ArrayRef<serialization::LocalDeclID>::iterator
7633          DIt = BeginIt; DIt != EndIt; ++DIt)
7634     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7635 }
7636 
7637 bool
7638 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7639                                           DeclarationName Name) {
7640   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7641          "DeclContext has no visible decls in storage");
7642   if (!Name)
7643     return false;
7644 
7645   auto It = Lookups.find(DC);
7646   if (It == Lookups.end())
7647     return false;
7648 
7649   Deserializing LookupResults(this);
7650 
7651   // Load the list of declarations.
7652   SmallVector<NamedDecl *, 64> Decls;
7653   for (DeclID ID : It->second.Table.find(Name)) {
7654     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7655     if (ND->getDeclName() == Name)
7656       Decls.push_back(ND);
7657   }
7658 
7659   ++NumVisibleDeclContextsRead;
7660   SetExternalVisibleDeclsForName(DC, Name, Decls);
7661   return !Decls.empty();
7662 }
7663 
7664 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7665   if (!DC->hasExternalVisibleStorage())
7666     return;
7667 
7668   auto It = Lookups.find(DC);
7669   assert(It != Lookups.end() &&
7670          "have external visible storage but no lookup tables");
7671 
7672   DeclsMap Decls;
7673 
7674   for (DeclID ID : It->second.Table.findAll()) {
7675     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7676     Decls[ND->getDeclName()].push_back(ND);
7677   }
7678 
7679   ++NumVisibleDeclContextsRead;
7680 
7681   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7682     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7683   }
7684   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7685 }
7686 
7687 const serialization::reader::DeclContextLookupTable *
7688 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7689   auto I = Lookups.find(Primary);
7690   return I == Lookups.end() ? nullptr : &I->second;
7691 }
7692 
7693 /// Under non-PCH compilation the consumer receives the objc methods
7694 /// before receiving the implementation, and codegen depends on this.
7695 /// We simulate this by deserializing and passing to consumer the methods of the
7696 /// implementation before passing the deserialized implementation decl.
7697 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7698                                        ASTConsumer *Consumer) {
7699   assert(ImplD && Consumer);
7700 
7701   for (auto *I : ImplD->methods())
7702     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7703 
7704   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7705 }
7706 
7707 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7708   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7709     PassObjCImplDeclToConsumer(ImplD, Consumer);
7710   else
7711     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7712 }
7713 
7714 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7715   this->Consumer = Consumer;
7716 
7717   if (Consumer)
7718     PassInterestingDeclsToConsumer();
7719 
7720   if (DeserializationListener)
7721     DeserializationListener->ReaderInitialized(this);
7722 }
7723 
7724 void ASTReader::PrintStats() {
7725   std::fprintf(stderr, "*** AST File Statistics:\n");
7726 
7727   unsigned NumTypesLoaded
7728     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7729                                       QualType());
7730   unsigned NumDeclsLoaded
7731     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7732                                       (Decl *)nullptr);
7733   unsigned NumIdentifiersLoaded
7734     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7735                                             IdentifiersLoaded.end(),
7736                                             (IdentifierInfo *)nullptr);
7737   unsigned NumMacrosLoaded
7738     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7739                                        MacrosLoaded.end(),
7740                                        (MacroInfo *)nullptr);
7741   unsigned NumSelectorsLoaded
7742     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7743                                           SelectorsLoaded.end(),
7744                                           Selector());
7745 
7746   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7747     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7748                  NumSLocEntriesRead, TotalNumSLocEntries,
7749                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7750   if (!TypesLoaded.empty())
7751     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7752                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7753                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7754   if (!DeclsLoaded.empty())
7755     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7756                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7757                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7758   if (!IdentifiersLoaded.empty())
7759     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7760                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7761                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7762   if (!MacrosLoaded.empty())
7763     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7764                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7765                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7766   if (!SelectorsLoaded.empty())
7767     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7768                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7769                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7770   if (TotalNumStatements)
7771     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7772                  NumStatementsRead, TotalNumStatements,
7773                  ((float)NumStatementsRead/TotalNumStatements * 100));
7774   if (TotalNumMacros)
7775     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7776                  NumMacrosRead, TotalNumMacros,
7777                  ((float)NumMacrosRead/TotalNumMacros * 100));
7778   if (TotalLexicalDeclContexts)
7779     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7780                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7781                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7782                   * 100));
7783   if (TotalVisibleDeclContexts)
7784     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7785                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7786                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7787                   * 100));
7788   if (TotalNumMethodPoolEntries)
7789     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7790                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7791                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7792                   * 100));
7793   if (NumMethodPoolLookups)
7794     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7795                  NumMethodPoolHits, NumMethodPoolLookups,
7796                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7797   if (NumMethodPoolTableLookups)
7798     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7799                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7800                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7801                   * 100.0));
7802   if (NumIdentifierLookupHits)
7803     std::fprintf(stderr,
7804                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7805                  NumIdentifierLookupHits, NumIdentifierLookups,
7806                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7807 
7808   if (GlobalIndex) {
7809     std::fprintf(stderr, "\n");
7810     GlobalIndex->printStats();
7811   }
7812 
7813   std::fprintf(stderr, "\n");
7814   dump();
7815   std::fprintf(stderr, "\n");
7816 }
7817 
7818 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7819 LLVM_DUMP_METHOD static void
7820 dumpModuleIDMap(StringRef Name,
7821                 const ContinuousRangeMap<Key, ModuleFile *,
7822                                          InitialCapacity> &Map) {
7823   if (Map.begin() == Map.end())
7824     return;
7825 
7826   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7827 
7828   llvm::errs() << Name << ":\n";
7829   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7830        I != IEnd; ++I) {
7831     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7832       << "\n";
7833   }
7834 }
7835 
7836 LLVM_DUMP_METHOD void ASTReader::dump() {
7837   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7838   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7839   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7840   dumpModuleIDMap("Global type map", GlobalTypeMap);
7841   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7842   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7843   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7844   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7845   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7846   dumpModuleIDMap("Global preprocessed entity map",
7847                   GlobalPreprocessedEntityMap);
7848 
7849   llvm::errs() << "\n*** PCH/Modules Loaded:";
7850   for (ModuleFile &M : ModuleMgr)
7851     M.dump();
7852 }
7853 
7854 /// Return the amount of memory used by memory buffers, breaking down
7855 /// by heap-backed versus mmap'ed memory.
7856 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7857   for (ModuleFile &I : ModuleMgr) {
7858     if (llvm::MemoryBuffer *buf = I.Buffer) {
7859       size_t bytes = buf->getBufferSize();
7860       switch (buf->getBufferKind()) {
7861         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7862           sizes.malloc_bytes += bytes;
7863           break;
7864         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7865           sizes.mmap_bytes += bytes;
7866           break;
7867       }
7868     }
7869   }
7870 }
7871 
7872 void ASTReader::InitializeSema(Sema &S) {
7873   SemaObj = &S;
7874   S.addExternalSource(this);
7875 
7876   // Makes sure any declarations that were deserialized "too early"
7877   // still get added to the identifier's declaration chains.
7878   for (uint64_t ID : PreloadedDeclIDs) {
7879     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7880     pushExternalDeclIntoScope(D, D->getDeclName());
7881   }
7882   PreloadedDeclIDs.clear();
7883 
7884   // FIXME: What happens if these are changed by a module import?
7885   if (!FPPragmaOptions.empty()) {
7886     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7887     FPOptionsOverride NewOverrides =
7888         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7889     SemaObj->CurFPFeatures =
7890         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7891   }
7892 
7893   SemaObj->OpenCLFeatures = OpenCLExtensions;
7894   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7895   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7896 
7897   UpdateSema();
7898 }
7899 
7900 void ASTReader::UpdateSema() {
7901   assert(SemaObj && "no Sema to update");
7902 
7903   // Load the offsets of the declarations that Sema references.
7904   // They will be lazily deserialized when needed.
7905   if (!SemaDeclRefs.empty()) {
7906     assert(SemaDeclRefs.size() % 3 == 0);
7907     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7908       if (!SemaObj->StdNamespace)
7909         SemaObj->StdNamespace = SemaDeclRefs[I];
7910       if (!SemaObj->StdBadAlloc)
7911         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7912       if (!SemaObj->StdAlignValT)
7913         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7914     }
7915     SemaDeclRefs.clear();
7916   }
7917 
7918   // Update the state of pragmas. Use the same API as if we had encountered the
7919   // pragma in the source.
7920   if(OptimizeOffPragmaLocation.isValid())
7921     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7922   if (PragmaMSStructState != -1)
7923     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7924   if (PointersToMembersPragmaLocation.isValid()) {
7925     SemaObj->ActOnPragmaMSPointersToMembers(
7926         (LangOptions::PragmaMSPointersToMembersKind)
7927             PragmaMSPointersToMembersState,
7928         PointersToMembersPragmaLocation);
7929   }
7930   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7931 
7932   if (PragmaAlignPackCurrentValue) {
7933     // The bottom of the stack might have a default value. It must be adjusted
7934     // to the current value to ensure that the packing state is preserved after
7935     // popping entries that were included/imported from a PCH/module.
7936     bool DropFirst = false;
7937     if (!PragmaAlignPackStack.empty() &&
7938         PragmaAlignPackStack.front().Location.isInvalid()) {
7939       assert(PragmaAlignPackStack.front().Value ==
7940                  SemaObj->AlignPackStack.DefaultValue &&
7941              "Expected a default alignment value");
7942       SemaObj->AlignPackStack.Stack.emplace_back(
7943           PragmaAlignPackStack.front().SlotLabel,
7944           SemaObj->AlignPackStack.CurrentValue,
7945           SemaObj->AlignPackStack.CurrentPragmaLocation,
7946           PragmaAlignPackStack.front().PushLocation);
7947       DropFirst = true;
7948     }
7949     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7950                                  .drop_front(DropFirst ? 1 : 0)) {
7951       SemaObj->AlignPackStack.Stack.emplace_back(
7952           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7953     }
7954     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7955       assert(*PragmaAlignPackCurrentValue ==
7956                  SemaObj->AlignPackStack.DefaultValue &&
7957              "Expected a default align and pack value");
7958       // Keep the current values.
7959     } else {
7960       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7961       SemaObj->AlignPackStack.CurrentPragmaLocation =
7962           PragmaAlignPackCurrentLocation;
7963     }
7964   }
7965   if (FpPragmaCurrentValue) {
7966     // The bottom of the stack might have a default value. It must be adjusted
7967     // to the current value to ensure that fp-pragma state is preserved after
7968     // popping entries that were included/imported from a PCH/module.
7969     bool DropFirst = false;
7970     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7971       assert(FpPragmaStack.front().Value ==
7972                  SemaObj->FpPragmaStack.DefaultValue &&
7973              "Expected a default pragma float_control value");
7974       SemaObj->FpPragmaStack.Stack.emplace_back(
7975           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7976           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7977           FpPragmaStack.front().PushLocation);
7978       DropFirst = true;
7979     }
7980     for (const auto &Entry :
7981          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7982       SemaObj->FpPragmaStack.Stack.emplace_back(
7983           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7984     if (FpPragmaCurrentLocation.isInvalid()) {
7985       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7986              "Expected a default pragma float_control value");
7987       // Keep the current values.
7988     } else {
7989       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7990       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7991     }
7992   }
7993 
7994   // For non-modular AST files, restore visiblity of modules.
7995   for (auto &Import : ImportedModules) {
7996     if (Import.ImportLoc.isInvalid())
7997       continue;
7998     if (Module *Imported = getSubmodule(Import.ID)) {
7999       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
8000     }
8001   }
8002 }
8003 
8004 IdentifierInfo *ASTReader::get(StringRef Name) {
8005   // Note that we are loading an identifier.
8006   Deserializing AnIdentifier(this);
8007 
8008   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
8009                                   NumIdentifierLookups,
8010                                   NumIdentifierLookupHits);
8011 
8012   // We don't need to do identifier table lookups in C++ modules (we preload
8013   // all interesting declarations, and don't need to use the scope for name
8014   // lookups). Perform the lookup in PCH files, though, since we don't build
8015   // a complete initial identifier table if we're carrying on from a PCH.
8016   if (PP.getLangOpts().CPlusPlus) {
8017     for (auto F : ModuleMgr.pch_modules())
8018       if (Visitor(*F))
8019         break;
8020   } else {
8021     // If there is a global index, look there first to determine which modules
8022     // provably do not have any results for this identifier.
8023     GlobalModuleIndex::HitSet Hits;
8024     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8025     if (!loadGlobalIndex()) {
8026       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8027         HitsPtr = &Hits;
8028       }
8029     }
8030 
8031     ModuleMgr.visit(Visitor, HitsPtr);
8032   }
8033 
8034   IdentifierInfo *II = Visitor.getIdentifierInfo();
8035   markIdentifierUpToDate(II);
8036   return II;
8037 }
8038 
8039 namespace clang {
8040 
8041   /// An identifier-lookup iterator that enumerates all of the
8042   /// identifiers stored within a set of AST files.
8043   class ASTIdentifierIterator : public IdentifierIterator {
8044     /// The AST reader whose identifiers are being enumerated.
8045     const ASTReader &Reader;
8046 
8047     /// The current index into the chain of AST files stored in
8048     /// the AST reader.
8049     unsigned Index;
8050 
8051     /// The current position within the identifier lookup table
8052     /// of the current AST file.
8053     ASTIdentifierLookupTable::key_iterator Current;
8054 
8055     /// The end position within the identifier lookup table of
8056     /// the current AST file.
8057     ASTIdentifierLookupTable::key_iterator End;
8058 
8059     /// Whether to skip any modules in the ASTReader.
8060     bool SkipModules;
8061 
8062   public:
8063     explicit ASTIdentifierIterator(const ASTReader &Reader,
8064                                    bool SkipModules = false);
8065 
8066     StringRef Next() override;
8067   };
8068 
8069 } // namespace clang
8070 
8071 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8072                                              bool SkipModules)
8073     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8074 }
8075 
8076 StringRef ASTIdentifierIterator::Next() {
8077   while (Current == End) {
8078     // If we have exhausted all of our AST files, we're done.
8079     if (Index == 0)
8080       return StringRef();
8081 
8082     --Index;
8083     ModuleFile &F = Reader.ModuleMgr[Index];
8084     if (SkipModules && F.isModule())
8085       continue;
8086 
8087     ASTIdentifierLookupTable *IdTable =
8088         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8089     Current = IdTable->key_begin();
8090     End = IdTable->key_end();
8091   }
8092 
8093   // We have any identifiers remaining in the current AST file; return
8094   // the next one.
8095   StringRef Result = *Current;
8096   ++Current;
8097   return Result;
8098 }
8099 
8100 namespace {
8101 
8102 /// A utility for appending two IdentifierIterators.
8103 class ChainedIdentifierIterator : public IdentifierIterator {
8104   std::unique_ptr<IdentifierIterator> Current;
8105   std::unique_ptr<IdentifierIterator> Queued;
8106 
8107 public:
8108   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8109                             std::unique_ptr<IdentifierIterator> Second)
8110       : Current(std::move(First)), Queued(std::move(Second)) {}
8111 
8112   StringRef Next() override {
8113     if (!Current)
8114       return StringRef();
8115 
8116     StringRef result = Current->Next();
8117     if (!result.empty())
8118       return result;
8119 
8120     // Try the queued iterator, which may itself be empty.
8121     Current.reset();
8122     std::swap(Current, Queued);
8123     return Next();
8124   }
8125 };
8126 
8127 } // namespace
8128 
8129 IdentifierIterator *ASTReader::getIdentifiers() {
8130   if (!loadGlobalIndex()) {
8131     std::unique_ptr<IdentifierIterator> ReaderIter(
8132         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8133     std::unique_ptr<IdentifierIterator> ModulesIter(
8134         GlobalIndex->createIdentifierIterator());
8135     return new ChainedIdentifierIterator(std::move(ReaderIter),
8136                                          std::move(ModulesIter));
8137   }
8138 
8139   return new ASTIdentifierIterator(*this);
8140 }
8141 
8142 namespace clang {
8143 namespace serialization {
8144 
8145   class ReadMethodPoolVisitor {
8146     ASTReader &Reader;
8147     Selector Sel;
8148     unsigned PriorGeneration;
8149     unsigned InstanceBits = 0;
8150     unsigned FactoryBits = 0;
8151     bool InstanceHasMoreThanOneDecl = false;
8152     bool FactoryHasMoreThanOneDecl = false;
8153     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8154     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8155 
8156   public:
8157     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8158                           unsigned PriorGeneration)
8159         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8160 
8161     bool operator()(ModuleFile &M) {
8162       if (!M.SelectorLookupTable)
8163         return false;
8164 
8165       // If we've already searched this module file, skip it now.
8166       if (M.Generation <= PriorGeneration)
8167         return true;
8168 
8169       ++Reader.NumMethodPoolTableLookups;
8170       ASTSelectorLookupTable *PoolTable
8171         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8172       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8173       if (Pos == PoolTable->end())
8174         return false;
8175 
8176       ++Reader.NumMethodPoolTableHits;
8177       ++Reader.NumSelectorsRead;
8178       // FIXME: Not quite happy with the statistics here. We probably should
8179       // disable this tracking when called via LoadSelector.
8180       // Also, should entries without methods count as misses?
8181       ++Reader.NumMethodPoolEntriesRead;
8182       ASTSelectorLookupTrait::data_type Data = *Pos;
8183       if (Reader.DeserializationListener)
8184         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8185 
8186       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8187       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8188       InstanceBits = Data.InstanceBits;
8189       FactoryBits = Data.FactoryBits;
8190       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8191       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8192       return true;
8193     }
8194 
8195     /// Retrieve the instance methods found by this visitor.
8196     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8197       return InstanceMethods;
8198     }
8199 
8200     /// Retrieve the instance methods found by this visitor.
8201     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8202       return FactoryMethods;
8203     }
8204 
8205     unsigned getInstanceBits() const { return InstanceBits; }
8206     unsigned getFactoryBits() const { return FactoryBits; }
8207 
8208     bool instanceHasMoreThanOneDecl() const {
8209       return InstanceHasMoreThanOneDecl;
8210     }
8211 
8212     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8213   };
8214 
8215 } // namespace serialization
8216 } // namespace clang
8217 
8218 /// Add the given set of methods to the method list.
8219 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8220                              ObjCMethodList &List) {
8221   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8222     S.addMethodToGlobalList(&List, Methods[I]);
8223   }
8224 }
8225 
8226 void ASTReader::ReadMethodPool(Selector Sel) {
8227   // Get the selector generation and update it to the current generation.
8228   unsigned &Generation = SelectorGeneration[Sel];
8229   unsigned PriorGeneration = Generation;
8230   Generation = getGeneration();
8231   SelectorOutOfDate[Sel] = false;
8232 
8233   // Search for methods defined with this selector.
8234   ++NumMethodPoolLookups;
8235   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8236   ModuleMgr.visit(Visitor);
8237 
8238   if (Visitor.getInstanceMethods().empty() &&
8239       Visitor.getFactoryMethods().empty())
8240     return;
8241 
8242   ++NumMethodPoolHits;
8243 
8244   if (!getSema())
8245     return;
8246 
8247   Sema &S = *getSema();
8248   Sema::GlobalMethodPool::iterator Pos
8249     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8250 
8251   Pos->second.first.setBits(Visitor.getInstanceBits());
8252   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8253   Pos->second.second.setBits(Visitor.getFactoryBits());
8254   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8255 
8256   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8257   // when building a module we keep every method individually and may need to
8258   // update hasMoreThanOneDecl as we add the methods.
8259   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8260   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8261 }
8262 
8263 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8264   if (SelectorOutOfDate[Sel])
8265     ReadMethodPool(Sel);
8266 }
8267 
8268 void ASTReader::ReadKnownNamespaces(
8269                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8270   Namespaces.clear();
8271 
8272   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8273     if (NamespaceDecl *Namespace
8274                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8275       Namespaces.push_back(Namespace);
8276   }
8277 }
8278 
8279 void ASTReader::ReadUndefinedButUsed(
8280     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8281   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8282     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8283     SourceLocation Loc =
8284         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8285     Undefined.insert(std::make_pair(D, Loc));
8286   }
8287 }
8288 
8289 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8290     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8291                                                      Exprs) {
8292   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8293     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8294     uint64_t Count = DelayedDeleteExprs[Idx++];
8295     for (uint64_t C = 0; C < Count; ++C) {
8296       SourceLocation DeleteLoc =
8297           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8298       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8299       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8300     }
8301   }
8302 }
8303 
8304 void ASTReader::ReadTentativeDefinitions(
8305                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8306   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8307     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8308     if (Var)
8309       TentativeDefs.push_back(Var);
8310   }
8311   TentativeDefinitions.clear();
8312 }
8313 
8314 void ASTReader::ReadUnusedFileScopedDecls(
8315                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8316   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8317     DeclaratorDecl *D
8318       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8319     if (D)
8320       Decls.push_back(D);
8321   }
8322   UnusedFileScopedDecls.clear();
8323 }
8324 
8325 void ASTReader::ReadDelegatingConstructors(
8326                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8327   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8328     CXXConstructorDecl *D
8329       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8330     if (D)
8331       Decls.push_back(D);
8332   }
8333   DelegatingCtorDecls.clear();
8334 }
8335 
8336 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8337   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8338     TypedefNameDecl *D
8339       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8340     if (D)
8341       Decls.push_back(D);
8342   }
8343   ExtVectorDecls.clear();
8344 }
8345 
8346 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8347     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8348   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8349        ++I) {
8350     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8351         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8352     if (D)
8353       Decls.insert(D);
8354   }
8355   UnusedLocalTypedefNameCandidates.clear();
8356 }
8357 
8358 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8359     llvm::SmallVector<Decl *, 4> &Decls) {
8360   for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N;
8361        ++I) {
8362     auto *D = dyn_cast_or_null<Decl>(
8363         GetDecl(DeclsToCheckForDeferredDiags[I]));
8364     if (D)
8365       Decls.push_back(D);
8366   }
8367   DeclsToCheckForDeferredDiags.clear();
8368 }
8369 
8370 
8371 void ASTReader::ReadReferencedSelectors(
8372        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8373   if (ReferencedSelectorsData.empty())
8374     return;
8375 
8376   // If there are @selector references added them to its pool. This is for
8377   // implementation of -Wselector.
8378   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8379   unsigned I = 0;
8380   while (I < DataSize) {
8381     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8382     SourceLocation SelLoc
8383       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8384     Sels.push_back(std::make_pair(Sel, SelLoc));
8385   }
8386   ReferencedSelectorsData.clear();
8387 }
8388 
8389 void ASTReader::ReadWeakUndeclaredIdentifiers(
8390        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8391   if (WeakUndeclaredIdentifiers.empty())
8392     return;
8393 
8394   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8395     IdentifierInfo *WeakId
8396       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8397     IdentifierInfo *AliasId
8398       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8399     SourceLocation Loc
8400       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8401     bool Used = WeakUndeclaredIdentifiers[I++];
8402     WeakInfo WI(AliasId, Loc);
8403     WI.setUsed(Used);
8404     WeakIDs.push_back(std::make_pair(WeakId, WI));
8405   }
8406   WeakUndeclaredIdentifiers.clear();
8407 }
8408 
8409 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8410   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8411     ExternalVTableUse VT;
8412     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8413     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8414     VT.DefinitionRequired = VTableUses[Idx++];
8415     VTables.push_back(VT);
8416   }
8417 
8418   VTableUses.clear();
8419 }
8420 
8421 void ASTReader::ReadPendingInstantiations(
8422        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8423   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8424     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8425     SourceLocation Loc
8426       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8427 
8428     Pending.push_back(std::make_pair(D, Loc));
8429   }
8430   PendingInstantiations.clear();
8431 }
8432 
8433 void ASTReader::ReadLateParsedTemplates(
8434     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8435         &LPTMap) {
8436   for (auto &LPT : LateParsedTemplates) {
8437     ModuleFile *FMod = LPT.first;
8438     RecordDataImpl &LateParsed = LPT.second;
8439     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8440          /* In loop */) {
8441       FunctionDecl *FD =
8442           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8443 
8444       auto LT = std::make_unique<LateParsedTemplate>();
8445       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8446 
8447       ModuleFile *F = getOwningModuleFile(LT->D);
8448       assert(F && "No module");
8449 
8450       unsigned TokN = LateParsed[Idx++];
8451       LT->Toks.reserve(TokN);
8452       for (unsigned T = 0; T < TokN; ++T)
8453         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8454 
8455       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8456     }
8457   }
8458 }
8459 
8460 void ASTReader::LoadSelector(Selector Sel) {
8461   // It would be complicated to avoid reading the methods anyway. So don't.
8462   ReadMethodPool(Sel);
8463 }
8464 
8465 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8466   assert(ID && "Non-zero identifier ID required");
8467   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8468   IdentifiersLoaded[ID - 1] = II;
8469   if (DeserializationListener)
8470     DeserializationListener->IdentifierRead(ID, II);
8471 }
8472 
8473 /// Set the globally-visible declarations associated with the given
8474 /// identifier.
8475 ///
8476 /// If the AST reader is currently in a state where the given declaration IDs
8477 /// cannot safely be resolved, they are queued until it is safe to resolve
8478 /// them.
8479 ///
8480 /// \param II an IdentifierInfo that refers to one or more globally-visible
8481 /// declarations.
8482 ///
8483 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8484 /// visible at global scope.
8485 ///
8486 /// \param Decls if non-null, this vector will be populated with the set of
8487 /// deserialized declarations. These declarations will not be pushed into
8488 /// scope.
8489 void
8490 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8491                               const SmallVectorImpl<uint32_t> &DeclIDs,
8492                                    SmallVectorImpl<Decl *> *Decls) {
8493   if (NumCurrentElementsDeserializing && !Decls) {
8494     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8495     return;
8496   }
8497 
8498   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8499     if (!SemaObj) {
8500       // Queue this declaration so that it will be added to the
8501       // translation unit scope and identifier's declaration chain
8502       // once a Sema object is known.
8503       PreloadedDeclIDs.push_back(DeclIDs[I]);
8504       continue;
8505     }
8506 
8507     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8508 
8509     // If we're simply supposed to record the declarations, do so now.
8510     if (Decls) {
8511       Decls->push_back(D);
8512       continue;
8513     }
8514 
8515     // Introduce this declaration into the translation-unit scope
8516     // and add it to the declaration chain for this identifier, so
8517     // that (unqualified) name lookup will find it.
8518     pushExternalDeclIntoScope(D, II);
8519   }
8520 }
8521 
8522 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8523   if (ID == 0)
8524     return nullptr;
8525 
8526   if (IdentifiersLoaded.empty()) {
8527     Error("no identifier table in AST file");
8528     return nullptr;
8529   }
8530 
8531   ID -= 1;
8532   if (!IdentifiersLoaded[ID]) {
8533     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8534     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8535     ModuleFile *M = I->second;
8536     unsigned Index = ID - M->BaseIdentifierID;
8537     const unsigned char *Data =
8538         M->IdentifierTableData + M->IdentifierOffsets[Index];
8539 
8540     ASTIdentifierLookupTrait Trait(*this, *M);
8541     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8542     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8543     auto &II = PP.getIdentifierTable().get(Key);
8544     IdentifiersLoaded[ID] = &II;
8545     markIdentifierFromAST(*this,  II);
8546     if (DeserializationListener)
8547       DeserializationListener->IdentifierRead(ID + 1, &II);
8548   }
8549 
8550   return IdentifiersLoaded[ID];
8551 }
8552 
8553 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8554   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8555 }
8556 
8557 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8558   if (LocalID < NUM_PREDEF_IDENT_IDS)
8559     return LocalID;
8560 
8561   if (!M.ModuleOffsetMap.empty())
8562     ReadModuleOffsetMap(M);
8563 
8564   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8565     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8566   assert(I != M.IdentifierRemap.end()
8567          && "Invalid index into identifier index remap");
8568 
8569   return LocalID + I->second;
8570 }
8571 
8572 MacroInfo *ASTReader::getMacro(MacroID ID) {
8573   if (ID == 0)
8574     return nullptr;
8575 
8576   if (MacrosLoaded.empty()) {
8577     Error("no macro table in AST file");
8578     return nullptr;
8579   }
8580 
8581   ID -= NUM_PREDEF_MACRO_IDS;
8582   if (!MacrosLoaded[ID]) {
8583     GlobalMacroMapType::iterator I
8584       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8585     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8586     ModuleFile *M = I->second;
8587     unsigned Index = ID - M->BaseMacroID;
8588     MacrosLoaded[ID] =
8589         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8590 
8591     if (DeserializationListener)
8592       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8593                                          MacrosLoaded[ID]);
8594   }
8595 
8596   return MacrosLoaded[ID];
8597 }
8598 
8599 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8600   if (LocalID < NUM_PREDEF_MACRO_IDS)
8601     return LocalID;
8602 
8603   if (!M.ModuleOffsetMap.empty())
8604     ReadModuleOffsetMap(M);
8605 
8606   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8607     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8608   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8609 
8610   return LocalID + I->second;
8611 }
8612 
8613 serialization::SubmoduleID
8614 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8615   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8616     return LocalID;
8617 
8618   if (!M.ModuleOffsetMap.empty())
8619     ReadModuleOffsetMap(M);
8620 
8621   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8622     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8623   assert(I != M.SubmoduleRemap.end()
8624          && "Invalid index into submodule index remap");
8625 
8626   return LocalID + I->second;
8627 }
8628 
8629 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8630   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8631     assert(GlobalID == 0 && "Unhandled global submodule ID");
8632     return nullptr;
8633   }
8634 
8635   if (GlobalID > SubmodulesLoaded.size()) {
8636     Error("submodule ID out of range in AST file");
8637     return nullptr;
8638   }
8639 
8640   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8641 }
8642 
8643 Module *ASTReader::getModule(unsigned ID) {
8644   return getSubmodule(ID);
8645 }
8646 
8647 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8648   if (ID & 1) {
8649     // It's a module, look it up by submodule ID.
8650     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8651     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8652   } else {
8653     // It's a prefix (preamble, PCH, ...). Look it up by index.
8654     unsigned IndexFromEnd = ID >> 1;
8655     assert(IndexFromEnd && "got reference to unknown module file");
8656     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8657   }
8658 }
8659 
8660 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8661   if (!F)
8662     return 1;
8663 
8664   // For a file representing a module, use the submodule ID of the top-level
8665   // module as the file ID. For any other kind of file, the number of such
8666   // files loaded beforehand will be the same on reload.
8667   // FIXME: Is this true even if we have an explicit module file and a PCH?
8668   if (F->isModule())
8669     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8670 
8671   auto PCHModules = getModuleManager().pch_modules();
8672   auto I = llvm::find(PCHModules, F);
8673   assert(I != PCHModules.end() && "emitting reference to unknown file");
8674   return (I - PCHModules.end()) << 1;
8675 }
8676 
8677 llvm::Optional<ASTSourceDescriptor>
8678 ASTReader::getSourceDescriptor(unsigned ID) {
8679   if (Module *M = getSubmodule(ID))
8680     return ASTSourceDescriptor(*M);
8681 
8682   // If there is only a single PCH, return it instead.
8683   // Chained PCH are not supported.
8684   const auto &PCHChain = ModuleMgr.pch_modules();
8685   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8686     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8687     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8688     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8689     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8690                                MF.Signature);
8691   }
8692   return None;
8693 }
8694 
8695 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8696   auto I = DefinitionSource.find(FD);
8697   if (I == DefinitionSource.end())
8698     return EK_ReplyHazy;
8699   return I->second ? EK_Never : EK_Always;
8700 }
8701 
8702 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8703   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8704 }
8705 
8706 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8707   if (ID == 0)
8708     return Selector();
8709 
8710   if (ID > SelectorsLoaded.size()) {
8711     Error("selector ID out of range in AST file");
8712     return Selector();
8713   }
8714 
8715   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8716     // Load this selector from the selector table.
8717     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8718     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8719     ModuleFile &M = *I->second;
8720     ASTSelectorLookupTrait Trait(*this, M);
8721     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8722     SelectorsLoaded[ID - 1] =
8723       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8724     if (DeserializationListener)
8725       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8726   }
8727 
8728   return SelectorsLoaded[ID - 1];
8729 }
8730 
8731 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8732   return DecodeSelector(ID);
8733 }
8734 
8735 uint32_t ASTReader::GetNumExternalSelectors() {
8736   // ID 0 (the null selector) is considered an external selector.
8737   return getTotalNumSelectors() + 1;
8738 }
8739 
8740 serialization::SelectorID
8741 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8742   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8743     return LocalID;
8744 
8745   if (!M.ModuleOffsetMap.empty())
8746     ReadModuleOffsetMap(M);
8747 
8748   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8749     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8750   assert(I != M.SelectorRemap.end()
8751          && "Invalid index into selector index remap");
8752 
8753   return LocalID + I->second;
8754 }
8755 
8756 DeclarationNameLoc
8757 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8758   switch (Name.getNameKind()) {
8759   case DeclarationName::CXXConstructorName:
8760   case DeclarationName::CXXDestructorName:
8761   case DeclarationName::CXXConversionFunctionName:
8762     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8763 
8764   case DeclarationName::CXXOperatorName:
8765     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8766 
8767   case DeclarationName::CXXLiteralOperatorName:
8768     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8769         readSourceLocation());
8770 
8771   case DeclarationName::Identifier:
8772   case DeclarationName::ObjCZeroArgSelector:
8773   case DeclarationName::ObjCOneArgSelector:
8774   case DeclarationName::ObjCMultiArgSelector:
8775   case DeclarationName::CXXUsingDirective:
8776   case DeclarationName::CXXDeductionGuideName:
8777     break;
8778   }
8779   return DeclarationNameLoc();
8780 }
8781 
8782 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8783   DeclarationNameInfo NameInfo;
8784   NameInfo.setName(readDeclarationName());
8785   NameInfo.setLoc(readSourceLocation());
8786   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8787   return NameInfo;
8788 }
8789 
8790 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8791   Info.QualifierLoc = readNestedNameSpecifierLoc();
8792   unsigned NumTPLists = readInt();
8793   Info.NumTemplParamLists = NumTPLists;
8794   if (NumTPLists) {
8795     Info.TemplParamLists =
8796         new (getContext()) TemplateParameterList *[NumTPLists];
8797     for (unsigned i = 0; i != NumTPLists; ++i)
8798       Info.TemplParamLists[i] = readTemplateParameterList();
8799   }
8800 }
8801 
8802 TemplateParameterList *
8803 ASTRecordReader::readTemplateParameterList() {
8804   SourceLocation TemplateLoc = readSourceLocation();
8805   SourceLocation LAngleLoc = readSourceLocation();
8806   SourceLocation RAngleLoc = readSourceLocation();
8807 
8808   unsigned NumParams = readInt();
8809   SmallVector<NamedDecl *, 16> Params;
8810   Params.reserve(NumParams);
8811   while (NumParams--)
8812     Params.push_back(readDeclAs<NamedDecl>());
8813 
8814   bool HasRequiresClause = readBool();
8815   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8816 
8817   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8818       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8819   return TemplateParams;
8820 }
8821 
8822 void ASTRecordReader::readTemplateArgumentList(
8823                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8824                         bool Canonicalize) {
8825   unsigned NumTemplateArgs = readInt();
8826   TemplArgs.reserve(NumTemplateArgs);
8827   while (NumTemplateArgs--)
8828     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8829 }
8830 
8831 /// Read a UnresolvedSet structure.
8832 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8833   unsigned NumDecls = readInt();
8834   Set.reserve(getContext(), NumDecls);
8835   while (NumDecls--) {
8836     DeclID ID = readDeclID();
8837     AccessSpecifier AS = (AccessSpecifier) readInt();
8838     Set.addLazyDecl(getContext(), ID, AS);
8839   }
8840 }
8841 
8842 CXXBaseSpecifier
8843 ASTRecordReader::readCXXBaseSpecifier() {
8844   bool isVirtual = readBool();
8845   bool isBaseOfClass = readBool();
8846   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8847   bool inheritConstructors = readBool();
8848   TypeSourceInfo *TInfo = readTypeSourceInfo();
8849   SourceRange Range = readSourceRange();
8850   SourceLocation EllipsisLoc = readSourceLocation();
8851   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8852                           EllipsisLoc);
8853   Result.setInheritConstructors(inheritConstructors);
8854   return Result;
8855 }
8856 
8857 CXXCtorInitializer **
8858 ASTRecordReader::readCXXCtorInitializers() {
8859   ASTContext &Context = getContext();
8860   unsigned NumInitializers = readInt();
8861   assert(NumInitializers && "wrote ctor initializers but have no inits");
8862   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8863   for (unsigned i = 0; i != NumInitializers; ++i) {
8864     TypeSourceInfo *TInfo = nullptr;
8865     bool IsBaseVirtual = false;
8866     FieldDecl *Member = nullptr;
8867     IndirectFieldDecl *IndirectMember = nullptr;
8868 
8869     CtorInitializerType Type = (CtorInitializerType) readInt();
8870     switch (Type) {
8871     case CTOR_INITIALIZER_BASE:
8872       TInfo = readTypeSourceInfo();
8873       IsBaseVirtual = readBool();
8874       break;
8875 
8876     case CTOR_INITIALIZER_DELEGATING:
8877       TInfo = readTypeSourceInfo();
8878       break;
8879 
8880      case CTOR_INITIALIZER_MEMBER:
8881       Member = readDeclAs<FieldDecl>();
8882       break;
8883 
8884      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8885       IndirectMember = readDeclAs<IndirectFieldDecl>();
8886       break;
8887     }
8888 
8889     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8890     Expr *Init = readExpr();
8891     SourceLocation LParenLoc = readSourceLocation();
8892     SourceLocation RParenLoc = readSourceLocation();
8893 
8894     CXXCtorInitializer *BOMInit;
8895     if (Type == CTOR_INITIALIZER_BASE)
8896       BOMInit = new (Context)
8897           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8898                              RParenLoc, MemberOrEllipsisLoc);
8899     else if (Type == CTOR_INITIALIZER_DELEGATING)
8900       BOMInit = new (Context)
8901           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8902     else if (Member)
8903       BOMInit = new (Context)
8904           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8905                              Init, RParenLoc);
8906     else
8907       BOMInit = new (Context)
8908           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8909                              LParenLoc, Init, RParenLoc);
8910 
8911     if (/*IsWritten*/readBool()) {
8912       unsigned SourceOrder = readInt();
8913       BOMInit->setSourceOrder(SourceOrder);
8914     }
8915 
8916     CtorInitializers[i] = BOMInit;
8917   }
8918 
8919   return CtorInitializers;
8920 }
8921 
8922 NestedNameSpecifierLoc
8923 ASTRecordReader::readNestedNameSpecifierLoc() {
8924   ASTContext &Context = getContext();
8925   unsigned N = readInt();
8926   NestedNameSpecifierLocBuilder Builder;
8927   for (unsigned I = 0; I != N; ++I) {
8928     auto Kind = readNestedNameSpecifierKind();
8929     switch (Kind) {
8930     case NestedNameSpecifier::Identifier: {
8931       IdentifierInfo *II = readIdentifier();
8932       SourceRange Range = readSourceRange();
8933       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8934       break;
8935     }
8936 
8937     case NestedNameSpecifier::Namespace: {
8938       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8939       SourceRange Range = readSourceRange();
8940       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8941       break;
8942     }
8943 
8944     case NestedNameSpecifier::NamespaceAlias: {
8945       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8946       SourceRange Range = readSourceRange();
8947       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8948       break;
8949     }
8950 
8951     case NestedNameSpecifier::TypeSpec:
8952     case NestedNameSpecifier::TypeSpecWithTemplate: {
8953       bool Template = readBool();
8954       TypeSourceInfo *T = readTypeSourceInfo();
8955       if (!T)
8956         return NestedNameSpecifierLoc();
8957       SourceLocation ColonColonLoc = readSourceLocation();
8958 
8959       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8960       Builder.Extend(Context,
8961                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8962                      T->getTypeLoc(), ColonColonLoc);
8963       break;
8964     }
8965 
8966     case NestedNameSpecifier::Global: {
8967       SourceLocation ColonColonLoc = readSourceLocation();
8968       Builder.MakeGlobal(Context, ColonColonLoc);
8969       break;
8970     }
8971 
8972     case NestedNameSpecifier::Super: {
8973       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8974       SourceRange Range = readSourceRange();
8975       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8976       break;
8977     }
8978     }
8979   }
8980 
8981   return Builder.getWithLocInContext(Context);
8982 }
8983 
8984 SourceRange
8985 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8986                            unsigned &Idx) {
8987   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8988   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8989   return SourceRange(beg, end);
8990 }
8991 
8992 /// Read a floating-point value
8993 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8994   return llvm::APFloat(Sem, readAPInt());
8995 }
8996 
8997 // Read a string
8998 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8999   unsigned Len = Record[Idx++];
9000   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
9001   Idx += Len;
9002   return Result;
9003 }
9004 
9005 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
9006                                 unsigned &Idx) {
9007   std::string Filename = ReadString(Record, Idx);
9008   ResolveImportedPath(F, Filename);
9009   return Filename;
9010 }
9011 
9012 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9013                                 const RecordData &Record, unsigned &Idx) {
9014   std::string Filename = ReadString(Record, Idx);
9015   if (!BaseDirectory.empty())
9016     ResolveImportedPath(Filename, BaseDirectory);
9017   return Filename;
9018 }
9019 
9020 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9021                                          unsigned &Idx) {
9022   unsigned Major = Record[Idx++];
9023   unsigned Minor = Record[Idx++];
9024   unsigned Subminor = Record[Idx++];
9025   if (Minor == 0)
9026     return VersionTuple(Major);
9027   if (Subminor == 0)
9028     return VersionTuple(Major, Minor - 1);
9029   return VersionTuple(Major, Minor - 1, Subminor - 1);
9030 }
9031 
9032 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9033                                           const RecordData &Record,
9034                                           unsigned &Idx) {
9035   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9036   return CXXTemporary::Create(getContext(), Decl);
9037 }
9038 
9039 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9040   return Diag(CurrentImportLoc, DiagID);
9041 }
9042 
9043 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9044   return Diags.Report(Loc, DiagID);
9045 }
9046 
9047 /// Retrieve the identifier table associated with the
9048 /// preprocessor.
9049 IdentifierTable &ASTReader::getIdentifierTable() {
9050   return PP.getIdentifierTable();
9051 }
9052 
9053 /// Record that the given ID maps to the given switch-case
9054 /// statement.
9055 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9056   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9057          "Already have a SwitchCase with this ID");
9058   (*CurrSwitchCaseStmts)[ID] = SC;
9059 }
9060 
9061 /// Retrieve the switch-case statement with the given ID.
9062 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9063   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9064   return (*CurrSwitchCaseStmts)[ID];
9065 }
9066 
9067 void ASTReader::ClearSwitchCaseIDs() {
9068   CurrSwitchCaseStmts->clear();
9069 }
9070 
9071 void ASTReader::ReadComments() {
9072   ASTContext &Context = getContext();
9073   std::vector<RawComment *> Comments;
9074   for (SmallVectorImpl<std::pair<BitstreamCursor,
9075                                  serialization::ModuleFile *>>::iterator
9076        I = CommentsCursors.begin(),
9077        E = CommentsCursors.end();
9078        I != E; ++I) {
9079     Comments.clear();
9080     BitstreamCursor &Cursor = I->first;
9081     serialization::ModuleFile &F = *I->second;
9082     SavedStreamPosition SavedPosition(Cursor);
9083 
9084     RecordData Record;
9085     while (true) {
9086       Expected<llvm::BitstreamEntry> MaybeEntry =
9087           Cursor.advanceSkippingSubblocks(
9088               BitstreamCursor::AF_DontPopBlockAtEnd);
9089       if (!MaybeEntry) {
9090         Error(MaybeEntry.takeError());
9091         return;
9092       }
9093       llvm::BitstreamEntry Entry = MaybeEntry.get();
9094 
9095       switch (Entry.Kind) {
9096       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9097       case llvm::BitstreamEntry::Error:
9098         Error("malformed block record in AST file");
9099         return;
9100       case llvm::BitstreamEntry::EndBlock:
9101         goto NextCursor;
9102       case llvm::BitstreamEntry::Record:
9103         // The interesting case.
9104         break;
9105       }
9106 
9107       // Read a record.
9108       Record.clear();
9109       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9110       if (!MaybeComment) {
9111         Error(MaybeComment.takeError());
9112         return;
9113       }
9114       switch ((CommentRecordTypes)MaybeComment.get()) {
9115       case COMMENTS_RAW_COMMENT: {
9116         unsigned Idx = 0;
9117         SourceRange SR = ReadSourceRange(F, Record, Idx);
9118         RawComment::CommentKind Kind =
9119             (RawComment::CommentKind) Record[Idx++];
9120         bool IsTrailingComment = Record[Idx++];
9121         bool IsAlmostTrailingComment = Record[Idx++];
9122         Comments.push_back(new (Context) RawComment(
9123             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9124         break;
9125       }
9126       }
9127     }
9128   NextCursor:
9129     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9130         FileToOffsetToComment;
9131     for (RawComment *C : Comments) {
9132       SourceLocation CommentLoc = C->getBeginLoc();
9133       if (CommentLoc.isValid()) {
9134         std::pair<FileID, unsigned> Loc =
9135             SourceMgr.getDecomposedLoc(CommentLoc);
9136         if (Loc.first.isValid())
9137           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9138       }
9139     }
9140   }
9141 }
9142 
9143 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9144                                 bool IncludeSystem, bool Complain,
9145                     llvm::function_ref<void(const serialization::InputFile &IF,
9146                                             bool isSystem)> Visitor) {
9147   unsigned NumUserInputs = MF.NumUserInputFiles;
9148   unsigned NumInputs = MF.InputFilesLoaded.size();
9149   assert(NumUserInputs <= NumInputs);
9150   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9151   for (unsigned I = 0; I < N; ++I) {
9152     bool IsSystem = I >= NumUserInputs;
9153     InputFile IF = getInputFile(MF, I+1, Complain);
9154     Visitor(IF, IsSystem);
9155   }
9156 }
9157 
9158 void ASTReader::visitTopLevelModuleMaps(
9159     serialization::ModuleFile &MF,
9160     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9161   unsigned NumInputs = MF.InputFilesLoaded.size();
9162   for (unsigned I = 0; I < NumInputs; ++I) {
9163     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9164     if (IFI.TopLevelModuleMap)
9165       // FIXME: This unnecessarily re-reads the InputFileInfo.
9166       if (auto FE = getInputFile(MF, I + 1).getFile())
9167         Visitor(FE);
9168   }
9169 }
9170 
9171 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9172   // If we know the owning module, use it.
9173   if (Module *M = D->getImportedOwningModule())
9174     return M->getFullModuleName();
9175 
9176   // Otherwise, use the name of the top-level module the decl is within.
9177   if (ModuleFile *M = getOwningModuleFile(D))
9178     return M->ModuleName;
9179 
9180   // Not from a module.
9181   return {};
9182 }
9183 
9184 void ASTReader::finishPendingActions() {
9185   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9186          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9187          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9188          !PendingUpdateRecords.empty()) {
9189     // If any identifiers with corresponding top-level declarations have
9190     // been loaded, load those declarations now.
9191     using TopLevelDeclsMap =
9192         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9193     TopLevelDeclsMap TopLevelDecls;
9194 
9195     while (!PendingIdentifierInfos.empty()) {
9196       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9197       SmallVector<uint32_t, 4> DeclIDs =
9198           std::move(PendingIdentifierInfos.back().second);
9199       PendingIdentifierInfos.pop_back();
9200 
9201       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9202     }
9203 
9204     // Load each function type that we deferred loading because it was a
9205     // deduced type that might refer to a local type declared within itself.
9206     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9207       auto *FD = PendingFunctionTypes[I].first;
9208       FD->setType(GetType(PendingFunctionTypes[I].second));
9209 
9210       // If we gave a function a deduced return type, remember that we need to
9211       // propagate that along the redeclaration chain.
9212       auto *DT = FD->getReturnType()->getContainedDeducedType();
9213       if (DT && DT->isDeduced())
9214         PendingDeducedTypeUpdates.insert(
9215             {FD->getCanonicalDecl(), FD->getReturnType()});
9216     }
9217     PendingFunctionTypes.clear();
9218 
9219     // For each decl chain that we wanted to complete while deserializing, mark
9220     // it as "still needs to be completed".
9221     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9222       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9223     }
9224     PendingIncompleteDeclChains.clear();
9225 
9226     // Load pending declaration chains.
9227     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9228       loadPendingDeclChain(PendingDeclChains[I].first,
9229                            PendingDeclChains[I].second);
9230     PendingDeclChains.clear();
9231 
9232     // Make the most recent of the top-level declarations visible.
9233     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9234            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9235       IdentifierInfo *II = TLD->first;
9236       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9237         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9238       }
9239     }
9240 
9241     // Load any pending macro definitions.
9242     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9243       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9244       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9245       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9246       // Initialize the macro history from chained-PCHs ahead of module imports.
9247       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9248            ++IDIdx) {
9249         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9250         if (!Info.M->isModule())
9251           resolvePendingMacro(II, Info);
9252       }
9253       // Handle module imports.
9254       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9255            ++IDIdx) {
9256         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9257         if (Info.M->isModule())
9258           resolvePendingMacro(II, Info);
9259       }
9260     }
9261     PendingMacroIDs.clear();
9262 
9263     // Wire up the DeclContexts for Decls that we delayed setting until
9264     // recursive loading is completed.
9265     while (!PendingDeclContextInfos.empty()) {
9266       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9267       PendingDeclContextInfos.pop_front();
9268       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9269       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9270       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9271     }
9272 
9273     // Perform any pending declaration updates.
9274     while (!PendingUpdateRecords.empty()) {
9275       auto Update = PendingUpdateRecords.pop_back_val();
9276       ReadingKindTracker ReadingKind(Read_Decl, *this);
9277       loadDeclUpdateRecords(Update);
9278     }
9279   }
9280 
9281   // At this point, all update records for loaded decls are in place, so any
9282   // fake class definitions should have become real.
9283   assert(PendingFakeDefinitionData.empty() &&
9284          "faked up a class definition but never saw the real one");
9285 
9286   // If we deserialized any C++ or Objective-C class definitions, any
9287   // Objective-C protocol definitions, or any redeclarable templates, make sure
9288   // that all redeclarations point to the definitions. Note that this can only
9289   // happen now, after the redeclaration chains have been fully wired.
9290   for (Decl *D : PendingDefinitions) {
9291     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9292       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9293         // Make sure that the TagType points at the definition.
9294         const_cast<TagType*>(TagT)->decl = TD;
9295       }
9296 
9297       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9298         for (auto *R = getMostRecentExistingDecl(RD); R;
9299              R = R->getPreviousDecl()) {
9300           assert((R == D) ==
9301                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9302                  "declaration thinks it's the definition but it isn't");
9303           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9304         }
9305       }
9306 
9307       continue;
9308     }
9309 
9310     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9311       // Make sure that the ObjCInterfaceType points at the definition.
9312       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9313         ->Decl = ID;
9314 
9315       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9316         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9317 
9318       continue;
9319     }
9320 
9321     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9322       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9323         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9324 
9325       continue;
9326     }
9327 
9328     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9329     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9330       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9331   }
9332   PendingDefinitions.clear();
9333 
9334   // Load the bodies of any functions or methods we've encountered. We do
9335   // this now (delayed) so that we can be sure that the declaration chains
9336   // have been fully wired up (hasBody relies on this).
9337   // FIXME: We shouldn't require complete redeclaration chains here.
9338   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9339                                PBEnd = PendingBodies.end();
9340        PB != PBEnd; ++PB) {
9341     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9342       // For a function defined inline within a class template, force the
9343       // canonical definition to be the one inside the canonical definition of
9344       // the template. This ensures that we instantiate from a correct view
9345       // of the template.
9346       //
9347       // Sadly we can't do this more generally: we can't be sure that all
9348       // copies of an arbitrary class definition will have the same members
9349       // defined (eg, some member functions may not be instantiated, and some
9350       // special members may or may not have been implicitly defined).
9351       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9352         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9353           continue;
9354 
9355       // FIXME: Check for =delete/=default?
9356       // FIXME: Complain about ODR violations here?
9357       const FunctionDecl *Defn = nullptr;
9358       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9359         FD->setLazyBody(PB->second);
9360       } else {
9361         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9362         mergeDefinitionVisibility(NonConstDefn, FD);
9363 
9364         if (!FD->isLateTemplateParsed() &&
9365             !NonConstDefn->isLateTemplateParsed() &&
9366             FD->getODRHash() != NonConstDefn->getODRHash()) {
9367           if (!isa<CXXMethodDecl>(FD)) {
9368             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9369           } else if (FD->getLexicalParent()->isFileContext() &&
9370                      NonConstDefn->getLexicalParent()->isFileContext()) {
9371             // Only diagnose out-of-line method definitions.  If they are
9372             // in class definitions, then an error will be generated when
9373             // processing the class bodies.
9374             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9375           }
9376         }
9377       }
9378       continue;
9379     }
9380 
9381     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9382     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9383       MD->setLazyBody(PB->second);
9384   }
9385   PendingBodies.clear();
9386 
9387   // Do some cleanup.
9388   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9389     getContext().deduplicateMergedDefinitonsFor(ND);
9390   PendingMergedDefinitionsToDeduplicate.clear();
9391 }
9392 
9393 void ASTReader::diagnoseOdrViolations() {
9394   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9395       PendingFunctionOdrMergeFailures.empty() &&
9396       PendingEnumOdrMergeFailures.empty())
9397     return;
9398 
9399   // Trigger the import of the full definition of each class that had any
9400   // odr-merging problems, so we can produce better diagnostics for them.
9401   // These updates may in turn find and diagnose some ODR failures, so take
9402   // ownership of the set first.
9403   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9404   PendingOdrMergeFailures.clear();
9405   for (auto &Merge : OdrMergeFailures) {
9406     Merge.first->buildLookup();
9407     Merge.first->decls_begin();
9408     Merge.first->bases_begin();
9409     Merge.first->vbases_begin();
9410     for (auto &RecordPair : Merge.second) {
9411       auto *RD = RecordPair.first;
9412       RD->decls_begin();
9413       RD->bases_begin();
9414       RD->vbases_begin();
9415     }
9416   }
9417 
9418   // Trigger the import of functions.
9419   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9420   PendingFunctionOdrMergeFailures.clear();
9421   for (auto &Merge : FunctionOdrMergeFailures) {
9422     Merge.first->buildLookup();
9423     Merge.first->decls_begin();
9424     Merge.first->getBody();
9425     for (auto &FD : Merge.second) {
9426       FD->buildLookup();
9427       FD->decls_begin();
9428       FD->getBody();
9429     }
9430   }
9431 
9432   // Trigger the import of enums.
9433   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9434   PendingEnumOdrMergeFailures.clear();
9435   for (auto &Merge : EnumOdrMergeFailures) {
9436     Merge.first->decls_begin();
9437     for (auto &Enum : Merge.second) {
9438       Enum->decls_begin();
9439     }
9440   }
9441 
9442   // For each declaration from a merged context, check that the canonical
9443   // definition of that context also contains a declaration of the same
9444   // entity.
9445   //
9446   // Caution: this loop does things that might invalidate iterators into
9447   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9448   while (!PendingOdrMergeChecks.empty()) {
9449     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9450 
9451     // FIXME: Skip over implicit declarations for now. This matters for things
9452     // like implicitly-declared special member functions. This isn't entirely
9453     // correct; we can end up with multiple unmerged declarations of the same
9454     // implicit entity.
9455     if (D->isImplicit())
9456       continue;
9457 
9458     DeclContext *CanonDef = D->getDeclContext();
9459 
9460     bool Found = false;
9461     const Decl *DCanon = D->getCanonicalDecl();
9462 
9463     for (auto RI : D->redecls()) {
9464       if (RI->getLexicalDeclContext() == CanonDef) {
9465         Found = true;
9466         break;
9467       }
9468     }
9469     if (Found)
9470       continue;
9471 
9472     // Quick check failed, time to do the slow thing. Note, we can't just
9473     // look up the name of D in CanonDef here, because the member that is
9474     // in CanonDef might not be found by name lookup (it might have been
9475     // replaced by a more recent declaration in the lookup table), and we
9476     // can't necessarily find it in the redeclaration chain because it might
9477     // be merely mergeable, not redeclarable.
9478     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9479     for (auto *CanonMember : CanonDef->decls()) {
9480       if (CanonMember->getCanonicalDecl() == DCanon) {
9481         // This can happen if the declaration is merely mergeable and not
9482         // actually redeclarable (we looked for redeclarations earlier).
9483         //
9484         // FIXME: We should be able to detect this more efficiently, without
9485         // pulling in all of the members of CanonDef.
9486         Found = true;
9487         break;
9488       }
9489       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9490         if (ND->getDeclName() == D->getDeclName())
9491           Candidates.push_back(ND);
9492     }
9493 
9494     if (!Found) {
9495       // The AST doesn't like TagDecls becoming invalid after they've been
9496       // completed. We only really need to mark FieldDecls as invalid here.
9497       if (!isa<TagDecl>(D))
9498         D->setInvalidDecl();
9499 
9500       // Ensure we don't accidentally recursively enter deserialization while
9501       // we're producing our diagnostic.
9502       Deserializing RecursionGuard(this);
9503 
9504       std::string CanonDefModule =
9505           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9506       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9507         << D << getOwningModuleNameForDiagnostic(D)
9508         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9509 
9510       if (Candidates.empty())
9511         Diag(cast<Decl>(CanonDef)->getLocation(),
9512              diag::note_module_odr_violation_no_possible_decls) << D;
9513       else {
9514         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9515           Diag(Candidates[I]->getLocation(),
9516                diag::note_module_odr_violation_possible_decl)
9517             << Candidates[I];
9518       }
9519 
9520       DiagnosedOdrMergeFailures.insert(CanonDef);
9521     }
9522   }
9523 
9524   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9525       EnumOdrMergeFailures.empty())
9526     return;
9527 
9528   // Ensure we don't accidentally recursively enter deserialization while
9529   // we're producing our diagnostics.
9530   Deserializing RecursionGuard(this);
9531 
9532   // Common code for hashing helpers.
9533   ODRHash Hash;
9534   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9535     Hash.clear();
9536     Hash.AddQualType(Ty);
9537     return Hash.CalculateHash();
9538   };
9539 
9540   auto ComputeODRHash = [&Hash](const Stmt *S) {
9541     assert(S);
9542     Hash.clear();
9543     Hash.AddStmt(S);
9544     return Hash.CalculateHash();
9545   };
9546 
9547   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9548     assert(D);
9549     Hash.clear();
9550     Hash.AddSubDecl(D);
9551     return Hash.CalculateHash();
9552   };
9553 
9554   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9555     Hash.clear();
9556     Hash.AddTemplateArgument(TA);
9557     return Hash.CalculateHash();
9558   };
9559 
9560   auto ComputeTemplateParameterListODRHash =
9561       [&Hash](const TemplateParameterList *TPL) {
9562         assert(TPL);
9563         Hash.clear();
9564         Hash.AddTemplateParameterList(TPL);
9565         return Hash.CalculateHash();
9566       };
9567 
9568   // Used with err_module_odr_violation_mismatch_decl and
9569   // note_module_odr_violation_mismatch_decl
9570   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9571   enum ODRMismatchDecl {
9572     EndOfClass,
9573     PublicSpecifer,
9574     PrivateSpecifer,
9575     ProtectedSpecifer,
9576     StaticAssert,
9577     Field,
9578     CXXMethod,
9579     TypeAlias,
9580     TypeDef,
9581     Var,
9582     Friend,
9583     FunctionTemplate,
9584     Other
9585   };
9586 
9587   // Used with err_module_odr_violation_mismatch_decl_diff and
9588   // note_module_odr_violation_mismatch_decl_diff
9589   enum ODRMismatchDeclDifference {
9590     StaticAssertCondition,
9591     StaticAssertMessage,
9592     StaticAssertOnlyMessage,
9593     FieldName,
9594     FieldTypeName,
9595     FieldSingleBitField,
9596     FieldDifferentWidthBitField,
9597     FieldSingleMutable,
9598     FieldSingleInitializer,
9599     FieldDifferentInitializers,
9600     MethodName,
9601     MethodDeleted,
9602     MethodDefaulted,
9603     MethodVirtual,
9604     MethodStatic,
9605     MethodVolatile,
9606     MethodConst,
9607     MethodInline,
9608     MethodNumberParameters,
9609     MethodParameterType,
9610     MethodParameterName,
9611     MethodParameterSingleDefaultArgument,
9612     MethodParameterDifferentDefaultArgument,
9613     MethodNoTemplateArguments,
9614     MethodDifferentNumberTemplateArguments,
9615     MethodDifferentTemplateArgument,
9616     MethodSingleBody,
9617     MethodDifferentBody,
9618     TypedefName,
9619     TypedefType,
9620     VarName,
9621     VarType,
9622     VarSingleInitializer,
9623     VarDifferentInitializer,
9624     VarConstexpr,
9625     FriendTypeFunction,
9626     FriendType,
9627     FriendFunction,
9628     FunctionTemplateDifferentNumberParameters,
9629     FunctionTemplateParameterDifferentKind,
9630     FunctionTemplateParameterName,
9631     FunctionTemplateParameterSingleDefaultArgument,
9632     FunctionTemplateParameterDifferentDefaultArgument,
9633     FunctionTemplateParameterDifferentType,
9634     FunctionTemplatePackParameter,
9635   };
9636 
9637   // These lambdas have the common portions of the ODR diagnostics.  This
9638   // has the same return as Diag(), so addition parameters can be passed
9639   // in with operator<<
9640   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9641                                  SourceLocation Loc, SourceRange Range,
9642                                  ODRMismatchDeclDifference DiffType) {
9643     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9644            << FirstRecord << FirstModule.empty() << FirstModule << Range
9645            << DiffType;
9646   };
9647   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9648                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9649     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9650            << SecondModule << Range << DiffType;
9651   };
9652 
9653   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9654                        &ComputeQualTypeODRHash, &ComputeODRHash](
9655                           NamedDecl *FirstRecord, StringRef FirstModule,
9656                           StringRef SecondModule, FieldDecl *FirstField,
9657                           FieldDecl *SecondField) {
9658     IdentifierInfo *FirstII = FirstField->getIdentifier();
9659     IdentifierInfo *SecondII = SecondField->getIdentifier();
9660     if (FirstII->getName() != SecondII->getName()) {
9661       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9662                        FirstField->getSourceRange(), FieldName)
9663           << FirstII;
9664       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9665                       SecondField->getSourceRange(), FieldName)
9666           << SecondII;
9667 
9668       return true;
9669     }
9670 
9671     assert(getContext().hasSameType(FirstField->getType(),
9672                                     SecondField->getType()));
9673 
9674     QualType FirstType = FirstField->getType();
9675     QualType SecondType = SecondField->getType();
9676     if (ComputeQualTypeODRHash(FirstType) !=
9677         ComputeQualTypeODRHash(SecondType)) {
9678       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9679                        FirstField->getSourceRange(), FieldTypeName)
9680           << FirstII << FirstType;
9681       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9682                       SecondField->getSourceRange(), FieldTypeName)
9683           << SecondII << SecondType;
9684 
9685       return true;
9686     }
9687 
9688     const bool IsFirstBitField = FirstField->isBitField();
9689     const bool IsSecondBitField = SecondField->isBitField();
9690     if (IsFirstBitField != IsSecondBitField) {
9691       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9692                        FirstField->getSourceRange(), FieldSingleBitField)
9693           << FirstII << IsFirstBitField;
9694       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9695                       SecondField->getSourceRange(), FieldSingleBitField)
9696           << SecondII << IsSecondBitField;
9697       return true;
9698     }
9699 
9700     if (IsFirstBitField && IsSecondBitField) {
9701       unsigned FirstBitWidthHash =
9702           ComputeODRHash(FirstField->getBitWidth());
9703       unsigned SecondBitWidthHash =
9704           ComputeODRHash(SecondField->getBitWidth());
9705       if (FirstBitWidthHash != SecondBitWidthHash) {
9706         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9707                          FirstField->getSourceRange(),
9708                          FieldDifferentWidthBitField)
9709             << FirstII << FirstField->getBitWidth()->getSourceRange();
9710         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9711                         SecondField->getSourceRange(),
9712                         FieldDifferentWidthBitField)
9713             << SecondII << SecondField->getBitWidth()->getSourceRange();
9714         return true;
9715       }
9716     }
9717 
9718     if (!PP.getLangOpts().CPlusPlus)
9719       return false;
9720 
9721     const bool IsFirstMutable = FirstField->isMutable();
9722     const bool IsSecondMutable = SecondField->isMutable();
9723     if (IsFirstMutable != IsSecondMutable) {
9724       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9725                        FirstField->getSourceRange(), FieldSingleMutable)
9726           << FirstII << IsFirstMutable;
9727       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9728                       SecondField->getSourceRange(), FieldSingleMutable)
9729           << SecondII << IsSecondMutable;
9730       return true;
9731     }
9732 
9733     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9734     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9735     if ((!FirstInitializer && SecondInitializer) ||
9736         (FirstInitializer && !SecondInitializer)) {
9737       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9738                        FirstField->getSourceRange(), FieldSingleInitializer)
9739           << FirstII << (FirstInitializer != nullptr);
9740       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9741                       SecondField->getSourceRange(), FieldSingleInitializer)
9742           << SecondII << (SecondInitializer != nullptr);
9743       return true;
9744     }
9745 
9746     if (FirstInitializer && SecondInitializer) {
9747       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9748       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9749       if (FirstInitHash != SecondInitHash) {
9750         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9751                          FirstField->getSourceRange(),
9752                          FieldDifferentInitializers)
9753             << FirstII << FirstInitializer->getSourceRange();
9754         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9755                         SecondField->getSourceRange(),
9756                         FieldDifferentInitializers)
9757             << SecondII << SecondInitializer->getSourceRange();
9758         return true;
9759       }
9760     }
9761 
9762     return false;
9763   };
9764 
9765   auto ODRDiagTypeDefOrAlias =
9766       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9767           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9768           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9769           bool IsTypeAlias) {
9770         auto FirstName = FirstTD->getDeclName();
9771         auto SecondName = SecondTD->getDeclName();
9772         if (FirstName != SecondName) {
9773           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9774                            FirstTD->getSourceRange(), TypedefName)
9775               << IsTypeAlias << FirstName;
9776           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9777                           SecondTD->getSourceRange(), TypedefName)
9778               << IsTypeAlias << SecondName;
9779           return true;
9780         }
9781 
9782         QualType FirstType = FirstTD->getUnderlyingType();
9783         QualType SecondType = SecondTD->getUnderlyingType();
9784         if (ComputeQualTypeODRHash(FirstType) !=
9785             ComputeQualTypeODRHash(SecondType)) {
9786           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9787                            FirstTD->getSourceRange(), TypedefType)
9788               << IsTypeAlias << FirstName << FirstType;
9789           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9790                           SecondTD->getSourceRange(), TypedefType)
9791               << IsTypeAlias << SecondName << SecondType;
9792           return true;
9793         }
9794 
9795         return false;
9796   };
9797 
9798   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9799                      &ComputeQualTypeODRHash, &ComputeODRHash,
9800                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9801                            StringRef SecondModule, VarDecl *FirstVD,
9802                            VarDecl *SecondVD) {
9803     auto FirstName = FirstVD->getDeclName();
9804     auto SecondName = SecondVD->getDeclName();
9805     if (FirstName != SecondName) {
9806       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9807                        FirstVD->getSourceRange(), VarName)
9808           << FirstName;
9809       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9810                       SecondVD->getSourceRange(), VarName)
9811           << SecondName;
9812       return true;
9813     }
9814 
9815     QualType FirstType = FirstVD->getType();
9816     QualType SecondType = SecondVD->getType();
9817     if (ComputeQualTypeODRHash(FirstType) !=
9818         ComputeQualTypeODRHash(SecondType)) {
9819       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9820                        FirstVD->getSourceRange(), VarType)
9821           << FirstName << FirstType;
9822       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9823                       SecondVD->getSourceRange(), VarType)
9824           << SecondName << SecondType;
9825       return true;
9826     }
9827 
9828     if (!PP.getLangOpts().CPlusPlus)
9829       return false;
9830 
9831     const Expr *FirstInit = FirstVD->getInit();
9832     const Expr *SecondInit = SecondVD->getInit();
9833     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9834       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9835                        FirstVD->getSourceRange(), VarSingleInitializer)
9836           << FirstName << (FirstInit == nullptr)
9837           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9838       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9839                       SecondVD->getSourceRange(), VarSingleInitializer)
9840           << SecondName << (SecondInit == nullptr)
9841           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9842       return true;
9843     }
9844 
9845     if (FirstInit && SecondInit &&
9846         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9847       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9848                        FirstVD->getSourceRange(), VarDifferentInitializer)
9849           << FirstName << FirstInit->getSourceRange();
9850       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9851                       SecondVD->getSourceRange(), VarDifferentInitializer)
9852           << SecondName << SecondInit->getSourceRange();
9853       return true;
9854     }
9855 
9856     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9857     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9858     if (FirstIsConstexpr != SecondIsConstexpr) {
9859       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9860                        FirstVD->getSourceRange(), VarConstexpr)
9861           << FirstName << FirstIsConstexpr;
9862       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9863                       SecondVD->getSourceRange(), VarConstexpr)
9864           << SecondName << SecondIsConstexpr;
9865       return true;
9866     }
9867     return false;
9868   };
9869 
9870   auto DifferenceSelector = [](Decl *D) {
9871     assert(D && "valid Decl required");
9872     switch (D->getKind()) {
9873     default:
9874       return Other;
9875     case Decl::AccessSpec:
9876       switch (D->getAccess()) {
9877       case AS_public:
9878         return PublicSpecifer;
9879       case AS_private:
9880         return PrivateSpecifer;
9881       case AS_protected:
9882         return ProtectedSpecifer;
9883       case AS_none:
9884         break;
9885       }
9886       llvm_unreachable("Invalid access specifier");
9887     case Decl::StaticAssert:
9888       return StaticAssert;
9889     case Decl::Field:
9890       return Field;
9891     case Decl::CXXMethod:
9892     case Decl::CXXConstructor:
9893     case Decl::CXXDestructor:
9894       return CXXMethod;
9895     case Decl::TypeAlias:
9896       return TypeAlias;
9897     case Decl::Typedef:
9898       return TypeDef;
9899     case Decl::Var:
9900       return Var;
9901     case Decl::Friend:
9902       return Friend;
9903     case Decl::FunctionTemplate:
9904       return FunctionTemplate;
9905     }
9906   };
9907 
9908   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9909   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9910                                                  RecordDecl *Record,
9911                                                  const DeclContext *DC) {
9912     for (auto *D : Record->decls()) {
9913       if (!ODRHash::isDeclToBeProcessed(D, DC))
9914         continue;
9915       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9916     }
9917   };
9918 
9919   struct DiffResult {
9920     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9921     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9922   };
9923 
9924   // If there is a diagnoseable difference, FirstDiffType and
9925   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9926   // filled in if not EndOfClass.
9927   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9928                                              DeclHashes &SecondHashes) {
9929     DiffResult DR;
9930     auto FirstIt = FirstHashes.begin();
9931     auto SecondIt = SecondHashes.begin();
9932     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9933       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9934           FirstIt->second == SecondIt->second) {
9935         ++FirstIt;
9936         ++SecondIt;
9937         continue;
9938       }
9939 
9940       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9941       DR.SecondDecl =
9942           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9943 
9944       DR.FirstDiffType =
9945           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9946       DR.SecondDiffType =
9947           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9948       return DR;
9949     }
9950     return DR;
9951   };
9952 
9953   // Use this to diagnose that an unexpected Decl was encountered
9954   // or no difference was detected. This causes a generic error
9955   // message to be emitted.
9956   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9957                                       StringRef FirstModule,
9958                                       NamedDecl *SecondRecord,
9959                                       StringRef SecondModule) {
9960     Diag(FirstRecord->getLocation(),
9961          diag::err_module_odr_violation_different_definitions)
9962         << FirstRecord << FirstModule.empty() << FirstModule;
9963 
9964     if (DR.FirstDecl) {
9965       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9966           << FirstRecord << DR.FirstDecl->getSourceRange();
9967     }
9968 
9969     Diag(SecondRecord->getLocation(),
9970          diag::note_module_odr_violation_different_definitions)
9971         << SecondModule;
9972 
9973     if (DR.SecondDecl) {
9974       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9975           << DR.SecondDecl->getSourceRange();
9976     }
9977   };
9978 
9979   auto DiagnoseODRMismatch =
9980       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9981              NamedDecl *SecondRecord, StringRef SecondModule) {
9982         SourceLocation FirstLoc;
9983         SourceRange FirstRange;
9984         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9985         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9986           FirstLoc = FirstTag->getBraceRange().getEnd();
9987         } else {
9988           FirstLoc = DR.FirstDecl->getLocation();
9989           FirstRange = DR.FirstDecl->getSourceRange();
9990         }
9991         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9992             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9993             << DR.FirstDiffType;
9994 
9995         SourceLocation SecondLoc;
9996         SourceRange SecondRange;
9997         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9998         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9999           SecondLoc = SecondTag->getBraceRange().getEnd();
10000         } else {
10001           SecondLoc = DR.SecondDecl->getLocation();
10002           SecondRange = DR.SecondDecl->getSourceRange();
10003         }
10004         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
10005             << SecondModule << SecondRange << DR.SecondDiffType;
10006       };
10007 
10008   // Issue any pending ODR-failure diagnostics.
10009   for (auto &Merge : OdrMergeFailures) {
10010     // If we've already pointed out a specific problem with this class, don't
10011     // bother issuing a general "something's different" diagnostic.
10012     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10013       continue;
10014 
10015     bool Diagnosed = false;
10016     CXXRecordDecl *FirstRecord = Merge.first;
10017     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10018     for (auto &RecordPair : Merge.second) {
10019       CXXRecordDecl *SecondRecord = RecordPair.first;
10020       // Multiple different declarations got merged together; tell the user
10021       // where they came from.
10022       if (FirstRecord == SecondRecord)
10023         continue;
10024 
10025       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10026 
10027       auto *FirstDD = FirstRecord->DefinitionData;
10028       auto *SecondDD = RecordPair.second;
10029 
10030       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10031 
10032       // Diagnostics from DefinitionData are emitted here.
10033       if (FirstDD != SecondDD) {
10034         enum ODRDefinitionDataDifference {
10035           NumBases,
10036           NumVBases,
10037           BaseType,
10038           BaseVirtual,
10039           BaseAccess,
10040         };
10041         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10042                                  this](SourceLocation Loc, SourceRange Range,
10043                                        ODRDefinitionDataDifference DiffType) {
10044           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10045                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10046                  << DiffType;
10047         };
10048         auto ODRDiagBaseNote = [&SecondModule,
10049                                 this](SourceLocation Loc, SourceRange Range,
10050                                       ODRDefinitionDataDifference DiffType) {
10051           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10052                  << SecondModule << Range << DiffType;
10053         };
10054 
10055         unsigned FirstNumBases = FirstDD->NumBases;
10056         unsigned FirstNumVBases = FirstDD->NumVBases;
10057         unsigned SecondNumBases = SecondDD->NumBases;
10058         unsigned SecondNumVBases = SecondDD->NumVBases;
10059 
10060         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10061           unsigned NumBases = DD->NumBases;
10062           if (NumBases == 0) return SourceRange();
10063           auto bases = DD->bases();
10064           return SourceRange(bases[0].getBeginLoc(),
10065                              bases[NumBases - 1].getEndLoc());
10066         };
10067 
10068         if (FirstNumBases != SecondNumBases) {
10069           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10070                            NumBases)
10071               << FirstNumBases;
10072           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10073                           NumBases)
10074               << SecondNumBases;
10075           Diagnosed = true;
10076           break;
10077         }
10078 
10079         if (FirstNumVBases != SecondNumVBases) {
10080           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10081                            NumVBases)
10082               << FirstNumVBases;
10083           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10084                           NumVBases)
10085               << SecondNumVBases;
10086           Diagnosed = true;
10087           break;
10088         }
10089 
10090         auto FirstBases = FirstDD->bases();
10091         auto SecondBases = SecondDD->bases();
10092         unsigned i = 0;
10093         for (i = 0; i < FirstNumBases; ++i) {
10094           auto FirstBase = FirstBases[i];
10095           auto SecondBase = SecondBases[i];
10096           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10097               ComputeQualTypeODRHash(SecondBase.getType())) {
10098             ODRDiagBaseError(FirstRecord->getLocation(),
10099                              FirstBase.getSourceRange(), BaseType)
10100                 << (i + 1) << FirstBase.getType();
10101             ODRDiagBaseNote(SecondRecord->getLocation(),
10102                             SecondBase.getSourceRange(), BaseType)
10103                 << (i + 1) << SecondBase.getType();
10104             break;
10105           }
10106 
10107           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10108             ODRDiagBaseError(FirstRecord->getLocation(),
10109                              FirstBase.getSourceRange(), BaseVirtual)
10110                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10111             ODRDiagBaseNote(SecondRecord->getLocation(),
10112                             SecondBase.getSourceRange(), BaseVirtual)
10113                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10114             break;
10115           }
10116 
10117           if (FirstBase.getAccessSpecifierAsWritten() !=
10118               SecondBase.getAccessSpecifierAsWritten()) {
10119             ODRDiagBaseError(FirstRecord->getLocation(),
10120                              FirstBase.getSourceRange(), BaseAccess)
10121                 << (i + 1) << FirstBase.getType()
10122                 << (int)FirstBase.getAccessSpecifierAsWritten();
10123             ODRDiagBaseNote(SecondRecord->getLocation(),
10124                             SecondBase.getSourceRange(), BaseAccess)
10125                 << (i + 1) << SecondBase.getType()
10126                 << (int)SecondBase.getAccessSpecifierAsWritten();
10127             break;
10128           }
10129         }
10130 
10131         if (i != FirstNumBases) {
10132           Diagnosed = true;
10133           break;
10134         }
10135       }
10136 
10137       const ClassTemplateDecl *FirstTemplate =
10138           FirstRecord->getDescribedClassTemplate();
10139       const ClassTemplateDecl *SecondTemplate =
10140           SecondRecord->getDescribedClassTemplate();
10141 
10142       assert(!FirstTemplate == !SecondTemplate &&
10143              "Both pointers should be null or non-null");
10144 
10145       enum ODRTemplateDifference {
10146         ParamEmptyName,
10147         ParamName,
10148         ParamSingleDefaultArgument,
10149         ParamDifferentDefaultArgument,
10150       };
10151 
10152       if (FirstTemplate && SecondTemplate) {
10153         DeclHashes FirstTemplateHashes;
10154         DeclHashes SecondTemplateHashes;
10155 
10156         auto PopulateTemplateParameterHashs =
10157             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10158                                      const ClassTemplateDecl *TD) {
10159               for (auto *D : TD->getTemplateParameters()->asArray()) {
10160                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10161               }
10162             };
10163 
10164         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10165         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10166 
10167         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10168                "Number of template parameters should be equal.");
10169 
10170         auto FirstIt = FirstTemplateHashes.begin();
10171         auto FirstEnd = FirstTemplateHashes.end();
10172         auto SecondIt = SecondTemplateHashes.begin();
10173         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10174           if (FirstIt->second == SecondIt->second)
10175             continue;
10176 
10177           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10178                                           SourceLocation Loc, SourceRange Range,
10179                                           ODRTemplateDifference DiffType) {
10180             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10181                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10182                    << DiffType;
10183           };
10184           auto ODRDiagTemplateNote = [&SecondModule, this](
10185                                          SourceLocation Loc, SourceRange Range,
10186                                          ODRTemplateDifference DiffType) {
10187             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10188                    << SecondModule << Range << DiffType;
10189           };
10190 
10191           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10192           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10193 
10194           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10195                  "Parameter Decl's should be the same kind.");
10196 
10197           DeclarationName FirstName = FirstDecl->getDeclName();
10198           DeclarationName SecondName = SecondDecl->getDeclName();
10199 
10200           if (FirstName != SecondName) {
10201             const bool FirstNameEmpty =
10202                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10203             const bool SecondNameEmpty =
10204                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10205             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10206                    "Both template parameters cannot be unnamed.");
10207             ODRDiagTemplateError(FirstDecl->getLocation(),
10208                                  FirstDecl->getSourceRange(),
10209                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10210                 << FirstName;
10211             ODRDiagTemplateNote(SecondDecl->getLocation(),
10212                                 SecondDecl->getSourceRange(),
10213                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10214                 << SecondName;
10215             break;
10216           }
10217 
10218           switch (FirstDecl->getKind()) {
10219           default:
10220             llvm_unreachable("Invalid template parameter type.");
10221           case Decl::TemplateTypeParm: {
10222             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10223             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10224             const bool HasFirstDefaultArgument =
10225                 FirstParam->hasDefaultArgument() &&
10226                 !FirstParam->defaultArgumentWasInherited();
10227             const bool HasSecondDefaultArgument =
10228                 SecondParam->hasDefaultArgument() &&
10229                 !SecondParam->defaultArgumentWasInherited();
10230 
10231             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10232               ODRDiagTemplateError(FirstDecl->getLocation(),
10233                                    FirstDecl->getSourceRange(),
10234                                    ParamSingleDefaultArgument)
10235                   << HasFirstDefaultArgument;
10236               ODRDiagTemplateNote(SecondDecl->getLocation(),
10237                                   SecondDecl->getSourceRange(),
10238                                   ParamSingleDefaultArgument)
10239                   << HasSecondDefaultArgument;
10240               break;
10241             }
10242 
10243             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10244                    "Expecting default arguments.");
10245 
10246             ODRDiagTemplateError(FirstDecl->getLocation(),
10247                                  FirstDecl->getSourceRange(),
10248                                  ParamDifferentDefaultArgument);
10249             ODRDiagTemplateNote(SecondDecl->getLocation(),
10250                                 SecondDecl->getSourceRange(),
10251                                 ParamDifferentDefaultArgument);
10252 
10253             break;
10254           }
10255           case Decl::NonTypeTemplateParm: {
10256             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10257             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10258             const bool HasFirstDefaultArgument =
10259                 FirstParam->hasDefaultArgument() &&
10260                 !FirstParam->defaultArgumentWasInherited();
10261             const bool HasSecondDefaultArgument =
10262                 SecondParam->hasDefaultArgument() &&
10263                 !SecondParam->defaultArgumentWasInherited();
10264 
10265             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10266               ODRDiagTemplateError(FirstDecl->getLocation(),
10267                                    FirstDecl->getSourceRange(),
10268                                    ParamSingleDefaultArgument)
10269                   << HasFirstDefaultArgument;
10270               ODRDiagTemplateNote(SecondDecl->getLocation(),
10271                                   SecondDecl->getSourceRange(),
10272                                   ParamSingleDefaultArgument)
10273                   << HasSecondDefaultArgument;
10274               break;
10275             }
10276 
10277             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10278                    "Expecting default arguments.");
10279 
10280             ODRDiagTemplateError(FirstDecl->getLocation(),
10281                                  FirstDecl->getSourceRange(),
10282                                  ParamDifferentDefaultArgument);
10283             ODRDiagTemplateNote(SecondDecl->getLocation(),
10284                                 SecondDecl->getSourceRange(),
10285                                 ParamDifferentDefaultArgument);
10286 
10287             break;
10288           }
10289           case Decl::TemplateTemplateParm: {
10290             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10291             const auto *SecondParam =
10292                 cast<TemplateTemplateParmDecl>(SecondDecl);
10293             const bool HasFirstDefaultArgument =
10294                 FirstParam->hasDefaultArgument() &&
10295                 !FirstParam->defaultArgumentWasInherited();
10296             const bool HasSecondDefaultArgument =
10297                 SecondParam->hasDefaultArgument() &&
10298                 !SecondParam->defaultArgumentWasInherited();
10299 
10300             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10301               ODRDiagTemplateError(FirstDecl->getLocation(),
10302                                    FirstDecl->getSourceRange(),
10303                                    ParamSingleDefaultArgument)
10304                   << HasFirstDefaultArgument;
10305               ODRDiagTemplateNote(SecondDecl->getLocation(),
10306                                   SecondDecl->getSourceRange(),
10307                                   ParamSingleDefaultArgument)
10308                   << HasSecondDefaultArgument;
10309               break;
10310             }
10311 
10312             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10313                    "Expecting default arguments.");
10314 
10315             ODRDiagTemplateError(FirstDecl->getLocation(),
10316                                  FirstDecl->getSourceRange(),
10317                                  ParamDifferentDefaultArgument);
10318             ODRDiagTemplateNote(SecondDecl->getLocation(),
10319                                 SecondDecl->getSourceRange(),
10320                                 ParamDifferentDefaultArgument);
10321 
10322             break;
10323           }
10324           }
10325 
10326           break;
10327         }
10328 
10329         if (FirstIt != FirstEnd) {
10330           Diagnosed = true;
10331           break;
10332         }
10333       }
10334 
10335       DeclHashes FirstHashes;
10336       DeclHashes SecondHashes;
10337       const DeclContext *DC = FirstRecord;
10338       PopulateHashes(FirstHashes, FirstRecord, DC);
10339       PopulateHashes(SecondHashes, SecondRecord, DC);
10340 
10341       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10342       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10343       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10344       Decl *FirstDecl = DR.FirstDecl;
10345       Decl *SecondDecl = DR.SecondDecl;
10346 
10347       if (FirstDiffType == Other || SecondDiffType == Other) {
10348         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10349                               SecondModule);
10350         Diagnosed = true;
10351         break;
10352       }
10353 
10354       if (FirstDiffType != SecondDiffType) {
10355         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10356                             SecondModule);
10357         Diagnosed = true;
10358         break;
10359       }
10360 
10361       assert(FirstDiffType == SecondDiffType);
10362 
10363       switch (FirstDiffType) {
10364       case Other:
10365       case EndOfClass:
10366       case PublicSpecifer:
10367       case PrivateSpecifer:
10368       case ProtectedSpecifer:
10369         llvm_unreachable("Invalid diff type");
10370 
10371       case StaticAssert: {
10372         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10373         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10374 
10375         Expr *FirstExpr = FirstSA->getAssertExpr();
10376         Expr *SecondExpr = SecondSA->getAssertExpr();
10377         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10378         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10379         if (FirstODRHash != SecondODRHash) {
10380           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10381                            FirstExpr->getSourceRange(), StaticAssertCondition);
10382           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10383                           SecondExpr->getSourceRange(), StaticAssertCondition);
10384           Diagnosed = true;
10385           break;
10386         }
10387 
10388         StringLiteral *FirstStr = FirstSA->getMessage();
10389         StringLiteral *SecondStr = SecondSA->getMessage();
10390         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10391         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10392           SourceLocation FirstLoc, SecondLoc;
10393           SourceRange FirstRange, SecondRange;
10394           if (FirstStr) {
10395             FirstLoc = FirstStr->getBeginLoc();
10396             FirstRange = FirstStr->getSourceRange();
10397           } else {
10398             FirstLoc = FirstSA->getBeginLoc();
10399             FirstRange = FirstSA->getSourceRange();
10400           }
10401           if (SecondStr) {
10402             SecondLoc = SecondStr->getBeginLoc();
10403             SecondRange = SecondStr->getSourceRange();
10404           } else {
10405             SecondLoc = SecondSA->getBeginLoc();
10406             SecondRange = SecondSA->getSourceRange();
10407           }
10408           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10409                            StaticAssertOnlyMessage)
10410               << (FirstStr == nullptr);
10411           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10412                           StaticAssertOnlyMessage)
10413               << (SecondStr == nullptr);
10414           Diagnosed = true;
10415           break;
10416         }
10417 
10418         if (FirstStr && SecondStr &&
10419             FirstStr->getString() != SecondStr->getString()) {
10420           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10421                            FirstStr->getSourceRange(), StaticAssertMessage);
10422           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10423                           SecondStr->getSourceRange(), StaticAssertMessage);
10424           Diagnosed = true;
10425           break;
10426         }
10427         break;
10428       }
10429       case Field: {
10430         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10431                                  cast<FieldDecl>(FirstDecl),
10432                                  cast<FieldDecl>(SecondDecl));
10433         break;
10434       }
10435       case CXXMethod: {
10436         enum {
10437           DiagMethod,
10438           DiagConstructor,
10439           DiagDestructor,
10440         } FirstMethodType,
10441             SecondMethodType;
10442         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10443           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10444           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10445           return DiagMethod;
10446         };
10447         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10448         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10449         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10450         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10451         auto FirstName = FirstMethod->getDeclName();
10452         auto SecondName = SecondMethod->getDeclName();
10453         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10454           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10455                            FirstMethod->getSourceRange(), MethodName)
10456               << FirstMethodType << FirstName;
10457           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10458                           SecondMethod->getSourceRange(), MethodName)
10459               << SecondMethodType << SecondName;
10460 
10461           Diagnosed = true;
10462           break;
10463         }
10464 
10465         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10466         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10467         if (FirstDeleted != SecondDeleted) {
10468           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10469                            FirstMethod->getSourceRange(), MethodDeleted)
10470               << FirstMethodType << FirstName << FirstDeleted;
10471 
10472           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10473                           SecondMethod->getSourceRange(), MethodDeleted)
10474               << SecondMethodType << SecondName << SecondDeleted;
10475           Diagnosed = true;
10476           break;
10477         }
10478 
10479         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10480         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10481         if (FirstDefaulted != SecondDefaulted) {
10482           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10483                            FirstMethod->getSourceRange(), MethodDefaulted)
10484               << FirstMethodType << FirstName << FirstDefaulted;
10485 
10486           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10487                           SecondMethod->getSourceRange(), MethodDefaulted)
10488               << SecondMethodType << SecondName << SecondDefaulted;
10489           Diagnosed = true;
10490           break;
10491         }
10492 
10493         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10494         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10495         const bool FirstPure = FirstMethod->isPure();
10496         const bool SecondPure = SecondMethod->isPure();
10497         if ((FirstVirtual || SecondVirtual) &&
10498             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10499           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10500                            FirstMethod->getSourceRange(), MethodVirtual)
10501               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10502           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10503                           SecondMethod->getSourceRange(), MethodVirtual)
10504               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10505           Diagnosed = true;
10506           break;
10507         }
10508 
10509         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10510         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10511         // class needs to be checked instead.
10512         const auto FirstStorage = FirstMethod->getStorageClass();
10513         const auto SecondStorage = SecondMethod->getStorageClass();
10514         const bool FirstStatic = FirstStorage == SC_Static;
10515         const bool SecondStatic = SecondStorage == SC_Static;
10516         if (FirstStatic != SecondStatic) {
10517           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10518                            FirstMethod->getSourceRange(), MethodStatic)
10519               << FirstMethodType << FirstName << FirstStatic;
10520           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10521                           SecondMethod->getSourceRange(), MethodStatic)
10522               << SecondMethodType << SecondName << SecondStatic;
10523           Diagnosed = true;
10524           break;
10525         }
10526 
10527         const bool FirstVolatile = FirstMethod->isVolatile();
10528         const bool SecondVolatile = SecondMethod->isVolatile();
10529         if (FirstVolatile != SecondVolatile) {
10530           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10531                            FirstMethod->getSourceRange(), MethodVolatile)
10532               << FirstMethodType << FirstName << FirstVolatile;
10533           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10534                           SecondMethod->getSourceRange(), MethodVolatile)
10535               << SecondMethodType << SecondName << SecondVolatile;
10536           Diagnosed = true;
10537           break;
10538         }
10539 
10540         const bool FirstConst = FirstMethod->isConst();
10541         const bool SecondConst = SecondMethod->isConst();
10542         if (FirstConst != SecondConst) {
10543           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10544                            FirstMethod->getSourceRange(), MethodConst)
10545               << FirstMethodType << FirstName << FirstConst;
10546           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10547                           SecondMethod->getSourceRange(), MethodConst)
10548               << SecondMethodType << SecondName << SecondConst;
10549           Diagnosed = true;
10550           break;
10551         }
10552 
10553         const bool FirstInline = FirstMethod->isInlineSpecified();
10554         const bool SecondInline = SecondMethod->isInlineSpecified();
10555         if (FirstInline != SecondInline) {
10556           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10557                            FirstMethod->getSourceRange(), MethodInline)
10558               << FirstMethodType << FirstName << FirstInline;
10559           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10560                           SecondMethod->getSourceRange(), MethodInline)
10561               << SecondMethodType << SecondName << SecondInline;
10562           Diagnosed = true;
10563           break;
10564         }
10565 
10566         const unsigned FirstNumParameters = FirstMethod->param_size();
10567         const unsigned SecondNumParameters = SecondMethod->param_size();
10568         if (FirstNumParameters != SecondNumParameters) {
10569           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10570                            FirstMethod->getSourceRange(),
10571                            MethodNumberParameters)
10572               << FirstMethodType << FirstName << FirstNumParameters;
10573           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10574                           SecondMethod->getSourceRange(),
10575                           MethodNumberParameters)
10576               << SecondMethodType << SecondName << SecondNumParameters;
10577           Diagnosed = true;
10578           break;
10579         }
10580 
10581         // Need this status boolean to know when break out of the switch.
10582         bool ParameterMismatch = false;
10583         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10584           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10585           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10586 
10587           QualType FirstParamType = FirstParam->getType();
10588           QualType SecondParamType = SecondParam->getType();
10589           if (FirstParamType != SecondParamType &&
10590               ComputeQualTypeODRHash(FirstParamType) !=
10591                   ComputeQualTypeODRHash(SecondParamType)) {
10592             if (const DecayedType *ParamDecayedType =
10593                     FirstParamType->getAs<DecayedType>()) {
10594               ODRDiagDeclError(
10595                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10596                   FirstMethod->getSourceRange(), MethodParameterType)
10597                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10598                   << true << ParamDecayedType->getOriginalType();
10599             } else {
10600               ODRDiagDeclError(
10601                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10602                   FirstMethod->getSourceRange(), MethodParameterType)
10603                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10604                   << false;
10605             }
10606 
10607             if (const DecayedType *ParamDecayedType =
10608                     SecondParamType->getAs<DecayedType>()) {
10609               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10610                               SecondMethod->getSourceRange(),
10611                               MethodParameterType)
10612                   << SecondMethodType << SecondName << (I + 1)
10613                   << SecondParamType << true
10614                   << ParamDecayedType->getOriginalType();
10615             } else {
10616               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10617                               SecondMethod->getSourceRange(),
10618                               MethodParameterType)
10619                   << SecondMethodType << SecondName << (I + 1)
10620                   << SecondParamType << false;
10621             }
10622             ParameterMismatch = true;
10623             break;
10624           }
10625 
10626           DeclarationName FirstParamName = FirstParam->getDeclName();
10627           DeclarationName SecondParamName = SecondParam->getDeclName();
10628           if (FirstParamName != SecondParamName) {
10629             ODRDiagDeclError(FirstRecord, FirstModule,
10630                              FirstMethod->getLocation(),
10631                              FirstMethod->getSourceRange(), MethodParameterName)
10632                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10633             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10634                             SecondMethod->getSourceRange(), MethodParameterName)
10635                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10636             ParameterMismatch = true;
10637             break;
10638           }
10639 
10640           const Expr *FirstInit = FirstParam->getInit();
10641           const Expr *SecondInit = SecondParam->getInit();
10642           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10643             ODRDiagDeclError(FirstRecord, FirstModule,
10644                              FirstMethod->getLocation(),
10645                              FirstMethod->getSourceRange(),
10646                              MethodParameterSingleDefaultArgument)
10647                 << FirstMethodType << FirstName << (I + 1)
10648                 << (FirstInit == nullptr)
10649                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10650             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10651                             SecondMethod->getSourceRange(),
10652                             MethodParameterSingleDefaultArgument)
10653                 << SecondMethodType << SecondName << (I + 1)
10654                 << (SecondInit == nullptr)
10655                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10656             ParameterMismatch = true;
10657             break;
10658           }
10659 
10660           if (FirstInit && SecondInit &&
10661               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10662             ODRDiagDeclError(FirstRecord, FirstModule,
10663                              FirstMethod->getLocation(),
10664                              FirstMethod->getSourceRange(),
10665                              MethodParameterDifferentDefaultArgument)
10666                 << FirstMethodType << FirstName << (I + 1)
10667                 << FirstInit->getSourceRange();
10668             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10669                             SecondMethod->getSourceRange(),
10670                             MethodParameterDifferentDefaultArgument)
10671                 << SecondMethodType << SecondName << (I + 1)
10672                 << SecondInit->getSourceRange();
10673             ParameterMismatch = true;
10674             break;
10675 
10676           }
10677         }
10678 
10679         if (ParameterMismatch) {
10680           Diagnosed = true;
10681           break;
10682         }
10683 
10684         const auto *FirstTemplateArgs =
10685             FirstMethod->getTemplateSpecializationArgs();
10686         const auto *SecondTemplateArgs =
10687             SecondMethod->getTemplateSpecializationArgs();
10688 
10689         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10690             (!FirstTemplateArgs && SecondTemplateArgs)) {
10691           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10692                            FirstMethod->getSourceRange(),
10693                            MethodNoTemplateArguments)
10694               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10695           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10696                           SecondMethod->getSourceRange(),
10697                           MethodNoTemplateArguments)
10698               << SecondMethodType << SecondName
10699               << (SecondTemplateArgs != nullptr);
10700 
10701           Diagnosed = true;
10702           break;
10703         }
10704 
10705         if (FirstTemplateArgs && SecondTemplateArgs) {
10706           // Remove pack expansions from argument list.
10707           auto ExpandTemplateArgumentList =
10708               [](const TemplateArgumentList *TAL) {
10709                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10710                 for (const TemplateArgument &TA : TAL->asArray()) {
10711                   if (TA.getKind() != TemplateArgument::Pack) {
10712                     ExpandedList.push_back(&TA);
10713                     continue;
10714                   }
10715                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10716                     ExpandedList.push_back(&PackTA);
10717                   }
10718                 }
10719                 return ExpandedList;
10720               };
10721           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10722               ExpandTemplateArgumentList(FirstTemplateArgs);
10723           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10724               ExpandTemplateArgumentList(SecondTemplateArgs);
10725 
10726           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10727             ODRDiagDeclError(FirstRecord, FirstModule,
10728                              FirstMethod->getLocation(),
10729                              FirstMethod->getSourceRange(),
10730                              MethodDifferentNumberTemplateArguments)
10731                 << FirstMethodType << FirstName
10732                 << (unsigned)FirstExpandedList.size();
10733             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10734                             SecondMethod->getSourceRange(),
10735                             MethodDifferentNumberTemplateArguments)
10736                 << SecondMethodType << SecondName
10737                 << (unsigned)SecondExpandedList.size();
10738 
10739             Diagnosed = true;
10740             break;
10741           }
10742 
10743           bool TemplateArgumentMismatch = false;
10744           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10745             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10746                                    &SecondTA = *SecondExpandedList[i];
10747             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10748                 ComputeTemplateArgumentODRHash(SecondTA)) {
10749               continue;
10750             }
10751 
10752             ODRDiagDeclError(
10753                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10754                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10755                 << FirstMethodType << FirstName << FirstTA << i + 1;
10756             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10757                             SecondMethod->getSourceRange(),
10758                             MethodDifferentTemplateArgument)
10759                 << SecondMethodType << SecondName << SecondTA << i + 1;
10760 
10761             TemplateArgumentMismatch = true;
10762             break;
10763           }
10764 
10765           if (TemplateArgumentMismatch) {
10766             Diagnosed = true;
10767             break;
10768           }
10769         }
10770 
10771         // Compute the hash of the method as if it has no body.
10772         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10773           Hash.clear();
10774           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10775           return Hash.CalculateHash();
10776         };
10777 
10778         // Compare the hash generated to the hash stored.  A difference means
10779         // that a body was present in the original source.  Due to merging,
10780         // the stardard way of detecting a body will not work.
10781         const bool HasFirstBody =
10782             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10783         const bool HasSecondBody =
10784             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10785 
10786         if (HasFirstBody != HasSecondBody) {
10787           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10788                            FirstMethod->getSourceRange(), MethodSingleBody)
10789               << FirstMethodType << FirstName << HasFirstBody;
10790           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10791                           SecondMethod->getSourceRange(), MethodSingleBody)
10792               << SecondMethodType << SecondName << HasSecondBody;
10793           Diagnosed = true;
10794           break;
10795         }
10796 
10797         if (HasFirstBody && HasSecondBody) {
10798           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10799                            FirstMethod->getSourceRange(), MethodDifferentBody)
10800               << FirstMethodType << FirstName;
10801           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10802                           SecondMethod->getSourceRange(), MethodDifferentBody)
10803               << SecondMethodType << SecondName;
10804           Diagnosed = true;
10805           break;
10806         }
10807 
10808         break;
10809       }
10810       case TypeAlias:
10811       case TypeDef: {
10812         Diagnosed = ODRDiagTypeDefOrAlias(
10813             FirstRecord, FirstModule, SecondModule,
10814             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10815             FirstDiffType == TypeAlias);
10816         break;
10817       }
10818       case Var: {
10819         Diagnosed =
10820             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10821                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10822         break;
10823       }
10824       case Friend: {
10825         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10826         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10827 
10828         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10829         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10830 
10831         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10832         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10833 
10834         if (FirstND && SecondND) {
10835           ODRDiagDeclError(FirstRecord, FirstModule,
10836                            FirstFriend->getFriendLoc(),
10837                            FirstFriend->getSourceRange(), FriendFunction)
10838               << FirstND;
10839           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10840                           SecondFriend->getSourceRange(), FriendFunction)
10841               << SecondND;
10842 
10843           Diagnosed = true;
10844           break;
10845         }
10846 
10847         if (FirstTSI && SecondTSI) {
10848           QualType FirstFriendType = FirstTSI->getType();
10849           QualType SecondFriendType = SecondTSI->getType();
10850           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10851                  ComputeQualTypeODRHash(SecondFriendType));
10852           ODRDiagDeclError(FirstRecord, FirstModule,
10853                            FirstFriend->getFriendLoc(),
10854                            FirstFriend->getSourceRange(), FriendType)
10855               << FirstFriendType;
10856           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10857                           SecondFriend->getSourceRange(), FriendType)
10858               << SecondFriendType;
10859           Diagnosed = true;
10860           break;
10861         }
10862 
10863         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10864                          FirstFriend->getSourceRange(), FriendTypeFunction)
10865             << (FirstTSI == nullptr);
10866         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10867                         SecondFriend->getSourceRange(), FriendTypeFunction)
10868             << (SecondTSI == nullptr);
10869 
10870         Diagnosed = true;
10871         break;
10872       }
10873       case FunctionTemplate: {
10874         FunctionTemplateDecl *FirstTemplate =
10875             cast<FunctionTemplateDecl>(FirstDecl);
10876         FunctionTemplateDecl *SecondTemplate =
10877             cast<FunctionTemplateDecl>(SecondDecl);
10878 
10879         TemplateParameterList *FirstTPL =
10880             FirstTemplate->getTemplateParameters();
10881         TemplateParameterList *SecondTPL =
10882             SecondTemplate->getTemplateParameters();
10883 
10884         if (FirstTPL->size() != SecondTPL->size()) {
10885           ODRDiagDeclError(FirstRecord, FirstModule,
10886                            FirstTemplate->getLocation(),
10887                            FirstTemplate->getSourceRange(),
10888                            FunctionTemplateDifferentNumberParameters)
10889               << FirstTemplate << FirstTPL->size();
10890           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10891                           SecondTemplate->getSourceRange(),
10892                           FunctionTemplateDifferentNumberParameters)
10893               << SecondTemplate << SecondTPL->size();
10894 
10895           Diagnosed = true;
10896           break;
10897         }
10898 
10899         bool ParameterMismatch = false;
10900         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10901           NamedDecl *FirstParam = FirstTPL->getParam(i);
10902           NamedDecl *SecondParam = SecondTPL->getParam(i);
10903 
10904           if (FirstParam->getKind() != SecondParam->getKind()) {
10905             enum {
10906               TemplateTypeParameter,
10907               NonTypeTemplateParameter,
10908               TemplateTemplateParameter,
10909             };
10910             auto GetParamType = [](NamedDecl *D) {
10911               switch (D->getKind()) {
10912                 default:
10913                   llvm_unreachable("Unexpected template parameter type");
10914                 case Decl::TemplateTypeParm:
10915                   return TemplateTypeParameter;
10916                 case Decl::NonTypeTemplateParm:
10917                   return NonTypeTemplateParameter;
10918                 case Decl::TemplateTemplateParm:
10919                   return TemplateTemplateParameter;
10920               }
10921             };
10922 
10923             ODRDiagDeclError(FirstRecord, FirstModule,
10924                              FirstTemplate->getLocation(),
10925                              FirstTemplate->getSourceRange(),
10926                              FunctionTemplateParameterDifferentKind)
10927                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10928             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10929                             SecondTemplate->getSourceRange(),
10930                             FunctionTemplateParameterDifferentKind)
10931                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10932 
10933             ParameterMismatch = true;
10934             break;
10935           }
10936 
10937           if (FirstParam->getName() != SecondParam->getName()) {
10938             ODRDiagDeclError(
10939                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10940                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10941                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10942                 << FirstParam;
10943             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10944                             SecondTemplate->getSourceRange(),
10945                             FunctionTemplateParameterName)
10946                 << SecondTemplate << (i + 1)
10947                 << (bool)SecondParam->getIdentifier() << SecondParam;
10948             ParameterMismatch = true;
10949             break;
10950           }
10951 
10952           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10953               isa<TemplateTypeParmDecl>(SecondParam)) {
10954             TemplateTypeParmDecl *FirstTTPD =
10955                 cast<TemplateTypeParmDecl>(FirstParam);
10956             TemplateTypeParmDecl *SecondTTPD =
10957                 cast<TemplateTypeParmDecl>(SecondParam);
10958             bool HasFirstDefaultArgument =
10959                 FirstTTPD->hasDefaultArgument() &&
10960                 !FirstTTPD->defaultArgumentWasInherited();
10961             bool HasSecondDefaultArgument =
10962                 SecondTTPD->hasDefaultArgument() &&
10963                 !SecondTTPD->defaultArgumentWasInherited();
10964             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10965               ODRDiagDeclError(FirstRecord, FirstModule,
10966                                FirstTemplate->getLocation(),
10967                                FirstTemplate->getSourceRange(),
10968                                FunctionTemplateParameterSingleDefaultArgument)
10969                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10970               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10971                               SecondTemplate->getSourceRange(),
10972                               FunctionTemplateParameterSingleDefaultArgument)
10973                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10974               ParameterMismatch = true;
10975               break;
10976             }
10977 
10978             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10979               QualType FirstType = FirstTTPD->getDefaultArgument();
10980               QualType SecondType = SecondTTPD->getDefaultArgument();
10981               if (ComputeQualTypeODRHash(FirstType) !=
10982                   ComputeQualTypeODRHash(SecondType)) {
10983                 ODRDiagDeclError(
10984                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10985                     FirstTemplate->getSourceRange(),
10986                     FunctionTemplateParameterDifferentDefaultArgument)
10987                     << FirstTemplate << (i + 1) << FirstType;
10988                 ODRDiagDeclNote(
10989                     SecondModule, SecondTemplate->getLocation(),
10990                     SecondTemplate->getSourceRange(),
10991                     FunctionTemplateParameterDifferentDefaultArgument)
10992                     << SecondTemplate << (i + 1) << SecondType;
10993                 ParameterMismatch = true;
10994                 break;
10995               }
10996             }
10997 
10998             if (FirstTTPD->isParameterPack() !=
10999                 SecondTTPD->isParameterPack()) {
11000               ODRDiagDeclError(FirstRecord, FirstModule,
11001                                FirstTemplate->getLocation(),
11002                                FirstTemplate->getSourceRange(),
11003                                FunctionTemplatePackParameter)
11004                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11005               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11006                               SecondTemplate->getSourceRange(),
11007                               FunctionTemplatePackParameter)
11008                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11009               ParameterMismatch = true;
11010               break;
11011             }
11012           }
11013 
11014           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11015               isa<TemplateTemplateParmDecl>(SecondParam)) {
11016             TemplateTemplateParmDecl *FirstTTPD =
11017                 cast<TemplateTemplateParmDecl>(FirstParam);
11018             TemplateTemplateParmDecl *SecondTTPD =
11019                 cast<TemplateTemplateParmDecl>(SecondParam);
11020 
11021             TemplateParameterList *FirstTPL =
11022                 FirstTTPD->getTemplateParameters();
11023             TemplateParameterList *SecondTPL =
11024                 SecondTTPD->getTemplateParameters();
11025 
11026             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11027                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11028               ODRDiagDeclError(FirstRecord, FirstModule,
11029                                FirstTemplate->getLocation(),
11030                                FirstTemplate->getSourceRange(),
11031                                FunctionTemplateParameterDifferentType)
11032                   << FirstTemplate << (i + 1);
11033               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11034                               SecondTemplate->getSourceRange(),
11035                               FunctionTemplateParameterDifferentType)
11036                   << SecondTemplate << (i + 1);
11037               ParameterMismatch = true;
11038               break;
11039             }
11040 
11041             bool HasFirstDefaultArgument =
11042                 FirstTTPD->hasDefaultArgument() &&
11043                 !FirstTTPD->defaultArgumentWasInherited();
11044             bool HasSecondDefaultArgument =
11045                 SecondTTPD->hasDefaultArgument() &&
11046                 !SecondTTPD->defaultArgumentWasInherited();
11047             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11048               ODRDiagDeclError(FirstRecord, FirstModule,
11049                                FirstTemplate->getLocation(),
11050                                FirstTemplate->getSourceRange(),
11051                                FunctionTemplateParameterSingleDefaultArgument)
11052                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11053               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11054                               SecondTemplate->getSourceRange(),
11055                               FunctionTemplateParameterSingleDefaultArgument)
11056                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11057               ParameterMismatch = true;
11058               break;
11059             }
11060 
11061             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11062               TemplateArgument FirstTA =
11063                   FirstTTPD->getDefaultArgument().getArgument();
11064               TemplateArgument SecondTA =
11065                   SecondTTPD->getDefaultArgument().getArgument();
11066               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11067                   ComputeTemplateArgumentODRHash(SecondTA)) {
11068                 ODRDiagDeclError(
11069                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11070                     FirstTemplate->getSourceRange(),
11071                     FunctionTemplateParameterDifferentDefaultArgument)
11072                     << FirstTemplate << (i + 1) << FirstTA;
11073                 ODRDiagDeclNote(
11074                     SecondModule, SecondTemplate->getLocation(),
11075                     SecondTemplate->getSourceRange(),
11076                     FunctionTemplateParameterDifferentDefaultArgument)
11077                     << SecondTemplate << (i + 1) << SecondTA;
11078                 ParameterMismatch = true;
11079                 break;
11080               }
11081             }
11082 
11083             if (FirstTTPD->isParameterPack() !=
11084                 SecondTTPD->isParameterPack()) {
11085               ODRDiagDeclError(FirstRecord, FirstModule,
11086                                FirstTemplate->getLocation(),
11087                                FirstTemplate->getSourceRange(),
11088                                FunctionTemplatePackParameter)
11089                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11090               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11091                               SecondTemplate->getSourceRange(),
11092                               FunctionTemplatePackParameter)
11093                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11094               ParameterMismatch = true;
11095               break;
11096             }
11097           }
11098 
11099           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11100               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11101             NonTypeTemplateParmDecl *FirstNTTPD =
11102                 cast<NonTypeTemplateParmDecl>(FirstParam);
11103             NonTypeTemplateParmDecl *SecondNTTPD =
11104                 cast<NonTypeTemplateParmDecl>(SecondParam);
11105 
11106             QualType FirstType = FirstNTTPD->getType();
11107             QualType SecondType = SecondNTTPD->getType();
11108             if (ComputeQualTypeODRHash(FirstType) !=
11109                 ComputeQualTypeODRHash(SecondType)) {
11110               ODRDiagDeclError(FirstRecord, FirstModule,
11111                                FirstTemplate->getLocation(),
11112                                FirstTemplate->getSourceRange(),
11113                                FunctionTemplateParameterDifferentType)
11114                   << FirstTemplate << (i + 1);
11115               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11116                               SecondTemplate->getSourceRange(),
11117                               FunctionTemplateParameterDifferentType)
11118                   << SecondTemplate << (i + 1);
11119               ParameterMismatch = true;
11120               break;
11121             }
11122 
11123             bool HasFirstDefaultArgument =
11124                 FirstNTTPD->hasDefaultArgument() &&
11125                 !FirstNTTPD->defaultArgumentWasInherited();
11126             bool HasSecondDefaultArgument =
11127                 SecondNTTPD->hasDefaultArgument() &&
11128                 !SecondNTTPD->defaultArgumentWasInherited();
11129             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11130               ODRDiagDeclError(FirstRecord, FirstModule,
11131                                FirstTemplate->getLocation(),
11132                                FirstTemplate->getSourceRange(),
11133                                FunctionTemplateParameterSingleDefaultArgument)
11134                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11135               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11136                               SecondTemplate->getSourceRange(),
11137                               FunctionTemplateParameterSingleDefaultArgument)
11138                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11139               ParameterMismatch = true;
11140               break;
11141             }
11142 
11143             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11144               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11145               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11146               if (ComputeODRHash(FirstDefaultArgument) !=
11147                   ComputeODRHash(SecondDefaultArgument)) {
11148                 ODRDiagDeclError(
11149                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11150                     FirstTemplate->getSourceRange(),
11151                     FunctionTemplateParameterDifferentDefaultArgument)
11152                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11153                 ODRDiagDeclNote(
11154                     SecondModule, SecondTemplate->getLocation(),
11155                     SecondTemplate->getSourceRange(),
11156                     FunctionTemplateParameterDifferentDefaultArgument)
11157                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11158                 ParameterMismatch = true;
11159                 break;
11160               }
11161             }
11162 
11163             if (FirstNTTPD->isParameterPack() !=
11164                 SecondNTTPD->isParameterPack()) {
11165               ODRDiagDeclError(FirstRecord, FirstModule,
11166                                FirstTemplate->getLocation(),
11167                                FirstTemplate->getSourceRange(),
11168                                FunctionTemplatePackParameter)
11169                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11170               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11171                               SecondTemplate->getSourceRange(),
11172                               FunctionTemplatePackParameter)
11173                   << SecondTemplate << (i + 1)
11174                   << SecondNTTPD->isParameterPack();
11175               ParameterMismatch = true;
11176               break;
11177             }
11178           }
11179         }
11180 
11181         if (ParameterMismatch) {
11182           Diagnosed = true;
11183           break;
11184         }
11185 
11186         break;
11187       }
11188       }
11189 
11190       if (Diagnosed)
11191         continue;
11192 
11193       Diag(FirstDecl->getLocation(),
11194            diag::err_module_odr_violation_mismatch_decl_unknown)
11195           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11196           << FirstDecl->getSourceRange();
11197       Diag(SecondDecl->getLocation(),
11198            diag::note_module_odr_violation_mismatch_decl_unknown)
11199           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11200       Diagnosed = true;
11201     }
11202 
11203     if (!Diagnosed) {
11204       // All definitions are updates to the same declaration. This happens if a
11205       // module instantiates the declaration of a class template specialization
11206       // and two or more other modules instantiate its definition.
11207       //
11208       // FIXME: Indicate which modules had instantiations of this definition.
11209       // FIXME: How can this even happen?
11210       Diag(Merge.first->getLocation(),
11211            diag::err_module_odr_violation_different_instantiations)
11212         << Merge.first;
11213     }
11214   }
11215 
11216   // Issue ODR failures diagnostics for functions.
11217   for (auto &Merge : FunctionOdrMergeFailures) {
11218     enum ODRFunctionDifference {
11219       ReturnType,
11220       ParameterName,
11221       ParameterType,
11222       ParameterSingleDefaultArgument,
11223       ParameterDifferentDefaultArgument,
11224       FunctionBody,
11225     };
11226 
11227     FunctionDecl *FirstFunction = Merge.first;
11228     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11229 
11230     bool Diagnosed = false;
11231     for (auto &SecondFunction : Merge.second) {
11232 
11233       if (FirstFunction == SecondFunction)
11234         continue;
11235 
11236       std::string SecondModule =
11237           getOwningModuleNameForDiagnostic(SecondFunction);
11238 
11239       auto ODRDiagError = [FirstFunction, &FirstModule,
11240                            this](SourceLocation Loc, SourceRange Range,
11241                                  ODRFunctionDifference DiffType) {
11242         return Diag(Loc, diag::err_module_odr_violation_function)
11243                << FirstFunction << FirstModule.empty() << FirstModule << Range
11244                << DiffType;
11245       };
11246       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11247                                                SourceRange Range,
11248                                                ODRFunctionDifference DiffType) {
11249         return Diag(Loc, diag::note_module_odr_violation_function)
11250                << SecondModule << Range << DiffType;
11251       };
11252 
11253       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11254           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11255         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11256                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11257             << FirstFunction->getReturnType();
11258         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11259                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11260             << SecondFunction->getReturnType();
11261         Diagnosed = true;
11262         break;
11263       }
11264 
11265       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11266              "Merged functions with different number of parameters");
11267 
11268       auto ParamSize = FirstFunction->param_size();
11269       bool ParameterMismatch = false;
11270       for (unsigned I = 0; I < ParamSize; ++I) {
11271         auto *FirstParam = FirstFunction->getParamDecl(I);
11272         auto *SecondParam = SecondFunction->getParamDecl(I);
11273 
11274         assert(getContext().hasSameType(FirstParam->getType(),
11275                                       SecondParam->getType()) &&
11276                "Merged function has different parameter types.");
11277 
11278         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11279           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11280                        ParameterName)
11281               << I + 1 << FirstParam->getDeclName();
11282           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11283                       ParameterName)
11284               << I + 1 << SecondParam->getDeclName();
11285           ParameterMismatch = true;
11286           break;
11287         };
11288 
11289         QualType FirstParamType = FirstParam->getType();
11290         QualType SecondParamType = SecondParam->getType();
11291         if (FirstParamType != SecondParamType &&
11292             ComputeQualTypeODRHash(FirstParamType) !=
11293                 ComputeQualTypeODRHash(SecondParamType)) {
11294           if (const DecayedType *ParamDecayedType =
11295                   FirstParamType->getAs<DecayedType>()) {
11296             ODRDiagError(FirstParam->getLocation(),
11297                          FirstParam->getSourceRange(), ParameterType)
11298                 << (I + 1) << FirstParamType << true
11299                 << ParamDecayedType->getOriginalType();
11300           } else {
11301             ODRDiagError(FirstParam->getLocation(),
11302                          FirstParam->getSourceRange(), ParameterType)
11303                 << (I + 1) << FirstParamType << false;
11304           }
11305 
11306           if (const DecayedType *ParamDecayedType =
11307                   SecondParamType->getAs<DecayedType>()) {
11308             ODRDiagNote(SecondParam->getLocation(),
11309                         SecondParam->getSourceRange(), ParameterType)
11310                 << (I + 1) << SecondParamType << true
11311                 << ParamDecayedType->getOriginalType();
11312           } else {
11313             ODRDiagNote(SecondParam->getLocation(),
11314                         SecondParam->getSourceRange(), ParameterType)
11315                 << (I + 1) << SecondParamType << false;
11316           }
11317           ParameterMismatch = true;
11318           break;
11319         }
11320 
11321         const Expr *FirstInit = FirstParam->getInit();
11322         const Expr *SecondInit = SecondParam->getInit();
11323         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11324           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11325                        ParameterSingleDefaultArgument)
11326               << (I + 1) << (FirstInit == nullptr)
11327               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11328           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11329                       ParameterSingleDefaultArgument)
11330               << (I + 1) << (SecondInit == nullptr)
11331               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11332           ParameterMismatch = true;
11333           break;
11334         }
11335 
11336         if (FirstInit && SecondInit &&
11337             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11338           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11339                        ParameterDifferentDefaultArgument)
11340               << (I + 1) << FirstInit->getSourceRange();
11341           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11342                       ParameterDifferentDefaultArgument)
11343               << (I + 1) << SecondInit->getSourceRange();
11344           ParameterMismatch = true;
11345           break;
11346         }
11347 
11348         assert(ComputeSubDeclODRHash(FirstParam) ==
11349                    ComputeSubDeclODRHash(SecondParam) &&
11350                "Undiagnosed parameter difference.");
11351       }
11352 
11353       if (ParameterMismatch) {
11354         Diagnosed = true;
11355         break;
11356       }
11357 
11358       // If no error has been generated before now, assume the problem is in
11359       // the body and generate a message.
11360       ODRDiagError(FirstFunction->getLocation(),
11361                    FirstFunction->getSourceRange(), FunctionBody);
11362       ODRDiagNote(SecondFunction->getLocation(),
11363                   SecondFunction->getSourceRange(), FunctionBody);
11364       Diagnosed = true;
11365       break;
11366     }
11367     (void)Diagnosed;
11368     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11369   }
11370 
11371   // Issue ODR failures diagnostics for enums.
11372   for (auto &Merge : EnumOdrMergeFailures) {
11373     enum ODREnumDifference {
11374       SingleScopedEnum,
11375       EnumTagKeywordMismatch,
11376       SingleSpecifiedType,
11377       DifferentSpecifiedTypes,
11378       DifferentNumberEnumConstants,
11379       EnumConstantName,
11380       EnumConstantSingleInitilizer,
11381       EnumConstantDifferentInitilizer,
11382     };
11383 
11384     // If we've already pointed out a specific problem with this enum, don't
11385     // bother issuing a general "something's different" diagnostic.
11386     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11387       continue;
11388 
11389     EnumDecl *FirstEnum = Merge.first;
11390     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11391 
11392     using DeclHashes =
11393         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11394     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11395                               DeclHashes &Hashes, EnumDecl *Enum) {
11396       for (auto *D : Enum->decls()) {
11397         // Due to decl merging, the first EnumDecl is the parent of
11398         // Decls in both records.
11399         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11400           continue;
11401         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11402         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11403                             ComputeSubDeclODRHash(D));
11404       }
11405     };
11406     DeclHashes FirstHashes;
11407     PopulateHashes(FirstHashes, FirstEnum);
11408     bool Diagnosed = false;
11409     for (auto &SecondEnum : Merge.second) {
11410 
11411       if (FirstEnum == SecondEnum)
11412         continue;
11413 
11414       std::string SecondModule =
11415           getOwningModuleNameForDiagnostic(SecondEnum);
11416 
11417       auto ODRDiagError = [FirstEnum, &FirstModule,
11418                            this](SourceLocation Loc, SourceRange Range,
11419                                  ODREnumDifference DiffType) {
11420         return Diag(Loc, diag::err_module_odr_violation_enum)
11421                << FirstEnum << FirstModule.empty() << FirstModule << Range
11422                << DiffType;
11423       };
11424       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11425                                                SourceRange Range,
11426                                                ODREnumDifference DiffType) {
11427         return Diag(Loc, diag::note_module_odr_violation_enum)
11428                << SecondModule << Range << DiffType;
11429       };
11430 
11431       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11432         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11433                      SingleScopedEnum)
11434             << FirstEnum->isScoped();
11435         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11436                     SingleScopedEnum)
11437             << SecondEnum->isScoped();
11438         Diagnosed = true;
11439         continue;
11440       }
11441 
11442       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11443         if (FirstEnum->isScopedUsingClassTag() !=
11444             SecondEnum->isScopedUsingClassTag()) {
11445           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11446                        EnumTagKeywordMismatch)
11447               << FirstEnum->isScopedUsingClassTag();
11448           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11449                       EnumTagKeywordMismatch)
11450               << SecondEnum->isScopedUsingClassTag();
11451           Diagnosed = true;
11452           continue;
11453         }
11454       }
11455 
11456       QualType FirstUnderlyingType =
11457           FirstEnum->getIntegerTypeSourceInfo()
11458               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11459               : QualType();
11460       QualType SecondUnderlyingType =
11461           SecondEnum->getIntegerTypeSourceInfo()
11462               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11463               : QualType();
11464       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11465           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11466                        SingleSpecifiedType)
11467               << !FirstUnderlyingType.isNull();
11468           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11469                       SingleSpecifiedType)
11470               << !SecondUnderlyingType.isNull();
11471           Diagnosed = true;
11472           continue;
11473       }
11474 
11475       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11476         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11477             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11478           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11479                        DifferentSpecifiedTypes)
11480               << FirstUnderlyingType;
11481           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11482                       DifferentSpecifiedTypes)
11483               << SecondUnderlyingType;
11484           Diagnosed = true;
11485           continue;
11486         }
11487       }
11488 
11489       DeclHashes SecondHashes;
11490       PopulateHashes(SecondHashes, SecondEnum);
11491 
11492       if (FirstHashes.size() != SecondHashes.size()) {
11493         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11494                      DifferentNumberEnumConstants)
11495             << (int)FirstHashes.size();
11496         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11497                     DifferentNumberEnumConstants)
11498             << (int)SecondHashes.size();
11499         Diagnosed = true;
11500         continue;
11501       }
11502 
11503       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11504         if (FirstHashes[I].second == SecondHashes[I].second)
11505           continue;
11506         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11507         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11508 
11509         if (FirstEnumConstant->getDeclName() !=
11510             SecondEnumConstant->getDeclName()) {
11511 
11512           ODRDiagError(FirstEnumConstant->getLocation(),
11513                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11514               << I + 1 << FirstEnumConstant;
11515           ODRDiagNote(SecondEnumConstant->getLocation(),
11516                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11517               << I + 1 << SecondEnumConstant;
11518           Diagnosed = true;
11519           break;
11520         }
11521 
11522         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11523         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11524         if (!FirstInit && !SecondInit)
11525           continue;
11526 
11527         if (!FirstInit || !SecondInit) {
11528           ODRDiagError(FirstEnumConstant->getLocation(),
11529                        FirstEnumConstant->getSourceRange(),
11530                        EnumConstantSingleInitilizer)
11531               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11532           ODRDiagNote(SecondEnumConstant->getLocation(),
11533                       SecondEnumConstant->getSourceRange(),
11534                       EnumConstantSingleInitilizer)
11535               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11536           Diagnosed = true;
11537           break;
11538         }
11539 
11540         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11541           ODRDiagError(FirstEnumConstant->getLocation(),
11542                        FirstEnumConstant->getSourceRange(),
11543                        EnumConstantDifferentInitilizer)
11544               << I + 1 << FirstEnumConstant;
11545           ODRDiagNote(SecondEnumConstant->getLocation(),
11546                       SecondEnumConstant->getSourceRange(),
11547                       EnumConstantDifferentInitilizer)
11548               << I + 1 << SecondEnumConstant;
11549           Diagnosed = true;
11550           break;
11551         }
11552       }
11553     }
11554 
11555     (void)Diagnosed;
11556     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11557   }
11558 }
11559 
11560 void ASTReader::StartedDeserializing() {
11561   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11562     ReadTimer->startTimer();
11563 }
11564 
11565 void ASTReader::FinishedDeserializing() {
11566   assert(NumCurrentElementsDeserializing &&
11567          "FinishedDeserializing not paired with StartedDeserializing");
11568   if (NumCurrentElementsDeserializing == 1) {
11569     // We decrease NumCurrentElementsDeserializing only after pending actions
11570     // are finished, to avoid recursively re-calling finishPendingActions().
11571     finishPendingActions();
11572   }
11573   --NumCurrentElementsDeserializing;
11574 
11575   if (NumCurrentElementsDeserializing == 0) {
11576     // Propagate exception specification and deduced type updates along
11577     // redeclaration chains.
11578     //
11579     // We do this now rather than in finishPendingActions because we want to
11580     // be able to walk the complete redeclaration chains of the updated decls.
11581     while (!PendingExceptionSpecUpdates.empty() ||
11582            !PendingDeducedTypeUpdates.empty()) {
11583       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11584       PendingExceptionSpecUpdates.clear();
11585       for (auto Update : ESUpdates) {
11586         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11587         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11588         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11589         if (auto *Listener = getContext().getASTMutationListener())
11590           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11591         for (auto *Redecl : Update.second->redecls())
11592           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11593       }
11594 
11595       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11596       PendingDeducedTypeUpdates.clear();
11597       for (auto Update : DTUpdates) {
11598         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11599         // FIXME: If the return type is already deduced, check that it matches.
11600         getContext().adjustDeducedFunctionResultType(Update.first,
11601                                                      Update.second);
11602       }
11603     }
11604 
11605     if (ReadTimer)
11606       ReadTimer->stopTimer();
11607 
11608     diagnoseOdrViolations();
11609 
11610     // We are not in recursive loading, so it's safe to pass the "interesting"
11611     // decls to the consumer.
11612     if (Consumer)
11613       PassInterestingDeclsToConsumer();
11614   }
11615 }
11616 
11617 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11618   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11619     // Remove any fake results before adding any real ones.
11620     auto It = PendingFakeLookupResults.find(II);
11621     if (It != PendingFakeLookupResults.end()) {
11622       for (auto *ND : It->second)
11623         SemaObj->IdResolver.RemoveDecl(ND);
11624       // FIXME: this works around module+PCH performance issue.
11625       // Rather than erase the result from the map, which is O(n), just clear
11626       // the vector of NamedDecls.
11627       It->second.clear();
11628     }
11629   }
11630 
11631   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11632     SemaObj->TUScope->AddDecl(D);
11633   } else if (SemaObj->TUScope) {
11634     // Adding the decl to IdResolver may have failed because it was already in
11635     // (even though it was not added in scope). If it is already in, make sure
11636     // it gets in the scope as well.
11637     if (std::find(SemaObj->IdResolver.begin(Name),
11638                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11639       SemaObj->TUScope->AddDecl(D);
11640   }
11641 }
11642 
11643 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11644                      ASTContext *Context,
11645                      const PCHContainerReader &PCHContainerRdr,
11646                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11647                      StringRef isysroot,
11648                      DisableValidationForModuleKind DisableValidationKind,
11649                      bool AllowASTWithCompilerErrors,
11650                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11651                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11652                      std::unique_ptr<llvm::Timer> ReadTimer)
11653     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11654                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11655                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11656       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11657       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11658       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11659                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11660       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11661       DisableValidationKind(DisableValidationKind),
11662       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11663       AllowConfigurationMismatch(AllowConfigurationMismatch),
11664       ValidateSystemInputs(ValidateSystemInputs),
11665       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11666       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11667   SourceMgr.setExternalSLocEntrySource(this);
11668 
11669   for (const auto &Ext : Extensions) {
11670     auto BlockName = Ext->getExtensionMetadata().BlockName;
11671     auto Known = ModuleFileExtensions.find(BlockName);
11672     if (Known != ModuleFileExtensions.end()) {
11673       Diags.Report(diag::warn_duplicate_module_file_extension)
11674         << BlockName;
11675       continue;
11676     }
11677 
11678     ModuleFileExtensions.insert({BlockName, Ext});
11679   }
11680 }
11681 
11682 ASTReader::~ASTReader() {
11683   if (OwnsDeserializationListener)
11684     delete DeserializationListener;
11685 }
11686 
11687 IdentifierResolver &ASTReader::getIdResolver() {
11688   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11689 }
11690 
11691 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11692                                                unsigned AbbrevID) {
11693   Idx = 0;
11694   Record.clear();
11695   return Cursor.readRecord(AbbrevID, Record);
11696 }
11697 //===----------------------------------------------------------------------===//
11698 //// OMPClauseReader implementation
11699 ////===----------------------------------------------------------------------===//
11700 
11701 // This has to be in namespace clang because it's friended by all
11702 // of the OMP clauses.
11703 namespace clang {
11704 
11705 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11706   ASTRecordReader &Record;
11707   ASTContext &Context;
11708 
11709 public:
11710   OMPClauseReader(ASTRecordReader &Record)
11711       : Record(Record), Context(Record.getContext()) {}
11712 #define GEN_CLANG_CLAUSE_CLASS
11713 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11714 #include "llvm/Frontend/OpenMP/OMP.inc"
11715   OMPClause *readClause();
11716   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11717   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11718 };
11719 
11720 } // end namespace clang
11721 
11722 OMPClause *ASTRecordReader::readOMPClause() {
11723   return OMPClauseReader(*this).readClause();
11724 }
11725 
11726 OMPClause *OMPClauseReader::readClause() {
11727   OMPClause *C = nullptr;
11728   switch (llvm::omp::Clause(Record.readInt())) {
11729   case llvm::omp::OMPC_if:
11730     C = new (Context) OMPIfClause();
11731     break;
11732   case llvm::omp::OMPC_final:
11733     C = new (Context) OMPFinalClause();
11734     break;
11735   case llvm::omp::OMPC_num_threads:
11736     C = new (Context) OMPNumThreadsClause();
11737     break;
11738   case llvm::omp::OMPC_safelen:
11739     C = new (Context) OMPSafelenClause();
11740     break;
11741   case llvm::omp::OMPC_simdlen:
11742     C = new (Context) OMPSimdlenClause();
11743     break;
11744   case llvm::omp::OMPC_sizes: {
11745     unsigned NumSizes = Record.readInt();
11746     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11747     break;
11748   }
11749   case llvm::omp::OMPC_allocator:
11750     C = new (Context) OMPAllocatorClause();
11751     break;
11752   case llvm::omp::OMPC_collapse:
11753     C = new (Context) OMPCollapseClause();
11754     break;
11755   case llvm::omp::OMPC_default:
11756     C = new (Context) OMPDefaultClause();
11757     break;
11758   case llvm::omp::OMPC_proc_bind:
11759     C = new (Context) OMPProcBindClause();
11760     break;
11761   case llvm::omp::OMPC_schedule:
11762     C = new (Context) OMPScheduleClause();
11763     break;
11764   case llvm::omp::OMPC_ordered:
11765     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11766     break;
11767   case llvm::omp::OMPC_nowait:
11768     C = new (Context) OMPNowaitClause();
11769     break;
11770   case llvm::omp::OMPC_untied:
11771     C = new (Context) OMPUntiedClause();
11772     break;
11773   case llvm::omp::OMPC_mergeable:
11774     C = new (Context) OMPMergeableClause();
11775     break;
11776   case llvm::omp::OMPC_read:
11777     C = new (Context) OMPReadClause();
11778     break;
11779   case llvm::omp::OMPC_write:
11780     C = new (Context) OMPWriteClause();
11781     break;
11782   case llvm::omp::OMPC_update:
11783     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11784     break;
11785   case llvm::omp::OMPC_capture:
11786     C = new (Context) OMPCaptureClause();
11787     break;
11788   case llvm::omp::OMPC_seq_cst:
11789     C = new (Context) OMPSeqCstClause();
11790     break;
11791   case llvm::omp::OMPC_acq_rel:
11792     C = new (Context) OMPAcqRelClause();
11793     break;
11794   case llvm::omp::OMPC_acquire:
11795     C = new (Context) OMPAcquireClause();
11796     break;
11797   case llvm::omp::OMPC_release:
11798     C = new (Context) OMPReleaseClause();
11799     break;
11800   case llvm::omp::OMPC_relaxed:
11801     C = new (Context) OMPRelaxedClause();
11802     break;
11803   case llvm::omp::OMPC_threads:
11804     C = new (Context) OMPThreadsClause();
11805     break;
11806   case llvm::omp::OMPC_simd:
11807     C = new (Context) OMPSIMDClause();
11808     break;
11809   case llvm::omp::OMPC_nogroup:
11810     C = new (Context) OMPNogroupClause();
11811     break;
11812   case llvm::omp::OMPC_unified_address:
11813     C = new (Context) OMPUnifiedAddressClause();
11814     break;
11815   case llvm::omp::OMPC_unified_shared_memory:
11816     C = new (Context) OMPUnifiedSharedMemoryClause();
11817     break;
11818   case llvm::omp::OMPC_reverse_offload:
11819     C = new (Context) OMPReverseOffloadClause();
11820     break;
11821   case llvm::omp::OMPC_dynamic_allocators:
11822     C = new (Context) OMPDynamicAllocatorsClause();
11823     break;
11824   case llvm::omp::OMPC_atomic_default_mem_order:
11825     C = new (Context) OMPAtomicDefaultMemOrderClause();
11826     break;
11827  case llvm::omp::OMPC_private:
11828     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11829     break;
11830   case llvm::omp::OMPC_firstprivate:
11831     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11832     break;
11833   case llvm::omp::OMPC_lastprivate:
11834     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11835     break;
11836   case llvm::omp::OMPC_shared:
11837     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11838     break;
11839   case llvm::omp::OMPC_reduction: {
11840     unsigned N = Record.readInt();
11841     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11842     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11843     break;
11844   }
11845   case llvm::omp::OMPC_task_reduction:
11846     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11847     break;
11848   case llvm::omp::OMPC_in_reduction:
11849     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11850     break;
11851   case llvm::omp::OMPC_linear:
11852     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11853     break;
11854   case llvm::omp::OMPC_aligned:
11855     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11856     break;
11857   case llvm::omp::OMPC_copyin:
11858     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11859     break;
11860   case llvm::omp::OMPC_copyprivate:
11861     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11862     break;
11863   case llvm::omp::OMPC_flush:
11864     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11865     break;
11866   case llvm::omp::OMPC_depobj:
11867     C = OMPDepobjClause::CreateEmpty(Context);
11868     break;
11869   case llvm::omp::OMPC_depend: {
11870     unsigned NumVars = Record.readInt();
11871     unsigned NumLoops = Record.readInt();
11872     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11873     break;
11874   }
11875   case llvm::omp::OMPC_device:
11876     C = new (Context) OMPDeviceClause();
11877     break;
11878   case llvm::omp::OMPC_map: {
11879     OMPMappableExprListSizeTy Sizes;
11880     Sizes.NumVars = Record.readInt();
11881     Sizes.NumUniqueDeclarations = Record.readInt();
11882     Sizes.NumComponentLists = Record.readInt();
11883     Sizes.NumComponents = Record.readInt();
11884     C = OMPMapClause::CreateEmpty(Context, Sizes);
11885     break;
11886   }
11887   case llvm::omp::OMPC_num_teams:
11888     C = new (Context) OMPNumTeamsClause();
11889     break;
11890   case llvm::omp::OMPC_thread_limit:
11891     C = new (Context) OMPThreadLimitClause();
11892     break;
11893   case llvm::omp::OMPC_priority:
11894     C = new (Context) OMPPriorityClause();
11895     break;
11896   case llvm::omp::OMPC_grainsize:
11897     C = new (Context) OMPGrainsizeClause();
11898     break;
11899   case llvm::omp::OMPC_num_tasks:
11900     C = new (Context) OMPNumTasksClause();
11901     break;
11902   case llvm::omp::OMPC_hint:
11903     C = new (Context) OMPHintClause();
11904     break;
11905   case llvm::omp::OMPC_dist_schedule:
11906     C = new (Context) OMPDistScheduleClause();
11907     break;
11908   case llvm::omp::OMPC_defaultmap:
11909     C = new (Context) OMPDefaultmapClause();
11910     break;
11911   case llvm::omp::OMPC_to: {
11912     OMPMappableExprListSizeTy Sizes;
11913     Sizes.NumVars = Record.readInt();
11914     Sizes.NumUniqueDeclarations = Record.readInt();
11915     Sizes.NumComponentLists = Record.readInt();
11916     Sizes.NumComponents = Record.readInt();
11917     C = OMPToClause::CreateEmpty(Context, Sizes);
11918     break;
11919   }
11920   case llvm::omp::OMPC_from: {
11921     OMPMappableExprListSizeTy Sizes;
11922     Sizes.NumVars = Record.readInt();
11923     Sizes.NumUniqueDeclarations = Record.readInt();
11924     Sizes.NumComponentLists = Record.readInt();
11925     Sizes.NumComponents = Record.readInt();
11926     C = OMPFromClause::CreateEmpty(Context, Sizes);
11927     break;
11928   }
11929   case llvm::omp::OMPC_use_device_ptr: {
11930     OMPMappableExprListSizeTy Sizes;
11931     Sizes.NumVars = Record.readInt();
11932     Sizes.NumUniqueDeclarations = Record.readInt();
11933     Sizes.NumComponentLists = Record.readInt();
11934     Sizes.NumComponents = Record.readInt();
11935     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11936     break;
11937   }
11938   case llvm::omp::OMPC_use_device_addr: {
11939     OMPMappableExprListSizeTy Sizes;
11940     Sizes.NumVars = Record.readInt();
11941     Sizes.NumUniqueDeclarations = Record.readInt();
11942     Sizes.NumComponentLists = Record.readInt();
11943     Sizes.NumComponents = Record.readInt();
11944     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11945     break;
11946   }
11947   case llvm::omp::OMPC_is_device_ptr: {
11948     OMPMappableExprListSizeTy Sizes;
11949     Sizes.NumVars = Record.readInt();
11950     Sizes.NumUniqueDeclarations = Record.readInt();
11951     Sizes.NumComponentLists = Record.readInt();
11952     Sizes.NumComponents = Record.readInt();
11953     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11954     break;
11955   }
11956   case llvm::omp::OMPC_allocate:
11957     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11958     break;
11959   case llvm::omp::OMPC_nontemporal:
11960     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11961     break;
11962   case llvm::omp::OMPC_inclusive:
11963     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11964     break;
11965   case llvm::omp::OMPC_exclusive:
11966     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11967     break;
11968   case llvm::omp::OMPC_order:
11969     C = new (Context) OMPOrderClause();
11970     break;
11971   case llvm::omp::OMPC_destroy:
11972     C = new (Context) OMPDestroyClause();
11973     break;
11974   case llvm::omp::OMPC_detach:
11975     C = new (Context) OMPDetachClause();
11976     break;
11977   case llvm::omp::OMPC_uses_allocators:
11978     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11979     break;
11980   case llvm::omp::OMPC_affinity:
11981     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11982     break;
11983 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11984   case llvm::omp::Enum:                                                        \
11985     break;
11986 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11987   default:
11988     break;
11989   }
11990   assert(C && "Unknown OMPClause type");
11991 
11992   Visit(C);
11993   C->setLocStart(Record.readSourceLocation());
11994   C->setLocEnd(Record.readSourceLocation());
11995 
11996   return C;
11997 }
11998 
11999 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12000   C->setPreInitStmt(Record.readSubStmt(),
12001                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12002 }
12003 
12004 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12005   VisitOMPClauseWithPreInit(C);
12006   C->setPostUpdateExpr(Record.readSubExpr());
12007 }
12008 
12009 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12010   VisitOMPClauseWithPreInit(C);
12011   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12012   C->setNameModifierLoc(Record.readSourceLocation());
12013   C->setColonLoc(Record.readSourceLocation());
12014   C->setCondition(Record.readSubExpr());
12015   C->setLParenLoc(Record.readSourceLocation());
12016 }
12017 
12018 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12019   VisitOMPClauseWithPreInit(C);
12020   C->setCondition(Record.readSubExpr());
12021   C->setLParenLoc(Record.readSourceLocation());
12022 }
12023 
12024 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12025   VisitOMPClauseWithPreInit(C);
12026   C->setNumThreads(Record.readSubExpr());
12027   C->setLParenLoc(Record.readSourceLocation());
12028 }
12029 
12030 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12031   C->setSafelen(Record.readSubExpr());
12032   C->setLParenLoc(Record.readSourceLocation());
12033 }
12034 
12035 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12036   C->setSimdlen(Record.readSubExpr());
12037   C->setLParenLoc(Record.readSourceLocation());
12038 }
12039 
12040 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12041   for (Expr *&E : C->getSizesRefs())
12042     E = Record.readSubExpr();
12043   C->setLParenLoc(Record.readSourceLocation());
12044 }
12045 
12046 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12047   C->setAllocator(Record.readExpr());
12048   C->setLParenLoc(Record.readSourceLocation());
12049 }
12050 
12051 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12052   C->setNumForLoops(Record.readSubExpr());
12053   C->setLParenLoc(Record.readSourceLocation());
12054 }
12055 
12056 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12057   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12058   C->setLParenLoc(Record.readSourceLocation());
12059   C->setDefaultKindKwLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12063   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12064   C->setLParenLoc(Record.readSourceLocation());
12065   C->setProcBindKindKwLoc(Record.readSourceLocation());
12066 }
12067 
12068 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12069   VisitOMPClauseWithPreInit(C);
12070   C->setScheduleKind(
12071        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12072   C->setFirstScheduleModifier(
12073       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12074   C->setSecondScheduleModifier(
12075       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12076   C->setChunkSize(Record.readSubExpr());
12077   C->setLParenLoc(Record.readSourceLocation());
12078   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12079   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12080   C->setScheduleKindLoc(Record.readSourceLocation());
12081   C->setCommaLoc(Record.readSourceLocation());
12082 }
12083 
12084 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12085   C->setNumForLoops(Record.readSubExpr());
12086   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12087     C->setLoopNumIterations(I, Record.readSubExpr());
12088   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12089     C->setLoopCounter(I, Record.readSubExpr());
12090   C->setLParenLoc(Record.readSourceLocation());
12091 }
12092 
12093 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12094   C->setEventHandler(Record.readSubExpr());
12095   C->setLParenLoc(Record.readSourceLocation());
12096 }
12097 
12098 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12099 
12100 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12101 
12102 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12103 
12104 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12105 
12106 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12107 
12108 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12109   if (C->isExtended()) {
12110     C->setLParenLoc(Record.readSourceLocation());
12111     C->setArgumentLoc(Record.readSourceLocation());
12112     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12113   }
12114 }
12115 
12116 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12117 
12118 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12119 
12120 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12121 
12122 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12123 
12124 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12125 
12126 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12127 
12128 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12129 
12130 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12131 
12132 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12133 
12134 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *) {}
12135 
12136 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12137 
12138 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12139     OMPUnifiedSharedMemoryClause *) {}
12140 
12141 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12142 
12143 void
12144 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12145 }
12146 
12147 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12148     OMPAtomicDefaultMemOrderClause *C) {
12149   C->setAtomicDefaultMemOrderKind(
12150       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12151   C->setLParenLoc(Record.readSourceLocation());
12152   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12153 }
12154 
12155 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12156   C->setLParenLoc(Record.readSourceLocation());
12157   unsigned NumVars = C->varlist_size();
12158   SmallVector<Expr *, 16> Vars;
12159   Vars.reserve(NumVars);
12160   for (unsigned i = 0; i != NumVars; ++i)
12161     Vars.push_back(Record.readSubExpr());
12162   C->setVarRefs(Vars);
12163   Vars.clear();
12164   for (unsigned i = 0; i != NumVars; ++i)
12165     Vars.push_back(Record.readSubExpr());
12166   C->setPrivateCopies(Vars);
12167 }
12168 
12169 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12170   VisitOMPClauseWithPreInit(C);
12171   C->setLParenLoc(Record.readSourceLocation());
12172   unsigned NumVars = C->varlist_size();
12173   SmallVector<Expr *, 16> Vars;
12174   Vars.reserve(NumVars);
12175   for (unsigned i = 0; i != NumVars; ++i)
12176     Vars.push_back(Record.readSubExpr());
12177   C->setVarRefs(Vars);
12178   Vars.clear();
12179   for (unsigned i = 0; i != NumVars; ++i)
12180     Vars.push_back(Record.readSubExpr());
12181   C->setPrivateCopies(Vars);
12182   Vars.clear();
12183   for (unsigned i = 0; i != NumVars; ++i)
12184     Vars.push_back(Record.readSubExpr());
12185   C->setInits(Vars);
12186 }
12187 
12188 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12189   VisitOMPClauseWithPostUpdate(C);
12190   C->setLParenLoc(Record.readSourceLocation());
12191   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12192   C->setKindLoc(Record.readSourceLocation());
12193   C->setColonLoc(Record.readSourceLocation());
12194   unsigned NumVars = C->varlist_size();
12195   SmallVector<Expr *, 16> Vars;
12196   Vars.reserve(NumVars);
12197   for (unsigned i = 0; i != NumVars; ++i)
12198     Vars.push_back(Record.readSubExpr());
12199   C->setVarRefs(Vars);
12200   Vars.clear();
12201   for (unsigned i = 0; i != NumVars; ++i)
12202     Vars.push_back(Record.readSubExpr());
12203   C->setPrivateCopies(Vars);
12204   Vars.clear();
12205   for (unsigned i = 0; i != NumVars; ++i)
12206     Vars.push_back(Record.readSubExpr());
12207   C->setSourceExprs(Vars);
12208   Vars.clear();
12209   for (unsigned i = 0; i != NumVars; ++i)
12210     Vars.push_back(Record.readSubExpr());
12211   C->setDestinationExprs(Vars);
12212   Vars.clear();
12213   for (unsigned i = 0; i != NumVars; ++i)
12214     Vars.push_back(Record.readSubExpr());
12215   C->setAssignmentOps(Vars);
12216 }
12217 
12218 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12219   C->setLParenLoc(Record.readSourceLocation());
12220   unsigned NumVars = C->varlist_size();
12221   SmallVector<Expr *, 16> Vars;
12222   Vars.reserve(NumVars);
12223   for (unsigned i = 0; i != NumVars; ++i)
12224     Vars.push_back(Record.readSubExpr());
12225   C->setVarRefs(Vars);
12226 }
12227 
12228 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12229   VisitOMPClauseWithPostUpdate(C);
12230   C->setLParenLoc(Record.readSourceLocation());
12231   C->setModifierLoc(Record.readSourceLocation());
12232   C->setColonLoc(Record.readSourceLocation());
12233   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12234   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12235   C->setQualifierLoc(NNSL);
12236   C->setNameInfo(DNI);
12237 
12238   unsigned NumVars = C->varlist_size();
12239   SmallVector<Expr *, 16> Vars;
12240   Vars.reserve(NumVars);
12241   for (unsigned i = 0; i != NumVars; ++i)
12242     Vars.push_back(Record.readSubExpr());
12243   C->setVarRefs(Vars);
12244   Vars.clear();
12245   for (unsigned i = 0; i != NumVars; ++i)
12246     Vars.push_back(Record.readSubExpr());
12247   C->setPrivates(Vars);
12248   Vars.clear();
12249   for (unsigned i = 0; i != NumVars; ++i)
12250     Vars.push_back(Record.readSubExpr());
12251   C->setLHSExprs(Vars);
12252   Vars.clear();
12253   for (unsigned i = 0; i != NumVars; ++i)
12254     Vars.push_back(Record.readSubExpr());
12255   C->setRHSExprs(Vars);
12256   Vars.clear();
12257   for (unsigned i = 0; i != NumVars; ++i)
12258     Vars.push_back(Record.readSubExpr());
12259   C->setReductionOps(Vars);
12260   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12261     Vars.clear();
12262     for (unsigned i = 0; i != NumVars; ++i)
12263       Vars.push_back(Record.readSubExpr());
12264     C->setInscanCopyOps(Vars);
12265     Vars.clear();
12266     for (unsigned i = 0; i != NumVars; ++i)
12267       Vars.push_back(Record.readSubExpr());
12268     C->setInscanCopyArrayTemps(Vars);
12269     Vars.clear();
12270     for (unsigned i = 0; i != NumVars; ++i)
12271       Vars.push_back(Record.readSubExpr());
12272     C->setInscanCopyArrayElems(Vars);
12273   }
12274 }
12275 
12276 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12277   VisitOMPClauseWithPostUpdate(C);
12278   C->setLParenLoc(Record.readSourceLocation());
12279   C->setColonLoc(Record.readSourceLocation());
12280   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12281   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12282   C->setQualifierLoc(NNSL);
12283   C->setNameInfo(DNI);
12284 
12285   unsigned NumVars = C->varlist_size();
12286   SmallVector<Expr *, 16> Vars;
12287   Vars.reserve(NumVars);
12288   for (unsigned I = 0; I != NumVars; ++I)
12289     Vars.push_back(Record.readSubExpr());
12290   C->setVarRefs(Vars);
12291   Vars.clear();
12292   for (unsigned I = 0; I != NumVars; ++I)
12293     Vars.push_back(Record.readSubExpr());
12294   C->setPrivates(Vars);
12295   Vars.clear();
12296   for (unsigned I = 0; I != NumVars; ++I)
12297     Vars.push_back(Record.readSubExpr());
12298   C->setLHSExprs(Vars);
12299   Vars.clear();
12300   for (unsigned I = 0; I != NumVars; ++I)
12301     Vars.push_back(Record.readSubExpr());
12302   C->setRHSExprs(Vars);
12303   Vars.clear();
12304   for (unsigned I = 0; I != NumVars; ++I)
12305     Vars.push_back(Record.readSubExpr());
12306   C->setReductionOps(Vars);
12307 }
12308 
12309 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12310   VisitOMPClauseWithPostUpdate(C);
12311   C->setLParenLoc(Record.readSourceLocation());
12312   C->setColonLoc(Record.readSourceLocation());
12313   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12314   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12315   C->setQualifierLoc(NNSL);
12316   C->setNameInfo(DNI);
12317 
12318   unsigned NumVars = C->varlist_size();
12319   SmallVector<Expr *, 16> Vars;
12320   Vars.reserve(NumVars);
12321   for (unsigned I = 0; I != NumVars; ++I)
12322     Vars.push_back(Record.readSubExpr());
12323   C->setVarRefs(Vars);
12324   Vars.clear();
12325   for (unsigned I = 0; I != NumVars; ++I)
12326     Vars.push_back(Record.readSubExpr());
12327   C->setPrivates(Vars);
12328   Vars.clear();
12329   for (unsigned I = 0; I != NumVars; ++I)
12330     Vars.push_back(Record.readSubExpr());
12331   C->setLHSExprs(Vars);
12332   Vars.clear();
12333   for (unsigned I = 0; I != NumVars; ++I)
12334     Vars.push_back(Record.readSubExpr());
12335   C->setRHSExprs(Vars);
12336   Vars.clear();
12337   for (unsigned I = 0; I != NumVars; ++I)
12338     Vars.push_back(Record.readSubExpr());
12339   C->setReductionOps(Vars);
12340   Vars.clear();
12341   for (unsigned I = 0; I != NumVars; ++I)
12342     Vars.push_back(Record.readSubExpr());
12343   C->setTaskgroupDescriptors(Vars);
12344 }
12345 
12346 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12347   VisitOMPClauseWithPostUpdate(C);
12348   C->setLParenLoc(Record.readSourceLocation());
12349   C->setColonLoc(Record.readSourceLocation());
12350   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12351   C->setModifierLoc(Record.readSourceLocation());
12352   unsigned NumVars = C->varlist_size();
12353   SmallVector<Expr *, 16> Vars;
12354   Vars.reserve(NumVars);
12355   for (unsigned i = 0; i != NumVars; ++i)
12356     Vars.push_back(Record.readSubExpr());
12357   C->setVarRefs(Vars);
12358   Vars.clear();
12359   for (unsigned i = 0; i != NumVars; ++i)
12360     Vars.push_back(Record.readSubExpr());
12361   C->setPrivates(Vars);
12362   Vars.clear();
12363   for (unsigned i = 0; i != NumVars; ++i)
12364     Vars.push_back(Record.readSubExpr());
12365   C->setInits(Vars);
12366   Vars.clear();
12367   for (unsigned i = 0; i != NumVars; ++i)
12368     Vars.push_back(Record.readSubExpr());
12369   C->setUpdates(Vars);
12370   Vars.clear();
12371   for (unsigned i = 0; i != NumVars; ++i)
12372     Vars.push_back(Record.readSubExpr());
12373   C->setFinals(Vars);
12374   C->setStep(Record.readSubExpr());
12375   C->setCalcStep(Record.readSubExpr());
12376   Vars.clear();
12377   for (unsigned I = 0; I != NumVars + 1; ++I)
12378     Vars.push_back(Record.readSubExpr());
12379   C->setUsedExprs(Vars);
12380 }
12381 
12382 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12383   C->setLParenLoc(Record.readSourceLocation());
12384   C->setColonLoc(Record.readSourceLocation());
12385   unsigned NumVars = C->varlist_size();
12386   SmallVector<Expr *, 16> Vars;
12387   Vars.reserve(NumVars);
12388   for (unsigned i = 0; i != NumVars; ++i)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setVarRefs(Vars);
12391   C->setAlignment(Record.readSubExpr());
12392 }
12393 
12394 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12395   C->setLParenLoc(Record.readSourceLocation());
12396   unsigned NumVars = C->varlist_size();
12397   SmallVector<Expr *, 16> Exprs;
12398   Exprs.reserve(NumVars);
12399   for (unsigned i = 0; i != NumVars; ++i)
12400     Exprs.push_back(Record.readSubExpr());
12401   C->setVarRefs(Exprs);
12402   Exprs.clear();
12403   for (unsigned i = 0; i != NumVars; ++i)
12404     Exprs.push_back(Record.readSubExpr());
12405   C->setSourceExprs(Exprs);
12406   Exprs.clear();
12407   for (unsigned i = 0; i != NumVars; ++i)
12408     Exprs.push_back(Record.readSubExpr());
12409   C->setDestinationExprs(Exprs);
12410   Exprs.clear();
12411   for (unsigned i = 0; i != NumVars; ++i)
12412     Exprs.push_back(Record.readSubExpr());
12413   C->setAssignmentOps(Exprs);
12414 }
12415 
12416 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12417   C->setLParenLoc(Record.readSourceLocation());
12418   unsigned NumVars = C->varlist_size();
12419   SmallVector<Expr *, 16> Exprs;
12420   Exprs.reserve(NumVars);
12421   for (unsigned i = 0; i != NumVars; ++i)
12422     Exprs.push_back(Record.readSubExpr());
12423   C->setVarRefs(Exprs);
12424   Exprs.clear();
12425   for (unsigned i = 0; i != NumVars; ++i)
12426     Exprs.push_back(Record.readSubExpr());
12427   C->setSourceExprs(Exprs);
12428   Exprs.clear();
12429   for (unsigned i = 0; i != NumVars; ++i)
12430     Exprs.push_back(Record.readSubExpr());
12431   C->setDestinationExprs(Exprs);
12432   Exprs.clear();
12433   for (unsigned i = 0; i != NumVars; ++i)
12434     Exprs.push_back(Record.readSubExpr());
12435   C->setAssignmentOps(Exprs);
12436 }
12437 
12438 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12439   C->setLParenLoc(Record.readSourceLocation());
12440   unsigned NumVars = C->varlist_size();
12441   SmallVector<Expr *, 16> Vars;
12442   Vars.reserve(NumVars);
12443   for (unsigned i = 0; i != NumVars; ++i)
12444     Vars.push_back(Record.readSubExpr());
12445   C->setVarRefs(Vars);
12446 }
12447 
12448 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12449   C->setDepobj(Record.readSubExpr());
12450   C->setLParenLoc(Record.readSourceLocation());
12451 }
12452 
12453 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12454   C->setLParenLoc(Record.readSourceLocation());
12455   C->setModifier(Record.readSubExpr());
12456   C->setDependencyKind(
12457       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12458   C->setDependencyLoc(Record.readSourceLocation());
12459   C->setColonLoc(Record.readSourceLocation());
12460   unsigned NumVars = C->varlist_size();
12461   SmallVector<Expr *, 16> Vars;
12462   Vars.reserve(NumVars);
12463   for (unsigned I = 0; I != NumVars; ++I)
12464     Vars.push_back(Record.readSubExpr());
12465   C->setVarRefs(Vars);
12466   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12467     C->setLoopData(I, Record.readSubExpr());
12468 }
12469 
12470 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12471   VisitOMPClauseWithPreInit(C);
12472   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12473   C->setDevice(Record.readSubExpr());
12474   C->setModifierLoc(Record.readSourceLocation());
12475   C->setLParenLoc(Record.readSourceLocation());
12476 }
12477 
12478 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12479   C->setLParenLoc(Record.readSourceLocation());
12480   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12481     C->setMapTypeModifier(
12482         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12483     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12484   }
12485   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12486   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12487   C->setMapType(
12488      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12489   C->setMapLoc(Record.readSourceLocation());
12490   C->setColonLoc(Record.readSourceLocation());
12491   auto NumVars = C->varlist_size();
12492   auto UniqueDecls = C->getUniqueDeclarationsNum();
12493   auto TotalLists = C->getTotalComponentListNum();
12494   auto TotalComponents = C->getTotalComponentsNum();
12495 
12496   SmallVector<Expr *, 16> Vars;
12497   Vars.reserve(NumVars);
12498   for (unsigned i = 0; i != NumVars; ++i)
12499     Vars.push_back(Record.readExpr());
12500   C->setVarRefs(Vars);
12501 
12502   SmallVector<Expr *, 16> UDMappers;
12503   UDMappers.reserve(NumVars);
12504   for (unsigned I = 0; I < NumVars; ++I)
12505     UDMappers.push_back(Record.readExpr());
12506   C->setUDMapperRefs(UDMappers);
12507 
12508   SmallVector<ValueDecl *, 16> Decls;
12509   Decls.reserve(UniqueDecls);
12510   for (unsigned i = 0; i < UniqueDecls; ++i)
12511     Decls.push_back(Record.readDeclAs<ValueDecl>());
12512   C->setUniqueDecls(Decls);
12513 
12514   SmallVector<unsigned, 16> ListsPerDecl;
12515   ListsPerDecl.reserve(UniqueDecls);
12516   for (unsigned i = 0; i < UniqueDecls; ++i)
12517     ListsPerDecl.push_back(Record.readInt());
12518   C->setDeclNumLists(ListsPerDecl);
12519 
12520   SmallVector<unsigned, 32> ListSizes;
12521   ListSizes.reserve(TotalLists);
12522   for (unsigned i = 0; i < TotalLists; ++i)
12523     ListSizes.push_back(Record.readInt());
12524   C->setComponentListSizes(ListSizes);
12525 
12526   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12527   Components.reserve(TotalComponents);
12528   for (unsigned i = 0; i < TotalComponents; ++i) {
12529     Expr *AssociatedExprPr = Record.readExpr();
12530     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12531     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12532                             /*IsNonContiguous=*/false);
12533   }
12534   C->setComponents(Components, ListSizes);
12535 }
12536 
12537 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12538   C->setLParenLoc(Record.readSourceLocation());
12539   C->setColonLoc(Record.readSourceLocation());
12540   C->setAllocator(Record.readSubExpr());
12541   unsigned NumVars = C->varlist_size();
12542   SmallVector<Expr *, 16> Vars;
12543   Vars.reserve(NumVars);
12544   for (unsigned i = 0; i != NumVars; ++i)
12545     Vars.push_back(Record.readSubExpr());
12546   C->setVarRefs(Vars);
12547 }
12548 
12549 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12550   VisitOMPClauseWithPreInit(C);
12551   C->setNumTeams(Record.readSubExpr());
12552   C->setLParenLoc(Record.readSourceLocation());
12553 }
12554 
12555 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12556   VisitOMPClauseWithPreInit(C);
12557   C->setThreadLimit(Record.readSubExpr());
12558   C->setLParenLoc(Record.readSourceLocation());
12559 }
12560 
12561 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12562   VisitOMPClauseWithPreInit(C);
12563   C->setPriority(Record.readSubExpr());
12564   C->setLParenLoc(Record.readSourceLocation());
12565 }
12566 
12567 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12568   VisitOMPClauseWithPreInit(C);
12569   C->setGrainsize(Record.readSubExpr());
12570   C->setLParenLoc(Record.readSourceLocation());
12571 }
12572 
12573 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12574   VisitOMPClauseWithPreInit(C);
12575   C->setNumTasks(Record.readSubExpr());
12576   C->setLParenLoc(Record.readSourceLocation());
12577 }
12578 
12579 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12580   C->setHint(Record.readSubExpr());
12581   C->setLParenLoc(Record.readSourceLocation());
12582 }
12583 
12584 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12585   VisitOMPClauseWithPreInit(C);
12586   C->setDistScheduleKind(
12587       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12588   C->setChunkSize(Record.readSubExpr());
12589   C->setLParenLoc(Record.readSourceLocation());
12590   C->setDistScheduleKindLoc(Record.readSourceLocation());
12591   C->setCommaLoc(Record.readSourceLocation());
12592 }
12593 
12594 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12595   C->setDefaultmapKind(
12596        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12597   C->setDefaultmapModifier(
12598       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12599   C->setLParenLoc(Record.readSourceLocation());
12600   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12601   C->setDefaultmapKindLoc(Record.readSourceLocation());
12602 }
12603 
12604 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12605   C->setLParenLoc(Record.readSourceLocation());
12606   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12607     C->setMotionModifier(
12608         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12609     C->setMotionModifierLoc(I, Record.readSourceLocation());
12610   }
12611   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12612   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12613   C->setColonLoc(Record.readSourceLocation());
12614   auto NumVars = C->varlist_size();
12615   auto UniqueDecls = C->getUniqueDeclarationsNum();
12616   auto TotalLists = C->getTotalComponentListNum();
12617   auto TotalComponents = C->getTotalComponentsNum();
12618 
12619   SmallVector<Expr *, 16> Vars;
12620   Vars.reserve(NumVars);
12621   for (unsigned i = 0; i != NumVars; ++i)
12622     Vars.push_back(Record.readSubExpr());
12623   C->setVarRefs(Vars);
12624 
12625   SmallVector<Expr *, 16> UDMappers;
12626   UDMappers.reserve(NumVars);
12627   for (unsigned I = 0; I < NumVars; ++I)
12628     UDMappers.push_back(Record.readSubExpr());
12629   C->setUDMapperRefs(UDMappers);
12630 
12631   SmallVector<ValueDecl *, 16> Decls;
12632   Decls.reserve(UniqueDecls);
12633   for (unsigned i = 0; i < UniqueDecls; ++i)
12634     Decls.push_back(Record.readDeclAs<ValueDecl>());
12635   C->setUniqueDecls(Decls);
12636 
12637   SmallVector<unsigned, 16> ListsPerDecl;
12638   ListsPerDecl.reserve(UniqueDecls);
12639   for (unsigned i = 0; i < UniqueDecls; ++i)
12640     ListsPerDecl.push_back(Record.readInt());
12641   C->setDeclNumLists(ListsPerDecl);
12642 
12643   SmallVector<unsigned, 32> ListSizes;
12644   ListSizes.reserve(TotalLists);
12645   for (unsigned i = 0; i < TotalLists; ++i)
12646     ListSizes.push_back(Record.readInt());
12647   C->setComponentListSizes(ListSizes);
12648 
12649   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12650   Components.reserve(TotalComponents);
12651   for (unsigned i = 0; i < TotalComponents; ++i) {
12652     Expr *AssociatedExprPr = Record.readSubExpr();
12653     bool IsNonContiguous = Record.readBool();
12654     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12655     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12656   }
12657   C->setComponents(Components, ListSizes);
12658 }
12659 
12660 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12661   C->setLParenLoc(Record.readSourceLocation());
12662   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12663     C->setMotionModifier(
12664         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12665     C->setMotionModifierLoc(I, Record.readSourceLocation());
12666   }
12667   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12668   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12669   C->setColonLoc(Record.readSourceLocation());
12670   auto NumVars = C->varlist_size();
12671   auto UniqueDecls = C->getUniqueDeclarationsNum();
12672   auto TotalLists = C->getTotalComponentListNum();
12673   auto TotalComponents = C->getTotalComponentsNum();
12674 
12675   SmallVector<Expr *, 16> Vars;
12676   Vars.reserve(NumVars);
12677   for (unsigned i = 0; i != NumVars; ++i)
12678     Vars.push_back(Record.readSubExpr());
12679   C->setVarRefs(Vars);
12680 
12681   SmallVector<Expr *, 16> UDMappers;
12682   UDMappers.reserve(NumVars);
12683   for (unsigned I = 0; I < NumVars; ++I)
12684     UDMappers.push_back(Record.readSubExpr());
12685   C->setUDMapperRefs(UDMappers);
12686 
12687   SmallVector<ValueDecl *, 16> Decls;
12688   Decls.reserve(UniqueDecls);
12689   for (unsigned i = 0; i < UniqueDecls; ++i)
12690     Decls.push_back(Record.readDeclAs<ValueDecl>());
12691   C->setUniqueDecls(Decls);
12692 
12693   SmallVector<unsigned, 16> ListsPerDecl;
12694   ListsPerDecl.reserve(UniqueDecls);
12695   for (unsigned i = 0; i < UniqueDecls; ++i)
12696     ListsPerDecl.push_back(Record.readInt());
12697   C->setDeclNumLists(ListsPerDecl);
12698 
12699   SmallVector<unsigned, 32> ListSizes;
12700   ListSizes.reserve(TotalLists);
12701   for (unsigned i = 0; i < TotalLists; ++i)
12702     ListSizes.push_back(Record.readInt());
12703   C->setComponentListSizes(ListSizes);
12704 
12705   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12706   Components.reserve(TotalComponents);
12707   for (unsigned i = 0; i < TotalComponents; ++i) {
12708     Expr *AssociatedExprPr = Record.readSubExpr();
12709     bool IsNonContiguous = Record.readBool();
12710     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12711     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12712   }
12713   C->setComponents(Components, ListSizes);
12714 }
12715 
12716 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12717   C->setLParenLoc(Record.readSourceLocation());
12718   auto NumVars = C->varlist_size();
12719   auto UniqueDecls = C->getUniqueDeclarationsNum();
12720   auto TotalLists = C->getTotalComponentListNum();
12721   auto TotalComponents = C->getTotalComponentsNum();
12722 
12723   SmallVector<Expr *, 16> Vars;
12724   Vars.reserve(NumVars);
12725   for (unsigned i = 0; i != NumVars; ++i)
12726     Vars.push_back(Record.readSubExpr());
12727   C->setVarRefs(Vars);
12728   Vars.clear();
12729   for (unsigned i = 0; i != NumVars; ++i)
12730     Vars.push_back(Record.readSubExpr());
12731   C->setPrivateCopies(Vars);
12732   Vars.clear();
12733   for (unsigned i = 0; i != NumVars; ++i)
12734     Vars.push_back(Record.readSubExpr());
12735   C->setInits(Vars);
12736 
12737   SmallVector<ValueDecl *, 16> Decls;
12738   Decls.reserve(UniqueDecls);
12739   for (unsigned i = 0; i < UniqueDecls; ++i)
12740     Decls.push_back(Record.readDeclAs<ValueDecl>());
12741   C->setUniqueDecls(Decls);
12742 
12743   SmallVector<unsigned, 16> ListsPerDecl;
12744   ListsPerDecl.reserve(UniqueDecls);
12745   for (unsigned i = 0; i < UniqueDecls; ++i)
12746     ListsPerDecl.push_back(Record.readInt());
12747   C->setDeclNumLists(ListsPerDecl);
12748 
12749   SmallVector<unsigned, 32> ListSizes;
12750   ListSizes.reserve(TotalLists);
12751   for (unsigned i = 0; i < TotalLists; ++i)
12752     ListSizes.push_back(Record.readInt());
12753   C->setComponentListSizes(ListSizes);
12754 
12755   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12756   Components.reserve(TotalComponents);
12757   for (unsigned i = 0; i < TotalComponents; ++i) {
12758     auto *AssociatedExprPr = Record.readSubExpr();
12759     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12760     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12761                             /*IsNonContiguous=*/false);
12762   }
12763   C->setComponents(Components, ListSizes);
12764 }
12765 
12766 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12767   C->setLParenLoc(Record.readSourceLocation());
12768   auto NumVars = C->varlist_size();
12769   auto UniqueDecls = C->getUniqueDeclarationsNum();
12770   auto TotalLists = C->getTotalComponentListNum();
12771   auto TotalComponents = C->getTotalComponentsNum();
12772 
12773   SmallVector<Expr *, 16> Vars;
12774   Vars.reserve(NumVars);
12775   for (unsigned i = 0; i != NumVars; ++i)
12776     Vars.push_back(Record.readSubExpr());
12777   C->setVarRefs(Vars);
12778 
12779   SmallVector<ValueDecl *, 16> Decls;
12780   Decls.reserve(UniqueDecls);
12781   for (unsigned i = 0; i < UniqueDecls; ++i)
12782     Decls.push_back(Record.readDeclAs<ValueDecl>());
12783   C->setUniqueDecls(Decls);
12784 
12785   SmallVector<unsigned, 16> ListsPerDecl;
12786   ListsPerDecl.reserve(UniqueDecls);
12787   for (unsigned i = 0; i < UniqueDecls; ++i)
12788     ListsPerDecl.push_back(Record.readInt());
12789   C->setDeclNumLists(ListsPerDecl);
12790 
12791   SmallVector<unsigned, 32> ListSizes;
12792   ListSizes.reserve(TotalLists);
12793   for (unsigned i = 0; i < TotalLists; ++i)
12794     ListSizes.push_back(Record.readInt());
12795   C->setComponentListSizes(ListSizes);
12796 
12797   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12798   Components.reserve(TotalComponents);
12799   for (unsigned i = 0; i < TotalComponents; ++i) {
12800     Expr *AssociatedExpr = Record.readSubExpr();
12801     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12802     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12803                             /*IsNonContiguous*/ false);
12804   }
12805   C->setComponents(Components, ListSizes);
12806 }
12807 
12808 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12809   C->setLParenLoc(Record.readSourceLocation());
12810   auto NumVars = C->varlist_size();
12811   auto UniqueDecls = C->getUniqueDeclarationsNum();
12812   auto TotalLists = C->getTotalComponentListNum();
12813   auto TotalComponents = C->getTotalComponentsNum();
12814 
12815   SmallVector<Expr *, 16> Vars;
12816   Vars.reserve(NumVars);
12817   for (unsigned i = 0; i != NumVars; ++i)
12818     Vars.push_back(Record.readSubExpr());
12819   C->setVarRefs(Vars);
12820   Vars.clear();
12821 
12822   SmallVector<ValueDecl *, 16> Decls;
12823   Decls.reserve(UniqueDecls);
12824   for (unsigned i = 0; i < UniqueDecls; ++i)
12825     Decls.push_back(Record.readDeclAs<ValueDecl>());
12826   C->setUniqueDecls(Decls);
12827 
12828   SmallVector<unsigned, 16> ListsPerDecl;
12829   ListsPerDecl.reserve(UniqueDecls);
12830   for (unsigned i = 0; i < UniqueDecls; ++i)
12831     ListsPerDecl.push_back(Record.readInt());
12832   C->setDeclNumLists(ListsPerDecl);
12833 
12834   SmallVector<unsigned, 32> ListSizes;
12835   ListSizes.reserve(TotalLists);
12836   for (unsigned i = 0; i < TotalLists; ++i)
12837     ListSizes.push_back(Record.readInt());
12838   C->setComponentListSizes(ListSizes);
12839 
12840   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12841   Components.reserve(TotalComponents);
12842   for (unsigned i = 0; i < TotalComponents; ++i) {
12843     Expr *AssociatedExpr = Record.readSubExpr();
12844     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12845     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12846                             /*IsNonContiguous=*/false);
12847   }
12848   C->setComponents(Components, ListSizes);
12849 }
12850 
12851 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12852   C->setLParenLoc(Record.readSourceLocation());
12853   unsigned NumVars = C->varlist_size();
12854   SmallVector<Expr *, 16> Vars;
12855   Vars.reserve(NumVars);
12856   for (unsigned i = 0; i != NumVars; ++i)
12857     Vars.push_back(Record.readSubExpr());
12858   C->setVarRefs(Vars);
12859   Vars.clear();
12860   Vars.reserve(NumVars);
12861   for (unsigned i = 0; i != NumVars; ++i)
12862     Vars.push_back(Record.readSubExpr());
12863   C->setPrivateRefs(Vars);
12864 }
12865 
12866 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12867   C->setLParenLoc(Record.readSourceLocation());
12868   unsigned NumVars = C->varlist_size();
12869   SmallVector<Expr *, 16> Vars;
12870   Vars.reserve(NumVars);
12871   for (unsigned i = 0; i != NumVars; ++i)
12872     Vars.push_back(Record.readSubExpr());
12873   C->setVarRefs(Vars);
12874 }
12875 
12876 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12877   C->setLParenLoc(Record.readSourceLocation());
12878   unsigned NumVars = C->varlist_size();
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 }
12885 
12886 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12887   C->setLParenLoc(Record.readSourceLocation());
12888   unsigned NumOfAllocators = C->getNumberOfAllocators();
12889   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12890   Data.reserve(NumOfAllocators);
12891   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12892     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12893     D.Allocator = Record.readSubExpr();
12894     D.AllocatorTraits = Record.readSubExpr();
12895     D.LParenLoc = Record.readSourceLocation();
12896     D.RParenLoc = Record.readSourceLocation();
12897   }
12898   C->setAllocatorsData(Data);
12899 }
12900 
12901 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12902   C->setLParenLoc(Record.readSourceLocation());
12903   C->setModifier(Record.readSubExpr());
12904   C->setColonLoc(Record.readSourceLocation());
12905   unsigned NumOfLocators = C->varlist_size();
12906   SmallVector<Expr *, 4> Locators;
12907   Locators.reserve(NumOfLocators);
12908   for (unsigned I = 0; I != NumOfLocators; ++I)
12909     Locators.push_back(Record.readSubExpr());
12910   C->setVarRefs(Locators);
12911 }
12912 
12913 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12914   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12915   C->setLParenLoc(Record.readSourceLocation());
12916   C->setKindKwLoc(Record.readSourceLocation());
12917 }
12918 
12919 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12920   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12921   TI.Sets.resize(readUInt32());
12922   for (auto &Set : TI.Sets) {
12923     Set.Kind = readEnum<llvm::omp::TraitSet>();
12924     Set.Selectors.resize(readUInt32());
12925     for (auto &Selector : Set.Selectors) {
12926       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12927       Selector.ScoreOrCondition = nullptr;
12928       if (readBool())
12929         Selector.ScoreOrCondition = readExprRef();
12930       Selector.Properties.resize(readUInt32());
12931       for (auto &Property : Selector.Properties)
12932         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12933     }
12934   }
12935   return &TI;
12936 }
12937 
12938 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
12939   if (!Data)
12940     return;
12941   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
12942     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
12943     skipInts(3);
12944   }
12945   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
12946   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
12947     Clauses[I] = readOMPClause();
12948   Data->setClauses(Clauses);
12949   if (Data->hasAssociatedStmt())
12950     Data->setAssociatedStmt(readStmt());
12951   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
12952     Data->getChildren()[I] = readStmt();
12953 }
12954