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), *FileMgr.getFile(Filename)};
1928     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1929     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1930   }
1931 
1932   // This HeaderFileInfo was externally loaded.
1933   HFI.External = true;
1934   HFI.IsValid = true;
1935   return HFI;
1936 }
1937 
1938 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1939                                 uint32_t MacroDirectivesOffset) {
1940   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1941   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1942 }
1943 
1944 void ASTReader::ReadDefinedMacros() {
1945   // Note that we are loading defined macros.
1946   Deserializing Macros(this);
1947 
1948   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1949     BitstreamCursor &MacroCursor = I.MacroCursor;
1950 
1951     // If there was no preprocessor block, skip this file.
1952     if (MacroCursor.getBitcodeBytes().empty())
1953       continue;
1954 
1955     BitstreamCursor Cursor = MacroCursor;
1956     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1957       Error(std::move(Err));
1958       return;
1959     }
1960 
1961     RecordData Record;
1962     while (true) {
1963       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1964       if (!MaybeE) {
1965         Error(MaybeE.takeError());
1966         return;
1967       }
1968       llvm::BitstreamEntry E = MaybeE.get();
1969 
1970       switch (E.Kind) {
1971       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1972       case llvm::BitstreamEntry::Error:
1973         Error("malformed block record in AST file");
1974         return;
1975       case llvm::BitstreamEntry::EndBlock:
1976         goto NextCursor;
1977 
1978       case llvm::BitstreamEntry::Record: {
1979         Record.clear();
1980         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1981         if (!MaybeRecord) {
1982           Error(MaybeRecord.takeError());
1983           return;
1984         }
1985         switch (MaybeRecord.get()) {
1986         default:  // Default behavior: ignore.
1987           break;
1988 
1989         case PP_MACRO_OBJECT_LIKE:
1990         case PP_MACRO_FUNCTION_LIKE: {
1991           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1992           if (II->isOutOfDate())
1993             updateOutOfDateIdentifier(*II);
1994           break;
1995         }
1996 
1997         case PP_TOKEN:
1998           // Ignore tokens.
1999           break;
2000         }
2001         break;
2002       }
2003       }
2004     }
2005     NextCursor:  ;
2006   }
2007 }
2008 
2009 namespace {
2010 
2011   /// Visitor class used to look up identifirs in an AST file.
2012   class IdentifierLookupVisitor {
2013     StringRef Name;
2014     unsigned NameHash;
2015     unsigned PriorGeneration;
2016     unsigned &NumIdentifierLookups;
2017     unsigned &NumIdentifierLookupHits;
2018     IdentifierInfo *Found = nullptr;
2019 
2020   public:
2021     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2022                             unsigned &NumIdentifierLookups,
2023                             unsigned &NumIdentifierLookupHits)
2024       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2025         PriorGeneration(PriorGeneration),
2026         NumIdentifierLookups(NumIdentifierLookups),
2027         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2028 
2029     bool operator()(ModuleFile &M) {
2030       // If we've already searched this module file, skip it now.
2031       if (M.Generation <= PriorGeneration)
2032         return true;
2033 
2034       ASTIdentifierLookupTable *IdTable
2035         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2036       if (!IdTable)
2037         return false;
2038 
2039       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2040                                      Found);
2041       ++NumIdentifierLookups;
2042       ASTIdentifierLookupTable::iterator Pos =
2043           IdTable->find_hashed(Name, NameHash, &Trait);
2044       if (Pos == IdTable->end())
2045         return false;
2046 
2047       // Dereferencing the iterator has the effect of building the
2048       // IdentifierInfo node and populating it with the various
2049       // declarations it needs.
2050       ++NumIdentifierLookupHits;
2051       Found = *Pos;
2052       return true;
2053     }
2054 
2055     // Retrieve the identifier info found within the module
2056     // files.
2057     IdentifierInfo *getIdentifierInfo() const { return Found; }
2058   };
2059 
2060 } // namespace
2061 
2062 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2063   // Note that we are loading an identifier.
2064   Deserializing AnIdentifier(this);
2065 
2066   unsigned PriorGeneration = 0;
2067   if (getContext().getLangOpts().Modules)
2068     PriorGeneration = IdentifierGeneration[&II];
2069 
2070   // If there is a global index, look there first to determine which modules
2071   // provably do not have any results for this identifier.
2072   GlobalModuleIndex::HitSet Hits;
2073   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2074   if (!loadGlobalIndex()) {
2075     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2076       HitsPtr = &Hits;
2077     }
2078   }
2079 
2080   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2081                                   NumIdentifierLookups,
2082                                   NumIdentifierLookupHits);
2083   ModuleMgr.visit(Visitor, HitsPtr);
2084   markIdentifierUpToDate(&II);
2085 }
2086 
2087 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2088   if (!II)
2089     return;
2090 
2091   II->setOutOfDate(false);
2092 
2093   // Update the generation for this identifier.
2094   if (getContext().getLangOpts().Modules)
2095     IdentifierGeneration[II] = getGeneration();
2096 }
2097 
2098 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2099                                     const PendingMacroInfo &PMInfo) {
2100   ModuleFile &M = *PMInfo.M;
2101 
2102   BitstreamCursor &Cursor = M.MacroCursor;
2103   SavedStreamPosition SavedPosition(Cursor);
2104   if (llvm::Error Err =
2105           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2106     Error(std::move(Err));
2107     return;
2108   }
2109 
2110   struct ModuleMacroRecord {
2111     SubmoduleID SubModID;
2112     MacroInfo *MI;
2113     SmallVector<SubmoduleID, 8> Overrides;
2114   };
2115   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2116 
2117   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2118   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2119   // macro histroy.
2120   RecordData Record;
2121   while (true) {
2122     Expected<llvm::BitstreamEntry> MaybeEntry =
2123         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2124     if (!MaybeEntry) {
2125       Error(MaybeEntry.takeError());
2126       return;
2127     }
2128     llvm::BitstreamEntry Entry = MaybeEntry.get();
2129 
2130     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2131       Error("malformed block record in AST file");
2132       return;
2133     }
2134 
2135     Record.clear();
2136     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2137     if (!MaybePP) {
2138       Error(MaybePP.takeError());
2139       return;
2140     }
2141     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2142     case PP_MACRO_DIRECTIVE_HISTORY:
2143       break;
2144 
2145     case PP_MODULE_MACRO: {
2146       ModuleMacros.push_back(ModuleMacroRecord());
2147       auto &Info = ModuleMacros.back();
2148       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2149       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2150       for (int I = 2, N = Record.size(); I != N; ++I)
2151         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2152       continue;
2153     }
2154 
2155     default:
2156       Error("malformed block record in AST file");
2157       return;
2158     }
2159 
2160     // We found the macro directive history; that's the last record
2161     // for this macro.
2162     break;
2163   }
2164 
2165   // Module macros are listed in reverse dependency order.
2166   {
2167     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2168     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2169     for (auto &MMR : ModuleMacros) {
2170       Overrides.clear();
2171       for (unsigned ModID : MMR.Overrides) {
2172         Module *Mod = getSubmodule(ModID);
2173         auto *Macro = PP.getModuleMacro(Mod, II);
2174         assert(Macro && "missing definition for overridden macro");
2175         Overrides.push_back(Macro);
2176       }
2177 
2178       bool Inserted = false;
2179       Module *Owner = getSubmodule(MMR.SubModID);
2180       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2181     }
2182   }
2183 
2184   // Don't read the directive history for a module; we don't have anywhere
2185   // to put it.
2186   if (M.isModule())
2187     return;
2188 
2189   // Deserialize the macro directives history in reverse source-order.
2190   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2191   unsigned Idx = 0, N = Record.size();
2192   while (Idx < N) {
2193     MacroDirective *MD = nullptr;
2194     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2195     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2196     switch (K) {
2197     case MacroDirective::MD_Define: {
2198       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2199       MD = PP.AllocateDefMacroDirective(MI, Loc);
2200       break;
2201     }
2202     case MacroDirective::MD_Undefine:
2203       MD = PP.AllocateUndefMacroDirective(Loc);
2204       break;
2205     case MacroDirective::MD_Visibility:
2206       bool isPublic = Record[Idx++];
2207       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2208       break;
2209     }
2210 
2211     if (!Latest)
2212       Latest = MD;
2213     if (Earliest)
2214       Earliest->setPrevious(MD);
2215     Earliest = MD;
2216   }
2217 
2218   if (Latest)
2219     PP.setLoadedMacroDirective(II, Earliest, Latest);
2220 }
2221 
2222 bool ASTReader::shouldDisableValidationForFile(
2223     const serialization::ModuleFile &M) const {
2224   if (DisableValidationKind == DisableValidationForModuleKind::None)
2225     return false;
2226 
2227   // If a PCH is loaded and validation is disabled for PCH then disable
2228   // validation for the PCH and the modules it loads.
2229   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2230 
2231   switch (K) {
2232   case MK_MainFile:
2233   case MK_Preamble:
2234   case MK_PCH:
2235     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2236   case MK_ImplicitModule:
2237   case MK_ExplicitModule:
2238   case MK_PrebuiltModule:
2239     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2240   }
2241 
2242   return false;
2243 }
2244 
2245 ASTReader::InputFileInfo
2246 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2247   // Go find this input file.
2248   BitstreamCursor &Cursor = F.InputFilesCursor;
2249   SavedStreamPosition SavedPosition(Cursor);
2250   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2251     // FIXME this drops errors on the floor.
2252     consumeError(std::move(Err));
2253   }
2254 
2255   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2256   if (!MaybeCode) {
2257     // FIXME this drops errors on the floor.
2258     consumeError(MaybeCode.takeError());
2259   }
2260   unsigned Code = MaybeCode.get();
2261   RecordData Record;
2262   StringRef Blob;
2263 
2264   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2265     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2266            "invalid record type for input file");
2267   else {
2268     // FIXME this drops errors on the floor.
2269     consumeError(Maybe.takeError());
2270   }
2271 
2272   assert(Record[0] == ID && "Bogus stored ID or offset");
2273   InputFileInfo R;
2274   R.StoredSize = static_cast<off_t>(Record[1]);
2275   R.StoredTime = static_cast<time_t>(Record[2]);
2276   R.Overridden = static_cast<bool>(Record[3]);
2277   R.Transient = static_cast<bool>(Record[4]);
2278   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2279   R.Filename = std::string(Blob);
2280   ResolveImportedPath(F, R.Filename);
2281 
2282   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2283   if (!MaybeEntry) // FIXME this drops errors on the floor.
2284     consumeError(MaybeEntry.takeError());
2285   llvm::BitstreamEntry Entry = MaybeEntry.get();
2286   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2287          "expected record type for input file hash");
2288 
2289   Record.clear();
2290   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2291     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2292            "invalid record type for input file hash");
2293   else {
2294     // FIXME this drops errors on the floor.
2295     consumeError(Maybe.takeError());
2296   }
2297   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2298                   static_cast<uint64_t>(Record[0]);
2299   return R;
2300 }
2301 
2302 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2303 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2304   // If this ID is bogus, just return an empty input file.
2305   if (ID == 0 || ID > F.InputFilesLoaded.size())
2306     return InputFile();
2307 
2308   // If we've already loaded this input file, return it.
2309   if (F.InputFilesLoaded[ID-1].getFile())
2310     return F.InputFilesLoaded[ID-1];
2311 
2312   if (F.InputFilesLoaded[ID-1].isNotFound())
2313     return InputFile();
2314 
2315   // Go find this input file.
2316   BitstreamCursor &Cursor = F.InputFilesCursor;
2317   SavedStreamPosition SavedPosition(Cursor);
2318   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2319     // FIXME this drops errors on the floor.
2320     consumeError(std::move(Err));
2321   }
2322 
2323   InputFileInfo FI = readInputFileInfo(F, ID);
2324   off_t StoredSize = FI.StoredSize;
2325   time_t StoredTime = FI.StoredTime;
2326   bool Overridden = FI.Overridden;
2327   bool Transient = FI.Transient;
2328   StringRef Filename = FI.Filename;
2329   uint64_t StoredContentHash = FI.ContentHash;
2330 
2331   OptionalFileEntryRefDegradesToFileEntryPtr File =
2332       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2333 
2334   // If we didn't find the file, resolve it relative to the
2335   // original directory from which this AST file was created.
2336   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2337       F.OriginalDir != F.BaseDirectory) {
2338     std::string Resolved = resolveFileRelativeToOriginalDir(
2339         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2340     if (!Resolved.empty())
2341       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2342   }
2343 
2344   // For an overridden file, create a virtual file with the stored
2345   // size/timestamp.
2346   if ((Overridden || Transient) && !File)
2347     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2348 
2349   if (!File) {
2350     if (Complain) {
2351       std::string ErrorStr = "could not find file '";
2352       ErrorStr += Filename;
2353       ErrorStr += "' referenced by AST file '";
2354       ErrorStr += F.FileName;
2355       ErrorStr += "'";
2356       Error(ErrorStr);
2357     }
2358     // Record that we didn't find the file.
2359     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2360     return InputFile();
2361   }
2362 
2363   // Check if there was a request to override the contents of the file
2364   // that was part of the precompiled header. Overriding such a file
2365   // can lead to problems when lexing using the source locations from the
2366   // PCH.
2367   SourceManager &SM = getSourceManager();
2368   // FIXME: Reject if the overrides are different.
2369   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2370     if (Complain)
2371       Error(diag::err_fe_pch_file_overridden, Filename);
2372 
2373     // After emitting the diagnostic, bypass the overriding file to recover
2374     // (this creates a separate FileEntry).
2375     File = SM.bypassFileContentsOverride(*File);
2376     if (!File) {
2377       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2378       return InputFile();
2379     }
2380   }
2381 
2382   enum ModificationType {
2383     Size,
2384     ModTime,
2385     Content,
2386     None,
2387   };
2388   auto HasInputFileChanged = [&]() {
2389     if (StoredSize != File->getSize())
2390       return ModificationType::Size;
2391     if (!shouldDisableValidationForFile(F) && StoredTime &&
2392         StoredTime != File->getModificationTime()) {
2393       // In case the modification time changes but not the content,
2394       // accept the cached file as legit.
2395       if (ValidateASTInputFilesContent &&
2396           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2397         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2398         if (!MemBuffOrError) {
2399           if (!Complain)
2400             return ModificationType::ModTime;
2401           std::string ErrorStr = "could not get buffer for file '";
2402           ErrorStr += File->getName();
2403           ErrorStr += "'";
2404           Error(ErrorStr);
2405           return ModificationType::ModTime;
2406         }
2407 
2408         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2409         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2410           return ModificationType::None;
2411         return ModificationType::Content;
2412       }
2413       return ModificationType::ModTime;
2414     }
2415     return ModificationType::None;
2416   };
2417 
2418   bool IsOutOfDate = false;
2419   auto FileChange = HasInputFileChanged();
2420   // For an overridden file, there is nothing to validate.
2421   if (!Overridden && FileChange != ModificationType::None) {
2422     if (Complain && !Diags.isDiagnosticInFlight()) {
2423       // Build a list of the PCH imports that got us here (in reverse).
2424       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2425       while (!ImportStack.back()->ImportedBy.empty())
2426         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2427 
2428       // The top-level PCH is stale.
2429       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2430       Diag(diag::err_fe_ast_file_modified)
2431           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2432           << TopLevelPCHName << FileChange;
2433 
2434       // Print the import stack.
2435       if (ImportStack.size() > 1) {
2436         Diag(diag::note_pch_required_by)
2437           << Filename << ImportStack[0]->FileName;
2438         for (unsigned I = 1; I < ImportStack.size(); ++I)
2439           Diag(diag::note_pch_required_by)
2440             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2441       }
2442 
2443       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2444     }
2445 
2446     IsOutOfDate = true;
2447   }
2448   // FIXME: If the file is overridden and we've already opened it,
2449   // issue an error (or split it into a separate FileEntry).
2450 
2451   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2452 
2453   // Note that we've loaded this input file.
2454   F.InputFilesLoaded[ID-1] = IF;
2455   return IF;
2456 }
2457 
2458 /// If we are loading a relocatable PCH or module file, and the filename
2459 /// is not an absolute path, add the system or module root to the beginning of
2460 /// the file name.
2461 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2462   // Resolve relative to the base directory, if we have one.
2463   if (!M.BaseDirectory.empty())
2464     return ResolveImportedPath(Filename, M.BaseDirectory);
2465 }
2466 
2467 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2468   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2469     return;
2470 
2471   SmallString<128> Buffer;
2472   llvm::sys::path::append(Buffer, Prefix, Filename);
2473   Filename.assign(Buffer.begin(), Buffer.end());
2474 }
2475 
2476 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2477   switch (ARR) {
2478   case ASTReader::Failure: return true;
2479   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2480   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2481   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2482   case ASTReader::ConfigurationMismatch:
2483     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2484   case ASTReader::HadErrors: return true;
2485   case ASTReader::Success: return false;
2486   }
2487 
2488   llvm_unreachable("unknown ASTReadResult");
2489 }
2490 
2491 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2492     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2493     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2494     std::string &SuggestedPredefines) {
2495   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2496     // FIXME this drops errors on the floor.
2497     consumeError(std::move(Err));
2498     return Failure;
2499   }
2500 
2501   // Read all of the records in the options block.
2502   RecordData Record;
2503   ASTReadResult Result = Success;
2504   while (true) {
2505     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2506     if (!MaybeEntry) {
2507       // FIXME this drops errors on the floor.
2508       consumeError(MaybeEntry.takeError());
2509       return Failure;
2510     }
2511     llvm::BitstreamEntry Entry = MaybeEntry.get();
2512 
2513     switch (Entry.Kind) {
2514     case llvm::BitstreamEntry::Error:
2515     case llvm::BitstreamEntry::SubBlock:
2516       return Failure;
2517 
2518     case llvm::BitstreamEntry::EndBlock:
2519       return Result;
2520 
2521     case llvm::BitstreamEntry::Record:
2522       // The interesting case.
2523       break;
2524     }
2525 
2526     // Read and process a record.
2527     Record.clear();
2528     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2529     if (!MaybeRecordType) {
2530       // FIXME this drops errors on the floor.
2531       consumeError(MaybeRecordType.takeError());
2532       return Failure;
2533     }
2534     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2535     case LANGUAGE_OPTIONS: {
2536       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2537       if (ParseLanguageOptions(Record, Complain, Listener,
2538                                AllowCompatibleConfigurationMismatch))
2539         Result = ConfigurationMismatch;
2540       break;
2541     }
2542 
2543     case TARGET_OPTIONS: {
2544       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2545       if (ParseTargetOptions(Record, Complain, Listener,
2546                              AllowCompatibleConfigurationMismatch))
2547         Result = ConfigurationMismatch;
2548       break;
2549     }
2550 
2551     case FILE_SYSTEM_OPTIONS: {
2552       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2553       if (!AllowCompatibleConfigurationMismatch &&
2554           ParseFileSystemOptions(Record, Complain, Listener))
2555         Result = ConfigurationMismatch;
2556       break;
2557     }
2558 
2559     case HEADER_SEARCH_OPTIONS: {
2560       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2561       if (!AllowCompatibleConfigurationMismatch &&
2562           ParseHeaderSearchOptions(Record, Complain, Listener))
2563         Result = ConfigurationMismatch;
2564       break;
2565     }
2566 
2567     case PREPROCESSOR_OPTIONS:
2568       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2569       if (!AllowCompatibleConfigurationMismatch &&
2570           ParsePreprocessorOptions(Record, Complain, Listener,
2571                                    SuggestedPredefines))
2572         Result = ConfigurationMismatch;
2573       break;
2574     }
2575   }
2576 }
2577 
2578 ASTReader::ASTReadResult
2579 ASTReader::ReadControlBlock(ModuleFile &F,
2580                             SmallVectorImpl<ImportedModule> &Loaded,
2581                             const ModuleFile *ImportedBy,
2582                             unsigned ClientLoadCapabilities) {
2583   BitstreamCursor &Stream = F.Stream;
2584 
2585   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2586     Error(std::move(Err));
2587     return Failure;
2588   }
2589 
2590   // Lambda to read the unhashed control block the first time it's called.
2591   //
2592   // For PCM files, the unhashed control block cannot be read until after the
2593   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2594   // need to look ahead before reading the IMPORTS record.  For consistency,
2595   // this block is always read somehow (see BitstreamEntry::EndBlock).
2596   bool HasReadUnhashedControlBlock = false;
2597   auto readUnhashedControlBlockOnce = [&]() {
2598     if (!HasReadUnhashedControlBlock) {
2599       HasReadUnhashedControlBlock = true;
2600       if (ASTReadResult Result =
2601               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2602         return Result;
2603     }
2604     return Success;
2605   };
2606 
2607   bool DisableValidation = shouldDisableValidationForFile(F);
2608 
2609   // Read all of the records and blocks in the control block.
2610   RecordData Record;
2611   unsigned NumInputs = 0;
2612   unsigned NumUserInputs = 0;
2613   StringRef BaseDirectoryAsWritten;
2614   while (true) {
2615     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2616     if (!MaybeEntry) {
2617       Error(MaybeEntry.takeError());
2618       return Failure;
2619     }
2620     llvm::BitstreamEntry Entry = MaybeEntry.get();
2621 
2622     switch (Entry.Kind) {
2623     case llvm::BitstreamEntry::Error:
2624       Error("malformed block record in AST file");
2625       return Failure;
2626     case llvm::BitstreamEntry::EndBlock: {
2627       // Validate the module before returning.  This call catches an AST with
2628       // no module name and no imports.
2629       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2630         return Result;
2631 
2632       // Validate input files.
2633       const HeaderSearchOptions &HSOpts =
2634           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2635 
2636       // All user input files reside at the index range [0, NumUserInputs), and
2637       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2638       // loaded module files, ignore missing inputs.
2639       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2640           F.Kind != MK_PrebuiltModule) {
2641         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2642 
2643         // If we are reading a module, we will create a verification timestamp,
2644         // so we verify all input files.  Otherwise, verify only user input
2645         // files.
2646 
2647         unsigned N = NumUserInputs;
2648         if (ValidateSystemInputs ||
2649             (HSOpts.ModulesValidateOncePerBuildSession &&
2650              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2651              F.Kind == MK_ImplicitModule))
2652           N = NumInputs;
2653 
2654         for (unsigned I = 0; I < N; ++I) {
2655           InputFile IF = getInputFile(F, I+1, Complain);
2656           if (!IF.getFile() || IF.isOutOfDate())
2657             return OutOfDate;
2658         }
2659       }
2660 
2661       if (Listener)
2662         Listener->visitModuleFile(F.FileName, F.Kind);
2663 
2664       if (Listener && Listener->needsInputFileVisitation()) {
2665         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2666                                                                 : NumUserInputs;
2667         for (unsigned I = 0; I < N; ++I) {
2668           bool IsSystem = I >= NumUserInputs;
2669           InputFileInfo FI = readInputFileInfo(F, I+1);
2670           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2671                                    F.Kind == MK_ExplicitModule ||
2672                                    F.Kind == MK_PrebuiltModule);
2673         }
2674       }
2675 
2676       return Success;
2677     }
2678 
2679     case llvm::BitstreamEntry::SubBlock:
2680       switch (Entry.ID) {
2681       case INPUT_FILES_BLOCK_ID:
2682         F.InputFilesCursor = Stream;
2683         if (llvm::Error Err = Stream.SkipBlock()) {
2684           Error(std::move(Err));
2685           return Failure;
2686         }
2687         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2688           Error("malformed block record in AST file");
2689           return Failure;
2690         }
2691         continue;
2692 
2693       case OPTIONS_BLOCK_ID:
2694         // If we're reading the first module for this group, check its options
2695         // are compatible with ours. For modules it imports, no further checking
2696         // is required, because we checked them when we built it.
2697         if (Listener && !ImportedBy) {
2698           // Should we allow the configuration of the module file to differ from
2699           // the configuration of the current translation unit in a compatible
2700           // way?
2701           //
2702           // FIXME: Allow this for files explicitly specified with -include-pch.
2703           bool AllowCompatibleConfigurationMismatch =
2704               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2705 
2706           ASTReadResult Result =
2707               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2708                                AllowCompatibleConfigurationMismatch, *Listener,
2709                                SuggestedPredefines);
2710           if (Result == Failure) {
2711             Error("malformed block record in AST file");
2712             return Result;
2713           }
2714 
2715           if (DisableValidation ||
2716               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2717             Result = Success;
2718 
2719           // If we can't load the module, exit early since we likely
2720           // will rebuild the module anyway. The stream may be in the
2721           // middle of a block.
2722           if (Result != Success)
2723             return Result;
2724         } else if (llvm::Error Err = Stream.SkipBlock()) {
2725           Error(std::move(Err));
2726           return Failure;
2727         }
2728         continue;
2729 
2730       default:
2731         if (llvm::Error Err = Stream.SkipBlock()) {
2732           Error(std::move(Err));
2733           return Failure;
2734         }
2735         continue;
2736       }
2737 
2738     case llvm::BitstreamEntry::Record:
2739       // The interesting case.
2740       break;
2741     }
2742 
2743     // Read and process a record.
2744     Record.clear();
2745     StringRef Blob;
2746     Expected<unsigned> MaybeRecordType =
2747         Stream.readRecord(Entry.ID, Record, &Blob);
2748     if (!MaybeRecordType) {
2749       Error(MaybeRecordType.takeError());
2750       return Failure;
2751     }
2752     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2753     case METADATA: {
2754       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2755         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2756           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2757                                         : diag::err_pch_version_too_new);
2758         return VersionMismatch;
2759       }
2760 
2761       bool hasErrors = Record[6];
2762       if (hasErrors && !DisableValidation) {
2763         // If requested by the caller, mark modules on error as out-of-date.
2764         if (F.Kind == MK_ImplicitModule &&
2765             (ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate))
2766           return OutOfDate;
2767 
2768         if (!AllowASTWithCompilerErrors) {
2769           Diag(diag::err_pch_with_compiler_errors);
2770           return HadErrors;
2771         }
2772       }
2773       if (hasErrors) {
2774         Diags.ErrorOccurred = true;
2775         Diags.UncompilableErrorOccurred = true;
2776         Diags.UnrecoverableErrorOccurred = true;
2777       }
2778 
2779       F.RelocatablePCH = Record[4];
2780       // Relative paths in a relocatable PCH are relative to our sysroot.
2781       if (F.RelocatablePCH)
2782         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2783 
2784       F.HasTimestamps = Record[5];
2785 
2786       const std::string &CurBranch = getClangFullRepositoryVersion();
2787       StringRef ASTBranch = Blob;
2788       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2789         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2790           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2791         return VersionMismatch;
2792       }
2793       break;
2794     }
2795 
2796     case IMPORTS: {
2797       // Validate the AST before processing any imports (otherwise, untangling
2798       // them can be error-prone and expensive).  A module will have a name and
2799       // will already have been validated, but this catches the PCH case.
2800       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2801         return Result;
2802 
2803       // Load each of the imported PCH files.
2804       unsigned Idx = 0, N = Record.size();
2805       while (Idx < N) {
2806         // Read information about the AST file.
2807         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2808         // The import location will be the local one for now; we will adjust
2809         // all import locations of module imports after the global source
2810         // location info are setup, in ReadAST.
2811         SourceLocation ImportLoc =
2812             ReadUntranslatedSourceLocation(Record[Idx++]);
2813         off_t StoredSize = (off_t)Record[Idx++];
2814         time_t StoredModTime = (time_t)Record[Idx++];
2815         auto FirstSignatureByte = Record.begin() + Idx;
2816         ASTFileSignature StoredSignature = ASTFileSignature::create(
2817             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2818         Idx += ASTFileSignature::size;
2819 
2820         std::string ImportedName = ReadString(Record, Idx);
2821         std::string ImportedFile;
2822 
2823         // For prebuilt and explicit modules first consult the file map for
2824         // an override. Note that here we don't search prebuilt module
2825         // directories, only the explicit name to file mappings. Also, we will
2826         // still verify the size/signature making sure it is essentially the
2827         // same file but perhaps in a different location.
2828         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2829           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2830             ImportedName, /*FileMapOnly*/ true);
2831 
2832         if (ImportedFile.empty())
2833           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2834           // ModuleCache as when writing.
2835           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2836         else
2837           SkipPath(Record, Idx);
2838 
2839         // If our client can't cope with us being out of date, we can't cope with
2840         // our dependency being missing.
2841         unsigned Capabilities = ClientLoadCapabilities;
2842         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2843           Capabilities &= ~ARR_Missing;
2844 
2845         // Load the AST file.
2846         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2847                                   Loaded, StoredSize, StoredModTime,
2848                                   StoredSignature, Capabilities);
2849 
2850         // If we diagnosed a problem, produce a backtrace.
2851         if (isDiagnosedResult(Result, Capabilities))
2852           Diag(diag::note_module_file_imported_by)
2853               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2854 
2855         switch (Result) {
2856         case Failure: return Failure;
2857           // If we have to ignore the dependency, we'll have to ignore this too.
2858         case Missing:
2859         case OutOfDate: return OutOfDate;
2860         case VersionMismatch: return VersionMismatch;
2861         case ConfigurationMismatch: return ConfigurationMismatch;
2862         case HadErrors: return HadErrors;
2863         case Success: break;
2864         }
2865       }
2866       break;
2867     }
2868 
2869     case ORIGINAL_FILE:
2870       F.OriginalSourceFileID = FileID::get(Record[0]);
2871       F.ActualOriginalSourceFileName = std::string(Blob);
2872       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2873       ResolveImportedPath(F, F.OriginalSourceFileName);
2874       break;
2875 
2876     case ORIGINAL_FILE_ID:
2877       F.OriginalSourceFileID = FileID::get(Record[0]);
2878       break;
2879 
2880     case ORIGINAL_PCH_DIR:
2881       F.OriginalDir = std::string(Blob);
2882       break;
2883 
2884     case MODULE_NAME:
2885       F.ModuleName = std::string(Blob);
2886       Diag(diag::remark_module_import)
2887           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2888           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2889       if (Listener)
2890         Listener->ReadModuleName(F.ModuleName);
2891 
2892       // Validate the AST as soon as we have a name so we can exit early on
2893       // failure.
2894       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2895         return Result;
2896 
2897       break;
2898 
2899     case MODULE_DIRECTORY: {
2900       // Save the BaseDirectory as written in the PCM for computing the module
2901       // filename for the ModuleCache.
2902       BaseDirectoryAsWritten = Blob;
2903       assert(!F.ModuleName.empty() &&
2904              "MODULE_DIRECTORY found before MODULE_NAME");
2905       // If we've already loaded a module map file covering this module, we may
2906       // have a better path for it (relative to the current build).
2907       Module *M = PP.getHeaderSearchInfo().lookupModule(
2908           F.ModuleName, /*AllowSearch*/ true,
2909           /*AllowExtraModuleMapSearch*/ true);
2910       if (M && M->Directory) {
2911         // If we're implicitly loading a module, the base directory can't
2912         // change between the build and use.
2913         // Don't emit module relocation error if we have -fno-validate-pch
2914         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2915                   DisableValidationForModuleKind::Module) &&
2916             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2917           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2918           if (!BuildDir || *BuildDir != M->Directory) {
2919             if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2920               Diag(diag::err_imported_module_relocated)
2921                   << F.ModuleName << Blob << M->Directory->getName();
2922             return OutOfDate;
2923           }
2924         }
2925         F.BaseDirectory = std::string(M->Directory->getName());
2926       } else {
2927         F.BaseDirectory = std::string(Blob);
2928       }
2929       break;
2930     }
2931 
2932     case MODULE_MAP_FILE:
2933       if (ASTReadResult Result =
2934               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2935         return Result;
2936       break;
2937 
2938     case INPUT_FILE_OFFSETS:
2939       NumInputs = Record[0];
2940       NumUserInputs = Record[1];
2941       F.InputFileOffsets =
2942           (const llvm::support::unaligned_uint64_t *)Blob.data();
2943       F.InputFilesLoaded.resize(NumInputs);
2944       F.NumUserInputFiles = NumUserInputs;
2945       break;
2946     }
2947   }
2948 }
2949 
2950 ASTReader::ASTReadResult
2951 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2952   BitstreamCursor &Stream = F.Stream;
2953 
2954   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2955     Error(std::move(Err));
2956     return Failure;
2957   }
2958   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2959 
2960   // Read all of the records and blocks for the AST file.
2961   RecordData Record;
2962   while (true) {
2963     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2964     if (!MaybeEntry) {
2965       Error(MaybeEntry.takeError());
2966       return Failure;
2967     }
2968     llvm::BitstreamEntry Entry = MaybeEntry.get();
2969 
2970     switch (Entry.Kind) {
2971     case llvm::BitstreamEntry::Error:
2972       Error("error at end of module block in AST file");
2973       return Failure;
2974     case llvm::BitstreamEntry::EndBlock:
2975       // Outside of C++, we do not store a lookup map for the translation unit.
2976       // Instead, mark it as needing a lookup map to be built if this module
2977       // contains any declarations lexically within it (which it always does!).
2978       // This usually has no cost, since we very rarely need the lookup map for
2979       // the translation unit outside C++.
2980       if (ASTContext *Ctx = ContextObj) {
2981         DeclContext *DC = Ctx->getTranslationUnitDecl();
2982         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2983           DC->setMustBuildLookupTable();
2984       }
2985 
2986       return Success;
2987     case llvm::BitstreamEntry::SubBlock:
2988       switch (Entry.ID) {
2989       case DECLTYPES_BLOCK_ID:
2990         // We lazily load the decls block, but we want to set up the
2991         // DeclsCursor cursor to point into it.  Clone our current bitcode
2992         // cursor to it, enter the block and read the abbrevs in that block.
2993         // With the main cursor, we just skip over it.
2994         F.DeclsCursor = Stream;
2995         if (llvm::Error Err = Stream.SkipBlock()) {
2996           Error(std::move(Err));
2997           return Failure;
2998         }
2999         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID,
3000                              &F.DeclsBlockStartOffset)) {
3001           Error("malformed block record in AST file");
3002           return Failure;
3003         }
3004         break;
3005 
3006       case PREPROCESSOR_BLOCK_ID:
3007         F.MacroCursor = Stream;
3008         if (!PP.getExternalSource())
3009           PP.setExternalSource(this);
3010 
3011         if (llvm::Error Err = Stream.SkipBlock()) {
3012           Error(std::move(Err));
3013           return Failure;
3014         }
3015         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
3016           Error("malformed block record in AST file");
3017           return Failure;
3018         }
3019         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3020         break;
3021 
3022       case PREPROCESSOR_DETAIL_BLOCK_ID:
3023         F.PreprocessorDetailCursor = Stream;
3024 
3025         if (llvm::Error Err = Stream.SkipBlock()) {
3026           Error(std::move(Err));
3027           return Failure;
3028         }
3029         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3030                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3031           Error("malformed preprocessor detail record in AST file");
3032           return Failure;
3033         }
3034         F.PreprocessorDetailStartOffset
3035         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3036 
3037         if (!PP.getPreprocessingRecord())
3038           PP.createPreprocessingRecord();
3039         if (!PP.getPreprocessingRecord()->getExternalSource())
3040           PP.getPreprocessingRecord()->SetExternalSource(*this);
3041         break;
3042 
3043       case SOURCE_MANAGER_BLOCK_ID:
3044         if (ReadSourceManagerBlock(F))
3045           return Failure;
3046         break;
3047 
3048       case SUBMODULE_BLOCK_ID:
3049         if (ASTReadResult Result =
3050                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3051           return Result;
3052         break;
3053 
3054       case COMMENTS_BLOCK_ID: {
3055         BitstreamCursor C = Stream;
3056 
3057         if (llvm::Error Err = Stream.SkipBlock()) {
3058           Error(std::move(Err));
3059           return Failure;
3060         }
3061         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3062           Error("malformed comments block in AST file");
3063           return Failure;
3064         }
3065         CommentsCursors.push_back(std::make_pair(C, &F));
3066         break;
3067       }
3068 
3069       default:
3070         if (llvm::Error Err = Stream.SkipBlock()) {
3071           Error(std::move(Err));
3072           return Failure;
3073         }
3074         break;
3075       }
3076       continue;
3077 
3078     case llvm::BitstreamEntry::Record:
3079       // The interesting case.
3080       break;
3081     }
3082 
3083     // Read and process a record.
3084     Record.clear();
3085     StringRef Blob;
3086     Expected<unsigned> MaybeRecordType =
3087         Stream.readRecord(Entry.ID, Record, &Blob);
3088     if (!MaybeRecordType) {
3089       Error(MaybeRecordType.takeError());
3090       return Failure;
3091     }
3092     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3093 
3094     // If we're not loading an AST context, we don't care about most records.
3095     if (!ContextObj) {
3096       switch (RecordType) {
3097       case IDENTIFIER_TABLE:
3098       case IDENTIFIER_OFFSET:
3099       case INTERESTING_IDENTIFIERS:
3100       case STATISTICS:
3101       case PP_CONDITIONAL_STACK:
3102       case PP_COUNTER_VALUE:
3103       case SOURCE_LOCATION_OFFSETS:
3104       case MODULE_OFFSET_MAP:
3105       case SOURCE_MANAGER_LINE_TABLE:
3106       case SOURCE_LOCATION_PRELOADS:
3107       case PPD_ENTITIES_OFFSETS:
3108       case HEADER_SEARCH_TABLE:
3109       case IMPORTED_MODULES:
3110       case MACRO_OFFSET:
3111         break;
3112       default:
3113         continue;
3114       }
3115     }
3116 
3117     switch (RecordType) {
3118     default:  // Default behavior: ignore.
3119       break;
3120 
3121     case TYPE_OFFSET: {
3122       if (F.LocalNumTypes != 0) {
3123         Error("duplicate TYPE_OFFSET record in AST file");
3124         return Failure;
3125       }
3126       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3127       F.LocalNumTypes = Record[0];
3128       unsigned LocalBaseTypeIndex = Record[1];
3129       F.BaseTypeIndex = getTotalNumTypes();
3130 
3131       if (F.LocalNumTypes > 0) {
3132         // Introduce the global -> local mapping for types within this module.
3133         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3134 
3135         // Introduce the local -> global mapping for types within this module.
3136         F.TypeRemap.insertOrReplace(
3137           std::make_pair(LocalBaseTypeIndex,
3138                          F.BaseTypeIndex - LocalBaseTypeIndex));
3139 
3140         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3141       }
3142       break;
3143     }
3144 
3145     case DECL_OFFSET: {
3146       if (F.LocalNumDecls != 0) {
3147         Error("duplicate DECL_OFFSET record in AST file");
3148         return Failure;
3149       }
3150       F.DeclOffsets = (const DeclOffset *)Blob.data();
3151       F.LocalNumDecls = Record[0];
3152       unsigned LocalBaseDeclID = Record[1];
3153       F.BaseDeclID = getTotalNumDecls();
3154 
3155       if (F.LocalNumDecls > 0) {
3156         // Introduce the global -> local mapping for declarations within this
3157         // module.
3158         GlobalDeclMap.insert(
3159           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3160 
3161         // Introduce the local -> global mapping for declarations within this
3162         // module.
3163         F.DeclRemap.insertOrReplace(
3164           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3165 
3166         // Introduce the global -> local mapping for declarations within this
3167         // module.
3168         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3169 
3170         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3171       }
3172       break;
3173     }
3174 
3175     case TU_UPDATE_LEXICAL: {
3176       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3177       LexicalContents Contents(
3178           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3179               Blob.data()),
3180           static_cast<unsigned int>(Blob.size() / 4));
3181       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3182       TU->setHasExternalLexicalStorage(true);
3183       break;
3184     }
3185 
3186     case UPDATE_VISIBLE: {
3187       unsigned Idx = 0;
3188       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3189       auto *Data = (const unsigned char*)Blob.data();
3190       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3191       // If we've already loaded the decl, perform the updates when we finish
3192       // loading this block.
3193       if (Decl *D = GetExistingDecl(ID))
3194         PendingUpdateRecords.push_back(
3195             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3196       break;
3197     }
3198 
3199     case IDENTIFIER_TABLE:
3200       F.IdentifierTableData =
3201           reinterpret_cast<const unsigned char *>(Blob.data());
3202       if (Record[0]) {
3203         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3204             F.IdentifierTableData + Record[0],
3205             F.IdentifierTableData + sizeof(uint32_t),
3206             F.IdentifierTableData,
3207             ASTIdentifierLookupTrait(*this, F));
3208 
3209         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3210       }
3211       break;
3212 
3213     case IDENTIFIER_OFFSET: {
3214       if (F.LocalNumIdentifiers != 0) {
3215         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3216         return Failure;
3217       }
3218       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3219       F.LocalNumIdentifiers = Record[0];
3220       unsigned LocalBaseIdentifierID = Record[1];
3221       F.BaseIdentifierID = getTotalNumIdentifiers();
3222 
3223       if (F.LocalNumIdentifiers > 0) {
3224         // Introduce the global -> local mapping for identifiers within this
3225         // module.
3226         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3227                                                   &F));
3228 
3229         // Introduce the local -> global mapping for identifiers within this
3230         // module.
3231         F.IdentifierRemap.insertOrReplace(
3232           std::make_pair(LocalBaseIdentifierID,
3233                          F.BaseIdentifierID - LocalBaseIdentifierID));
3234 
3235         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3236                                  + F.LocalNumIdentifiers);
3237       }
3238       break;
3239     }
3240 
3241     case INTERESTING_IDENTIFIERS:
3242       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3243       break;
3244 
3245     case EAGERLY_DESERIALIZED_DECLS:
3246       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3247       // about "interesting" decls (for instance, if we're building a module).
3248       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3249         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3250       break;
3251 
3252     case MODULAR_CODEGEN_DECLS:
3253       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3254       // them (ie: if we're not codegenerating this module).
3255       if (F.Kind == MK_MainFile ||
3256           getContext().getLangOpts().BuildingPCHWithObjectFile)
3257         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3258           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3259       break;
3260 
3261     case SPECIAL_TYPES:
3262       if (SpecialTypes.empty()) {
3263         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3264           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3265         break;
3266       }
3267 
3268       if (SpecialTypes.size() != Record.size()) {
3269         Error("invalid special-types record");
3270         return Failure;
3271       }
3272 
3273       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3274         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3275         if (!SpecialTypes[I])
3276           SpecialTypes[I] = ID;
3277         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3278         // merge step?
3279       }
3280       break;
3281 
3282     case STATISTICS:
3283       TotalNumStatements += Record[0];
3284       TotalNumMacros += Record[1];
3285       TotalLexicalDeclContexts += Record[2];
3286       TotalVisibleDeclContexts += Record[3];
3287       break;
3288 
3289     case UNUSED_FILESCOPED_DECLS:
3290       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3291         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3292       break;
3293 
3294     case DELEGATING_CTORS:
3295       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3296         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3297       break;
3298 
3299     case WEAK_UNDECLARED_IDENTIFIERS:
3300       if (Record.size() % 4 != 0) {
3301         Error("invalid weak identifiers record");
3302         return Failure;
3303       }
3304 
3305       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3306       // files. This isn't the way to do it :)
3307       WeakUndeclaredIdentifiers.clear();
3308 
3309       // Translate the weak, undeclared identifiers into global IDs.
3310       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3311         WeakUndeclaredIdentifiers.push_back(
3312           getGlobalIdentifierID(F, Record[I++]));
3313         WeakUndeclaredIdentifiers.push_back(
3314           getGlobalIdentifierID(F, Record[I++]));
3315         WeakUndeclaredIdentifiers.push_back(
3316           ReadSourceLocation(F, Record, I).getRawEncoding());
3317         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3318       }
3319       break;
3320 
3321     case SELECTOR_OFFSETS: {
3322       F.SelectorOffsets = (const uint32_t *)Blob.data();
3323       F.LocalNumSelectors = Record[0];
3324       unsigned LocalBaseSelectorID = Record[1];
3325       F.BaseSelectorID = getTotalNumSelectors();
3326 
3327       if (F.LocalNumSelectors > 0) {
3328         // Introduce the global -> local mapping for selectors within this
3329         // module.
3330         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3331 
3332         // Introduce the local -> global mapping for selectors within this
3333         // module.
3334         F.SelectorRemap.insertOrReplace(
3335           std::make_pair(LocalBaseSelectorID,
3336                          F.BaseSelectorID - LocalBaseSelectorID));
3337 
3338         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3339       }
3340       break;
3341     }
3342 
3343     case METHOD_POOL:
3344       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3345       if (Record[0])
3346         F.SelectorLookupTable
3347           = ASTSelectorLookupTable::Create(
3348                         F.SelectorLookupTableData + Record[0],
3349                         F.SelectorLookupTableData,
3350                         ASTSelectorLookupTrait(*this, F));
3351       TotalNumMethodPoolEntries += Record[1];
3352       break;
3353 
3354     case REFERENCED_SELECTOR_POOL:
3355       if (!Record.empty()) {
3356         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3357           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3358                                                                 Record[Idx++]));
3359           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3360                                               getRawEncoding());
3361         }
3362       }
3363       break;
3364 
3365     case PP_CONDITIONAL_STACK:
3366       if (!Record.empty()) {
3367         unsigned Idx = 0, End = Record.size() - 1;
3368         bool ReachedEOFWhileSkipping = Record[Idx++];
3369         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3370         if (ReachedEOFWhileSkipping) {
3371           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3372           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3373           bool FoundNonSkipPortion = Record[Idx++];
3374           bool FoundElse = Record[Idx++];
3375           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3376           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3377                            FoundElse, ElseLoc);
3378         }
3379         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3380         while (Idx < End) {
3381           auto Loc = ReadSourceLocation(F, Record, Idx);
3382           bool WasSkipping = Record[Idx++];
3383           bool FoundNonSkip = Record[Idx++];
3384           bool FoundElse = Record[Idx++];
3385           ConditionalStack.push_back(
3386               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3387         }
3388         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3389       }
3390       break;
3391 
3392     case PP_COUNTER_VALUE:
3393       if (!Record.empty() && Listener)
3394         Listener->ReadCounter(F, Record[0]);
3395       break;
3396 
3397     case FILE_SORTED_DECLS:
3398       F.FileSortedDecls = (const DeclID *)Blob.data();
3399       F.NumFileSortedDecls = Record[0];
3400       break;
3401 
3402     case SOURCE_LOCATION_OFFSETS: {
3403       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3404       F.LocalNumSLocEntries = Record[0];
3405       unsigned SLocSpaceSize = Record[1];
3406       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3407       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3408           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3409                                               SLocSpaceSize);
3410       if (!F.SLocEntryBaseID) {
3411         Error("ran out of source locations");
3412         break;
3413       }
3414       // Make our entry in the range map. BaseID is negative and growing, so
3415       // we invert it. Because we invert it, though, we need the other end of
3416       // the range.
3417       unsigned RangeStart =
3418           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3419       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3420       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3421 
3422       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3423       assert((F.SLocEntryBaseOffset & (1U << 31U)) == 0);
3424       GlobalSLocOffsetMap.insert(
3425           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3426                            - SLocSpaceSize,&F));
3427 
3428       // Initialize the remapping table.
3429       // Invalid stays invalid.
3430       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3431       // This module. Base was 2 when being compiled.
3432       F.SLocRemap.insertOrReplace(std::make_pair(2U,
3433                                   static_cast<int>(F.SLocEntryBaseOffset - 2)));
3434 
3435       TotalNumSLocEntries += F.LocalNumSLocEntries;
3436       break;
3437     }
3438 
3439     case MODULE_OFFSET_MAP:
3440       F.ModuleOffsetMap = Blob;
3441       break;
3442 
3443     case SOURCE_MANAGER_LINE_TABLE:
3444       if (ParseLineTable(F, Record)) {
3445         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3446         return Failure;
3447       }
3448       break;
3449 
3450     case SOURCE_LOCATION_PRELOADS: {
3451       // Need to transform from the local view (1-based IDs) to the global view,
3452       // which is based off F.SLocEntryBaseID.
3453       if (!F.PreloadSLocEntries.empty()) {
3454         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3455         return Failure;
3456       }
3457 
3458       F.PreloadSLocEntries.swap(Record);
3459       break;
3460     }
3461 
3462     case EXT_VECTOR_DECLS:
3463       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3464         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3465       break;
3466 
3467     case VTABLE_USES:
3468       if (Record.size() % 3 != 0) {
3469         Error("Invalid VTABLE_USES record");
3470         return Failure;
3471       }
3472 
3473       // Later tables overwrite earlier ones.
3474       // FIXME: Modules will have some trouble with this. This is clearly not
3475       // the right way to do this.
3476       VTableUses.clear();
3477 
3478       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3479         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3480         VTableUses.push_back(
3481           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3482         VTableUses.push_back(Record[Idx++]);
3483       }
3484       break;
3485 
3486     case PENDING_IMPLICIT_INSTANTIATIONS:
3487       if (PendingInstantiations.size() % 2 != 0) {
3488         Error("Invalid existing PendingInstantiations");
3489         return Failure;
3490       }
3491 
3492       if (Record.size() % 2 != 0) {
3493         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3494         return Failure;
3495       }
3496 
3497       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3498         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3499         PendingInstantiations.push_back(
3500           ReadSourceLocation(F, Record, I).getRawEncoding());
3501       }
3502       break;
3503 
3504     case SEMA_DECL_REFS:
3505       if (Record.size() != 3) {
3506         Error("Invalid SEMA_DECL_REFS block");
3507         return Failure;
3508       }
3509       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3510         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3511       break;
3512 
3513     case PPD_ENTITIES_OFFSETS: {
3514       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3515       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3516       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3517 
3518       unsigned LocalBasePreprocessedEntityID = Record[0];
3519 
3520       unsigned StartingID;
3521       if (!PP.getPreprocessingRecord())
3522         PP.createPreprocessingRecord();
3523       if (!PP.getPreprocessingRecord()->getExternalSource())
3524         PP.getPreprocessingRecord()->SetExternalSource(*this);
3525       StartingID
3526         = PP.getPreprocessingRecord()
3527             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3528       F.BasePreprocessedEntityID = StartingID;
3529 
3530       if (F.NumPreprocessedEntities > 0) {
3531         // Introduce the global -> local mapping for preprocessed entities in
3532         // this module.
3533         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3534 
3535         // Introduce the local -> global mapping for preprocessed entities in
3536         // this module.
3537         F.PreprocessedEntityRemap.insertOrReplace(
3538           std::make_pair(LocalBasePreprocessedEntityID,
3539             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3540       }
3541 
3542       break;
3543     }
3544 
3545     case PPD_SKIPPED_RANGES: {
3546       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3547       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3548       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3549 
3550       if (!PP.getPreprocessingRecord())
3551         PP.createPreprocessingRecord();
3552       if (!PP.getPreprocessingRecord()->getExternalSource())
3553         PP.getPreprocessingRecord()->SetExternalSource(*this);
3554       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3555           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3556 
3557       if (F.NumPreprocessedSkippedRanges > 0)
3558         GlobalSkippedRangeMap.insert(
3559             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3560       break;
3561     }
3562 
3563     case DECL_UPDATE_OFFSETS:
3564       if (Record.size() % 2 != 0) {
3565         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3566         return Failure;
3567       }
3568       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3569         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3570         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3571 
3572         // If we've already loaded the decl, perform the updates when we finish
3573         // loading this block.
3574         if (Decl *D = GetExistingDecl(ID))
3575           PendingUpdateRecords.push_back(
3576               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3577       }
3578       break;
3579 
3580     case OBJC_CATEGORIES_MAP:
3581       if (F.LocalNumObjCCategoriesInMap != 0) {
3582         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3583         return Failure;
3584       }
3585 
3586       F.LocalNumObjCCategoriesInMap = Record[0];
3587       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3588       break;
3589 
3590     case OBJC_CATEGORIES:
3591       F.ObjCCategories.swap(Record);
3592       break;
3593 
3594     case CUDA_SPECIAL_DECL_REFS:
3595       // Later tables overwrite earlier ones.
3596       // FIXME: Modules will have trouble with this.
3597       CUDASpecialDeclRefs.clear();
3598       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3599         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3600       break;
3601 
3602     case HEADER_SEARCH_TABLE:
3603       F.HeaderFileInfoTableData = Blob.data();
3604       F.LocalNumHeaderFileInfos = Record[1];
3605       if (Record[0]) {
3606         F.HeaderFileInfoTable
3607           = HeaderFileInfoLookupTable::Create(
3608                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3609                    (const unsigned char *)F.HeaderFileInfoTableData,
3610                    HeaderFileInfoTrait(*this, F,
3611                                        &PP.getHeaderSearchInfo(),
3612                                        Blob.data() + Record[2]));
3613 
3614         PP.getHeaderSearchInfo().SetExternalSource(this);
3615         if (!PP.getHeaderSearchInfo().getExternalLookup())
3616           PP.getHeaderSearchInfo().SetExternalLookup(this);
3617       }
3618       break;
3619 
3620     case FP_PRAGMA_OPTIONS:
3621       // Later tables overwrite earlier ones.
3622       FPPragmaOptions.swap(Record);
3623       break;
3624 
3625     case OPENCL_EXTENSIONS:
3626       for (unsigned I = 0, E = Record.size(); I != E; ) {
3627         auto Name = ReadString(Record, I);
3628         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3629         OptInfo.Supported = Record[I++] != 0;
3630         OptInfo.Enabled = Record[I++] != 0;
3631         OptInfo.WithPragma = 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,
4176                           llvm::sys::fs::OF_TextWithCRLF);
4177   if (EC)
4178     return;
4179   OS << "Timestamp file\n";
4180   OS.close();
4181   OS.clear_error(); // Avoid triggering a fatal error.
4182 }
4183 
4184 /// Given a cursor at the start of an AST file, scan ahead and drop the
4185 /// cursor into the start of the given block ID, returning false on success and
4186 /// true on failure.
4187 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4188   while (true) {
4189     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4190     if (!MaybeEntry) {
4191       // FIXME this drops errors on the floor.
4192       consumeError(MaybeEntry.takeError());
4193       return true;
4194     }
4195     llvm::BitstreamEntry Entry = MaybeEntry.get();
4196 
4197     switch (Entry.Kind) {
4198     case llvm::BitstreamEntry::Error:
4199     case llvm::BitstreamEntry::EndBlock:
4200       return true;
4201 
4202     case llvm::BitstreamEntry::Record:
4203       // Ignore top-level records.
4204       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4205         break;
4206       else {
4207         // FIXME this drops errors on the floor.
4208         consumeError(Skipped.takeError());
4209         return true;
4210       }
4211 
4212     case llvm::BitstreamEntry::SubBlock:
4213       if (Entry.ID == BlockID) {
4214         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4215           // FIXME this drops the error on the floor.
4216           consumeError(std::move(Err));
4217           return true;
4218         }
4219         // Found it!
4220         return false;
4221       }
4222 
4223       if (llvm::Error Err = Cursor.SkipBlock()) {
4224         // FIXME this drops the error on the floor.
4225         consumeError(std::move(Err));
4226         return true;
4227       }
4228     }
4229   }
4230 }
4231 
4232 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4233                                             ModuleKind Type,
4234                                             SourceLocation ImportLoc,
4235                                             unsigned ClientLoadCapabilities,
4236                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4237   llvm::SaveAndRestore<SourceLocation>
4238     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4239   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4240       CurrentDeserializingModuleKind, Type);
4241 
4242   // Defer any pending actions until we get to the end of reading the AST file.
4243   Deserializing AnASTFile(this);
4244 
4245   // Bump the generation number.
4246   unsigned PreviousGeneration = 0;
4247   if (ContextObj)
4248     PreviousGeneration = incrementGeneration(*ContextObj);
4249 
4250   unsigned NumModules = ModuleMgr.size();
4251   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4252     assert(ReadResult && "expected to return error");
4253     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4254                             PP.getLangOpts().Modules
4255                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4256                                 : nullptr);
4257 
4258     // If we find that any modules are unusable, the global index is going
4259     // to be out-of-date. Just remove it.
4260     GlobalIndex.reset();
4261     ModuleMgr.setGlobalIndex(nullptr);
4262     return ReadResult;
4263   };
4264 
4265   SmallVector<ImportedModule, 4> Loaded;
4266   switch (ASTReadResult ReadResult =
4267               ReadASTCore(FileName, Type, ImportLoc,
4268                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4269                           ASTFileSignature(), ClientLoadCapabilities)) {
4270   case Failure:
4271   case Missing:
4272   case OutOfDate:
4273   case VersionMismatch:
4274   case ConfigurationMismatch:
4275   case HadErrors:
4276     return removeModulesAndReturn(ReadResult);
4277   case Success:
4278     break;
4279   }
4280 
4281   // Here comes stuff that we only do once the entire chain is loaded.
4282 
4283   // Load the AST blocks of all of the modules that we loaded.  We can still
4284   // hit errors parsing the ASTs at this point.
4285   for (ImportedModule &M : Loaded) {
4286     ModuleFile &F = *M.Mod;
4287 
4288     // Read the AST block.
4289     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4290       return removeModulesAndReturn(Result);
4291 
4292     // The AST block should always have a definition for the main module.
4293     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4294       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4295       return removeModulesAndReturn(Failure);
4296     }
4297 
4298     // Read the extension blocks.
4299     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4300       if (ASTReadResult Result = ReadExtensionBlock(F))
4301         return removeModulesAndReturn(Result);
4302     }
4303 
4304     // Once read, set the ModuleFile bit base offset and update the size in
4305     // bits of all files we've seen.
4306     F.GlobalBitOffset = TotalModulesSizeInBits;
4307     TotalModulesSizeInBits += F.SizeInBits;
4308     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4309   }
4310 
4311   // Preload source locations and interesting indentifiers.
4312   for (ImportedModule &M : Loaded) {
4313     ModuleFile &F = *M.Mod;
4314 
4315     // Preload SLocEntries.
4316     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4317       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4318       // Load it through the SourceManager and don't call ReadSLocEntry()
4319       // directly because the entry may have already been loaded in which case
4320       // calling ReadSLocEntry() directly would trigger an assertion in
4321       // SourceManager.
4322       SourceMgr.getLoadedSLocEntryByID(Index);
4323     }
4324 
4325     // Map the original source file ID into the ID space of the current
4326     // compilation.
4327     if (F.OriginalSourceFileID.isValid()) {
4328       F.OriginalSourceFileID = FileID::get(
4329           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4330     }
4331 
4332     // Preload all the pending interesting identifiers by marking them out of
4333     // date.
4334     for (auto Offset : F.PreloadIdentifierOffsets) {
4335       const unsigned char *Data = F.IdentifierTableData + Offset;
4336 
4337       ASTIdentifierLookupTrait Trait(*this, F);
4338       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4339       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4340       auto &II = PP.getIdentifierTable().getOwn(Key);
4341       II.setOutOfDate(true);
4342 
4343       // Mark this identifier as being from an AST file so that we can track
4344       // whether we need to serialize it.
4345       markIdentifierFromAST(*this, II);
4346 
4347       // Associate the ID with the identifier so that the writer can reuse it.
4348       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4349       SetIdentifierInfo(ID, &II);
4350     }
4351   }
4352 
4353   // Setup the import locations and notify the module manager that we've
4354   // committed to these module files.
4355   for (ImportedModule &M : Loaded) {
4356     ModuleFile &F = *M.Mod;
4357 
4358     ModuleMgr.moduleFileAccepted(&F);
4359 
4360     // Set the import location.
4361     F.DirectImportLoc = ImportLoc;
4362     // FIXME: We assume that locations from PCH / preamble do not need
4363     // any translation.
4364     if (!M.ImportedBy)
4365       F.ImportLoc = M.ImportLoc;
4366     else
4367       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4368   }
4369 
4370   if (!PP.getLangOpts().CPlusPlus ||
4371       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4372        Type != MK_PrebuiltModule)) {
4373     // Mark all of the identifiers in the identifier table as being out of date,
4374     // so that various accessors know to check the loaded modules when the
4375     // identifier is used.
4376     //
4377     // For C++ modules, we don't need information on many identifiers (just
4378     // those that provide macros or are poisoned), so we mark all of
4379     // the interesting ones via PreloadIdentifierOffsets.
4380     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4381                                 IdEnd = PP.getIdentifierTable().end();
4382          Id != IdEnd; ++Id)
4383       Id->second->setOutOfDate(true);
4384   }
4385   // Mark selectors as out of date.
4386   for (auto Sel : SelectorGeneration)
4387     SelectorOutOfDate[Sel.first] = true;
4388 
4389   // Resolve any unresolved module exports.
4390   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4391     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4392     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4393     Module *ResolvedMod = getSubmodule(GlobalID);
4394 
4395     switch (Unresolved.Kind) {
4396     case UnresolvedModuleRef::Conflict:
4397       if (ResolvedMod) {
4398         Module::Conflict Conflict;
4399         Conflict.Other = ResolvedMod;
4400         Conflict.Message = Unresolved.String.str();
4401         Unresolved.Mod->Conflicts.push_back(Conflict);
4402       }
4403       continue;
4404 
4405     case UnresolvedModuleRef::Import:
4406       if (ResolvedMod)
4407         Unresolved.Mod->Imports.insert(ResolvedMod);
4408       continue;
4409 
4410     case UnresolvedModuleRef::Export:
4411       if (ResolvedMod || Unresolved.IsWildcard)
4412         Unresolved.Mod->Exports.push_back(
4413           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4414       continue;
4415     }
4416   }
4417   UnresolvedModuleRefs.clear();
4418 
4419   if (Imported)
4420     Imported->append(ImportedModules.begin(),
4421                      ImportedModules.end());
4422 
4423   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4424   // Might be unnecessary as use declarations are only used to build the
4425   // module itself.
4426 
4427   if (ContextObj)
4428     InitializeContext();
4429 
4430   if (SemaObj)
4431     UpdateSema();
4432 
4433   if (DeserializationListener)
4434     DeserializationListener->ReaderInitialized(this);
4435 
4436   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4437   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4438     // If this AST file is a precompiled preamble, then set the
4439     // preamble file ID of the source manager to the file source file
4440     // from which the preamble was built.
4441     if (Type == MK_Preamble) {
4442       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4443     } else if (Type == MK_MainFile) {
4444       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4445     }
4446   }
4447 
4448   // For any Objective-C class definitions we have already loaded, make sure
4449   // that we load any additional categories.
4450   if (ContextObj) {
4451     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4452       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4453                          ObjCClassesLoaded[I],
4454                          PreviousGeneration);
4455     }
4456   }
4457 
4458   if (PP.getHeaderSearchInfo()
4459           .getHeaderSearchOpts()
4460           .ModulesValidateOncePerBuildSession) {
4461     // Now we are certain that the module and all modules it depends on are
4462     // up to date.  Create or update timestamp files for modules that are
4463     // located in the module cache (not for PCH files that could be anywhere
4464     // in the filesystem).
4465     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4466       ImportedModule &M = Loaded[I];
4467       if (M.Mod->Kind == MK_ImplicitModule) {
4468         updateModuleTimestamp(*M.Mod);
4469       }
4470     }
4471   }
4472 
4473   return Success;
4474 }
4475 
4476 static ASTFileSignature readASTFileSignature(StringRef PCH);
4477 
4478 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4479 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4480   // FIXME checking magic headers is done in other places such as
4481   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4482   // always done the same. Unify it all with a helper.
4483   if (!Stream.canSkipToPos(4))
4484     return llvm::createStringError(std::errc::illegal_byte_sequence,
4485                                    "file too small to contain AST file magic");
4486   for (unsigned C : {'C', 'P', 'C', 'H'})
4487     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4488       if (Res.get() != C)
4489         return llvm::createStringError(
4490             std::errc::illegal_byte_sequence,
4491             "file doesn't start with AST file magic");
4492     } else
4493       return Res.takeError();
4494   return llvm::Error::success();
4495 }
4496 
4497 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4498   switch (Kind) {
4499   case MK_PCH:
4500     return 0; // PCH
4501   case MK_ImplicitModule:
4502   case MK_ExplicitModule:
4503   case MK_PrebuiltModule:
4504     return 1; // module
4505   case MK_MainFile:
4506   case MK_Preamble:
4507     return 2; // main source file
4508   }
4509   llvm_unreachable("unknown module kind");
4510 }
4511 
4512 ASTReader::ASTReadResult
4513 ASTReader::ReadASTCore(StringRef FileName,
4514                        ModuleKind Type,
4515                        SourceLocation ImportLoc,
4516                        ModuleFile *ImportedBy,
4517                        SmallVectorImpl<ImportedModule> &Loaded,
4518                        off_t ExpectedSize, time_t ExpectedModTime,
4519                        ASTFileSignature ExpectedSignature,
4520                        unsigned ClientLoadCapabilities) {
4521   ModuleFile *M;
4522   std::string ErrorStr;
4523   ModuleManager::AddModuleResult AddResult
4524     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4525                           getGeneration(), ExpectedSize, ExpectedModTime,
4526                           ExpectedSignature, readASTFileSignature,
4527                           M, ErrorStr);
4528 
4529   switch (AddResult) {
4530   case ModuleManager::AlreadyLoaded:
4531     Diag(diag::remark_module_import)
4532         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4533         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4534     return Success;
4535 
4536   case ModuleManager::NewlyLoaded:
4537     // Load module file below.
4538     break;
4539 
4540   case ModuleManager::Missing:
4541     // The module file was missing; if the client can handle that, return
4542     // it.
4543     if (ClientLoadCapabilities & ARR_Missing)
4544       return Missing;
4545 
4546     // Otherwise, return an error.
4547     Diag(diag::err_ast_file_not_found)
4548         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4549         << ErrorStr;
4550     return Failure;
4551 
4552   case ModuleManager::OutOfDate:
4553     // We couldn't load the module file because it is out-of-date. If the
4554     // client can handle out-of-date, return it.
4555     if (ClientLoadCapabilities & ARR_OutOfDate)
4556       return OutOfDate;
4557 
4558     // Otherwise, return an error.
4559     Diag(diag::err_ast_file_out_of_date)
4560         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4561         << ErrorStr;
4562     return Failure;
4563   }
4564 
4565   assert(M && "Missing module file");
4566 
4567   bool ShouldFinalizePCM = false;
4568   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4569     auto &MC = getModuleManager().getModuleCache();
4570     if (ShouldFinalizePCM)
4571       MC.finalizePCM(FileName);
4572     else
4573       MC.tryToDropPCM(FileName);
4574   });
4575   ModuleFile &F = *M;
4576   BitstreamCursor &Stream = F.Stream;
4577   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4578   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4579 
4580   // Sniff for the signature.
4581   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4582     Diag(diag::err_ast_file_invalid)
4583         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4584     return Failure;
4585   }
4586 
4587   // This is used for compatibility with older PCH formats.
4588   bool HaveReadControlBlock = false;
4589   while (true) {
4590     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4591     if (!MaybeEntry) {
4592       Error(MaybeEntry.takeError());
4593       return Failure;
4594     }
4595     llvm::BitstreamEntry Entry = MaybeEntry.get();
4596 
4597     switch (Entry.Kind) {
4598     case llvm::BitstreamEntry::Error:
4599     case llvm::BitstreamEntry::Record:
4600     case llvm::BitstreamEntry::EndBlock:
4601       Error("invalid record at top-level of AST file");
4602       return Failure;
4603 
4604     case llvm::BitstreamEntry::SubBlock:
4605       break;
4606     }
4607 
4608     switch (Entry.ID) {
4609     case CONTROL_BLOCK_ID:
4610       HaveReadControlBlock = true;
4611       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4612       case Success:
4613         // Check that we didn't try to load a non-module AST file as a module.
4614         //
4615         // FIXME: Should we also perform the converse check? Loading a module as
4616         // a PCH file sort of works, but it's a bit wonky.
4617         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4618              Type == MK_PrebuiltModule) &&
4619             F.ModuleName.empty()) {
4620           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4621           if (Result != OutOfDate ||
4622               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4623             Diag(diag::err_module_file_not_module) << FileName;
4624           return Result;
4625         }
4626         break;
4627 
4628       case Failure: return Failure;
4629       case Missing: return Missing;
4630       case OutOfDate: return OutOfDate;
4631       case VersionMismatch: return VersionMismatch;
4632       case ConfigurationMismatch: return ConfigurationMismatch;
4633       case HadErrors: return HadErrors;
4634       }
4635       break;
4636 
4637     case AST_BLOCK_ID:
4638       if (!HaveReadControlBlock) {
4639         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4640           Diag(diag::err_pch_version_too_old);
4641         return VersionMismatch;
4642       }
4643 
4644       // Record that we've loaded this module.
4645       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4646       ShouldFinalizePCM = true;
4647       return Success;
4648 
4649     case UNHASHED_CONTROL_BLOCK_ID:
4650       // This block is handled using look-ahead during ReadControlBlock.  We
4651       // shouldn't get here!
4652       Error("malformed block record in AST file");
4653       return Failure;
4654 
4655     default:
4656       if (llvm::Error Err = Stream.SkipBlock()) {
4657         Error(std::move(Err));
4658         return Failure;
4659       }
4660       break;
4661     }
4662   }
4663 
4664   llvm_unreachable("unexpected break; expected return");
4665 }
4666 
4667 ASTReader::ASTReadResult
4668 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4669                                     unsigned ClientLoadCapabilities) {
4670   const HeaderSearchOptions &HSOpts =
4671       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4672   bool AllowCompatibleConfigurationMismatch =
4673       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4674   bool DisableValidation = shouldDisableValidationForFile(F);
4675 
4676   ASTReadResult Result = readUnhashedControlBlockImpl(
4677       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4678       Listener.get(),
4679       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4680 
4681   // If F was directly imported by another module, it's implicitly validated by
4682   // the importing module.
4683   if (DisableValidation || WasImportedBy ||
4684       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4685     return Success;
4686 
4687   if (Result == Failure) {
4688     Error("malformed block record in AST file");
4689     return Failure;
4690   }
4691 
4692   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4693     // If this module has already been finalized in the ModuleCache, we're stuck
4694     // with it; we can only load a single version of each module.
4695     //
4696     // This can happen when a module is imported in two contexts: in one, as a
4697     // user module; in another, as a system module (due to an import from
4698     // another module marked with the [system] flag).  It usually indicates a
4699     // bug in the module map: this module should also be marked with [system].
4700     //
4701     // If -Wno-system-headers (the default), and the first import is as a
4702     // system module, then validation will fail during the as-user import,
4703     // since -Werror flags won't have been validated.  However, it's reasonable
4704     // to treat this consistently as a system module.
4705     //
4706     // If -Wsystem-headers, the PCM on disk was built with
4707     // -Wno-system-headers, and the first import is as a user module, then
4708     // validation will fail during the as-system import since the PCM on disk
4709     // doesn't guarantee that -Werror was respected.  However, the -Werror
4710     // flags were checked during the initial as-user import.
4711     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4712       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4713       return Success;
4714     }
4715   }
4716 
4717   return Result;
4718 }
4719 
4720 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4721     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4722     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4723     bool ValidateDiagnosticOptions) {
4724   // Initialize a stream.
4725   BitstreamCursor Stream(StreamData);
4726 
4727   // Sniff for the signature.
4728   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4729     // FIXME this drops the error on the floor.
4730     consumeError(std::move(Err));
4731     return Failure;
4732   }
4733 
4734   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4735   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4736     return Failure;
4737 
4738   // Read all of the records in the options block.
4739   RecordData Record;
4740   ASTReadResult Result = Success;
4741   while (true) {
4742     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4743     if (!MaybeEntry) {
4744       // FIXME this drops the error on the floor.
4745       consumeError(MaybeEntry.takeError());
4746       return Failure;
4747     }
4748     llvm::BitstreamEntry Entry = MaybeEntry.get();
4749 
4750     switch (Entry.Kind) {
4751     case llvm::BitstreamEntry::Error:
4752     case llvm::BitstreamEntry::SubBlock:
4753       return Failure;
4754 
4755     case llvm::BitstreamEntry::EndBlock:
4756       return Result;
4757 
4758     case llvm::BitstreamEntry::Record:
4759       // The interesting case.
4760       break;
4761     }
4762 
4763     // Read and process a record.
4764     Record.clear();
4765     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4766     if (!MaybeRecordType) {
4767       // FIXME this drops the error.
4768       return Failure;
4769     }
4770     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4771     case SIGNATURE:
4772       if (F)
4773         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4774       break;
4775     case AST_BLOCK_HASH:
4776       if (F)
4777         F->ASTBlockHash =
4778             ASTFileSignature::create(Record.begin(), Record.end());
4779       break;
4780     case DIAGNOSTIC_OPTIONS: {
4781       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4782       if (Listener && ValidateDiagnosticOptions &&
4783           !AllowCompatibleConfigurationMismatch &&
4784           ParseDiagnosticOptions(Record, Complain, *Listener))
4785         Result = OutOfDate; // Don't return early.  Read the signature.
4786       break;
4787     }
4788     case DIAG_PRAGMA_MAPPINGS:
4789       if (!F)
4790         break;
4791       if (F->PragmaDiagMappings.empty())
4792         F->PragmaDiagMappings.swap(Record);
4793       else
4794         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4795                                      Record.begin(), Record.end());
4796       break;
4797     }
4798   }
4799 }
4800 
4801 /// Parse a record and blob containing module file extension metadata.
4802 static bool parseModuleFileExtensionMetadata(
4803               const SmallVectorImpl<uint64_t> &Record,
4804               StringRef Blob,
4805               ModuleFileExtensionMetadata &Metadata) {
4806   if (Record.size() < 4) return true;
4807 
4808   Metadata.MajorVersion = Record[0];
4809   Metadata.MinorVersion = Record[1];
4810 
4811   unsigned BlockNameLen = Record[2];
4812   unsigned UserInfoLen = Record[3];
4813 
4814   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4815 
4816   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4817   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4818                                   Blob.data() + BlockNameLen + UserInfoLen);
4819   return false;
4820 }
4821 
4822 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4823   BitstreamCursor &Stream = F.Stream;
4824 
4825   RecordData Record;
4826   while (true) {
4827     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4828     if (!MaybeEntry) {
4829       Error(MaybeEntry.takeError());
4830       return Failure;
4831     }
4832     llvm::BitstreamEntry Entry = MaybeEntry.get();
4833 
4834     switch (Entry.Kind) {
4835     case llvm::BitstreamEntry::SubBlock:
4836       if (llvm::Error Err = Stream.SkipBlock()) {
4837         Error(std::move(Err));
4838         return Failure;
4839       }
4840       continue;
4841 
4842     case llvm::BitstreamEntry::EndBlock:
4843       return Success;
4844 
4845     case llvm::BitstreamEntry::Error:
4846       return HadErrors;
4847 
4848     case llvm::BitstreamEntry::Record:
4849       break;
4850     }
4851 
4852     Record.clear();
4853     StringRef Blob;
4854     Expected<unsigned> MaybeRecCode =
4855         Stream.readRecord(Entry.ID, Record, &Blob);
4856     if (!MaybeRecCode) {
4857       Error(MaybeRecCode.takeError());
4858       return Failure;
4859     }
4860     switch (MaybeRecCode.get()) {
4861     case EXTENSION_METADATA: {
4862       ModuleFileExtensionMetadata Metadata;
4863       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4864         Error("malformed EXTENSION_METADATA in AST file");
4865         return Failure;
4866       }
4867 
4868       // Find a module file extension with this block name.
4869       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4870       if (Known == ModuleFileExtensions.end()) break;
4871 
4872       // Form a reader.
4873       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4874                                                              F, Stream)) {
4875         F.ExtensionReaders.push_back(std::move(Reader));
4876       }
4877 
4878       break;
4879     }
4880     }
4881   }
4882 
4883   return Success;
4884 }
4885 
4886 void ASTReader::InitializeContext() {
4887   assert(ContextObj && "no context to initialize");
4888   ASTContext &Context = *ContextObj;
4889 
4890   // If there's a listener, notify them that we "read" the translation unit.
4891   if (DeserializationListener)
4892     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4893                                       Context.getTranslationUnitDecl());
4894 
4895   // FIXME: Find a better way to deal with collisions between these
4896   // built-in types. Right now, we just ignore the problem.
4897 
4898   // Load the special types.
4899   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4900     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4901       if (!Context.CFConstantStringTypeDecl)
4902         Context.setCFConstantStringType(GetType(String));
4903     }
4904 
4905     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4906       QualType FileType = GetType(File);
4907       if (FileType.isNull()) {
4908         Error("FILE type is NULL");
4909         return;
4910       }
4911 
4912       if (!Context.FILEDecl) {
4913         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4914           Context.setFILEDecl(Typedef->getDecl());
4915         else {
4916           const TagType *Tag = FileType->getAs<TagType>();
4917           if (!Tag) {
4918             Error("Invalid FILE type in AST file");
4919             return;
4920           }
4921           Context.setFILEDecl(Tag->getDecl());
4922         }
4923       }
4924     }
4925 
4926     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4927       QualType Jmp_bufType = GetType(Jmp_buf);
4928       if (Jmp_bufType.isNull()) {
4929         Error("jmp_buf type is NULL");
4930         return;
4931       }
4932 
4933       if (!Context.jmp_bufDecl) {
4934         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4935           Context.setjmp_bufDecl(Typedef->getDecl());
4936         else {
4937           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4938           if (!Tag) {
4939             Error("Invalid jmp_buf type in AST file");
4940             return;
4941           }
4942           Context.setjmp_bufDecl(Tag->getDecl());
4943         }
4944       }
4945     }
4946 
4947     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4948       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4949       if (Sigjmp_bufType.isNull()) {
4950         Error("sigjmp_buf type is NULL");
4951         return;
4952       }
4953 
4954       if (!Context.sigjmp_bufDecl) {
4955         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4956           Context.setsigjmp_bufDecl(Typedef->getDecl());
4957         else {
4958           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4959           assert(Tag && "Invalid sigjmp_buf type in AST file");
4960           Context.setsigjmp_bufDecl(Tag->getDecl());
4961         }
4962       }
4963     }
4964 
4965     if (unsigned ObjCIdRedef
4966           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4967       if (Context.ObjCIdRedefinitionType.isNull())
4968         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4969     }
4970 
4971     if (unsigned ObjCClassRedef
4972           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4973       if (Context.ObjCClassRedefinitionType.isNull())
4974         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4975     }
4976 
4977     if (unsigned ObjCSelRedef
4978           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4979       if (Context.ObjCSelRedefinitionType.isNull())
4980         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4981     }
4982 
4983     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4984       QualType Ucontext_tType = GetType(Ucontext_t);
4985       if (Ucontext_tType.isNull()) {
4986         Error("ucontext_t type is NULL");
4987         return;
4988       }
4989 
4990       if (!Context.ucontext_tDecl) {
4991         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4992           Context.setucontext_tDecl(Typedef->getDecl());
4993         else {
4994           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4995           assert(Tag && "Invalid ucontext_t type in AST file");
4996           Context.setucontext_tDecl(Tag->getDecl());
4997         }
4998       }
4999     }
5000   }
5001 
5002   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
5003 
5004   // If there were any CUDA special declarations, deserialize them.
5005   if (!CUDASpecialDeclRefs.empty()) {
5006     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
5007     Context.setcudaConfigureCallDecl(
5008                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
5009   }
5010 
5011   // Re-export any modules that were imported by a non-module AST file.
5012   // FIXME: This does not make macro-only imports visible again.
5013   for (auto &Import : ImportedModules) {
5014     if (Module *Imported = getSubmodule(Import.ID)) {
5015       makeModuleVisible(Imported, Module::AllVisible,
5016                         /*ImportLoc=*/Import.ImportLoc);
5017       if (Import.ImportLoc.isValid())
5018         PP.makeModuleVisible(Imported, Import.ImportLoc);
5019       // This updates visibility for Preprocessor only. For Sema, which can be
5020       // nullptr here, we do the same later, in UpdateSema().
5021     }
5022   }
5023 }
5024 
5025 void ASTReader::finalizeForWriting() {
5026   // Nothing to do for now.
5027 }
5028 
5029 /// Reads and return the signature record from \p PCH's control block, or
5030 /// else returns 0.
5031 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5032   BitstreamCursor Stream(PCH);
5033   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5034     // FIXME this drops the error on the floor.
5035     consumeError(std::move(Err));
5036     return ASTFileSignature();
5037   }
5038 
5039   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5040   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5041     return ASTFileSignature();
5042 
5043   // Scan for SIGNATURE inside the diagnostic options block.
5044   ASTReader::RecordData Record;
5045   while (true) {
5046     Expected<llvm::BitstreamEntry> MaybeEntry =
5047         Stream.advanceSkippingSubblocks();
5048     if (!MaybeEntry) {
5049       // FIXME this drops the error on the floor.
5050       consumeError(MaybeEntry.takeError());
5051       return ASTFileSignature();
5052     }
5053     llvm::BitstreamEntry Entry = MaybeEntry.get();
5054 
5055     if (Entry.Kind != llvm::BitstreamEntry::Record)
5056       return ASTFileSignature();
5057 
5058     Record.clear();
5059     StringRef Blob;
5060     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5061     if (!MaybeRecord) {
5062       // FIXME this drops the error on the floor.
5063       consumeError(MaybeRecord.takeError());
5064       return ASTFileSignature();
5065     }
5066     if (SIGNATURE == MaybeRecord.get())
5067       return ASTFileSignature::create(Record.begin(),
5068                                       Record.begin() + ASTFileSignature::size);
5069   }
5070 }
5071 
5072 /// Retrieve the name of the original source file name
5073 /// directly from the AST file, without actually loading the AST
5074 /// file.
5075 std::string ASTReader::getOriginalSourceFile(
5076     const std::string &ASTFileName, FileManager &FileMgr,
5077     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5078   // Open the AST file.
5079   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5080   if (!Buffer) {
5081     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5082         << ASTFileName << Buffer.getError().message();
5083     return std::string();
5084   }
5085 
5086   // Initialize the stream
5087   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5088 
5089   // Sniff for the signature.
5090   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5091     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5092     return std::string();
5093   }
5094 
5095   // Scan for the CONTROL_BLOCK_ID block.
5096   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5097     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5098     return std::string();
5099   }
5100 
5101   // Scan for ORIGINAL_FILE inside the control block.
5102   RecordData Record;
5103   while (true) {
5104     Expected<llvm::BitstreamEntry> MaybeEntry =
5105         Stream.advanceSkippingSubblocks();
5106     if (!MaybeEntry) {
5107       // FIXME this drops errors on the floor.
5108       consumeError(MaybeEntry.takeError());
5109       return std::string();
5110     }
5111     llvm::BitstreamEntry Entry = MaybeEntry.get();
5112 
5113     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5114       return std::string();
5115 
5116     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5117       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5118       return std::string();
5119     }
5120 
5121     Record.clear();
5122     StringRef Blob;
5123     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5124     if (!MaybeRecord) {
5125       // FIXME this drops the errors on the floor.
5126       consumeError(MaybeRecord.takeError());
5127       return std::string();
5128     }
5129     if (ORIGINAL_FILE == MaybeRecord.get())
5130       return Blob.str();
5131   }
5132 }
5133 
5134 namespace {
5135 
5136   class SimplePCHValidator : public ASTReaderListener {
5137     const LangOptions &ExistingLangOpts;
5138     const TargetOptions &ExistingTargetOpts;
5139     const PreprocessorOptions &ExistingPPOpts;
5140     std::string ExistingModuleCachePath;
5141     FileManager &FileMgr;
5142 
5143   public:
5144     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5145                        const TargetOptions &ExistingTargetOpts,
5146                        const PreprocessorOptions &ExistingPPOpts,
5147                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5148         : ExistingLangOpts(ExistingLangOpts),
5149           ExistingTargetOpts(ExistingTargetOpts),
5150           ExistingPPOpts(ExistingPPOpts),
5151           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5152 
5153     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5154                              bool AllowCompatibleDifferences) override {
5155       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5156                                   AllowCompatibleDifferences);
5157     }
5158 
5159     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5160                            bool AllowCompatibleDifferences) override {
5161       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5162                                 AllowCompatibleDifferences);
5163     }
5164 
5165     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5166                                  StringRef SpecificModuleCachePath,
5167                                  bool Complain) override {
5168       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5169                                       ExistingModuleCachePath,
5170                                       nullptr, ExistingLangOpts);
5171     }
5172 
5173     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5174                                  bool Complain,
5175                                  std::string &SuggestedPredefines) override {
5176       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5177                                       SuggestedPredefines, ExistingLangOpts);
5178     }
5179   };
5180 
5181 } // namespace
5182 
5183 bool ASTReader::readASTFileControlBlock(
5184     StringRef Filename, FileManager &FileMgr,
5185     const PCHContainerReader &PCHContainerRdr,
5186     bool FindModuleFileExtensions,
5187     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5188   // Open the AST file.
5189   // FIXME: This allows use of the VFS; we do not allow use of the
5190   // VFS when actually loading a module.
5191   auto Buffer = FileMgr.getBufferForFile(Filename);
5192   if (!Buffer) {
5193     return true;
5194   }
5195 
5196   // Initialize the stream
5197   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5198   BitstreamCursor Stream(Bytes);
5199 
5200   // Sniff for the signature.
5201   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5202     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5203     return true;
5204   }
5205 
5206   // Scan for the CONTROL_BLOCK_ID block.
5207   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5208     return true;
5209 
5210   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5211   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5212   bool NeedsImports = Listener.needsImportVisitation();
5213   BitstreamCursor InputFilesCursor;
5214 
5215   RecordData Record;
5216   std::string ModuleDir;
5217   bool DoneWithControlBlock = false;
5218   while (!DoneWithControlBlock) {
5219     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5220     if (!MaybeEntry) {
5221       // FIXME this drops the error on the floor.
5222       consumeError(MaybeEntry.takeError());
5223       return true;
5224     }
5225     llvm::BitstreamEntry Entry = MaybeEntry.get();
5226 
5227     switch (Entry.Kind) {
5228     case llvm::BitstreamEntry::SubBlock: {
5229       switch (Entry.ID) {
5230       case OPTIONS_BLOCK_ID: {
5231         std::string IgnoredSuggestedPredefines;
5232         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5233                              /*AllowCompatibleConfigurationMismatch*/ false,
5234                              Listener, IgnoredSuggestedPredefines) != Success)
5235           return true;
5236         break;
5237       }
5238 
5239       case INPUT_FILES_BLOCK_ID:
5240         InputFilesCursor = Stream;
5241         if (llvm::Error Err = Stream.SkipBlock()) {
5242           // FIXME this drops the error on the floor.
5243           consumeError(std::move(Err));
5244           return true;
5245         }
5246         if (NeedsInputFiles &&
5247             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5248           return true;
5249         break;
5250 
5251       default:
5252         if (llvm::Error Err = Stream.SkipBlock()) {
5253           // FIXME this drops the error on the floor.
5254           consumeError(std::move(Err));
5255           return true;
5256         }
5257         break;
5258       }
5259 
5260       continue;
5261     }
5262 
5263     case llvm::BitstreamEntry::EndBlock:
5264       DoneWithControlBlock = true;
5265       break;
5266 
5267     case llvm::BitstreamEntry::Error:
5268       return true;
5269 
5270     case llvm::BitstreamEntry::Record:
5271       break;
5272     }
5273 
5274     if (DoneWithControlBlock) break;
5275 
5276     Record.clear();
5277     StringRef Blob;
5278     Expected<unsigned> MaybeRecCode =
5279         Stream.readRecord(Entry.ID, Record, &Blob);
5280     if (!MaybeRecCode) {
5281       // FIXME this drops the error.
5282       return Failure;
5283     }
5284     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5285     case METADATA:
5286       if (Record[0] != VERSION_MAJOR)
5287         return true;
5288       if (Listener.ReadFullVersionInformation(Blob))
5289         return true;
5290       break;
5291     case MODULE_NAME:
5292       Listener.ReadModuleName(Blob);
5293       break;
5294     case MODULE_DIRECTORY:
5295       ModuleDir = std::string(Blob);
5296       break;
5297     case MODULE_MAP_FILE: {
5298       unsigned Idx = 0;
5299       auto Path = ReadString(Record, Idx);
5300       ResolveImportedPath(Path, ModuleDir);
5301       Listener.ReadModuleMapFile(Path);
5302       break;
5303     }
5304     case INPUT_FILE_OFFSETS: {
5305       if (!NeedsInputFiles)
5306         break;
5307 
5308       unsigned NumInputFiles = Record[0];
5309       unsigned NumUserFiles = Record[1];
5310       const llvm::support::unaligned_uint64_t *InputFileOffs =
5311           (const llvm::support::unaligned_uint64_t *)Blob.data();
5312       for (unsigned I = 0; I != NumInputFiles; ++I) {
5313         // Go find this input file.
5314         bool isSystemFile = I >= NumUserFiles;
5315 
5316         if (isSystemFile && !NeedsSystemInputFiles)
5317           break; // the rest are system input files
5318 
5319         BitstreamCursor &Cursor = InputFilesCursor;
5320         SavedStreamPosition SavedPosition(Cursor);
5321         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5322           // FIXME this drops errors on the floor.
5323           consumeError(std::move(Err));
5324         }
5325 
5326         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5327         if (!MaybeCode) {
5328           // FIXME this drops errors on the floor.
5329           consumeError(MaybeCode.takeError());
5330         }
5331         unsigned Code = MaybeCode.get();
5332 
5333         RecordData Record;
5334         StringRef Blob;
5335         bool shouldContinue = false;
5336         Expected<unsigned> MaybeRecordType =
5337             Cursor.readRecord(Code, Record, &Blob);
5338         if (!MaybeRecordType) {
5339           // FIXME this drops errors on the floor.
5340           consumeError(MaybeRecordType.takeError());
5341         }
5342         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5343         case INPUT_FILE_HASH:
5344           break;
5345         case INPUT_FILE:
5346           bool Overridden = static_cast<bool>(Record[3]);
5347           std::string Filename = std::string(Blob);
5348           ResolveImportedPath(Filename, ModuleDir);
5349           shouldContinue = Listener.visitInputFile(
5350               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5351           break;
5352         }
5353         if (!shouldContinue)
5354           break;
5355       }
5356       break;
5357     }
5358 
5359     case IMPORTS: {
5360       if (!NeedsImports)
5361         break;
5362 
5363       unsigned Idx = 0, N = Record.size();
5364       while (Idx < N) {
5365         // Read information about the AST file.
5366         Idx +=
5367             1 + 1 + 1 + 1 +
5368             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5369         std::string ModuleName = ReadString(Record, Idx);
5370         std::string Filename = ReadString(Record, Idx);
5371         ResolveImportedPath(Filename, ModuleDir);
5372         Listener.visitImport(ModuleName, Filename);
5373       }
5374       break;
5375     }
5376 
5377     default:
5378       // No other validation to perform.
5379       break;
5380     }
5381   }
5382 
5383   // Look for module file extension blocks, if requested.
5384   if (FindModuleFileExtensions) {
5385     BitstreamCursor SavedStream = Stream;
5386     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5387       bool DoneWithExtensionBlock = false;
5388       while (!DoneWithExtensionBlock) {
5389         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5390         if (!MaybeEntry) {
5391           // FIXME this drops the error.
5392           return true;
5393         }
5394         llvm::BitstreamEntry Entry = MaybeEntry.get();
5395 
5396         switch (Entry.Kind) {
5397         case llvm::BitstreamEntry::SubBlock:
5398           if (llvm::Error Err = Stream.SkipBlock()) {
5399             // FIXME this drops the error on the floor.
5400             consumeError(std::move(Err));
5401             return true;
5402           }
5403           continue;
5404 
5405         case llvm::BitstreamEntry::EndBlock:
5406           DoneWithExtensionBlock = true;
5407           continue;
5408 
5409         case llvm::BitstreamEntry::Error:
5410           return true;
5411 
5412         case llvm::BitstreamEntry::Record:
5413           break;
5414         }
5415 
5416        Record.clear();
5417        StringRef Blob;
5418        Expected<unsigned> MaybeRecCode =
5419            Stream.readRecord(Entry.ID, Record, &Blob);
5420        if (!MaybeRecCode) {
5421          // FIXME this drops the error.
5422          return true;
5423        }
5424        switch (MaybeRecCode.get()) {
5425        case EXTENSION_METADATA: {
5426          ModuleFileExtensionMetadata Metadata;
5427          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5428            return true;
5429 
5430          Listener.readModuleFileExtension(Metadata);
5431          break;
5432        }
5433        }
5434       }
5435     }
5436     Stream = SavedStream;
5437   }
5438 
5439   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5440   if (readUnhashedControlBlockImpl(
5441           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5442           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5443           ValidateDiagnosticOptions) != Success)
5444     return true;
5445 
5446   return false;
5447 }
5448 
5449 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5450                                     const PCHContainerReader &PCHContainerRdr,
5451                                     const LangOptions &LangOpts,
5452                                     const TargetOptions &TargetOpts,
5453                                     const PreprocessorOptions &PPOpts,
5454                                     StringRef ExistingModuleCachePath) {
5455   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5456                                ExistingModuleCachePath, FileMgr);
5457   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5458                                   /*FindModuleFileExtensions=*/false,
5459                                   validator,
5460                                   /*ValidateDiagnosticOptions=*/true);
5461 }
5462 
5463 ASTReader::ASTReadResult
5464 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5465   // Enter the submodule block.
5466   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5467     Error(std::move(Err));
5468     return Failure;
5469   }
5470 
5471   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5472   bool First = true;
5473   Module *CurrentModule = nullptr;
5474   RecordData Record;
5475   while (true) {
5476     Expected<llvm::BitstreamEntry> MaybeEntry =
5477         F.Stream.advanceSkippingSubblocks();
5478     if (!MaybeEntry) {
5479       Error(MaybeEntry.takeError());
5480       return Failure;
5481     }
5482     llvm::BitstreamEntry Entry = MaybeEntry.get();
5483 
5484     switch (Entry.Kind) {
5485     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5486     case llvm::BitstreamEntry::Error:
5487       Error("malformed block record in AST file");
5488       return Failure;
5489     case llvm::BitstreamEntry::EndBlock:
5490       return Success;
5491     case llvm::BitstreamEntry::Record:
5492       // The interesting case.
5493       break;
5494     }
5495 
5496     // Read a record.
5497     StringRef Blob;
5498     Record.clear();
5499     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5500     if (!MaybeKind) {
5501       Error(MaybeKind.takeError());
5502       return Failure;
5503     }
5504     unsigned Kind = MaybeKind.get();
5505 
5506     if ((Kind == SUBMODULE_METADATA) != First) {
5507       Error("submodule metadata record should be at beginning of block");
5508       return Failure;
5509     }
5510     First = false;
5511 
5512     // Submodule information is only valid if we have a current module.
5513     // FIXME: Should we error on these cases?
5514     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5515         Kind != SUBMODULE_DEFINITION)
5516       continue;
5517 
5518     switch (Kind) {
5519     default:  // Default behavior: ignore.
5520       break;
5521 
5522     case SUBMODULE_DEFINITION: {
5523       if (Record.size() < 12) {
5524         Error("malformed module definition");
5525         return Failure;
5526       }
5527 
5528       StringRef Name = Blob;
5529       unsigned Idx = 0;
5530       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5531       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5532       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5533       bool IsFramework = Record[Idx++];
5534       bool IsExplicit = Record[Idx++];
5535       bool IsSystem = Record[Idx++];
5536       bool IsExternC = Record[Idx++];
5537       bool InferSubmodules = Record[Idx++];
5538       bool InferExplicitSubmodules = Record[Idx++];
5539       bool InferExportWildcard = Record[Idx++];
5540       bool ConfigMacrosExhaustive = Record[Idx++];
5541       bool ModuleMapIsPrivate = Record[Idx++];
5542 
5543       Module *ParentModule = nullptr;
5544       if (Parent)
5545         ParentModule = getSubmodule(Parent);
5546 
5547       // Retrieve this (sub)module from the module map, creating it if
5548       // necessary.
5549       CurrentModule =
5550           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5551               .first;
5552 
5553       // FIXME: set the definition loc for CurrentModule, or call
5554       // ModMap.setInferredModuleAllowedBy()
5555 
5556       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5557       if (GlobalIndex >= SubmodulesLoaded.size() ||
5558           SubmodulesLoaded[GlobalIndex]) {
5559         Error("too many submodules");
5560         return Failure;
5561       }
5562 
5563       if (!ParentModule) {
5564         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5565           // Don't emit module relocation error if we have -fno-validate-pch
5566           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5567                     DisableValidationForModuleKind::Module) &&
5568               CurFile != F.File) {
5569             Error(diag::err_module_file_conflict,
5570                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5571                   F.File->getName());
5572             return Failure;
5573           }
5574         }
5575 
5576         F.DidReadTopLevelSubmodule = true;
5577         CurrentModule->setASTFile(F.File);
5578         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5579       }
5580 
5581       CurrentModule->Kind = Kind;
5582       CurrentModule->Signature = F.Signature;
5583       CurrentModule->IsFromModuleFile = true;
5584       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5585       CurrentModule->IsExternC = IsExternC;
5586       CurrentModule->InferSubmodules = InferSubmodules;
5587       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5588       CurrentModule->InferExportWildcard = InferExportWildcard;
5589       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5590       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5591       if (DeserializationListener)
5592         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5593 
5594       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5595 
5596       // Clear out data that will be replaced by what is in the module file.
5597       CurrentModule->LinkLibraries.clear();
5598       CurrentModule->ConfigMacros.clear();
5599       CurrentModule->UnresolvedConflicts.clear();
5600       CurrentModule->Conflicts.clear();
5601 
5602       // The module is available unless it's missing a requirement; relevant
5603       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5604       // Missing headers that were present when the module was built do not
5605       // make it unavailable -- if we got this far, this must be an explicitly
5606       // imported module file.
5607       CurrentModule->Requirements.clear();
5608       CurrentModule->MissingHeaders.clear();
5609       CurrentModule->IsUnimportable =
5610           ParentModule && ParentModule->IsUnimportable;
5611       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5612       break;
5613     }
5614 
5615     case SUBMODULE_UMBRELLA_HEADER: {
5616       std::string Filename = std::string(Blob);
5617       ResolveImportedPath(F, Filename);
5618       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5619         if (!CurrentModule->getUmbrellaHeader())
5620           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5621         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5622           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5623             Error("mismatched umbrella headers in submodule");
5624           return OutOfDate;
5625         }
5626       }
5627       break;
5628     }
5629 
5630     case SUBMODULE_HEADER:
5631     case SUBMODULE_EXCLUDED_HEADER:
5632     case SUBMODULE_PRIVATE_HEADER:
5633       // We lazily associate headers with their modules via the HeaderInfo table.
5634       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5635       // of complete filenames or remove it entirely.
5636       break;
5637 
5638     case SUBMODULE_TEXTUAL_HEADER:
5639     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5640       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5641       // them here.
5642       break;
5643 
5644     case SUBMODULE_TOPHEADER:
5645       CurrentModule->addTopHeaderFilename(Blob);
5646       break;
5647 
5648     case SUBMODULE_UMBRELLA_DIR: {
5649       std::string Dirname = std::string(Blob);
5650       ResolveImportedPath(F, Dirname);
5651       if (auto Umbrella = PP.getFileManager().getDirectory(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   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7654   for (DeclID ID : It->second.Table.find(Name)) {
7655     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7656     if (ND->getDeclName() == Name && Found.insert(ND).second)
7657       Decls.push_back(ND);
7658   }
7659 
7660   ++NumVisibleDeclContextsRead;
7661   SetExternalVisibleDeclsForName(DC, Name, Decls);
7662   return !Decls.empty();
7663 }
7664 
7665 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7666   if (!DC->hasExternalVisibleStorage())
7667     return;
7668 
7669   auto It = Lookups.find(DC);
7670   assert(It != Lookups.end() &&
7671          "have external visible storage but no lookup tables");
7672 
7673   DeclsMap Decls;
7674 
7675   for (DeclID ID : It->second.Table.findAll()) {
7676     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7677     Decls[ND->getDeclName()].push_back(ND);
7678   }
7679 
7680   ++NumVisibleDeclContextsRead;
7681 
7682   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7683     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7684   }
7685   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7686 }
7687 
7688 const serialization::reader::DeclContextLookupTable *
7689 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7690   auto I = Lookups.find(Primary);
7691   return I == Lookups.end() ? nullptr : &I->second;
7692 }
7693 
7694 /// Under non-PCH compilation the consumer receives the objc methods
7695 /// before receiving the implementation, and codegen depends on this.
7696 /// We simulate this by deserializing and passing to consumer the methods of the
7697 /// implementation before passing the deserialized implementation decl.
7698 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7699                                        ASTConsumer *Consumer) {
7700   assert(ImplD && Consumer);
7701 
7702   for (auto *I : ImplD->methods())
7703     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7704 
7705   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7706 }
7707 
7708 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7709   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7710     PassObjCImplDeclToConsumer(ImplD, Consumer);
7711   else
7712     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7713 }
7714 
7715 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7716   this->Consumer = Consumer;
7717 
7718   if (Consumer)
7719     PassInterestingDeclsToConsumer();
7720 
7721   if (DeserializationListener)
7722     DeserializationListener->ReaderInitialized(this);
7723 }
7724 
7725 void ASTReader::PrintStats() {
7726   std::fprintf(stderr, "*** AST File Statistics:\n");
7727 
7728   unsigned NumTypesLoaded
7729     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7730                                       QualType());
7731   unsigned NumDeclsLoaded
7732     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7733                                       (Decl *)nullptr);
7734   unsigned NumIdentifiersLoaded
7735     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7736                                             IdentifiersLoaded.end(),
7737                                             (IdentifierInfo *)nullptr);
7738   unsigned NumMacrosLoaded
7739     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7740                                        MacrosLoaded.end(),
7741                                        (MacroInfo *)nullptr);
7742   unsigned NumSelectorsLoaded
7743     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7744                                           SelectorsLoaded.end(),
7745                                           Selector());
7746 
7747   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7748     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7749                  NumSLocEntriesRead, TotalNumSLocEntries,
7750                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7751   if (!TypesLoaded.empty())
7752     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7753                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7754                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7755   if (!DeclsLoaded.empty())
7756     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7757                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7758                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7759   if (!IdentifiersLoaded.empty())
7760     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7761                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7762                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7763   if (!MacrosLoaded.empty())
7764     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7765                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7766                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7767   if (!SelectorsLoaded.empty())
7768     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7769                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7770                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7771   if (TotalNumStatements)
7772     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7773                  NumStatementsRead, TotalNumStatements,
7774                  ((float)NumStatementsRead/TotalNumStatements * 100));
7775   if (TotalNumMacros)
7776     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7777                  NumMacrosRead, TotalNumMacros,
7778                  ((float)NumMacrosRead/TotalNumMacros * 100));
7779   if (TotalLexicalDeclContexts)
7780     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7781                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7782                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7783                   * 100));
7784   if (TotalVisibleDeclContexts)
7785     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7786                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7787                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7788                   * 100));
7789   if (TotalNumMethodPoolEntries)
7790     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7791                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7792                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7793                   * 100));
7794   if (NumMethodPoolLookups)
7795     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7796                  NumMethodPoolHits, NumMethodPoolLookups,
7797                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7798   if (NumMethodPoolTableLookups)
7799     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7800                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7801                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7802                   * 100.0));
7803   if (NumIdentifierLookupHits)
7804     std::fprintf(stderr,
7805                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7806                  NumIdentifierLookupHits, NumIdentifierLookups,
7807                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7808 
7809   if (GlobalIndex) {
7810     std::fprintf(stderr, "\n");
7811     GlobalIndex->printStats();
7812   }
7813 
7814   std::fprintf(stderr, "\n");
7815   dump();
7816   std::fprintf(stderr, "\n");
7817 }
7818 
7819 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7820 LLVM_DUMP_METHOD static void
7821 dumpModuleIDMap(StringRef Name,
7822                 const ContinuousRangeMap<Key, ModuleFile *,
7823                                          InitialCapacity> &Map) {
7824   if (Map.begin() == Map.end())
7825     return;
7826 
7827   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7828 
7829   llvm::errs() << Name << ":\n";
7830   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7831        I != IEnd; ++I) {
7832     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7833       << "\n";
7834   }
7835 }
7836 
7837 LLVM_DUMP_METHOD void ASTReader::dump() {
7838   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7839   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7840   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7841   dumpModuleIDMap("Global type map", GlobalTypeMap);
7842   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7843   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7844   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7845   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7846   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7847   dumpModuleIDMap("Global preprocessed entity map",
7848                   GlobalPreprocessedEntityMap);
7849 
7850   llvm::errs() << "\n*** PCH/Modules Loaded:";
7851   for (ModuleFile &M : ModuleMgr)
7852     M.dump();
7853 }
7854 
7855 /// Return the amount of memory used by memory buffers, breaking down
7856 /// by heap-backed versus mmap'ed memory.
7857 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7858   for (ModuleFile &I : ModuleMgr) {
7859     if (llvm::MemoryBuffer *buf = I.Buffer) {
7860       size_t bytes = buf->getBufferSize();
7861       switch (buf->getBufferKind()) {
7862         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7863           sizes.malloc_bytes += bytes;
7864           break;
7865         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7866           sizes.mmap_bytes += bytes;
7867           break;
7868       }
7869     }
7870   }
7871 }
7872 
7873 void ASTReader::InitializeSema(Sema &S) {
7874   SemaObj = &S;
7875   S.addExternalSource(this);
7876 
7877   // Makes sure any declarations that were deserialized "too early"
7878   // still get added to the identifier's declaration chains.
7879   for (uint64_t ID : PreloadedDeclIDs) {
7880     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7881     pushExternalDeclIntoScope(D, D->getDeclName());
7882   }
7883   PreloadedDeclIDs.clear();
7884 
7885   // FIXME: What happens if these are changed by a module import?
7886   if (!FPPragmaOptions.empty()) {
7887     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7888     FPOptionsOverride NewOverrides =
7889         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7890     SemaObj->CurFPFeatures =
7891         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7892   }
7893 
7894   SemaObj->OpenCLFeatures = OpenCLExtensions;
7895   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7896   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7897 
7898   UpdateSema();
7899 }
7900 
7901 void ASTReader::UpdateSema() {
7902   assert(SemaObj && "no Sema to update");
7903 
7904   // Load the offsets of the declarations that Sema references.
7905   // They will be lazily deserialized when needed.
7906   if (!SemaDeclRefs.empty()) {
7907     assert(SemaDeclRefs.size() % 3 == 0);
7908     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7909       if (!SemaObj->StdNamespace)
7910         SemaObj->StdNamespace = SemaDeclRefs[I];
7911       if (!SemaObj->StdBadAlloc)
7912         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7913       if (!SemaObj->StdAlignValT)
7914         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7915     }
7916     SemaDeclRefs.clear();
7917   }
7918 
7919   // Update the state of pragmas. Use the same API as if we had encountered the
7920   // pragma in the source.
7921   if(OptimizeOffPragmaLocation.isValid())
7922     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7923   if (PragmaMSStructState != -1)
7924     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7925   if (PointersToMembersPragmaLocation.isValid()) {
7926     SemaObj->ActOnPragmaMSPointersToMembers(
7927         (LangOptions::PragmaMSPointersToMembersKind)
7928             PragmaMSPointersToMembersState,
7929         PointersToMembersPragmaLocation);
7930   }
7931   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7932 
7933   if (PragmaAlignPackCurrentValue) {
7934     // The bottom of the stack might have a default value. It must be adjusted
7935     // to the current value to ensure that the packing state is preserved after
7936     // popping entries that were included/imported from a PCH/module.
7937     bool DropFirst = false;
7938     if (!PragmaAlignPackStack.empty() &&
7939         PragmaAlignPackStack.front().Location.isInvalid()) {
7940       assert(PragmaAlignPackStack.front().Value ==
7941                  SemaObj->AlignPackStack.DefaultValue &&
7942              "Expected a default alignment value");
7943       SemaObj->AlignPackStack.Stack.emplace_back(
7944           PragmaAlignPackStack.front().SlotLabel,
7945           SemaObj->AlignPackStack.CurrentValue,
7946           SemaObj->AlignPackStack.CurrentPragmaLocation,
7947           PragmaAlignPackStack.front().PushLocation);
7948       DropFirst = true;
7949     }
7950     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7951                                  .drop_front(DropFirst ? 1 : 0)) {
7952       SemaObj->AlignPackStack.Stack.emplace_back(
7953           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7954     }
7955     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7956       assert(*PragmaAlignPackCurrentValue ==
7957                  SemaObj->AlignPackStack.DefaultValue &&
7958              "Expected a default align and pack value");
7959       // Keep the current values.
7960     } else {
7961       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7962       SemaObj->AlignPackStack.CurrentPragmaLocation =
7963           PragmaAlignPackCurrentLocation;
7964     }
7965   }
7966   if (FpPragmaCurrentValue) {
7967     // The bottom of the stack might have a default value. It must be adjusted
7968     // to the current value to ensure that fp-pragma state is preserved after
7969     // popping entries that were included/imported from a PCH/module.
7970     bool DropFirst = false;
7971     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7972       assert(FpPragmaStack.front().Value ==
7973                  SemaObj->FpPragmaStack.DefaultValue &&
7974              "Expected a default pragma float_control value");
7975       SemaObj->FpPragmaStack.Stack.emplace_back(
7976           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7977           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7978           FpPragmaStack.front().PushLocation);
7979       DropFirst = true;
7980     }
7981     for (const auto &Entry :
7982          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7983       SemaObj->FpPragmaStack.Stack.emplace_back(
7984           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7985     if (FpPragmaCurrentLocation.isInvalid()) {
7986       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7987              "Expected a default pragma float_control value");
7988       // Keep the current values.
7989     } else {
7990       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7991       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7992     }
7993   }
7994 
7995   // For non-modular AST files, restore visiblity of modules.
7996   for (auto &Import : ImportedModules) {
7997     if (Import.ImportLoc.isInvalid())
7998       continue;
7999     if (Module *Imported = getSubmodule(Import.ID)) {
8000       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
8001     }
8002   }
8003 }
8004 
8005 IdentifierInfo *ASTReader::get(StringRef Name) {
8006   // Note that we are loading an identifier.
8007   Deserializing AnIdentifier(this);
8008 
8009   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
8010                                   NumIdentifierLookups,
8011                                   NumIdentifierLookupHits);
8012 
8013   // We don't need to do identifier table lookups in C++ modules (we preload
8014   // all interesting declarations, and don't need to use the scope for name
8015   // lookups). Perform the lookup in PCH files, though, since we don't build
8016   // a complete initial identifier table if we're carrying on from a PCH.
8017   if (PP.getLangOpts().CPlusPlus) {
8018     for (auto F : ModuleMgr.pch_modules())
8019       if (Visitor(*F))
8020         break;
8021   } else {
8022     // If there is a global index, look there first to determine which modules
8023     // provably do not have any results for this identifier.
8024     GlobalModuleIndex::HitSet Hits;
8025     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8026     if (!loadGlobalIndex()) {
8027       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8028         HitsPtr = &Hits;
8029       }
8030     }
8031 
8032     ModuleMgr.visit(Visitor, HitsPtr);
8033   }
8034 
8035   IdentifierInfo *II = Visitor.getIdentifierInfo();
8036   markIdentifierUpToDate(II);
8037   return II;
8038 }
8039 
8040 namespace clang {
8041 
8042   /// An identifier-lookup iterator that enumerates all of the
8043   /// identifiers stored within a set of AST files.
8044   class ASTIdentifierIterator : public IdentifierIterator {
8045     /// The AST reader whose identifiers are being enumerated.
8046     const ASTReader &Reader;
8047 
8048     /// The current index into the chain of AST files stored in
8049     /// the AST reader.
8050     unsigned Index;
8051 
8052     /// The current position within the identifier lookup table
8053     /// of the current AST file.
8054     ASTIdentifierLookupTable::key_iterator Current;
8055 
8056     /// The end position within the identifier lookup table of
8057     /// the current AST file.
8058     ASTIdentifierLookupTable::key_iterator End;
8059 
8060     /// Whether to skip any modules in the ASTReader.
8061     bool SkipModules;
8062 
8063   public:
8064     explicit ASTIdentifierIterator(const ASTReader &Reader,
8065                                    bool SkipModules = false);
8066 
8067     StringRef Next() override;
8068   };
8069 
8070 } // namespace clang
8071 
8072 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8073                                              bool SkipModules)
8074     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8075 }
8076 
8077 StringRef ASTIdentifierIterator::Next() {
8078   while (Current == End) {
8079     // If we have exhausted all of our AST files, we're done.
8080     if (Index == 0)
8081       return StringRef();
8082 
8083     --Index;
8084     ModuleFile &F = Reader.ModuleMgr[Index];
8085     if (SkipModules && F.isModule())
8086       continue;
8087 
8088     ASTIdentifierLookupTable *IdTable =
8089         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8090     Current = IdTable->key_begin();
8091     End = IdTable->key_end();
8092   }
8093 
8094   // We have any identifiers remaining in the current AST file; return
8095   // the next one.
8096   StringRef Result = *Current;
8097   ++Current;
8098   return Result;
8099 }
8100 
8101 namespace {
8102 
8103 /// A utility for appending two IdentifierIterators.
8104 class ChainedIdentifierIterator : public IdentifierIterator {
8105   std::unique_ptr<IdentifierIterator> Current;
8106   std::unique_ptr<IdentifierIterator> Queued;
8107 
8108 public:
8109   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8110                             std::unique_ptr<IdentifierIterator> Second)
8111       : Current(std::move(First)), Queued(std::move(Second)) {}
8112 
8113   StringRef Next() override {
8114     if (!Current)
8115       return StringRef();
8116 
8117     StringRef result = Current->Next();
8118     if (!result.empty())
8119       return result;
8120 
8121     // Try the queued iterator, which may itself be empty.
8122     Current.reset();
8123     std::swap(Current, Queued);
8124     return Next();
8125   }
8126 };
8127 
8128 } // namespace
8129 
8130 IdentifierIterator *ASTReader::getIdentifiers() {
8131   if (!loadGlobalIndex()) {
8132     std::unique_ptr<IdentifierIterator> ReaderIter(
8133         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8134     std::unique_ptr<IdentifierIterator> ModulesIter(
8135         GlobalIndex->createIdentifierIterator());
8136     return new ChainedIdentifierIterator(std::move(ReaderIter),
8137                                          std::move(ModulesIter));
8138   }
8139 
8140   return new ASTIdentifierIterator(*this);
8141 }
8142 
8143 namespace clang {
8144 namespace serialization {
8145 
8146   class ReadMethodPoolVisitor {
8147     ASTReader &Reader;
8148     Selector Sel;
8149     unsigned PriorGeneration;
8150     unsigned InstanceBits = 0;
8151     unsigned FactoryBits = 0;
8152     bool InstanceHasMoreThanOneDecl = false;
8153     bool FactoryHasMoreThanOneDecl = false;
8154     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8155     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8156 
8157   public:
8158     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8159                           unsigned PriorGeneration)
8160         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8161 
8162     bool operator()(ModuleFile &M) {
8163       if (!M.SelectorLookupTable)
8164         return false;
8165 
8166       // If we've already searched this module file, skip it now.
8167       if (M.Generation <= PriorGeneration)
8168         return true;
8169 
8170       ++Reader.NumMethodPoolTableLookups;
8171       ASTSelectorLookupTable *PoolTable
8172         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8173       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8174       if (Pos == PoolTable->end())
8175         return false;
8176 
8177       ++Reader.NumMethodPoolTableHits;
8178       ++Reader.NumSelectorsRead;
8179       // FIXME: Not quite happy with the statistics here. We probably should
8180       // disable this tracking when called via LoadSelector.
8181       // Also, should entries without methods count as misses?
8182       ++Reader.NumMethodPoolEntriesRead;
8183       ASTSelectorLookupTrait::data_type Data = *Pos;
8184       if (Reader.DeserializationListener)
8185         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8186 
8187       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8188       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8189       InstanceBits = Data.InstanceBits;
8190       FactoryBits = Data.FactoryBits;
8191       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8192       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8193       return true;
8194     }
8195 
8196     /// Retrieve the instance methods found by this visitor.
8197     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8198       return InstanceMethods;
8199     }
8200 
8201     /// Retrieve the instance methods found by this visitor.
8202     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8203       return FactoryMethods;
8204     }
8205 
8206     unsigned getInstanceBits() const { return InstanceBits; }
8207     unsigned getFactoryBits() const { return FactoryBits; }
8208 
8209     bool instanceHasMoreThanOneDecl() const {
8210       return InstanceHasMoreThanOneDecl;
8211     }
8212 
8213     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8214   };
8215 
8216 } // namespace serialization
8217 } // namespace clang
8218 
8219 /// Add the given set of methods to the method list.
8220 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8221                              ObjCMethodList &List) {
8222   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8223     S.addMethodToGlobalList(&List, Methods[I]);
8224   }
8225 }
8226 
8227 void ASTReader::ReadMethodPool(Selector Sel) {
8228   // Get the selector generation and update it to the current generation.
8229   unsigned &Generation = SelectorGeneration[Sel];
8230   unsigned PriorGeneration = Generation;
8231   Generation = getGeneration();
8232   SelectorOutOfDate[Sel] = false;
8233 
8234   // Search for methods defined with this selector.
8235   ++NumMethodPoolLookups;
8236   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8237   ModuleMgr.visit(Visitor);
8238 
8239   if (Visitor.getInstanceMethods().empty() &&
8240       Visitor.getFactoryMethods().empty())
8241     return;
8242 
8243   ++NumMethodPoolHits;
8244 
8245   if (!getSema())
8246     return;
8247 
8248   Sema &S = *getSema();
8249   Sema::GlobalMethodPool::iterator Pos
8250     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8251 
8252   Pos->second.first.setBits(Visitor.getInstanceBits());
8253   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8254   Pos->second.second.setBits(Visitor.getFactoryBits());
8255   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8256 
8257   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8258   // when building a module we keep every method individually and may need to
8259   // update hasMoreThanOneDecl as we add the methods.
8260   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8261   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8262 }
8263 
8264 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8265   if (SelectorOutOfDate[Sel])
8266     ReadMethodPool(Sel);
8267 }
8268 
8269 void ASTReader::ReadKnownNamespaces(
8270                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8271   Namespaces.clear();
8272 
8273   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8274     if (NamespaceDecl *Namespace
8275                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8276       Namespaces.push_back(Namespace);
8277   }
8278 }
8279 
8280 void ASTReader::ReadUndefinedButUsed(
8281     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8282   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8283     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8284     SourceLocation Loc =
8285         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8286     Undefined.insert(std::make_pair(D, Loc));
8287   }
8288 }
8289 
8290 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8291     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8292                                                      Exprs) {
8293   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8294     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8295     uint64_t Count = DelayedDeleteExprs[Idx++];
8296     for (uint64_t C = 0; C < Count; ++C) {
8297       SourceLocation DeleteLoc =
8298           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8299       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8300       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8301     }
8302   }
8303 }
8304 
8305 void ASTReader::ReadTentativeDefinitions(
8306                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8307   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8308     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8309     if (Var)
8310       TentativeDefs.push_back(Var);
8311   }
8312   TentativeDefinitions.clear();
8313 }
8314 
8315 void ASTReader::ReadUnusedFileScopedDecls(
8316                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8317   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8318     DeclaratorDecl *D
8319       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8320     if (D)
8321       Decls.push_back(D);
8322   }
8323   UnusedFileScopedDecls.clear();
8324 }
8325 
8326 void ASTReader::ReadDelegatingConstructors(
8327                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8328   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8329     CXXConstructorDecl *D
8330       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8331     if (D)
8332       Decls.push_back(D);
8333   }
8334   DelegatingCtorDecls.clear();
8335 }
8336 
8337 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8338   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8339     TypedefNameDecl *D
8340       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8341     if (D)
8342       Decls.push_back(D);
8343   }
8344   ExtVectorDecls.clear();
8345 }
8346 
8347 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8348     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8349   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8350        ++I) {
8351     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8352         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8353     if (D)
8354       Decls.insert(D);
8355   }
8356   UnusedLocalTypedefNameCandidates.clear();
8357 }
8358 
8359 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8360     llvm::SmallVector<Decl *, 4> &Decls) {
8361   for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N;
8362        ++I) {
8363     auto *D = dyn_cast_or_null<Decl>(
8364         GetDecl(DeclsToCheckForDeferredDiags[I]));
8365     if (D)
8366       Decls.push_back(D);
8367   }
8368   DeclsToCheckForDeferredDiags.clear();
8369 }
8370 
8371 
8372 void ASTReader::ReadReferencedSelectors(
8373        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8374   if (ReferencedSelectorsData.empty())
8375     return;
8376 
8377   // If there are @selector references added them to its pool. This is for
8378   // implementation of -Wselector.
8379   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8380   unsigned I = 0;
8381   while (I < DataSize) {
8382     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8383     SourceLocation SelLoc
8384       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8385     Sels.push_back(std::make_pair(Sel, SelLoc));
8386   }
8387   ReferencedSelectorsData.clear();
8388 }
8389 
8390 void ASTReader::ReadWeakUndeclaredIdentifiers(
8391        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8392   if (WeakUndeclaredIdentifiers.empty())
8393     return;
8394 
8395   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8396     IdentifierInfo *WeakId
8397       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8398     IdentifierInfo *AliasId
8399       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8400     SourceLocation Loc
8401       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8402     bool Used = WeakUndeclaredIdentifiers[I++];
8403     WeakInfo WI(AliasId, Loc);
8404     WI.setUsed(Used);
8405     WeakIDs.push_back(std::make_pair(WeakId, WI));
8406   }
8407   WeakUndeclaredIdentifiers.clear();
8408 }
8409 
8410 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8411   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8412     ExternalVTableUse VT;
8413     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8414     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8415     VT.DefinitionRequired = VTableUses[Idx++];
8416     VTables.push_back(VT);
8417   }
8418 
8419   VTableUses.clear();
8420 }
8421 
8422 void ASTReader::ReadPendingInstantiations(
8423        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8424   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8425     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8426     SourceLocation Loc
8427       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8428 
8429     Pending.push_back(std::make_pair(D, Loc));
8430   }
8431   PendingInstantiations.clear();
8432 }
8433 
8434 void ASTReader::ReadLateParsedTemplates(
8435     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8436         &LPTMap) {
8437   for (auto &LPT : LateParsedTemplates) {
8438     ModuleFile *FMod = LPT.first;
8439     RecordDataImpl &LateParsed = LPT.second;
8440     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8441          /* In loop */) {
8442       FunctionDecl *FD =
8443           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8444 
8445       auto LT = std::make_unique<LateParsedTemplate>();
8446       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8447 
8448       ModuleFile *F = getOwningModuleFile(LT->D);
8449       assert(F && "No module");
8450 
8451       unsigned TokN = LateParsed[Idx++];
8452       LT->Toks.reserve(TokN);
8453       for (unsigned T = 0; T < TokN; ++T)
8454         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8455 
8456       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8457     }
8458   }
8459 }
8460 
8461 void ASTReader::LoadSelector(Selector Sel) {
8462   // It would be complicated to avoid reading the methods anyway. So don't.
8463   ReadMethodPool(Sel);
8464 }
8465 
8466 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8467   assert(ID && "Non-zero identifier ID required");
8468   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8469   IdentifiersLoaded[ID - 1] = II;
8470   if (DeserializationListener)
8471     DeserializationListener->IdentifierRead(ID, II);
8472 }
8473 
8474 /// Set the globally-visible declarations associated with the given
8475 /// identifier.
8476 ///
8477 /// If the AST reader is currently in a state where the given declaration IDs
8478 /// cannot safely be resolved, they are queued until it is safe to resolve
8479 /// them.
8480 ///
8481 /// \param II an IdentifierInfo that refers to one or more globally-visible
8482 /// declarations.
8483 ///
8484 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8485 /// visible at global scope.
8486 ///
8487 /// \param Decls if non-null, this vector will be populated with the set of
8488 /// deserialized declarations. These declarations will not be pushed into
8489 /// scope.
8490 void
8491 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8492                               const SmallVectorImpl<uint32_t> &DeclIDs,
8493                                    SmallVectorImpl<Decl *> *Decls) {
8494   if (NumCurrentElementsDeserializing && !Decls) {
8495     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8496     return;
8497   }
8498 
8499   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8500     if (!SemaObj) {
8501       // Queue this declaration so that it will be added to the
8502       // translation unit scope and identifier's declaration chain
8503       // once a Sema object is known.
8504       PreloadedDeclIDs.push_back(DeclIDs[I]);
8505       continue;
8506     }
8507 
8508     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8509 
8510     // If we're simply supposed to record the declarations, do so now.
8511     if (Decls) {
8512       Decls->push_back(D);
8513       continue;
8514     }
8515 
8516     // Introduce this declaration into the translation-unit scope
8517     // and add it to the declaration chain for this identifier, so
8518     // that (unqualified) name lookup will find it.
8519     pushExternalDeclIntoScope(D, II);
8520   }
8521 }
8522 
8523 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8524   if (ID == 0)
8525     return nullptr;
8526 
8527   if (IdentifiersLoaded.empty()) {
8528     Error("no identifier table in AST file");
8529     return nullptr;
8530   }
8531 
8532   ID -= 1;
8533   if (!IdentifiersLoaded[ID]) {
8534     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8535     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8536     ModuleFile *M = I->second;
8537     unsigned Index = ID - M->BaseIdentifierID;
8538     const unsigned char *Data =
8539         M->IdentifierTableData + M->IdentifierOffsets[Index];
8540 
8541     ASTIdentifierLookupTrait Trait(*this, *M);
8542     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8543     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8544     auto &II = PP.getIdentifierTable().get(Key);
8545     IdentifiersLoaded[ID] = &II;
8546     markIdentifierFromAST(*this,  II);
8547     if (DeserializationListener)
8548       DeserializationListener->IdentifierRead(ID + 1, &II);
8549   }
8550 
8551   return IdentifiersLoaded[ID];
8552 }
8553 
8554 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8555   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8556 }
8557 
8558 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8559   if (LocalID < NUM_PREDEF_IDENT_IDS)
8560     return LocalID;
8561 
8562   if (!M.ModuleOffsetMap.empty())
8563     ReadModuleOffsetMap(M);
8564 
8565   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8566     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8567   assert(I != M.IdentifierRemap.end()
8568          && "Invalid index into identifier index remap");
8569 
8570   return LocalID + I->second;
8571 }
8572 
8573 MacroInfo *ASTReader::getMacro(MacroID ID) {
8574   if (ID == 0)
8575     return nullptr;
8576 
8577   if (MacrosLoaded.empty()) {
8578     Error("no macro table in AST file");
8579     return nullptr;
8580   }
8581 
8582   ID -= NUM_PREDEF_MACRO_IDS;
8583   if (!MacrosLoaded[ID]) {
8584     GlobalMacroMapType::iterator I
8585       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8586     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8587     ModuleFile *M = I->second;
8588     unsigned Index = ID - M->BaseMacroID;
8589     MacrosLoaded[ID] =
8590         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8591 
8592     if (DeserializationListener)
8593       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8594                                          MacrosLoaded[ID]);
8595   }
8596 
8597   return MacrosLoaded[ID];
8598 }
8599 
8600 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8601   if (LocalID < NUM_PREDEF_MACRO_IDS)
8602     return LocalID;
8603 
8604   if (!M.ModuleOffsetMap.empty())
8605     ReadModuleOffsetMap(M);
8606 
8607   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8608     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8609   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8610 
8611   return LocalID + I->second;
8612 }
8613 
8614 serialization::SubmoduleID
8615 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8616   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8617     return LocalID;
8618 
8619   if (!M.ModuleOffsetMap.empty())
8620     ReadModuleOffsetMap(M);
8621 
8622   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8623     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8624   assert(I != M.SubmoduleRemap.end()
8625          && "Invalid index into submodule index remap");
8626 
8627   return LocalID + I->second;
8628 }
8629 
8630 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8631   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8632     assert(GlobalID == 0 && "Unhandled global submodule ID");
8633     return nullptr;
8634   }
8635 
8636   if (GlobalID > SubmodulesLoaded.size()) {
8637     Error("submodule ID out of range in AST file");
8638     return nullptr;
8639   }
8640 
8641   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8642 }
8643 
8644 Module *ASTReader::getModule(unsigned ID) {
8645   return getSubmodule(ID);
8646 }
8647 
8648 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8649   if (ID & 1) {
8650     // It's a module, look it up by submodule ID.
8651     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8652     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8653   } else {
8654     // It's a prefix (preamble, PCH, ...). Look it up by index.
8655     unsigned IndexFromEnd = ID >> 1;
8656     assert(IndexFromEnd && "got reference to unknown module file");
8657     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8658   }
8659 }
8660 
8661 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8662   if (!F)
8663     return 1;
8664 
8665   // For a file representing a module, use the submodule ID of the top-level
8666   // module as the file ID. For any other kind of file, the number of such
8667   // files loaded beforehand will be the same on reload.
8668   // FIXME: Is this true even if we have an explicit module file and a PCH?
8669   if (F->isModule())
8670     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8671 
8672   auto PCHModules = getModuleManager().pch_modules();
8673   auto I = llvm::find(PCHModules, F);
8674   assert(I != PCHModules.end() && "emitting reference to unknown file");
8675   return (I - PCHModules.end()) << 1;
8676 }
8677 
8678 llvm::Optional<ASTSourceDescriptor>
8679 ASTReader::getSourceDescriptor(unsigned ID) {
8680   if (Module *M = getSubmodule(ID))
8681     return ASTSourceDescriptor(*M);
8682 
8683   // If there is only a single PCH, return it instead.
8684   // Chained PCH are not supported.
8685   const auto &PCHChain = ModuleMgr.pch_modules();
8686   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8687     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8688     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8689     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8690     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8691                                MF.Signature);
8692   }
8693   return None;
8694 }
8695 
8696 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8697   auto I = DefinitionSource.find(FD);
8698   if (I == DefinitionSource.end())
8699     return EK_ReplyHazy;
8700   return I->second ? EK_Never : EK_Always;
8701 }
8702 
8703 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8704   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8705 }
8706 
8707 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8708   if (ID == 0)
8709     return Selector();
8710 
8711   if (ID > SelectorsLoaded.size()) {
8712     Error("selector ID out of range in AST file");
8713     return Selector();
8714   }
8715 
8716   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8717     // Load this selector from the selector table.
8718     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8719     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8720     ModuleFile &M = *I->second;
8721     ASTSelectorLookupTrait Trait(*this, M);
8722     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8723     SelectorsLoaded[ID - 1] =
8724       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8725     if (DeserializationListener)
8726       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8727   }
8728 
8729   return SelectorsLoaded[ID - 1];
8730 }
8731 
8732 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8733   return DecodeSelector(ID);
8734 }
8735 
8736 uint32_t ASTReader::GetNumExternalSelectors() {
8737   // ID 0 (the null selector) is considered an external selector.
8738   return getTotalNumSelectors() + 1;
8739 }
8740 
8741 serialization::SelectorID
8742 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8743   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8744     return LocalID;
8745 
8746   if (!M.ModuleOffsetMap.empty())
8747     ReadModuleOffsetMap(M);
8748 
8749   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8750     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8751   assert(I != M.SelectorRemap.end()
8752          && "Invalid index into selector index remap");
8753 
8754   return LocalID + I->second;
8755 }
8756 
8757 DeclarationNameLoc
8758 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8759   switch (Name.getNameKind()) {
8760   case DeclarationName::CXXConstructorName:
8761   case DeclarationName::CXXDestructorName:
8762   case DeclarationName::CXXConversionFunctionName:
8763     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8764 
8765   case DeclarationName::CXXOperatorName:
8766     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8767 
8768   case DeclarationName::CXXLiteralOperatorName:
8769     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8770         readSourceLocation());
8771 
8772   case DeclarationName::Identifier:
8773   case DeclarationName::ObjCZeroArgSelector:
8774   case DeclarationName::ObjCOneArgSelector:
8775   case DeclarationName::ObjCMultiArgSelector:
8776   case DeclarationName::CXXUsingDirective:
8777   case DeclarationName::CXXDeductionGuideName:
8778     break;
8779   }
8780   return DeclarationNameLoc();
8781 }
8782 
8783 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8784   DeclarationNameInfo NameInfo;
8785   NameInfo.setName(readDeclarationName());
8786   NameInfo.setLoc(readSourceLocation());
8787   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8788   return NameInfo;
8789 }
8790 
8791 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8792   Info.QualifierLoc = readNestedNameSpecifierLoc();
8793   unsigned NumTPLists = readInt();
8794   Info.NumTemplParamLists = NumTPLists;
8795   if (NumTPLists) {
8796     Info.TemplParamLists =
8797         new (getContext()) TemplateParameterList *[NumTPLists];
8798     for (unsigned i = 0; i != NumTPLists; ++i)
8799       Info.TemplParamLists[i] = readTemplateParameterList();
8800   }
8801 }
8802 
8803 TemplateParameterList *
8804 ASTRecordReader::readTemplateParameterList() {
8805   SourceLocation TemplateLoc = readSourceLocation();
8806   SourceLocation LAngleLoc = readSourceLocation();
8807   SourceLocation RAngleLoc = readSourceLocation();
8808 
8809   unsigned NumParams = readInt();
8810   SmallVector<NamedDecl *, 16> Params;
8811   Params.reserve(NumParams);
8812   while (NumParams--)
8813     Params.push_back(readDeclAs<NamedDecl>());
8814 
8815   bool HasRequiresClause = readBool();
8816   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8817 
8818   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8819       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8820   return TemplateParams;
8821 }
8822 
8823 void ASTRecordReader::readTemplateArgumentList(
8824                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8825                         bool Canonicalize) {
8826   unsigned NumTemplateArgs = readInt();
8827   TemplArgs.reserve(NumTemplateArgs);
8828   while (NumTemplateArgs--)
8829     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8830 }
8831 
8832 /// Read a UnresolvedSet structure.
8833 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8834   unsigned NumDecls = readInt();
8835   Set.reserve(getContext(), NumDecls);
8836   while (NumDecls--) {
8837     DeclID ID = readDeclID();
8838     AccessSpecifier AS = (AccessSpecifier) readInt();
8839     Set.addLazyDecl(getContext(), ID, AS);
8840   }
8841 }
8842 
8843 CXXBaseSpecifier
8844 ASTRecordReader::readCXXBaseSpecifier() {
8845   bool isVirtual = readBool();
8846   bool isBaseOfClass = readBool();
8847   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8848   bool inheritConstructors = readBool();
8849   TypeSourceInfo *TInfo = readTypeSourceInfo();
8850   SourceRange Range = readSourceRange();
8851   SourceLocation EllipsisLoc = readSourceLocation();
8852   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8853                           EllipsisLoc);
8854   Result.setInheritConstructors(inheritConstructors);
8855   return Result;
8856 }
8857 
8858 CXXCtorInitializer **
8859 ASTRecordReader::readCXXCtorInitializers() {
8860   ASTContext &Context = getContext();
8861   unsigned NumInitializers = readInt();
8862   assert(NumInitializers && "wrote ctor initializers but have no inits");
8863   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8864   for (unsigned i = 0; i != NumInitializers; ++i) {
8865     TypeSourceInfo *TInfo = nullptr;
8866     bool IsBaseVirtual = false;
8867     FieldDecl *Member = nullptr;
8868     IndirectFieldDecl *IndirectMember = nullptr;
8869 
8870     CtorInitializerType Type = (CtorInitializerType) readInt();
8871     switch (Type) {
8872     case CTOR_INITIALIZER_BASE:
8873       TInfo = readTypeSourceInfo();
8874       IsBaseVirtual = readBool();
8875       break;
8876 
8877     case CTOR_INITIALIZER_DELEGATING:
8878       TInfo = readTypeSourceInfo();
8879       break;
8880 
8881      case CTOR_INITIALIZER_MEMBER:
8882       Member = readDeclAs<FieldDecl>();
8883       break;
8884 
8885      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8886       IndirectMember = readDeclAs<IndirectFieldDecl>();
8887       break;
8888     }
8889 
8890     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8891     Expr *Init = readExpr();
8892     SourceLocation LParenLoc = readSourceLocation();
8893     SourceLocation RParenLoc = readSourceLocation();
8894 
8895     CXXCtorInitializer *BOMInit;
8896     if (Type == CTOR_INITIALIZER_BASE)
8897       BOMInit = new (Context)
8898           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8899                              RParenLoc, MemberOrEllipsisLoc);
8900     else if (Type == CTOR_INITIALIZER_DELEGATING)
8901       BOMInit = new (Context)
8902           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8903     else if (Member)
8904       BOMInit = new (Context)
8905           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8906                              Init, RParenLoc);
8907     else
8908       BOMInit = new (Context)
8909           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8910                              LParenLoc, Init, RParenLoc);
8911 
8912     if (/*IsWritten*/readBool()) {
8913       unsigned SourceOrder = readInt();
8914       BOMInit->setSourceOrder(SourceOrder);
8915     }
8916 
8917     CtorInitializers[i] = BOMInit;
8918   }
8919 
8920   return CtorInitializers;
8921 }
8922 
8923 NestedNameSpecifierLoc
8924 ASTRecordReader::readNestedNameSpecifierLoc() {
8925   ASTContext &Context = getContext();
8926   unsigned N = readInt();
8927   NestedNameSpecifierLocBuilder Builder;
8928   for (unsigned I = 0; I != N; ++I) {
8929     auto Kind = readNestedNameSpecifierKind();
8930     switch (Kind) {
8931     case NestedNameSpecifier::Identifier: {
8932       IdentifierInfo *II = readIdentifier();
8933       SourceRange Range = readSourceRange();
8934       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8935       break;
8936     }
8937 
8938     case NestedNameSpecifier::Namespace: {
8939       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8940       SourceRange Range = readSourceRange();
8941       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8942       break;
8943     }
8944 
8945     case NestedNameSpecifier::NamespaceAlias: {
8946       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8947       SourceRange Range = readSourceRange();
8948       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8949       break;
8950     }
8951 
8952     case NestedNameSpecifier::TypeSpec:
8953     case NestedNameSpecifier::TypeSpecWithTemplate: {
8954       bool Template = readBool();
8955       TypeSourceInfo *T = readTypeSourceInfo();
8956       if (!T)
8957         return NestedNameSpecifierLoc();
8958       SourceLocation ColonColonLoc = readSourceLocation();
8959 
8960       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8961       Builder.Extend(Context,
8962                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8963                      T->getTypeLoc(), ColonColonLoc);
8964       break;
8965     }
8966 
8967     case NestedNameSpecifier::Global: {
8968       SourceLocation ColonColonLoc = readSourceLocation();
8969       Builder.MakeGlobal(Context, ColonColonLoc);
8970       break;
8971     }
8972 
8973     case NestedNameSpecifier::Super: {
8974       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8975       SourceRange Range = readSourceRange();
8976       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8977       break;
8978     }
8979     }
8980   }
8981 
8982   return Builder.getWithLocInContext(Context);
8983 }
8984 
8985 SourceRange
8986 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8987                            unsigned &Idx) {
8988   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8989   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8990   return SourceRange(beg, end);
8991 }
8992 
8993 /// Read a floating-point value
8994 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8995   return llvm::APFloat(Sem, readAPInt());
8996 }
8997 
8998 // Read a string
8999 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
9000   unsigned Len = Record[Idx++];
9001   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
9002   Idx += Len;
9003   return Result;
9004 }
9005 
9006 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
9007                                 unsigned &Idx) {
9008   std::string Filename = ReadString(Record, Idx);
9009   ResolveImportedPath(F, Filename);
9010   return Filename;
9011 }
9012 
9013 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9014                                 const RecordData &Record, unsigned &Idx) {
9015   std::string Filename = ReadString(Record, Idx);
9016   if (!BaseDirectory.empty())
9017     ResolveImportedPath(Filename, BaseDirectory);
9018   return Filename;
9019 }
9020 
9021 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9022                                          unsigned &Idx) {
9023   unsigned Major = Record[Idx++];
9024   unsigned Minor = Record[Idx++];
9025   unsigned Subminor = Record[Idx++];
9026   if (Minor == 0)
9027     return VersionTuple(Major);
9028   if (Subminor == 0)
9029     return VersionTuple(Major, Minor - 1);
9030   return VersionTuple(Major, Minor - 1, Subminor - 1);
9031 }
9032 
9033 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9034                                           const RecordData &Record,
9035                                           unsigned &Idx) {
9036   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9037   return CXXTemporary::Create(getContext(), Decl);
9038 }
9039 
9040 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9041   return Diag(CurrentImportLoc, DiagID);
9042 }
9043 
9044 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9045   return Diags.Report(Loc, DiagID);
9046 }
9047 
9048 /// Retrieve the identifier table associated with the
9049 /// preprocessor.
9050 IdentifierTable &ASTReader::getIdentifierTable() {
9051   return PP.getIdentifierTable();
9052 }
9053 
9054 /// Record that the given ID maps to the given switch-case
9055 /// statement.
9056 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9057   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9058          "Already have a SwitchCase with this ID");
9059   (*CurrSwitchCaseStmts)[ID] = SC;
9060 }
9061 
9062 /// Retrieve the switch-case statement with the given ID.
9063 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9064   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9065   return (*CurrSwitchCaseStmts)[ID];
9066 }
9067 
9068 void ASTReader::ClearSwitchCaseIDs() {
9069   CurrSwitchCaseStmts->clear();
9070 }
9071 
9072 void ASTReader::ReadComments() {
9073   ASTContext &Context = getContext();
9074   std::vector<RawComment *> Comments;
9075   for (SmallVectorImpl<std::pair<BitstreamCursor,
9076                                  serialization::ModuleFile *>>::iterator
9077        I = CommentsCursors.begin(),
9078        E = CommentsCursors.end();
9079        I != E; ++I) {
9080     Comments.clear();
9081     BitstreamCursor &Cursor = I->first;
9082     serialization::ModuleFile &F = *I->second;
9083     SavedStreamPosition SavedPosition(Cursor);
9084 
9085     RecordData Record;
9086     while (true) {
9087       Expected<llvm::BitstreamEntry> MaybeEntry =
9088           Cursor.advanceSkippingSubblocks(
9089               BitstreamCursor::AF_DontPopBlockAtEnd);
9090       if (!MaybeEntry) {
9091         Error(MaybeEntry.takeError());
9092         return;
9093       }
9094       llvm::BitstreamEntry Entry = MaybeEntry.get();
9095 
9096       switch (Entry.Kind) {
9097       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9098       case llvm::BitstreamEntry::Error:
9099         Error("malformed block record in AST file");
9100         return;
9101       case llvm::BitstreamEntry::EndBlock:
9102         goto NextCursor;
9103       case llvm::BitstreamEntry::Record:
9104         // The interesting case.
9105         break;
9106       }
9107 
9108       // Read a record.
9109       Record.clear();
9110       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9111       if (!MaybeComment) {
9112         Error(MaybeComment.takeError());
9113         return;
9114       }
9115       switch ((CommentRecordTypes)MaybeComment.get()) {
9116       case COMMENTS_RAW_COMMENT: {
9117         unsigned Idx = 0;
9118         SourceRange SR = ReadSourceRange(F, Record, Idx);
9119         RawComment::CommentKind Kind =
9120             (RawComment::CommentKind) Record[Idx++];
9121         bool IsTrailingComment = Record[Idx++];
9122         bool IsAlmostTrailingComment = Record[Idx++];
9123         Comments.push_back(new (Context) RawComment(
9124             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9125         break;
9126       }
9127       }
9128     }
9129   NextCursor:
9130     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9131         FileToOffsetToComment;
9132     for (RawComment *C : Comments) {
9133       SourceLocation CommentLoc = C->getBeginLoc();
9134       if (CommentLoc.isValid()) {
9135         std::pair<FileID, unsigned> Loc =
9136             SourceMgr.getDecomposedLoc(CommentLoc);
9137         if (Loc.first.isValid())
9138           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9139       }
9140     }
9141   }
9142 }
9143 
9144 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9145                                 bool IncludeSystem, bool Complain,
9146                     llvm::function_ref<void(const serialization::InputFile &IF,
9147                                             bool isSystem)> Visitor) {
9148   unsigned NumUserInputs = MF.NumUserInputFiles;
9149   unsigned NumInputs = MF.InputFilesLoaded.size();
9150   assert(NumUserInputs <= NumInputs);
9151   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9152   for (unsigned I = 0; I < N; ++I) {
9153     bool IsSystem = I >= NumUserInputs;
9154     InputFile IF = getInputFile(MF, I+1, Complain);
9155     Visitor(IF, IsSystem);
9156   }
9157 }
9158 
9159 void ASTReader::visitTopLevelModuleMaps(
9160     serialization::ModuleFile &MF,
9161     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9162   unsigned NumInputs = MF.InputFilesLoaded.size();
9163   for (unsigned I = 0; I < NumInputs; ++I) {
9164     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9165     if (IFI.TopLevelModuleMap)
9166       // FIXME: This unnecessarily re-reads the InputFileInfo.
9167       if (auto FE = getInputFile(MF, I + 1).getFile())
9168         Visitor(FE);
9169   }
9170 }
9171 
9172 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9173   // If we know the owning module, use it.
9174   if (Module *M = D->getImportedOwningModule())
9175     return M->getFullModuleName();
9176 
9177   // Otherwise, use the name of the top-level module the decl is within.
9178   if (ModuleFile *M = getOwningModuleFile(D))
9179     return M->ModuleName;
9180 
9181   // Not from a module.
9182   return {};
9183 }
9184 
9185 void ASTReader::finishPendingActions() {
9186   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9187          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9188          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9189          !PendingUpdateRecords.empty()) {
9190     // If any identifiers with corresponding top-level declarations have
9191     // been loaded, load those declarations now.
9192     using TopLevelDeclsMap =
9193         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9194     TopLevelDeclsMap TopLevelDecls;
9195 
9196     while (!PendingIdentifierInfos.empty()) {
9197       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9198       SmallVector<uint32_t, 4> DeclIDs =
9199           std::move(PendingIdentifierInfos.back().second);
9200       PendingIdentifierInfos.pop_back();
9201 
9202       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9203     }
9204 
9205     // Load each function type that we deferred loading because it was a
9206     // deduced type that might refer to a local type declared within itself.
9207     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9208       auto *FD = PendingFunctionTypes[I].first;
9209       FD->setType(GetType(PendingFunctionTypes[I].second));
9210 
9211       // If we gave a function a deduced return type, remember that we need to
9212       // propagate that along the redeclaration chain.
9213       auto *DT = FD->getReturnType()->getContainedDeducedType();
9214       if (DT && DT->isDeduced())
9215         PendingDeducedTypeUpdates.insert(
9216             {FD->getCanonicalDecl(), FD->getReturnType()});
9217     }
9218     PendingFunctionTypes.clear();
9219 
9220     // For each decl chain that we wanted to complete while deserializing, mark
9221     // it as "still needs to be completed".
9222     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9223       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9224     }
9225     PendingIncompleteDeclChains.clear();
9226 
9227     // Load pending declaration chains.
9228     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9229       loadPendingDeclChain(PendingDeclChains[I].first,
9230                            PendingDeclChains[I].second);
9231     PendingDeclChains.clear();
9232 
9233     // Make the most recent of the top-level declarations visible.
9234     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9235            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9236       IdentifierInfo *II = TLD->first;
9237       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9238         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9239       }
9240     }
9241 
9242     // Load any pending macro definitions.
9243     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9244       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9245       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9246       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9247       // Initialize the macro history from chained-PCHs ahead of module imports.
9248       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9249            ++IDIdx) {
9250         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9251         if (!Info.M->isModule())
9252           resolvePendingMacro(II, Info);
9253       }
9254       // Handle module imports.
9255       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9256            ++IDIdx) {
9257         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9258         if (Info.M->isModule())
9259           resolvePendingMacro(II, Info);
9260       }
9261     }
9262     PendingMacroIDs.clear();
9263 
9264     // Wire up the DeclContexts for Decls that we delayed setting until
9265     // recursive loading is completed.
9266     while (!PendingDeclContextInfos.empty()) {
9267       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9268       PendingDeclContextInfos.pop_front();
9269       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9270       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9271       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9272     }
9273 
9274     // Perform any pending declaration updates.
9275     while (!PendingUpdateRecords.empty()) {
9276       auto Update = PendingUpdateRecords.pop_back_val();
9277       ReadingKindTracker ReadingKind(Read_Decl, *this);
9278       loadDeclUpdateRecords(Update);
9279     }
9280   }
9281 
9282   // At this point, all update records for loaded decls are in place, so any
9283   // fake class definitions should have become real.
9284   assert(PendingFakeDefinitionData.empty() &&
9285          "faked up a class definition but never saw the real one");
9286 
9287   // If we deserialized any C++ or Objective-C class definitions, any
9288   // Objective-C protocol definitions, or any redeclarable templates, make sure
9289   // that all redeclarations point to the definitions. Note that this can only
9290   // happen now, after the redeclaration chains have been fully wired.
9291   for (Decl *D : PendingDefinitions) {
9292     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9293       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9294         // Make sure that the TagType points at the definition.
9295         const_cast<TagType*>(TagT)->decl = TD;
9296       }
9297 
9298       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9299         for (auto *R = getMostRecentExistingDecl(RD); R;
9300              R = R->getPreviousDecl()) {
9301           assert((R == D) ==
9302                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9303                  "declaration thinks it's the definition but it isn't");
9304           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9305         }
9306       }
9307 
9308       continue;
9309     }
9310 
9311     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9312       // Make sure that the ObjCInterfaceType points at the definition.
9313       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9314         ->Decl = ID;
9315 
9316       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9317         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9318 
9319       continue;
9320     }
9321 
9322     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9323       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9324         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9325 
9326       continue;
9327     }
9328 
9329     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9330     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9331       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9332   }
9333   PendingDefinitions.clear();
9334 
9335   // Load the bodies of any functions or methods we've encountered. We do
9336   // this now (delayed) so that we can be sure that the declaration chains
9337   // have been fully wired up (hasBody relies on this).
9338   // FIXME: We shouldn't require complete redeclaration chains here.
9339   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9340                                PBEnd = PendingBodies.end();
9341        PB != PBEnd; ++PB) {
9342     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9343       // For a function defined inline within a class template, force the
9344       // canonical definition to be the one inside the canonical definition of
9345       // the template. This ensures that we instantiate from a correct view
9346       // of the template.
9347       //
9348       // Sadly we can't do this more generally: we can't be sure that all
9349       // copies of an arbitrary class definition will have the same members
9350       // defined (eg, some member functions may not be instantiated, and some
9351       // special members may or may not have been implicitly defined).
9352       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9353         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9354           continue;
9355 
9356       // FIXME: Check for =delete/=default?
9357       // FIXME: Complain about ODR violations here?
9358       const FunctionDecl *Defn = nullptr;
9359       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9360         FD->setLazyBody(PB->second);
9361       } else {
9362         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9363         mergeDefinitionVisibility(NonConstDefn, FD);
9364 
9365         if (!FD->isLateTemplateParsed() &&
9366             !NonConstDefn->isLateTemplateParsed() &&
9367             FD->getODRHash() != NonConstDefn->getODRHash()) {
9368           if (!isa<CXXMethodDecl>(FD)) {
9369             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9370           } else if (FD->getLexicalParent()->isFileContext() &&
9371                      NonConstDefn->getLexicalParent()->isFileContext()) {
9372             // Only diagnose out-of-line method definitions.  If they are
9373             // in class definitions, then an error will be generated when
9374             // processing the class bodies.
9375             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9376           }
9377         }
9378       }
9379       continue;
9380     }
9381 
9382     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9383     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9384       MD->setLazyBody(PB->second);
9385   }
9386   PendingBodies.clear();
9387 
9388   // Do some cleanup.
9389   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9390     getContext().deduplicateMergedDefinitonsFor(ND);
9391   PendingMergedDefinitionsToDeduplicate.clear();
9392 }
9393 
9394 void ASTReader::diagnoseOdrViolations() {
9395   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9396       PendingFunctionOdrMergeFailures.empty() &&
9397       PendingEnumOdrMergeFailures.empty())
9398     return;
9399 
9400   // Trigger the import of the full definition of each class that had any
9401   // odr-merging problems, so we can produce better diagnostics for them.
9402   // These updates may in turn find and diagnose some ODR failures, so take
9403   // ownership of the set first.
9404   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9405   PendingOdrMergeFailures.clear();
9406   for (auto &Merge : OdrMergeFailures) {
9407     Merge.first->buildLookup();
9408     Merge.first->decls_begin();
9409     Merge.first->bases_begin();
9410     Merge.first->vbases_begin();
9411     for (auto &RecordPair : Merge.second) {
9412       auto *RD = RecordPair.first;
9413       RD->decls_begin();
9414       RD->bases_begin();
9415       RD->vbases_begin();
9416     }
9417   }
9418 
9419   // Trigger the import of functions.
9420   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9421   PendingFunctionOdrMergeFailures.clear();
9422   for (auto &Merge : FunctionOdrMergeFailures) {
9423     Merge.first->buildLookup();
9424     Merge.first->decls_begin();
9425     Merge.first->getBody();
9426     for (auto &FD : Merge.second) {
9427       FD->buildLookup();
9428       FD->decls_begin();
9429       FD->getBody();
9430     }
9431   }
9432 
9433   // Trigger the import of enums.
9434   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9435   PendingEnumOdrMergeFailures.clear();
9436   for (auto &Merge : EnumOdrMergeFailures) {
9437     Merge.first->decls_begin();
9438     for (auto &Enum : Merge.second) {
9439       Enum->decls_begin();
9440     }
9441   }
9442 
9443   // For each declaration from a merged context, check that the canonical
9444   // definition of that context also contains a declaration of the same
9445   // entity.
9446   //
9447   // Caution: this loop does things that might invalidate iterators into
9448   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9449   while (!PendingOdrMergeChecks.empty()) {
9450     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9451 
9452     // FIXME: Skip over implicit declarations for now. This matters for things
9453     // like implicitly-declared special member functions. This isn't entirely
9454     // correct; we can end up with multiple unmerged declarations of the same
9455     // implicit entity.
9456     if (D->isImplicit())
9457       continue;
9458 
9459     DeclContext *CanonDef = D->getDeclContext();
9460 
9461     bool Found = false;
9462     const Decl *DCanon = D->getCanonicalDecl();
9463 
9464     for (auto RI : D->redecls()) {
9465       if (RI->getLexicalDeclContext() == CanonDef) {
9466         Found = true;
9467         break;
9468       }
9469     }
9470     if (Found)
9471       continue;
9472 
9473     // Quick check failed, time to do the slow thing. Note, we can't just
9474     // look up the name of D in CanonDef here, because the member that is
9475     // in CanonDef might not be found by name lookup (it might have been
9476     // replaced by a more recent declaration in the lookup table), and we
9477     // can't necessarily find it in the redeclaration chain because it might
9478     // be merely mergeable, not redeclarable.
9479     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9480     for (auto *CanonMember : CanonDef->decls()) {
9481       if (CanonMember->getCanonicalDecl() == DCanon) {
9482         // This can happen if the declaration is merely mergeable and not
9483         // actually redeclarable (we looked for redeclarations earlier).
9484         //
9485         // FIXME: We should be able to detect this more efficiently, without
9486         // pulling in all of the members of CanonDef.
9487         Found = true;
9488         break;
9489       }
9490       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9491         if (ND->getDeclName() == D->getDeclName())
9492           Candidates.push_back(ND);
9493     }
9494 
9495     if (!Found) {
9496       // The AST doesn't like TagDecls becoming invalid after they've been
9497       // completed. We only really need to mark FieldDecls as invalid here.
9498       if (!isa<TagDecl>(D))
9499         D->setInvalidDecl();
9500 
9501       // Ensure we don't accidentally recursively enter deserialization while
9502       // we're producing our diagnostic.
9503       Deserializing RecursionGuard(this);
9504 
9505       std::string CanonDefModule =
9506           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9507       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9508         << D << getOwningModuleNameForDiagnostic(D)
9509         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9510 
9511       if (Candidates.empty())
9512         Diag(cast<Decl>(CanonDef)->getLocation(),
9513              diag::note_module_odr_violation_no_possible_decls) << D;
9514       else {
9515         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9516           Diag(Candidates[I]->getLocation(),
9517                diag::note_module_odr_violation_possible_decl)
9518             << Candidates[I];
9519       }
9520 
9521       DiagnosedOdrMergeFailures.insert(CanonDef);
9522     }
9523   }
9524 
9525   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9526       EnumOdrMergeFailures.empty())
9527     return;
9528 
9529   // Ensure we don't accidentally recursively enter deserialization while
9530   // we're producing our diagnostics.
9531   Deserializing RecursionGuard(this);
9532 
9533   // Common code for hashing helpers.
9534   ODRHash Hash;
9535   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9536     Hash.clear();
9537     Hash.AddQualType(Ty);
9538     return Hash.CalculateHash();
9539   };
9540 
9541   auto ComputeODRHash = [&Hash](const Stmt *S) {
9542     assert(S);
9543     Hash.clear();
9544     Hash.AddStmt(S);
9545     return Hash.CalculateHash();
9546   };
9547 
9548   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9549     assert(D);
9550     Hash.clear();
9551     Hash.AddSubDecl(D);
9552     return Hash.CalculateHash();
9553   };
9554 
9555   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9556     Hash.clear();
9557     Hash.AddTemplateArgument(TA);
9558     return Hash.CalculateHash();
9559   };
9560 
9561   auto ComputeTemplateParameterListODRHash =
9562       [&Hash](const TemplateParameterList *TPL) {
9563         assert(TPL);
9564         Hash.clear();
9565         Hash.AddTemplateParameterList(TPL);
9566         return Hash.CalculateHash();
9567       };
9568 
9569   // Used with err_module_odr_violation_mismatch_decl and
9570   // note_module_odr_violation_mismatch_decl
9571   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9572   enum ODRMismatchDecl {
9573     EndOfClass,
9574     PublicSpecifer,
9575     PrivateSpecifer,
9576     ProtectedSpecifer,
9577     StaticAssert,
9578     Field,
9579     CXXMethod,
9580     TypeAlias,
9581     TypeDef,
9582     Var,
9583     Friend,
9584     FunctionTemplate,
9585     Other
9586   };
9587 
9588   // Used with err_module_odr_violation_mismatch_decl_diff and
9589   // note_module_odr_violation_mismatch_decl_diff
9590   enum ODRMismatchDeclDifference {
9591     StaticAssertCondition,
9592     StaticAssertMessage,
9593     StaticAssertOnlyMessage,
9594     FieldName,
9595     FieldTypeName,
9596     FieldSingleBitField,
9597     FieldDifferentWidthBitField,
9598     FieldSingleMutable,
9599     FieldSingleInitializer,
9600     FieldDifferentInitializers,
9601     MethodName,
9602     MethodDeleted,
9603     MethodDefaulted,
9604     MethodVirtual,
9605     MethodStatic,
9606     MethodVolatile,
9607     MethodConst,
9608     MethodInline,
9609     MethodNumberParameters,
9610     MethodParameterType,
9611     MethodParameterName,
9612     MethodParameterSingleDefaultArgument,
9613     MethodParameterDifferentDefaultArgument,
9614     MethodNoTemplateArguments,
9615     MethodDifferentNumberTemplateArguments,
9616     MethodDifferentTemplateArgument,
9617     MethodSingleBody,
9618     MethodDifferentBody,
9619     TypedefName,
9620     TypedefType,
9621     VarName,
9622     VarType,
9623     VarSingleInitializer,
9624     VarDifferentInitializer,
9625     VarConstexpr,
9626     FriendTypeFunction,
9627     FriendType,
9628     FriendFunction,
9629     FunctionTemplateDifferentNumberParameters,
9630     FunctionTemplateParameterDifferentKind,
9631     FunctionTemplateParameterName,
9632     FunctionTemplateParameterSingleDefaultArgument,
9633     FunctionTemplateParameterDifferentDefaultArgument,
9634     FunctionTemplateParameterDifferentType,
9635     FunctionTemplatePackParameter,
9636   };
9637 
9638   // These lambdas have the common portions of the ODR diagnostics.  This
9639   // has the same return as Diag(), so addition parameters can be passed
9640   // in with operator<<
9641   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9642                                  SourceLocation Loc, SourceRange Range,
9643                                  ODRMismatchDeclDifference DiffType) {
9644     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9645            << FirstRecord << FirstModule.empty() << FirstModule << Range
9646            << DiffType;
9647   };
9648   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9649                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9650     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9651            << SecondModule << Range << DiffType;
9652   };
9653 
9654   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9655                        &ComputeQualTypeODRHash, &ComputeODRHash](
9656                           NamedDecl *FirstRecord, StringRef FirstModule,
9657                           StringRef SecondModule, FieldDecl *FirstField,
9658                           FieldDecl *SecondField) {
9659     IdentifierInfo *FirstII = FirstField->getIdentifier();
9660     IdentifierInfo *SecondII = SecondField->getIdentifier();
9661     if (FirstII->getName() != SecondII->getName()) {
9662       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9663                        FirstField->getSourceRange(), FieldName)
9664           << FirstII;
9665       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9666                       SecondField->getSourceRange(), FieldName)
9667           << SecondII;
9668 
9669       return true;
9670     }
9671 
9672     assert(getContext().hasSameType(FirstField->getType(),
9673                                     SecondField->getType()));
9674 
9675     QualType FirstType = FirstField->getType();
9676     QualType SecondType = SecondField->getType();
9677     if (ComputeQualTypeODRHash(FirstType) !=
9678         ComputeQualTypeODRHash(SecondType)) {
9679       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9680                        FirstField->getSourceRange(), FieldTypeName)
9681           << FirstII << FirstType;
9682       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9683                       SecondField->getSourceRange(), FieldTypeName)
9684           << SecondII << SecondType;
9685 
9686       return true;
9687     }
9688 
9689     const bool IsFirstBitField = FirstField->isBitField();
9690     const bool IsSecondBitField = SecondField->isBitField();
9691     if (IsFirstBitField != IsSecondBitField) {
9692       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9693                        FirstField->getSourceRange(), FieldSingleBitField)
9694           << FirstII << IsFirstBitField;
9695       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9696                       SecondField->getSourceRange(), FieldSingleBitField)
9697           << SecondII << IsSecondBitField;
9698       return true;
9699     }
9700 
9701     if (IsFirstBitField && IsSecondBitField) {
9702       unsigned FirstBitWidthHash =
9703           ComputeODRHash(FirstField->getBitWidth());
9704       unsigned SecondBitWidthHash =
9705           ComputeODRHash(SecondField->getBitWidth());
9706       if (FirstBitWidthHash != SecondBitWidthHash) {
9707         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9708                          FirstField->getSourceRange(),
9709                          FieldDifferentWidthBitField)
9710             << FirstII << FirstField->getBitWidth()->getSourceRange();
9711         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9712                         SecondField->getSourceRange(),
9713                         FieldDifferentWidthBitField)
9714             << SecondII << SecondField->getBitWidth()->getSourceRange();
9715         return true;
9716       }
9717     }
9718 
9719     if (!PP.getLangOpts().CPlusPlus)
9720       return false;
9721 
9722     const bool IsFirstMutable = FirstField->isMutable();
9723     const bool IsSecondMutable = SecondField->isMutable();
9724     if (IsFirstMutable != IsSecondMutable) {
9725       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9726                        FirstField->getSourceRange(), FieldSingleMutable)
9727           << FirstII << IsFirstMutable;
9728       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9729                       SecondField->getSourceRange(), FieldSingleMutable)
9730           << SecondII << IsSecondMutable;
9731       return true;
9732     }
9733 
9734     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9735     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9736     if ((!FirstInitializer && SecondInitializer) ||
9737         (FirstInitializer && !SecondInitializer)) {
9738       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9739                        FirstField->getSourceRange(), FieldSingleInitializer)
9740           << FirstII << (FirstInitializer != nullptr);
9741       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9742                       SecondField->getSourceRange(), FieldSingleInitializer)
9743           << SecondII << (SecondInitializer != nullptr);
9744       return true;
9745     }
9746 
9747     if (FirstInitializer && SecondInitializer) {
9748       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9749       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9750       if (FirstInitHash != SecondInitHash) {
9751         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9752                          FirstField->getSourceRange(),
9753                          FieldDifferentInitializers)
9754             << FirstII << FirstInitializer->getSourceRange();
9755         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9756                         SecondField->getSourceRange(),
9757                         FieldDifferentInitializers)
9758             << SecondII << SecondInitializer->getSourceRange();
9759         return true;
9760       }
9761     }
9762 
9763     return false;
9764   };
9765 
9766   auto ODRDiagTypeDefOrAlias =
9767       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9768           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9769           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9770           bool IsTypeAlias) {
9771         auto FirstName = FirstTD->getDeclName();
9772         auto SecondName = SecondTD->getDeclName();
9773         if (FirstName != SecondName) {
9774           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9775                            FirstTD->getSourceRange(), TypedefName)
9776               << IsTypeAlias << FirstName;
9777           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9778                           SecondTD->getSourceRange(), TypedefName)
9779               << IsTypeAlias << SecondName;
9780           return true;
9781         }
9782 
9783         QualType FirstType = FirstTD->getUnderlyingType();
9784         QualType SecondType = SecondTD->getUnderlyingType();
9785         if (ComputeQualTypeODRHash(FirstType) !=
9786             ComputeQualTypeODRHash(SecondType)) {
9787           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9788                            FirstTD->getSourceRange(), TypedefType)
9789               << IsTypeAlias << FirstName << FirstType;
9790           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9791                           SecondTD->getSourceRange(), TypedefType)
9792               << IsTypeAlias << SecondName << SecondType;
9793           return true;
9794         }
9795 
9796         return false;
9797   };
9798 
9799   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9800                      &ComputeQualTypeODRHash, &ComputeODRHash,
9801                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9802                            StringRef SecondModule, VarDecl *FirstVD,
9803                            VarDecl *SecondVD) {
9804     auto FirstName = FirstVD->getDeclName();
9805     auto SecondName = SecondVD->getDeclName();
9806     if (FirstName != SecondName) {
9807       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9808                        FirstVD->getSourceRange(), VarName)
9809           << FirstName;
9810       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9811                       SecondVD->getSourceRange(), VarName)
9812           << SecondName;
9813       return true;
9814     }
9815 
9816     QualType FirstType = FirstVD->getType();
9817     QualType SecondType = SecondVD->getType();
9818     if (ComputeQualTypeODRHash(FirstType) !=
9819         ComputeQualTypeODRHash(SecondType)) {
9820       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9821                        FirstVD->getSourceRange(), VarType)
9822           << FirstName << FirstType;
9823       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9824                       SecondVD->getSourceRange(), VarType)
9825           << SecondName << SecondType;
9826       return true;
9827     }
9828 
9829     if (!PP.getLangOpts().CPlusPlus)
9830       return false;
9831 
9832     const Expr *FirstInit = FirstVD->getInit();
9833     const Expr *SecondInit = SecondVD->getInit();
9834     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9835       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9836                        FirstVD->getSourceRange(), VarSingleInitializer)
9837           << FirstName << (FirstInit == nullptr)
9838           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9839       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9840                       SecondVD->getSourceRange(), VarSingleInitializer)
9841           << SecondName << (SecondInit == nullptr)
9842           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9843       return true;
9844     }
9845 
9846     if (FirstInit && SecondInit &&
9847         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9848       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9849                        FirstVD->getSourceRange(), VarDifferentInitializer)
9850           << FirstName << FirstInit->getSourceRange();
9851       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9852                       SecondVD->getSourceRange(), VarDifferentInitializer)
9853           << SecondName << SecondInit->getSourceRange();
9854       return true;
9855     }
9856 
9857     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9858     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9859     if (FirstIsConstexpr != SecondIsConstexpr) {
9860       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9861                        FirstVD->getSourceRange(), VarConstexpr)
9862           << FirstName << FirstIsConstexpr;
9863       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9864                       SecondVD->getSourceRange(), VarConstexpr)
9865           << SecondName << SecondIsConstexpr;
9866       return true;
9867     }
9868     return false;
9869   };
9870 
9871   auto DifferenceSelector = [](Decl *D) {
9872     assert(D && "valid Decl required");
9873     switch (D->getKind()) {
9874     default:
9875       return Other;
9876     case Decl::AccessSpec:
9877       switch (D->getAccess()) {
9878       case AS_public:
9879         return PublicSpecifer;
9880       case AS_private:
9881         return PrivateSpecifer;
9882       case AS_protected:
9883         return ProtectedSpecifer;
9884       case AS_none:
9885         break;
9886       }
9887       llvm_unreachable("Invalid access specifier");
9888     case Decl::StaticAssert:
9889       return StaticAssert;
9890     case Decl::Field:
9891       return Field;
9892     case Decl::CXXMethod:
9893     case Decl::CXXConstructor:
9894     case Decl::CXXDestructor:
9895       return CXXMethod;
9896     case Decl::TypeAlias:
9897       return TypeAlias;
9898     case Decl::Typedef:
9899       return TypeDef;
9900     case Decl::Var:
9901       return Var;
9902     case Decl::Friend:
9903       return Friend;
9904     case Decl::FunctionTemplate:
9905       return FunctionTemplate;
9906     }
9907   };
9908 
9909   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9910   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9911                                                  RecordDecl *Record,
9912                                                  const DeclContext *DC) {
9913     for (auto *D : Record->decls()) {
9914       if (!ODRHash::isDeclToBeProcessed(D, DC))
9915         continue;
9916       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9917     }
9918   };
9919 
9920   struct DiffResult {
9921     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9922     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9923   };
9924 
9925   // If there is a diagnoseable difference, FirstDiffType and
9926   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9927   // filled in if not EndOfClass.
9928   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9929                                              DeclHashes &SecondHashes) {
9930     DiffResult DR;
9931     auto FirstIt = FirstHashes.begin();
9932     auto SecondIt = SecondHashes.begin();
9933     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9934       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9935           FirstIt->second == SecondIt->second) {
9936         ++FirstIt;
9937         ++SecondIt;
9938         continue;
9939       }
9940 
9941       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9942       DR.SecondDecl =
9943           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9944 
9945       DR.FirstDiffType =
9946           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9947       DR.SecondDiffType =
9948           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9949       return DR;
9950     }
9951     return DR;
9952   };
9953 
9954   // Use this to diagnose that an unexpected Decl was encountered
9955   // or no difference was detected. This causes a generic error
9956   // message to be emitted.
9957   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9958                                       StringRef FirstModule,
9959                                       NamedDecl *SecondRecord,
9960                                       StringRef SecondModule) {
9961     Diag(FirstRecord->getLocation(),
9962          diag::err_module_odr_violation_different_definitions)
9963         << FirstRecord << FirstModule.empty() << FirstModule;
9964 
9965     if (DR.FirstDecl) {
9966       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9967           << FirstRecord << DR.FirstDecl->getSourceRange();
9968     }
9969 
9970     Diag(SecondRecord->getLocation(),
9971          diag::note_module_odr_violation_different_definitions)
9972         << SecondModule;
9973 
9974     if (DR.SecondDecl) {
9975       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9976           << DR.SecondDecl->getSourceRange();
9977     }
9978   };
9979 
9980   auto DiagnoseODRMismatch =
9981       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9982              NamedDecl *SecondRecord, StringRef SecondModule) {
9983         SourceLocation FirstLoc;
9984         SourceRange FirstRange;
9985         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9986         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9987           FirstLoc = FirstTag->getBraceRange().getEnd();
9988         } else {
9989           FirstLoc = DR.FirstDecl->getLocation();
9990           FirstRange = DR.FirstDecl->getSourceRange();
9991         }
9992         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9993             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9994             << DR.FirstDiffType;
9995 
9996         SourceLocation SecondLoc;
9997         SourceRange SecondRange;
9998         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9999         if (DR.SecondDiffType == EndOfClass && SecondTag) {
10000           SecondLoc = SecondTag->getBraceRange().getEnd();
10001         } else {
10002           SecondLoc = DR.SecondDecl->getLocation();
10003           SecondRange = DR.SecondDecl->getSourceRange();
10004         }
10005         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
10006             << SecondModule << SecondRange << DR.SecondDiffType;
10007       };
10008 
10009   // Issue any pending ODR-failure diagnostics.
10010   for (auto &Merge : OdrMergeFailures) {
10011     // If we've already pointed out a specific problem with this class, don't
10012     // bother issuing a general "something's different" diagnostic.
10013     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10014       continue;
10015 
10016     bool Diagnosed = false;
10017     CXXRecordDecl *FirstRecord = Merge.first;
10018     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10019     for (auto &RecordPair : Merge.second) {
10020       CXXRecordDecl *SecondRecord = RecordPair.first;
10021       // Multiple different declarations got merged together; tell the user
10022       // where they came from.
10023       if (FirstRecord == SecondRecord)
10024         continue;
10025 
10026       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10027 
10028       auto *FirstDD = FirstRecord->DefinitionData;
10029       auto *SecondDD = RecordPair.second;
10030 
10031       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10032 
10033       // Diagnostics from DefinitionData are emitted here.
10034       if (FirstDD != SecondDD) {
10035         enum ODRDefinitionDataDifference {
10036           NumBases,
10037           NumVBases,
10038           BaseType,
10039           BaseVirtual,
10040           BaseAccess,
10041         };
10042         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10043                                  this](SourceLocation Loc, SourceRange Range,
10044                                        ODRDefinitionDataDifference DiffType) {
10045           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10046                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10047                  << DiffType;
10048         };
10049         auto ODRDiagBaseNote = [&SecondModule,
10050                                 this](SourceLocation Loc, SourceRange Range,
10051                                       ODRDefinitionDataDifference DiffType) {
10052           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10053                  << SecondModule << Range << DiffType;
10054         };
10055 
10056         unsigned FirstNumBases = FirstDD->NumBases;
10057         unsigned FirstNumVBases = FirstDD->NumVBases;
10058         unsigned SecondNumBases = SecondDD->NumBases;
10059         unsigned SecondNumVBases = SecondDD->NumVBases;
10060 
10061         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10062           unsigned NumBases = DD->NumBases;
10063           if (NumBases == 0) return SourceRange();
10064           auto bases = DD->bases();
10065           return SourceRange(bases[0].getBeginLoc(),
10066                              bases[NumBases - 1].getEndLoc());
10067         };
10068 
10069         if (FirstNumBases != SecondNumBases) {
10070           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10071                            NumBases)
10072               << FirstNumBases;
10073           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10074                           NumBases)
10075               << SecondNumBases;
10076           Diagnosed = true;
10077           break;
10078         }
10079 
10080         if (FirstNumVBases != SecondNumVBases) {
10081           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10082                            NumVBases)
10083               << FirstNumVBases;
10084           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10085                           NumVBases)
10086               << SecondNumVBases;
10087           Diagnosed = true;
10088           break;
10089         }
10090 
10091         auto FirstBases = FirstDD->bases();
10092         auto SecondBases = SecondDD->bases();
10093         unsigned i = 0;
10094         for (i = 0; i < FirstNumBases; ++i) {
10095           auto FirstBase = FirstBases[i];
10096           auto SecondBase = SecondBases[i];
10097           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10098               ComputeQualTypeODRHash(SecondBase.getType())) {
10099             ODRDiagBaseError(FirstRecord->getLocation(),
10100                              FirstBase.getSourceRange(), BaseType)
10101                 << (i + 1) << FirstBase.getType();
10102             ODRDiagBaseNote(SecondRecord->getLocation(),
10103                             SecondBase.getSourceRange(), BaseType)
10104                 << (i + 1) << SecondBase.getType();
10105             break;
10106           }
10107 
10108           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10109             ODRDiagBaseError(FirstRecord->getLocation(),
10110                              FirstBase.getSourceRange(), BaseVirtual)
10111                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10112             ODRDiagBaseNote(SecondRecord->getLocation(),
10113                             SecondBase.getSourceRange(), BaseVirtual)
10114                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10115             break;
10116           }
10117 
10118           if (FirstBase.getAccessSpecifierAsWritten() !=
10119               SecondBase.getAccessSpecifierAsWritten()) {
10120             ODRDiagBaseError(FirstRecord->getLocation(),
10121                              FirstBase.getSourceRange(), BaseAccess)
10122                 << (i + 1) << FirstBase.getType()
10123                 << (int)FirstBase.getAccessSpecifierAsWritten();
10124             ODRDiagBaseNote(SecondRecord->getLocation(),
10125                             SecondBase.getSourceRange(), BaseAccess)
10126                 << (i + 1) << SecondBase.getType()
10127                 << (int)SecondBase.getAccessSpecifierAsWritten();
10128             break;
10129           }
10130         }
10131 
10132         if (i != FirstNumBases) {
10133           Diagnosed = true;
10134           break;
10135         }
10136       }
10137 
10138       const ClassTemplateDecl *FirstTemplate =
10139           FirstRecord->getDescribedClassTemplate();
10140       const ClassTemplateDecl *SecondTemplate =
10141           SecondRecord->getDescribedClassTemplate();
10142 
10143       assert(!FirstTemplate == !SecondTemplate &&
10144              "Both pointers should be null or non-null");
10145 
10146       enum ODRTemplateDifference {
10147         ParamEmptyName,
10148         ParamName,
10149         ParamSingleDefaultArgument,
10150         ParamDifferentDefaultArgument,
10151       };
10152 
10153       if (FirstTemplate && SecondTemplate) {
10154         DeclHashes FirstTemplateHashes;
10155         DeclHashes SecondTemplateHashes;
10156 
10157         auto PopulateTemplateParameterHashs =
10158             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10159                                      const ClassTemplateDecl *TD) {
10160               for (auto *D : TD->getTemplateParameters()->asArray()) {
10161                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10162               }
10163             };
10164 
10165         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10166         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10167 
10168         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10169                "Number of template parameters should be equal.");
10170 
10171         auto FirstIt = FirstTemplateHashes.begin();
10172         auto FirstEnd = FirstTemplateHashes.end();
10173         auto SecondIt = SecondTemplateHashes.begin();
10174         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10175           if (FirstIt->second == SecondIt->second)
10176             continue;
10177 
10178           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10179                                           SourceLocation Loc, SourceRange Range,
10180                                           ODRTemplateDifference DiffType) {
10181             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10182                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10183                    << DiffType;
10184           };
10185           auto ODRDiagTemplateNote = [&SecondModule, this](
10186                                          SourceLocation Loc, SourceRange Range,
10187                                          ODRTemplateDifference DiffType) {
10188             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10189                    << SecondModule << Range << DiffType;
10190           };
10191 
10192           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10193           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10194 
10195           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10196                  "Parameter Decl's should be the same kind.");
10197 
10198           DeclarationName FirstName = FirstDecl->getDeclName();
10199           DeclarationName SecondName = SecondDecl->getDeclName();
10200 
10201           if (FirstName != SecondName) {
10202             const bool FirstNameEmpty =
10203                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10204             const bool SecondNameEmpty =
10205                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10206             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10207                    "Both template parameters cannot be unnamed.");
10208             ODRDiagTemplateError(FirstDecl->getLocation(),
10209                                  FirstDecl->getSourceRange(),
10210                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10211                 << FirstName;
10212             ODRDiagTemplateNote(SecondDecl->getLocation(),
10213                                 SecondDecl->getSourceRange(),
10214                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10215                 << SecondName;
10216             break;
10217           }
10218 
10219           switch (FirstDecl->getKind()) {
10220           default:
10221             llvm_unreachable("Invalid template parameter type.");
10222           case Decl::TemplateTypeParm: {
10223             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10224             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10225             const bool HasFirstDefaultArgument =
10226                 FirstParam->hasDefaultArgument() &&
10227                 !FirstParam->defaultArgumentWasInherited();
10228             const bool HasSecondDefaultArgument =
10229                 SecondParam->hasDefaultArgument() &&
10230                 !SecondParam->defaultArgumentWasInherited();
10231 
10232             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10233               ODRDiagTemplateError(FirstDecl->getLocation(),
10234                                    FirstDecl->getSourceRange(),
10235                                    ParamSingleDefaultArgument)
10236                   << HasFirstDefaultArgument;
10237               ODRDiagTemplateNote(SecondDecl->getLocation(),
10238                                   SecondDecl->getSourceRange(),
10239                                   ParamSingleDefaultArgument)
10240                   << HasSecondDefaultArgument;
10241               break;
10242             }
10243 
10244             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10245                    "Expecting default arguments.");
10246 
10247             ODRDiagTemplateError(FirstDecl->getLocation(),
10248                                  FirstDecl->getSourceRange(),
10249                                  ParamDifferentDefaultArgument);
10250             ODRDiagTemplateNote(SecondDecl->getLocation(),
10251                                 SecondDecl->getSourceRange(),
10252                                 ParamDifferentDefaultArgument);
10253 
10254             break;
10255           }
10256           case Decl::NonTypeTemplateParm: {
10257             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10258             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10259             const bool HasFirstDefaultArgument =
10260                 FirstParam->hasDefaultArgument() &&
10261                 !FirstParam->defaultArgumentWasInherited();
10262             const bool HasSecondDefaultArgument =
10263                 SecondParam->hasDefaultArgument() &&
10264                 !SecondParam->defaultArgumentWasInherited();
10265 
10266             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10267               ODRDiagTemplateError(FirstDecl->getLocation(),
10268                                    FirstDecl->getSourceRange(),
10269                                    ParamSingleDefaultArgument)
10270                   << HasFirstDefaultArgument;
10271               ODRDiagTemplateNote(SecondDecl->getLocation(),
10272                                   SecondDecl->getSourceRange(),
10273                                   ParamSingleDefaultArgument)
10274                   << HasSecondDefaultArgument;
10275               break;
10276             }
10277 
10278             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10279                    "Expecting default arguments.");
10280 
10281             ODRDiagTemplateError(FirstDecl->getLocation(),
10282                                  FirstDecl->getSourceRange(),
10283                                  ParamDifferentDefaultArgument);
10284             ODRDiagTemplateNote(SecondDecl->getLocation(),
10285                                 SecondDecl->getSourceRange(),
10286                                 ParamDifferentDefaultArgument);
10287 
10288             break;
10289           }
10290           case Decl::TemplateTemplateParm: {
10291             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10292             const auto *SecondParam =
10293                 cast<TemplateTemplateParmDecl>(SecondDecl);
10294             const bool HasFirstDefaultArgument =
10295                 FirstParam->hasDefaultArgument() &&
10296                 !FirstParam->defaultArgumentWasInherited();
10297             const bool HasSecondDefaultArgument =
10298                 SecondParam->hasDefaultArgument() &&
10299                 !SecondParam->defaultArgumentWasInherited();
10300 
10301             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10302               ODRDiagTemplateError(FirstDecl->getLocation(),
10303                                    FirstDecl->getSourceRange(),
10304                                    ParamSingleDefaultArgument)
10305                   << HasFirstDefaultArgument;
10306               ODRDiagTemplateNote(SecondDecl->getLocation(),
10307                                   SecondDecl->getSourceRange(),
10308                                   ParamSingleDefaultArgument)
10309                   << HasSecondDefaultArgument;
10310               break;
10311             }
10312 
10313             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10314                    "Expecting default arguments.");
10315 
10316             ODRDiagTemplateError(FirstDecl->getLocation(),
10317                                  FirstDecl->getSourceRange(),
10318                                  ParamDifferentDefaultArgument);
10319             ODRDiagTemplateNote(SecondDecl->getLocation(),
10320                                 SecondDecl->getSourceRange(),
10321                                 ParamDifferentDefaultArgument);
10322 
10323             break;
10324           }
10325           }
10326 
10327           break;
10328         }
10329 
10330         if (FirstIt != FirstEnd) {
10331           Diagnosed = true;
10332           break;
10333         }
10334       }
10335 
10336       DeclHashes FirstHashes;
10337       DeclHashes SecondHashes;
10338       const DeclContext *DC = FirstRecord;
10339       PopulateHashes(FirstHashes, FirstRecord, DC);
10340       PopulateHashes(SecondHashes, SecondRecord, DC);
10341 
10342       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10343       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10344       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10345       Decl *FirstDecl = DR.FirstDecl;
10346       Decl *SecondDecl = DR.SecondDecl;
10347 
10348       if (FirstDiffType == Other || SecondDiffType == Other) {
10349         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10350                               SecondModule);
10351         Diagnosed = true;
10352         break;
10353       }
10354 
10355       if (FirstDiffType != SecondDiffType) {
10356         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10357                             SecondModule);
10358         Diagnosed = true;
10359         break;
10360       }
10361 
10362       assert(FirstDiffType == SecondDiffType);
10363 
10364       switch (FirstDiffType) {
10365       case Other:
10366       case EndOfClass:
10367       case PublicSpecifer:
10368       case PrivateSpecifer:
10369       case ProtectedSpecifer:
10370         llvm_unreachable("Invalid diff type");
10371 
10372       case StaticAssert: {
10373         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10374         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10375 
10376         Expr *FirstExpr = FirstSA->getAssertExpr();
10377         Expr *SecondExpr = SecondSA->getAssertExpr();
10378         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10379         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10380         if (FirstODRHash != SecondODRHash) {
10381           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10382                            FirstExpr->getSourceRange(), StaticAssertCondition);
10383           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10384                           SecondExpr->getSourceRange(), StaticAssertCondition);
10385           Diagnosed = true;
10386           break;
10387         }
10388 
10389         StringLiteral *FirstStr = FirstSA->getMessage();
10390         StringLiteral *SecondStr = SecondSA->getMessage();
10391         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10392         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10393           SourceLocation FirstLoc, SecondLoc;
10394           SourceRange FirstRange, SecondRange;
10395           if (FirstStr) {
10396             FirstLoc = FirstStr->getBeginLoc();
10397             FirstRange = FirstStr->getSourceRange();
10398           } else {
10399             FirstLoc = FirstSA->getBeginLoc();
10400             FirstRange = FirstSA->getSourceRange();
10401           }
10402           if (SecondStr) {
10403             SecondLoc = SecondStr->getBeginLoc();
10404             SecondRange = SecondStr->getSourceRange();
10405           } else {
10406             SecondLoc = SecondSA->getBeginLoc();
10407             SecondRange = SecondSA->getSourceRange();
10408           }
10409           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10410                            StaticAssertOnlyMessage)
10411               << (FirstStr == nullptr);
10412           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10413                           StaticAssertOnlyMessage)
10414               << (SecondStr == nullptr);
10415           Diagnosed = true;
10416           break;
10417         }
10418 
10419         if (FirstStr && SecondStr &&
10420             FirstStr->getString() != SecondStr->getString()) {
10421           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10422                            FirstStr->getSourceRange(), StaticAssertMessage);
10423           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10424                           SecondStr->getSourceRange(), StaticAssertMessage);
10425           Diagnosed = true;
10426           break;
10427         }
10428         break;
10429       }
10430       case Field: {
10431         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10432                                  cast<FieldDecl>(FirstDecl),
10433                                  cast<FieldDecl>(SecondDecl));
10434         break;
10435       }
10436       case CXXMethod: {
10437         enum {
10438           DiagMethod,
10439           DiagConstructor,
10440           DiagDestructor,
10441         } FirstMethodType,
10442             SecondMethodType;
10443         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10444           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10445           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10446           return DiagMethod;
10447         };
10448         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10449         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10450         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10451         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10452         auto FirstName = FirstMethod->getDeclName();
10453         auto SecondName = SecondMethod->getDeclName();
10454         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10455           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10456                            FirstMethod->getSourceRange(), MethodName)
10457               << FirstMethodType << FirstName;
10458           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10459                           SecondMethod->getSourceRange(), MethodName)
10460               << SecondMethodType << SecondName;
10461 
10462           Diagnosed = true;
10463           break;
10464         }
10465 
10466         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10467         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10468         if (FirstDeleted != SecondDeleted) {
10469           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10470                            FirstMethod->getSourceRange(), MethodDeleted)
10471               << FirstMethodType << FirstName << FirstDeleted;
10472 
10473           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10474                           SecondMethod->getSourceRange(), MethodDeleted)
10475               << SecondMethodType << SecondName << SecondDeleted;
10476           Diagnosed = true;
10477           break;
10478         }
10479 
10480         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10481         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10482         if (FirstDefaulted != SecondDefaulted) {
10483           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10484                            FirstMethod->getSourceRange(), MethodDefaulted)
10485               << FirstMethodType << FirstName << FirstDefaulted;
10486 
10487           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10488                           SecondMethod->getSourceRange(), MethodDefaulted)
10489               << SecondMethodType << SecondName << SecondDefaulted;
10490           Diagnosed = true;
10491           break;
10492         }
10493 
10494         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10495         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10496         const bool FirstPure = FirstMethod->isPure();
10497         const bool SecondPure = SecondMethod->isPure();
10498         if ((FirstVirtual || SecondVirtual) &&
10499             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10500           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10501                            FirstMethod->getSourceRange(), MethodVirtual)
10502               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10503           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10504                           SecondMethod->getSourceRange(), MethodVirtual)
10505               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10506           Diagnosed = true;
10507           break;
10508         }
10509 
10510         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10511         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10512         // class needs to be checked instead.
10513         const auto FirstStorage = FirstMethod->getStorageClass();
10514         const auto SecondStorage = SecondMethod->getStorageClass();
10515         const bool FirstStatic = FirstStorage == SC_Static;
10516         const bool SecondStatic = SecondStorage == SC_Static;
10517         if (FirstStatic != SecondStatic) {
10518           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10519                            FirstMethod->getSourceRange(), MethodStatic)
10520               << FirstMethodType << FirstName << FirstStatic;
10521           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10522                           SecondMethod->getSourceRange(), MethodStatic)
10523               << SecondMethodType << SecondName << SecondStatic;
10524           Diagnosed = true;
10525           break;
10526         }
10527 
10528         const bool FirstVolatile = FirstMethod->isVolatile();
10529         const bool SecondVolatile = SecondMethod->isVolatile();
10530         if (FirstVolatile != SecondVolatile) {
10531           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10532                            FirstMethod->getSourceRange(), MethodVolatile)
10533               << FirstMethodType << FirstName << FirstVolatile;
10534           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10535                           SecondMethod->getSourceRange(), MethodVolatile)
10536               << SecondMethodType << SecondName << SecondVolatile;
10537           Diagnosed = true;
10538           break;
10539         }
10540 
10541         const bool FirstConst = FirstMethod->isConst();
10542         const bool SecondConst = SecondMethod->isConst();
10543         if (FirstConst != SecondConst) {
10544           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10545                            FirstMethod->getSourceRange(), MethodConst)
10546               << FirstMethodType << FirstName << FirstConst;
10547           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10548                           SecondMethod->getSourceRange(), MethodConst)
10549               << SecondMethodType << SecondName << SecondConst;
10550           Diagnosed = true;
10551           break;
10552         }
10553 
10554         const bool FirstInline = FirstMethod->isInlineSpecified();
10555         const bool SecondInline = SecondMethod->isInlineSpecified();
10556         if (FirstInline != SecondInline) {
10557           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10558                            FirstMethod->getSourceRange(), MethodInline)
10559               << FirstMethodType << FirstName << FirstInline;
10560           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10561                           SecondMethod->getSourceRange(), MethodInline)
10562               << SecondMethodType << SecondName << SecondInline;
10563           Diagnosed = true;
10564           break;
10565         }
10566 
10567         const unsigned FirstNumParameters = FirstMethod->param_size();
10568         const unsigned SecondNumParameters = SecondMethod->param_size();
10569         if (FirstNumParameters != SecondNumParameters) {
10570           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10571                            FirstMethod->getSourceRange(),
10572                            MethodNumberParameters)
10573               << FirstMethodType << FirstName << FirstNumParameters;
10574           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10575                           SecondMethod->getSourceRange(),
10576                           MethodNumberParameters)
10577               << SecondMethodType << SecondName << SecondNumParameters;
10578           Diagnosed = true;
10579           break;
10580         }
10581 
10582         // Need this status boolean to know when break out of the switch.
10583         bool ParameterMismatch = false;
10584         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10585           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10586           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10587 
10588           QualType FirstParamType = FirstParam->getType();
10589           QualType SecondParamType = SecondParam->getType();
10590           if (FirstParamType != SecondParamType &&
10591               ComputeQualTypeODRHash(FirstParamType) !=
10592                   ComputeQualTypeODRHash(SecondParamType)) {
10593             if (const DecayedType *ParamDecayedType =
10594                     FirstParamType->getAs<DecayedType>()) {
10595               ODRDiagDeclError(
10596                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10597                   FirstMethod->getSourceRange(), MethodParameterType)
10598                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10599                   << true << ParamDecayedType->getOriginalType();
10600             } else {
10601               ODRDiagDeclError(
10602                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10603                   FirstMethod->getSourceRange(), MethodParameterType)
10604                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10605                   << false;
10606             }
10607 
10608             if (const DecayedType *ParamDecayedType =
10609                     SecondParamType->getAs<DecayedType>()) {
10610               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10611                               SecondMethod->getSourceRange(),
10612                               MethodParameterType)
10613                   << SecondMethodType << SecondName << (I + 1)
10614                   << SecondParamType << true
10615                   << ParamDecayedType->getOriginalType();
10616             } else {
10617               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10618                               SecondMethod->getSourceRange(),
10619                               MethodParameterType)
10620                   << SecondMethodType << SecondName << (I + 1)
10621                   << SecondParamType << false;
10622             }
10623             ParameterMismatch = true;
10624             break;
10625           }
10626 
10627           DeclarationName FirstParamName = FirstParam->getDeclName();
10628           DeclarationName SecondParamName = SecondParam->getDeclName();
10629           if (FirstParamName != SecondParamName) {
10630             ODRDiagDeclError(FirstRecord, FirstModule,
10631                              FirstMethod->getLocation(),
10632                              FirstMethod->getSourceRange(), MethodParameterName)
10633                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10634             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10635                             SecondMethod->getSourceRange(), MethodParameterName)
10636                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10637             ParameterMismatch = true;
10638             break;
10639           }
10640 
10641           const Expr *FirstInit = FirstParam->getInit();
10642           const Expr *SecondInit = SecondParam->getInit();
10643           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10644             ODRDiagDeclError(FirstRecord, FirstModule,
10645                              FirstMethod->getLocation(),
10646                              FirstMethod->getSourceRange(),
10647                              MethodParameterSingleDefaultArgument)
10648                 << FirstMethodType << FirstName << (I + 1)
10649                 << (FirstInit == nullptr)
10650                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10651             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10652                             SecondMethod->getSourceRange(),
10653                             MethodParameterSingleDefaultArgument)
10654                 << SecondMethodType << SecondName << (I + 1)
10655                 << (SecondInit == nullptr)
10656                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10657             ParameterMismatch = true;
10658             break;
10659           }
10660 
10661           if (FirstInit && SecondInit &&
10662               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10663             ODRDiagDeclError(FirstRecord, FirstModule,
10664                              FirstMethod->getLocation(),
10665                              FirstMethod->getSourceRange(),
10666                              MethodParameterDifferentDefaultArgument)
10667                 << FirstMethodType << FirstName << (I + 1)
10668                 << FirstInit->getSourceRange();
10669             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10670                             SecondMethod->getSourceRange(),
10671                             MethodParameterDifferentDefaultArgument)
10672                 << SecondMethodType << SecondName << (I + 1)
10673                 << SecondInit->getSourceRange();
10674             ParameterMismatch = true;
10675             break;
10676 
10677           }
10678         }
10679 
10680         if (ParameterMismatch) {
10681           Diagnosed = true;
10682           break;
10683         }
10684 
10685         const auto *FirstTemplateArgs =
10686             FirstMethod->getTemplateSpecializationArgs();
10687         const auto *SecondTemplateArgs =
10688             SecondMethod->getTemplateSpecializationArgs();
10689 
10690         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10691             (!FirstTemplateArgs && SecondTemplateArgs)) {
10692           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10693                            FirstMethod->getSourceRange(),
10694                            MethodNoTemplateArguments)
10695               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10696           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10697                           SecondMethod->getSourceRange(),
10698                           MethodNoTemplateArguments)
10699               << SecondMethodType << SecondName
10700               << (SecondTemplateArgs != nullptr);
10701 
10702           Diagnosed = true;
10703           break;
10704         }
10705 
10706         if (FirstTemplateArgs && SecondTemplateArgs) {
10707           // Remove pack expansions from argument list.
10708           auto ExpandTemplateArgumentList =
10709               [](const TemplateArgumentList *TAL) {
10710                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10711                 for (const TemplateArgument &TA : TAL->asArray()) {
10712                   if (TA.getKind() != TemplateArgument::Pack) {
10713                     ExpandedList.push_back(&TA);
10714                     continue;
10715                   }
10716                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10717                     ExpandedList.push_back(&PackTA);
10718                   }
10719                 }
10720                 return ExpandedList;
10721               };
10722           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10723               ExpandTemplateArgumentList(FirstTemplateArgs);
10724           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10725               ExpandTemplateArgumentList(SecondTemplateArgs);
10726 
10727           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10728             ODRDiagDeclError(FirstRecord, FirstModule,
10729                              FirstMethod->getLocation(),
10730                              FirstMethod->getSourceRange(),
10731                              MethodDifferentNumberTemplateArguments)
10732                 << FirstMethodType << FirstName
10733                 << (unsigned)FirstExpandedList.size();
10734             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10735                             SecondMethod->getSourceRange(),
10736                             MethodDifferentNumberTemplateArguments)
10737                 << SecondMethodType << SecondName
10738                 << (unsigned)SecondExpandedList.size();
10739 
10740             Diagnosed = true;
10741             break;
10742           }
10743 
10744           bool TemplateArgumentMismatch = false;
10745           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10746             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10747                                    &SecondTA = *SecondExpandedList[i];
10748             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10749                 ComputeTemplateArgumentODRHash(SecondTA)) {
10750               continue;
10751             }
10752 
10753             ODRDiagDeclError(
10754                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10755                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10756                 << FirstMethodType << FirstName << FirstTA << i + 1;
10757             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10758                             SecondMethod->getSourceRange(),
10759                             MethodDifferentTemplateArgument)
10760                 << SecondMethodType << SecondName << SecondTA << i + 1;
10761 
10762             TemplateArgumentMismatch = true;
10763             break;
10764           }
10765 
10766           if (TemplateArgumentMismatch) {
10767             Diagnosed = true;
10768             break;
10769           }
10770         }
10771 
10772         // Compute the hash of the method as if it has no body.
10773         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10774           Hash.clear();
10775           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10776           return Hash.CalculateHash();
10777         };
10778 
10779         // Compare the hash generated to the hash stored.  A difference means
10780         // that a body was present in the original source.  Due to merging,
10781         // the stardard way of detecting a body will not work.
10782         const bool HasFirstBody =
10783             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10784         const bool HasSecondBody =
10785             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10786 
10787         if (HasFirstBody != HasSecondBody) {
10788           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10789                            FirstMethod->getSourceRange(), MethodSingleBody)
10790               << FirstMethodType << FirstName << HasFirstBody;
10791           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10792                           SecondMethod->getSourceRange(), MethodSingleBody)
10793               << SecondMethodType << SecondName << HasSecondBody;
10794           Diagnosed = true;
10795           break;
10796         }
10797 
10798         if (HasFirstBody && HasSecondBody) {
10799           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10800                            FirstMethod->getSourceRange(), MethodDifferentBody)
10801               << FirstMethodType << FirstName;
10802           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10803                           SecondMethod->getSourceRange(), MethodDifferentBody)
10804               << SecondMethodType << SecondName;
10805           Diagnosed = true;
10806           break;
10807         }
10808 
10809         break;
10810       }
10811       case TypeAlias:
10812       case TypeDef: {
10813         Diagnosed = ODRDiagTypeDefOrAlias(
10814             FirstRecord, FirstModule, SecondModule,
10815             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10816             FirstDiffType == TypeAlias);
10817         break;
10818       }
10819       case Var: {
10820         Diagnosed =
10821             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10822                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10823         break;
10824       }
10825       case Friend: {
10826         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10827         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10828 
10829         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10830         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10831 
10832         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10833         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10834 
10835         if (FirstND && SecondND) {
10836           ODRDiagDeclError(FirstRecord, FirstModule,
10837                            FirstFriend->getFriendLoc(),
10838                            FirstFriend->getSourceRange(), FriendFunction)
10839               << FirstND;
10840           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10841                           SecondFriend->getSourceRange(), FriendFunction)
10842               << SecondND;
10843 
10844           Diagnosed = true;
10845           break;
10846         }
10847 
10848         if (FirstTSI && SecondTSI) {
10849           QualType FirstFriendType = FirstTSI->getType();
10850           QualType SecondFriendType = SecondTSI->getType();
10851           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10852                  ComputeQualTypeODRHash(SecondFriendType));
10853           ODRDiagDeclError(FirstRecord, FirstModule,
10854                            FirstFriend->getFriendLoc(),
10855                            FirstFriend->getSourceRange(), FriendType)
10856               << FirstFriendType;
10857           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10858                           SecondFriend->getSourceRange(), FriendType)
10859               << SecondFriendType;
10860           Diagnosed = true;
10861           break;
10862         }
10863 
10864         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10865                          FirstFriend->getSourceRange(), FriendTypeFunction)
10866             << (FirstTSI == nullptr);
10867         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10868                         SecondFriend->getSourceRange(), FriendTypeFunction)
10869             << (SecondTSI == nullptr);
10870 
10871         Diagnosed = true;
10872         break;
10873       }
10874       case FunctionTemplate: {
10875         FunctionTemplateDecl *FirstTemplate =
10876             cast<FunctionTemplateDecl>(FirstDecl);
10877         FunctionTemplateDecl *SecondTemplate =
10878             cast<FunctionTemplateDecl>(SecondDecl);
10879 
10880         TemplateParameterList *FirstTPL =
10881             FirstTemplate->getTemplateParameters();
10882         TemplateParameterList *SecondTPL =
10883             SecondTemplate->getTemplateParameters();
10884 
10885         if (FirstTPL->size() != SecondTPL->size()) {
10886           ODRDiagDeclError(FirstRecord, FirstModule,
10887                            FirstTemplate->getLocation(),
10888                            FirstTemplate->getSourceRange(),
10889                            FunctionTemplateDifferentNumberParameters)
10890               << FirstTemplate << FirstTPL->size();
10891           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10892                           SecondTemplate->getSourceRange(),
10893                           FunctionTemplateDifferentNumberParameters)
10894               << SecondTemplate << SecondTPL->size();
10895 
10896           Diagnosed = true;
10897           break;
10898         }
10899 
10900         bool ParameterMismatch = false;
10901         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10902           NamedDecl *FirstParam = FirstTPL->getParam(i);
10903           NamedDecl *SecondParam = SecondTPL->getParam(i);
10904 
10905           if (FirstParam->getKind() != SecondParam->getKind()) {
10906             enum {
10907               TemplateTypeParameter,
10908               NonTypeTemplateParameter,
10909               TemplateTemplateParameter,
10910             };
10911             auto GetParamType = [](NamedDecl *D) {
10912               switch (D->getKind()) {
10913                 default:
10914                   llvm_unreachable("Unexpected template parameter type");
10915                 case Decl::TemplateTypeParm:
10916                   return TemplateTypeParameter;
10917                 case Decl::NonTypeTemplateParm:
10918                   return NonTypeTemplateParameter;
10919                 case Decl::TemplateTemplateParm:
10920                   return TemplateTemplateParameter;
10921               }
10922             };
10923 
10924             ODRDiagDeclError(FirstRecord, FirstModule,
10925                              FirstTemplate->getLocation(),
10926                              FirstTemplate->getSourceRange(),
10927                              FunctionTemplateParameterDifferentKind)
10928                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10929             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10930                             SecondTemplate->getSourceRange(),
10931                             FunctionTemplateParameterDifferentKind)
10932                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10933 
10934             ParameterMismatch = true;
10935             break;
10936           }
10937 
10938           if (FirstParam->getName() != SecondParam->getName()) {
10939             ODRDiagDeclError(
10940                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10941                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10942                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10943                 << FirstParam;
10944             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10945                             SecondTemplate->getSourceRange(),
10946                             FunctionTemplateParameterName)
10947                 << SecondTemplate << (i + 1)
10948                 << (bool)SecondParam->getIdentifier() << SecondParam;
10949             ParameterMismatch = true;
10950             break;
10951           }
10952 
10953           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10954               isa<TemplateTypeParmDecl>(SecondParam)) {
10955             TemplateTypeParmDecl *FirstTTPD =
10956                 cast<TemplateTypeParmDecl>(FirstParam);
10957             TemplateTypeParmDecl *SecondTTPD =
10958                 cast<TemplateTypeParmDecl>(SecondParam);
10959             bool HasFirstDefaultArgument =
10960                 FirstTTPD->hasDefaultArgument() &&
10961                 !FirstTTPD->defaultArgumentWasInherited();
10962             bool HasSecondDefaultArgument =
10963                 SecondTTPD->hasDefaultArgument() &&
10964                 !SecondTTPD->defaultArgumentWasInherited();
10965             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10966               ODRDiagDeclError(FirstRecord, FirstModule,
10967                                FirstTemplate->getLocation(),
10968                                FirstTemplate->getSourceRange(),
10969                                FunctionTemplateParameterSingleDefaultArgument)
10970                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10971               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10972                               SecondTemplate->getSourceRange(),
10973                               FunctionTemplateParameterSingleDefaultArgument)
10974                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10975               ParameterMismatch = true;
10976               break;
10977             }
10978 
10979             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10980               QualType FirstType = FirstTTPD->getDefaultArgument();
10981               QualType SecondType = SecondTTPD->getDefaultArgument();
10982               if (ComputeQualTypeODRHash(FirstType) !=
10983                   ComputeQualTypeODRHash(SecondType)) {
10984                 ODRDiagDeclError(
10985                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10986                     FirstTemplate->getSourceRange(),
10987                     FunctionTemplateParameterDifferentDefaultArgument)
10988                     << FirstTemplate << (i + 1) << FirstType;
10989                 ODRDiagDeclNote(
10990                     SecondModule, SecondTemplate->getLocation(),
10991                     SecondTemplate->getSourceRange(),
10992                     FunctionTemplateParameterDifferentDefaultArgument)
10993                     << SecondTemplate << (i + 1) << SecondType;
10994                 ParameterMismatch = true;
10995                 break;
10996               }
10997             }
10998 
10999             if (FirstTTPD->isParameterPack() !=
11000                 SecondTTPD->isParameterPack()) {
11001               ODRDiagDeclError(FirstRecord, FirstModule,
11002                                FirstTemplate->getLocation(),
11003                                FirstTemplate->getSourceRange(),
11004                                FunctionTemplatePackParameter)
11005                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11006               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11007                               SecondTemplate->getSourceRange(),
11008                               FunctionTemplatePackParameter)
11009                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11010               ParameterMismatch = true;
11011               break;
11012             }
11013           }
11014 
11015           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11016               isa<TemplateTemplateParmDecl>(SecondParam)) {
11017             TemplateTemplateParmDecl *FirstTTPD =
11018                 cast<TemplateTemplateParmDecl>(FirstParam);
11019             TemplateTemplateParmDecl *SecondTTPD =
11020                 cast<TemplateTemplateParmDecl>(SecondParam);
11021 
11022             TemplateParameterList *FirstTPL =
11023                 FirstTTPD->getTemplateParameters();
11024             TemplateParameterList *SecondTPL =
11025                 SecondTTPD->getTemplateParameters();
11026 
11027             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11028                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11029               ODRDiagDeclError(FirstRecord, FirstModule,
11030                                FirstTemplate->getLocation(),
11031                                FirstTemplate->getSourceRange(),
11032                                FunctionTemplateParameterDifferentType)
11033                   << FirstTemplate << (i + 1);
11034               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11035                               SecondTemplate->getSourceRange(),
11036                               FunctionTemplateParameterDifferentType)
11037                   << SecondTemplate << (i + 1);
11038               ParameterMismatch = true;
11039               break;
11040             }
11041 
11042             bool HasFirstDefaultArgument =
11043                 FirstTTPD->hasDefaultArgument() &&
11044                 !FirstTTPD->defaultArgumentWasInherited();
11045             bool HasSecondDefaultArgument =
11046                 SecondTTPD->hasDefaultArgument() &&
11047                 !SecondTTPD->defaultArgumentWasInherited();
11048             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11049               ODRDiagDeclError(FirstRecord, FirstModule,
11050                                FirstTemplate->getLocation(),
11051                                FirstTemplate->getSourceRange(),
11052                                FunctionTemplateParameterSingleDefaultArgument)
11053                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11054               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11055                               SecondTemplate->getSourceRange(),
11056                               FunctionTemplateParameterSingleDefaultArgument)
11057                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11058               ParameterMismatch = true;
11059               break;
11060             }
11061 
11062             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11063               TemplateArgument FirstTA =
11064                   FirstTTPD->getDefaultArgument().getArgument();
11065               TemplateArgument SecondTA =
11066                   SecondTTPD->getDefaultArgument().getArgument();
11067               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11068                   ComputeTemplateArgumentODRHash(SecondTA)) {
11069                 ODRDiagDeclError(
11070                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11071                     FirstTemplate->getSourceRange(),
11072                     FunctionTemplateParameterDifferentDefaultArgument)
11073                     << FirstTemplate << (i + 1) << FirstTA;
11074                 ODRDiagDeclNote(
11075                     SecondModule, SecondTemplate->getLocation(),
11076                     SecondTemplate->getSourceRange(),
11077                     FunctionTemplateParameterDifferentDefaultArgument)
11078                     << SecondTemplate << (i + 1) << SecondTA;
11079                 ParameterMismatch = true;
11080                 break;
11081               }
11082             }
11083 
11084             if (FirstTTPD->isParameterPack() !=
11085                 SecondTTPD->isParameterPack()) {
11086               ODRDiagDeclError(FirstRecord, FirstModule,
11087                                FirstTemplate->getLocation(),
11088                                FirstTemplate->getSourceRange(),
11089                                FunctionTemplatePackParameter)
11090                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11091               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11092                               SecondTemplate->getSourceRange(),
11093                               FunctionTemplatePackParameter)
11094                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11095               ParameterMismatch = true;
11096               break;
11097             }
11098           }
11099 
11100           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11101               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11102             NonTypeTemplateParmDecl *FirstNTTPD =
11103                 cast<NonTypeTemplateParmDecl>(FirstParam);
11104             NonTypeTemplateParmDecl *SecondNTTPD =
11105                 cast<NonTypeTemplateParmDecl>(SecondParam);
11106 
11107             QualType FirstType = FirstNTTPD->getType();
11108             QualType SecondType = SecondNTTPD->getType();
11109             if (ComputeQualTypeODRHash(FirstType) !=
11110                 ComputeQualTypeODRHash(SecondType)) {
11111               ODRDiagDeclError(FirstRecord, FirstModule,
11112                                FirstTemplate->getLocation(),
11113                                FirstTemplate->getSourceRange(),
11114                                FunctionTemplateParameterDifferentType)
11115                   << FirstTemplate << (i + 1);
11116               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11117                               SecondTemplate->getSourceRange(),
11118                               FunctionTemplateParameterDifferentType)
11119                   << SecondTemplate << (i + 1);
11120               ParameterMismatch = true;
11121               break;
11122             }
11123 
11124             bool HasFirstDefaultArgument =
11125                 FirstNTTPD->hasDefaultArgument() &&
11126                 !FirstNTTPD->defaultArgumentWasInherited();
11127             bool HasSecondDefaultArgument =
11128                 SecondNTTPD->hasDefaultArgument() &&
11129                 !SecondNTTPD->defaultArgumentWasInherited();
11130             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11131               ODRDiagDeclError(FirstRecord, FirstModule,
11132                                FirstTemplate->getLocation(),
11133                                FirstTemplate->getSourceRange(),
11134                                FunctionTemplateParameterSingleDefaultArgument)
11135                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11136               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11137                               SecondTemplate->getSourceRange(),
11138                               FunctionTemplateParameterSingleDefaultArgument)
11139                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11140               ParameterMismatch = true;
11141               break;
11142             }
11143 
11144             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11145               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11146               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11147               if (ComputeODRHash(FirstDefaultArgument) !=
11148                   ComputeODRHash(SecondDefaultArgument)) {
11149                 ODRDiagDeclError(
11150                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11151                     FirstTemplate->getSourceRange(),
11152                     FunctionTemplateParameterDifferentDefaultArgument)
11153                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11154                 ODRDiagDeclNote(
11155                     SecondModule, SecondTemplate->getLocation(),
11156                     SecondTemplate->getSourceRange(),
11157                     FunctionTemplateParameterDifferentDefaultArgument)
11158                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11159                 ParameterMismatch = true;
11160                 break;
11161               }
11162             }
11163 
11164             if (FirstNTTPD->isParameterPack() !=
11165                 SecondNTTPD->isParameterPack()) {
11166               ODRDiagDeclError(FirstRecord, FirstModule,
11167                                FirstTemplate->getLocation(),
11168                                FirstTemplate->getSourceRange(),
11169                                FunctionTemplatePackParameter)
11170                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11171               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11172                               SecondTemplate->getSourceRange(),
11173                               FunctionTemplatePackParameter)
11174                   << SecondTemplate << (i + 1)
11175                   << SecondNTTPD->isParameterPack();
11176               ParameterMismatch = true;
11177               break;
11178             }
11179           }
11180         }
11181 
11182         if (ParameterMismatch) {
11183           Diagnosed = true;
11184           break;
11185         }
11186 
11187         break;
11188       }
11189       }
11190 
11191       if (Diagnosed)
11192         continue;
11193 
11194       Diag(FirstDecl->getLocation(),
11195            diag::err_module_odr_violation_mismatch_decl_unknown)
11196           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11197           << FirstDecl->getSourceRange();
11198       Diag(SecondDecl->getLocation(),
11199            diag::note_module_odr_violation_mismatch_decl_unknown)
11200           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11201       Diagnosed = true;
11202     }
11203 
11204     if (!Diagnosed) {
11205       // All definitions are updates to the same declaration. This happens if a
11206       // module instantiates the declaration of a class template specialization
11207       // and two or more other modules instantiate its definition.
11208       //
11209       // FIXME: Indicate which modules had instantiations of this definition.
11210       // FIXME: How can this even happen?
11211       Diag(Merge.first->getLocation(),
11212            diag::err_module_odr_violation_different_instantiations)
11213         << Merge.first;
11214     }
11215   }
11216 
11217   // Issue ODR failures diagnostics for functions.
11218   for (auto &Merge : FunctionOdrMergeFailures) {
11219     enum ODRFunctionDifference {
11220       ReturnType,
11221       ParameterName,
11222       ParameterType,
11223       ParameterSingleDefaultArgument,
11224       ParameterDifferentDefaultArgument,
11225       FunctionBody,
11226     };
11227 
11228     FunctionDecl *FirstFunction = Merge.first;
11229     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11230 
11231     bool Diagnosed = false;
11232     for (auto &SecondFunction : Merge.second) {
11233 
11234       if (FirstFunction == SecondFunction)
11235         continue;
11236 
11237       std::string SecondModule =
11238           getOwningModuleNameForDiagnostic(SecondFunction);
11239 
11240       auto ODRDiagError = [FirstFunction, &FirstModule,
11241                            this](SourceLocation Loc, SourceRange Range,
11242                                  ODRFunctionDifference DiffType) {
11243         return Diag(Loc, diag::err_module_odr_violation_function)
11244                << FirstFunction << FirstModule.empty() << FirstModule << Range
11245                << DiffType;
11246       };
11247       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11248                                                SourceRange Range,
11249                                                ODRFunctionDifference DiffType) {
11250         return Diag(Loc, diag::note_module_odr_violation_function)
11251                << SecondModule << Range << DiffType;
11252       };
11253 
11254       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11255           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11256         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11257                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11258             << FirstFunction->getReturnType();
11259         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11260                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11261             << SecondFunction->getReturnType();
11262         Diagnosed = true;
11263         break;
11264       }
11265 
11266       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11267              "Merged functions with different number of parameters");
11268 
11269       auto ParamSize = FirstFunction->param_size();
11270       bool ParameterMismatch = false;
11271       for (unsigned I = 0; I < ParamSize; ++I) {
11272         auto *FirstParam = FirstFunction->getParamDecl(I);
11273         auto *SecondParam = SecondFunction->getParamDecl(I);
11274 
11275         assert(getContext().hasSameType(FirstParam->getType(),
11276                                       SecondParam->getType()) &&
11277                "Merged function has different parameter types.");
11278 
11279         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11280           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11281                        ParameterName)
11282               << I + 1 << FirstParam->getDeclName();
11283           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11284                       ParameterName)
11285               << I + 1 << SecondParam->getDeclName();
11286           ParameterMismatch = true;
11287           break;
11288         };
11289 
11290         QualType FirstParamType = FirstParam->getType();
11291         QualType SecondParamType = SecondParam->getType();
11292         if (FirstParamType != SecondParamType &&
11293             ComputeQualTypeODRHash(FirstParamType) !=
11294                 ComputeQualTypeODRHash(SecondParamType)) {
11295           if (const DecayedType *ParamDecayedType =
11296                   FirstParamType->getAs<DecayedType>()) {
11297             ODRDiagError(FirstParam->getLocation(),
11298                          FirstParam->getSourceRange(), ParameterType)
11299                 << (I + 1) << FirstParamType << true
11300                 << ParamDecayedType->getOriginalType();
11301           } else {
11302             ODRDiagError(FirstParam->getLocation(),
11303                          FirstParam->getSourceRange(), ParameterType)
11304                 << (I + 1) << FirstParamType << false;
11305           }
11306 
11307           if (const DecayedType *ParamDecayedType =
11308                   SecondParamType->getAs<DecayedType>()) {
11309             ODRDiagNote(SecondParam->getLocation(),
11310                         SecondParam->getSourceRange(), ParameterType)
11311                 << (I + 1) << SecondParamType << true
11312                 << ParamDecayedType->getOriginalType();
11313           } else {
11314             ODRDiagNote(SecondParam->getLocation(),
11315                         SecondParam->getSourceRange(), ParameterType)
11316                 << (I + 1) << SecondParamType << false;
11317           }
11318           ParameterMismatch = true;
11319           break;
11320         }
11321 
11322         const Expr *FirstInit = FirstParam->getInit();
11323         const Expr *SecondInit = SecondParam->getInit();
11324         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11325           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11326                        ParameterSingleDefaultArgument)
11327               << (I + 1) << (FirstInit == nullptr)
11328               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11329           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11330                       ParameterSingleDefaultArgument)
11331               << (I + 1) << (SecondInit == nullptr)
11332               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11333           ParameterMismatch = true;
11334           break;
11335         }
11336 
11337         if (FirstInit && SecondInit &&
11338             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11339           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11340                        ParameterDifferentDefaultArgument)
11341               << (I + 1) << FirstInit->getSourceRange();
11342           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11343                       ParameterDifferentDefaultArgument)
11344               << (I + 1) << SecondInit->getSourceRange();
11345           ParameterMismatch = true;
11346           break;
11347         }
11348 
11349         assert(ComputeSubDeclODRHash(FirstParam) ==
11350                    ComputeSubDeclODRHash(SecondParam) &&
11351                "Undiagnosed parameter difference.");
11352       }
11353 
11354       if (ParameterMismatch) {
11355         Diagnosed = true;
11356         break;
11357       }
11358 
11359       // If no error has been generated before now, assume the problem is in
11360       // the body and generate a message.
11361       ODRDiagError(FirstFunction->getLocation(),
11362                    FirstFunction->getSourceRange(), FunctionBody);
11363       ODRDiagNote(SecondFunction->getLocation(),
11364                   SecondFunction->getSourceRange(), FunctionBody);
11365       Diagnosed = true;
11366       break;
11367     }
11368     (void)Diagnosed;
11369     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11370   }
11371 
11372   // Issue ODR failures diagnostics for enums.
11373   for (auto &Merge : EnumOdrMergeFailures) {
11374     enum ODREnumDifference {
11375       SingleScopedEnum,
11376       EnumTagKeywordMismatch,
11377       SingleSpecifiedType,
11378       DifferentSpecifiedTypes,
11379       DifferentNumberEnumConstants,
11380       EnumConstantName,
11381       EnumConstantSingleInitilizer,
11382       EnumConstantDifferentInitilizer,
11383     };
11384 
11385     // If we've already pointed out a specific problem with this enum, don't
11386     // bother issuing a general "something's different" diagnostic.
11387     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11388       continue;
11389 
11390     EnumDecl *FirstEnum = Merge.first;
11391     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11392 
11393     using DeclHashes =
11394         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11395     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11396                               DeclHashes &Hashes, EnumDecl *Enum) {
11397       for (auto *D : Enum->decls()) {
11398         // Due to decl merging, the first EnumDecl is the parent of
11399         // Decls in both records.
11400         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11401           continue;
11402         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11403         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11404                             ComputeSubDeclODRHash(D));
11405       }
11406     };
11407     DeclHashes FirstHashes;
11408     PopulateHashes(FirstHashes, FirstEnum);
11409     bool Diagnosed = false;
11410     for (auto &SecondEnum : Merge.second) {
11411 
11412       if (FirstEnum == SecondEnum)
11413         continue;
11414 
11415       std::string SecondModule =
11416           getOwningModuleNameForDiagnostic(SecondEnum);
11417 
11418       auto ODRDiagError = [FirstEnum, &FirstModule,
11419                            this](SourceLocation Loc, SourceRange Range,
11420                                  ODREnumDifference DiffType) {
11421         return Diag(Loc, diag::err_module_odr_violation_enum)
11422                << FirstEnum << FirstModule.empty() << FirstModule << Range
11423                << DiffType;
11424       };
11425       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11426                                                SourceRange Range,
11427                                                ODREnumDifference DiffType) {
11428         return Diag(Loc, diag::note_module_odr_violation_enum)
11429                << SecondModule << Range << DiffType;
11430       };
11431 
11432       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11433         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11434                      SingleScopedEnum)
11435             << FirstEnum->isScoped();
11436         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11437                     SingleScopedEnum)
11438             << SecondEnum->isScoped();
11439         Diagnosed = true;
11440         continue;
11441       }
11442 
11443       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11444         if (FirstEnum->isScopedUsingClassTag() !=
11445             SecondEnum->isScopedUsingClassTag()) {
11446           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11447                        EnumTagKeywordMismatch)
11448               << FirstEnum->isScopedUsingClassTag();
11449           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11450                       EnumTagKeywordMismatch)
11451               << SecondEnum->isScopedUsingClassTag();
11452           Diagnosed = true;
11453           continue;
11454         }
11455       }
11456 
11457       QualType FirstUnderlyingType =
11458           FirstEnum->getIntegerTypeSourceInfo()
11459               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11460               : QualType();
11461       QualType SecondUnderlyingType =
11462           SecondEnum->getIntegerTypeSourceInfo()
11463               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11464               : QualType();
11465       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11466           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11467                        SingleSpecifiedType)
11468               << !FirstUnderlyingType.isNull();
11469           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11470                       SingleSpecifiedType)
11471               << !SecondUnderlyingType.isNull();
11472           Diagnosed = true;
11473           continue;
11474       }
11475 
11476       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11477         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11478             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11479           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11480                        DifferentSpecifiedTypes)
11481               << FirstUnderlyingType;
11482           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11483                       DifferentSpecifiedTypes)
11484               << SecondUnderlyingType;
11485           Diagnosed = true;
11486           continue;
11487         }
11488       }
11489 
11490       DeclHashes SecondHashes;
11491       PopulateHashes(SecondHashes, SecondEnum);
11492 
11493       if (FirstHashes.size() != SecondHashes.size()) {
11494         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11495                      DifferentNumberEnumConstants)
11496             << (int)FirstHashes.size();
11497         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11498                     DifferentNumberEnumConstants)
11499             << (int)SecondHashes.size();
11500         Diagnosed = true;
11501         continue;
11502       }
11503 
11504       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11505         if (FirstHashes[I].second == SecondHashes[I].second)
11506           continue;
11507         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11508         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11509 
11510         if (FirstEnumConstant->getDeclName() !=
11511             SecondEnumConstant->getDeclName()) {
11512 
11513           ODRDiagError(FirstEnumConstant->getLocation(),
11514                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11515               << I + 1 << FirstEnumConstant;
11516           ODRDiagNote(SecondEnumConstant->getLocation(),
11517                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11518               << I + 1 << SecondEnumConstant;
11519           Diagnosed = true;
11520           break;
11521         }
11522 
11523         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11524         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11525         if (!FirstInit && !SecondInit)
11526           continue;
11527 
11528         if (!FirstInit || !SecondInit) {
11529           ODRDiagError(FirstEnumConstant->getLocation(),
11530                        FirstEnumConstant->getSourceRange(),
11531                        EnumConstantSingleInitilizer)
11532               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11533           ODRDiagNote(SecondEnumConstant->getLocation(),
11534                       SecondEnumConstant->getSourceRange(),
11535                       EnumConstantSingleInitilizer)
11536               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11537           Diagnosed = true;
11538           break;
11539         }
11540 
11541         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11542           ODRDiagError(FirstEnumConstant->getLocation(),
11543                        FirstEnumConstant->getSourceRange(),
11544                        EnumConstantDifferentInitilizer)
11545               << I + 1 << FirstEnumConstant;
11546           ODRDiagNote(SecondEnumConstant->getLocation(),
11547                       SecondEnumConstant->getSourceRange(),
11548                       EnumConstantDifferentInitilizer)
11549               << I + 1 << SecondEnumConstant;
11550           Diagnosed = true;
11551           break;
11552         }
11553       }
11554     }
11555 
11556     (void)Diagnosed;
11557     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11558   }
11559 }
11560 
11561 void ASTReader::StartedDeserializing() {
11562   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11563     ReadTimer->startTimer();
11564 }
11565 
11566 void ASTReader::FinishedDeserializing() {
11567   assert(NumCurrentElementsDeserializing &&
11568          "FinishedDeserializing not paired with StartedDeserializing");
11569   if (NumCurrentElementsDeserializing == 1) {
11570     // We decrease NumCurrentElementsDeserializing only after pending actions
11571     // are finished, to avoid recursively re-calling finishPendingActions().
11572     finishPendingActions();
11573   }
11574   --NumCurrentElementsDeserializing;
11575 
11576   if (NumCurrentElementsDeserializing == 0) {
11577     // Propagate exception specification and deduced type updates along
11578     // redeclaration chains.
11579     //
11580     // We do this now rather than in finishPendingActions because we want to
11581     // be able to walk the complete redeclaration chains of the updated decls.
11582     while (!PendingExceptionSpecUpdates.empty() ||
11583            !PendingDeducedTypeUpdates.empty()) {
11584       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11585       PendingExceptionSpecUpdates.clear();
11586       for (auto Update : ESUpdates) {
11587         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11588         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11589         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11590         if (auto *Listener = getContext().getASTMutationListener())
11591           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11592         for (auto *Redecl : Update.second->redecls())
11593           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11594       }
11595 
11596       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11597       PendingDeducedTypeUpdates.clear();
11598       for (auto Update : DTUpdates) {
11599         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11600         // FIXME: If the return type is already deduced, check that it matches.
11601         getContext().adjustDeducedFunctionResultType(Update.first,
11602                                                      Update.second);
11603       }
11604     }
11605 
11606     if (ReadTimer)
11607       ReadTimer->stopTimer();
11608 
11609     diagnoseOdrViolations();
11610 
11611     // We are not in recursive loading, so it's safe to pass the "interesting"
11612     // decls to the consumer.
11613     if (Consumer)
11614       PassInterestingDeclsToConsumer();
11615   }
11616 }
11617 
11618 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11619   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11620     // Remove any fake results before adding any real ones.
11621     auto It = PendingFakeLookupResults.find(II);
11622     if (It != PendingFakeLookupResults.end()) {
11623       for (auto *ND : It->second)
11624         SemaObj->IdResolver.RemoveDecl(ND);
11625       // FIXME: this works around module+PCH performance issue.
11626       // Rather than erase the result from the map, which is O(n), just clear
11627       // the vector of NamedDecls.
11628       It->second.clear();
11629     }
11630   }
11631 
11632   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11633     SemaObj->TUScope->AddDecl(D);
11634   } else if (SemaObj->TUScope) {
11635     // Adding the decl to IdResolver may have failed because it was already in
11636     // (even though it was not added in scope). If it is already in, make sure
11637     // it gets in the scope as well.
11638     if (std::find(SemaObj->IdResolver.begin(Name),
11639                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11640       SemaObj->TUScope->AddDecl(D);
11641   }
11642 }
11643 
11644 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11645                      ASTContext *Context,
11646                      const PCHContainerReader &PCHContainerRdr,
11647                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11648                      StringRef isysroot,
11649                      DisableValidationForModuleKind DisableValidationKind,
11650                      bool AllowASTWithCompilerErrors,
11651                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11652                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11653                      std::unique_ptr<llvm::Timer> ReadTimer)
11654     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11655                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11656                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11657       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11658       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11659       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11660                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11661       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11662       DisableValidationKind(DisableValidationKind),
11663       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11664       AllowConfigurationMismatch(AllowConfigurationMismatch),
11665       ValidateSystemInputs(ValidateSystemInputs),
11666       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11667       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11668   SourceMgr.setExternalSLocEntrySource(this);
11669 
11670   for (const auto &Ext : Extensions) {
11671     auto BlockName = Ext->getExtensionMetadata().BlockName;
11672     auto Known = ModuleFileExtensions.find(BlockName);
11673     if (Known != ModuleFileExtensions.end()) {
11674       Diags.Report(diag::warn_duplicate_module_file_extension)
11675         << BlockName;
11676       continue;
11677     }
11678 
11679     ModuleFileExtensions.insert({BlockName, Ext});
11680   }
11681 }
11682 
11683 ASTReader::~ASTReader() {
11684   if (OwnsDeserializationListener)
11685     delete DeserializationListener;
11686 }
11687 
11688 IdentifierResolver &ASTReader::getIdResolver() {
11689   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11690 }
11691 
11692 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11693                                                unsigned AbbrevID) {
11694   Idx = 0;
11695   Record.clear();
11696   return Cursor.readRecord(AbbrevID, Record);
11697 }
11698 //===----------------------------------------------------------------------===//
11699 //// OMPClauseReader implementation
11700 ////===----------------------------------------------------------------------===//
11701 
11702 // This has to be in namespace clang because it's friended by all
11703 // of the OMP clauses.
11704 namespace clang {
11705 
11706 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11707   ASTRecordReader &Record;
11708   ASTContext &Context;
11709 
11710 public:
11711   OMPClauseReader(ASTRecordReader &Record)
11712       : Record(Record), Context(Record.getContext()) {}
11713 #define GEN_CLANG_CLAUSE_CLASS
11714 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11715 #include "llvm/Frontend/OpenMP/OMP.inc"
11716   OMPClause *readClause();
11717   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11718   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11719 };
11720 
11721 } // end namespace clang
11722 
11723 OMPClause *ASTRecordReader::readOMPClause() {
11724   return OMPClauseReader(*this).readClause();
11725 }
11726 
11727 OMPClause *OMPClauseReader::readClause() {
11728   OMPClause *C = nullptr;
11729   switch (llvm::omp::Clause(Record.readInt())) {
11730   case llvm::omp::OMPC_if:
11731     C = new (Context) OMPIfClause();
11732     break;
11733   case llvm::omp::OMPC_final:
11734     C = new (Context) OMPFinalClause();
11735     break;
11736   case llvm::omp::OMPC_num_threads:
11737     C = new (Context) OMPNumThreadsClause();
11738     break;
11739   case llvm::omp::OMPC_safelen:
11740     C = new (Context) OMPSafelenClause();
11741     break;
11742   case llvm::omp::OMPC_simdlen:
11743     C = new (Context) OMPSimdlenClause();
11744     break;
11745   case llvm::omp::OMPC_sizes: {
11746     unsigned NumSizes = Record.readInt();
11747     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11748     break;
11749   }
11750   case llvm::omp::OMPC_allocator:
11751     C = new (Context) OMPAllocatorClause();
11752     break;
11753   case llvm::omp::OMPC_collapse:
11754     C = new (Context) OMPCollapseClause();
11755     break;
11756   case llvm::omp::OMPC_default:
11757     C = new (Context) OMPDefaultClause();
11758     break;
11759   case llvm::omp::OMPC_proc_bind:
11760     C = new (Context) OMPProcBindClause();
11761     break;
11762   case llvm::omp::OMPC_schedule:
11763     C = new (Context) OMPScheduleClause();
11764     break;
11765   case llvm::omp::OMPC_ordered:
11766     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11767     break;
11768   case llvm::omp::OMPC_nowait:
11769     C = new (Context) OMPNowaitClause();
11770     break;
11771   case llvm::omp::OMPC_untied:
11772     C = new (Context) OMPUntiedClause();
11773     break;
11774   case llvm::omp::OMPC_mergeable:
11775     C = new (Context) OMPMergeableClause();
11776     break;
11777   case llvm::omp::OMPC_read:
11778     C = new (Context) OMPReadClause();
11779     break;
11780   case llvm::omp::OMPC_write:
11781     C = new (Context) OMPWriteClause();
11782     break;
11783   case llvm::omp::OMPC_update:
11784     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11785     break;
11786   case llvm::omp::OMPC_capture:
11787     C = new (Context) OMPCaptureClause();
11788     break;
11789   case llvm::omp::OMPC_seq_cst:
11790     C = new (Context) OMPSeqCstClause();
11791     break;
11792   case llvm::omp::OMPC_acq_rel:
11793     C = new (Context) OMPAcqRelClause();
11794     break;
11795   case llvm::omp::OMPC_acquire:
11796     C = new (Context) OMPAcquireClause();
11797     break;
11798   case llvm::omp::OMPC_release:
11799     C = new (Context) OMPReleaseClause();
11800     break;
11801   case llvm::omp::OMPC_relaxed:
11802     C = new (Context) OMPRelaxedClause();
11803     break;
11804   case llvm::omp::OMPC_threads:
11805     C = new (Context) OMPThreadsClause();
11806     break;
11807   case llvm::omp::OMPC_simd:
11808     C = new (Context) OMPSIMDClause();
11809     break;
11810   case llvm::omp::OMPC_nogroup:
11811     C = new (Context) OMPNogroupClause();
11812     break;
11813   case llvm::omp::OMPC_unified_address:
11814     C = new (Context) OMPUnifiedAddressClause();
11815     break;
11816   case llvm::omp::OMPC_unified_shared_memory:
11817     C = new (Context) OMPUnifiedSharedMemoryClause();
11818     break;
11819   case llvm::omp::OMPC_reverse_offload:
11820     C = new (Context) OMPReverseOffloadClause();
11821     break;
11822   case llvm::omp::OMPC_dynamic_allocators:
11823     C = new (Context) OMPDynamicAllocatorsClause();
11824     break;
11825   case llvm::omp::OMPC_atomic_default_mem_order:
11826     C = new (Context) OMPAtomicDefaultMemOrderClause();
11827     break;
11828  case llvm::omp::OMPC_private:
11829     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11830     break;
11831   case llvm::omp::OMPC_firstprivate:
11832     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11833     break;
11834   case llvm::omp::OMPC_lastprivate:
11835     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11836     break;
11837   case llvm::omp::OMPC_shared:
11838     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11839     break;
11840   case llvm::omp::OMPC_reduction: {
11841     unsigned N = Record.readInt();
11842     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11843     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11844     break;
11845   }
11846   case llvm::omp::OMPC_task_reduction:
11847     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11848     break;
11849   case llvm::omp::OMPC_in_reduction:
11850     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11851     break;
11852   case llvm::omp::OMPC_linear:
11853     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11854     break;
11855   case llvm::omp::OMPC_aligned:
11856     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11857     break;
11858   case llvm::omp::OMPC_copyin:
11859     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11860     break;
11861   case llvm::omp::OMPC_copyprivate:
11862     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11863     break;
11864   case llvm::omp::OMPC_flush:
11865     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11866     break;
11867   case llvm::omp::OMPC_depobj:
11868     C = OMPDepobjClause::CreateEmpty(Context);
11869     break;
11870   case llvm::omp::OMPC_depend: {
11871     unsigned NumVars = Record.readInt();
11872     unsigned NumLoops = Record.readInt();
11873     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11874     break;
11875   }
11876   case llvm::omp::OMPC_device:
11877     C = new (Context) OMPDeviceClause();
11878     break;
11879   case llvm::omp::OMPC_map: {
11880     OMPMappableExprListSizeTy Sizes;
11881     Sizes.NumVars = Record.readInt();
11882     Sizes.NumUniqueDeclarations = Record.readInt();
11883     Sizes.NumComponentLists = Record.readInt();
11884     Sizes.NumComponents = Record.readInt();
11885     C = OMPMapClause::CreateEmpty(Context, Sizes);
11886     break;
11887   }
11888   case llvm::omp::OMPC_num_teams:
11889     C = new (Context) OMPNumTeamsClause();
11890     break;
11891   case llvm::omp::OMPC_thread_limit:
11892     C = new (Context) OMPThreadLimitClause();
11893     break;
11894   case llvm::omp::OMPC_priority:
11895     C = new (Context) OMPPriorityClause();
11896     break;
11897   case llvm::omp::OMPC_grainsize:
11898     C = new (Context) OMPGrainsizeClause();
11899     break;
11900   case llvm::omp::OMPC_num_tasks:
11901     C = new (Context) OMPNumTasksClause();
11902     break;
11903   case llvm::omp::OMPC_hint:
11904     C = new (Context) OMPHintClause();
11905     break;
11906   case llvm::omp::OMPC_dist_schedule:
11907     C = new (Context) OMPDistScheduleClause();
11908     break;
11909   case llvm::omp::OMPC_defaultmap:
11910     C = new (Context) OMPDefaultmapClause();
11911     break;
11912   case llvm::omp::OMPC_to: {
11913     OMPMappableExprListSizeTy Sizes;
11914     Sizes.NumVars = Record.readInt();
11915     Sizes.NumUniqueDeclarations = Record.readInt();
11916     Sizes.NumComponentLists = Record.readInt();
11917     Sizes.NumComponents = Record.readInt();
11918     C = OMPToClause::CreateEmpty(Context, Sizes);
11919     break;
11920   }
11921   case llvm::omp::OMPC_from: {
11922     OMPMappableExprListSizeTy Sizes;
11923     Sizes.NumVars = Record.readInt();
11924     Sizes.NumUniqueDeclarations = Record.readInt();
11925     Sizes.NumComponentLists = Record.readInt();
11926     Sizes.NumComponents = Record.readInt();
11927     C = OMPFromClause::CreateEmpty(Context, Sizes);
11928     break;
11929   }
11930   case llvm::omp::OMPC_use_device_ptr: {
11931     OMPMappableExprListSizeTy Sizes;
11932     Sizes.NumVars = Record.readInt();
11933     Sizes.NumUniqueDeclarations = Record.readInt();
11934     Sizes.NumComponentLists = Record.readInt();
11935     Sizes.NumComponents = Record.readInt();
11936     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11937     break;
11938   }
11939   case llvm::omp::OMPC_use_device_addr: {
11940     OMPMappableExprListSizeTy Sizes;
11941     Sizes.NumVars = Record.readInt();
11942     Sizes.NumUniqueDeclarations = Record.readInt();
11943     Sizes.NumComponentLists = Record.readInt();
11944     Sizes.NumComponents = Record.readInt();
11945     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11946     break;
11947   }
11948   case llvm::omp::OMPC_is_device_ptr: {
11949     OMPMappableExprListSizeTy Sizes;
11950     Sizes.NumVars = Record.readInt();
11951     Sizes.NumUniqueDeclarations = Record.readInt();
11952     Sizes.NumComponentLists = Record.readInt();
11953     Sizes.NumComponents = Record.readInt();
11954     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11955     break;
11956   }
11957   case llvm::omp::OMPC_allocate:
11958     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11959     break;
11960   case llvm::omp::OMPC_nontemporal:
11961     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11962     break;
11963   case llvm::omp::OMPC_inclusive:
11964     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11965     break;
11966   case llvm::omp::OMPC_exclusive:
11967     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11968     break;
11969   case llvm::omp::OMPC_order:
11970     C = new (Context) OMPOrderClause();
11971     break;
11972   case llvm::omp::OMPC_init:
11973     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11974     break;
11975   case llvm::omp::OMPC_use:
11976     C = new (Context) OMPUseClause();
11977     break;
11978   case llvm::omp::OMPC_destroy:
11979     C = new (Context) OMPDestroyClause();
11980     break;
11981   case llvm::omp::OMPC_novariants:
11982     C = new (Context) OMPNovariantsClause();
11983     break;
11984   case llvm::omp::OMPC_nocontext:
11985     C = new (Context) OMPNocontextClause();
11986     break;
11987   case llvm::omp::OMPC_detach:
11988     C = new (Context) OMPDetachClause();
11989     break;
11990   case llvm::omp::OMPC_uses_allocators:
11991     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11992     break;
11993   case llvm::omp::OMPC_affinity:
11994     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11995     break;
11996   case llvm::omp::OMPC_filter:
11997     C = new (Context) OMPFilterClause();
11998     break;
11999 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
12000   case llvm::omp::Enum:                                                        \
12001     break;
12002 #include "llvm/Frontend/OpenMP/OMPKinds.def"
12003   default:
12004     break;
12005   }
12006   assert(C && "Unknown OMPClause type");
12007 
12008   Visit(C);
12009   C->setLocStart(Record.readSourceLocation());
12010   C->setLocEnd(Record.readSourceLocation());
12011 
12012   return C;
12013 }
12014 
12015 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12016   C->setPreInitStmt(Record.readSubStmt(),
12017                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12018 }
12019 
12020 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12021   VisitOMPClauseWithPreInit(C);
12022   C->setPostUpdateExpr(Record.readSubExpr());
12023 }
12024 
12025 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12026   VisitOMPClauseWithPreInit(C);
12027   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12028   C->setNameModifierLoc(Record.readSourceLocation());
12029   C->setColonLoc(Record.readSourceLocation());
12030   C->setCondition(Record.readSubExpr());
12031   C->setLParenLoc(Record.readSourceLocation());
12032 }
12033 
12034 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12035   VisitOMPClauseWithPreInit(C);
12036   C->setCondition(Record.readSubExpr());
12037   C->setLParenLoc(Record.readSourceLocation());
12038 }
12039 
12040 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12041   VisitOMPClauseWithPreInit(C);
12042   C->setNumThreads(Record.readSubExpr());
12043   C->setLParenLoc(Record.readSourceLocation());
12044 }
12045 
12046 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12047   C->setSafelen(Record.readSubExpr());
12048   C->setLParenLoc(Record.readSourceLocation());
12049 }
12050 
12051 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12052   C->setSimdlen(Record.readSubExpr());
12053   C->setLParenLoc(Record.readSourceLocation());
12054 }
12055 
12056 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12057   for (Expr *&E : C->getSizesRefs())
12058     E = Record.readSubExpr();
12059   C->setLParenLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12063   C->setAllocator(Record.readExpr());
12064   C->setLParenLoc(Record.readSourceLocation());
12065 }
12066 
12067 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12068   C->setNumForLoops(Record.readSubExpr());
12069   C->setLParenLoc(Record.readSourceLocation());
12070 }
12071 
12072 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12073   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12074   C->setLParenLoc(Record.readSourceLocation());
12075   C->setDefaultKindKwLoc(Record.readSourceLocation());
12076 }
12077 
12078 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12079   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12080   C->setLParenLoc(Record.readSourceLocation());
12081   C->setProcBindKindKwLoc(Record.readSourceLocation());
12082 }
12083 
12084 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12085   VisitOMPClauseWithPreInit(C);
12086   C->setScheduleKind(
12087        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12088   C->setFirstScheduleModifier(
12089       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12090   C->setSecondScheduleModifier(
12091       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12092   C->setChunkSize(Record.readSubExpr());
12093   C->setLParenLoc(Record.readSourceLocation());
12094   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12095   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12096   C->setScheduleKindLoc(Record.readSourceLocation());
12097   C->setCommaLoc(Record.readSourceLocation());
12098 }
12099 
12100 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12101   C->setNumForLoops(Record.readSubExpr());
12102   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12103     C->setLoopNumIterations(I, Record.readSubExpr());
12104   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12105     C->setLoopCounter(I, Record.readSubExpr());
12106   C->setLParenLoc(Record.readSourceLocation());
12107 }
12108 
12109 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12110   C->setEventHandler(Record.readSubExpr());
12111   C->setLParenLoc(Record.readSourceLocation());
12112 }
12113 
12114 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12115 
12116 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12117 
12118 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12119 
12120 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12121 
12122 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12123 
12124 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12125   if (C->isExtended()) {
12126     C->setLParenLoc(Record.readSourceLocation());
12127     C->setArgumentLoc(Record.readSourceLocation());
12128     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12129   }
12130 }
12131 
12132 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12133 
12134 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12135 
12136 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12137 
12138 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12139 
12140 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12141 
12142 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12143 
12144 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12145 
12146 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12147 
12148 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12149 
12150 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12151   unsigned NumVars = C->varlist_size();
12152   SmallVector<Expr *, 16> Vars;
12153   Vars.reserve(NumVars);
12154   for (unsigned I = 0; I != NumVars; ++I)
12155     Vars.push_back(Record.readSubExpr());
12156   C->setVarRefs(Vars);
12157   C->setIsTarget(Record.readBool());
12158   C->setIsTargetSync(Record.readBool());
12159   C->setLParenLoc(Record.readSourceLocation());
12160   C->setVarLoc(Record.readSourceLocation());
12161 }
12162 
12163 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12164   C->setInteropVar(Record.readSubExpr());
12165   C->setLParenLoc(Record.readSourceLocation());
12166   C->setVarLoc(Record.readSourceLocation());
12167 }
12168 
12169 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12170   C->setInteropVar(Record.readSubExpr());
12171   C->setLParenLoc(Record.readSourceLocation());
12172   C->setVarLoc(Record.readSourceLocation());
12173 }
12174 
12175 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12176   VisitOMPClauseWithPreInit(C);
12177   C->setCondition(Record.readSubExpr());
12178   C->setLParenLoc(Record.readSourceLocation());
12179 }
12180 
12181 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12182   VisitOMPClauseWithPreInit(C);
12183   C->setCondition(Record.readSubExpr());
12184   C->setLParenLoc(Record.readSourceLocation());
12185 }
12186 
12187 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12188 
12189 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12190     OMPUnifiedSharedMemoryClause *) {}
12191 
12192 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12193 
12194 void
12195 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12196 }
12197 
12198 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12199     OMPAtomicDefaultMemOrderClause *C) {
12200   C->setAtomicDefaultMemOrderKind(
12201       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12202   C->setLParenLoc(Record.readSourceLocation());
12203   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12204 }
12205 
12206 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12207   C->setLParenLoc(Record.readSourceLocation());
12208   unsigned NumVars = C->varlist_size();
12209   SmallVector<Expr *, 16> Vars;
12210   Vars.reserve(NumVars);
12211   for (unsigned i = 0; i != NumVars; ++i)
12212     Vars.push_back(Record.readSubExpr());
12213   C->setVarRefs(Vars);
12214   Vars.clear();
12215   for (unsigned i = 0; i != NumVars; ++i)
12216     Vars.push_back(Record.readSubExpr());
12217   C->setPrivateCopies(Vars);
12218 }
12219 
12220 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12221   VisitOMPClauseWithPreInit(C);
12222   C->setLParenLoc(Record.readSourceLocation());
12223   unsigned NumVars = C->varlist_size();
12224   SmallVector<Expr *, 16> Vars;
12225   Vars.reserve(NumVars);
12226   for (unsigned i = 0; i != NumVars; ++i)
12227     Vars.push_back(Record.readSubExpr());
12228   C->setVarRefs(Vars);
12229   Vars.clear();
12230   for (unsigned i = 0; i != NumVars; ++i)
12231     Vars.push_back(Record.readSubExpr());
12232   C->setPrivateCopies(Vars);
12233   Vars.clear();
12234   for (unsigned i = 0; i != NumVars; ++i)
12235     Vars.push_back(Record.readSubExpr());
12236   C->setInits(Vars);
12237 }
12238 
12239 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12240   VisitOMPClauseWithPostUpdate(C);
12241   C->setLParenLoc(Record.readSourceLocation());
12242   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12243   C->setKindLoc(Record.readSourceLocation());
12244   C->setColonLoc(Record.readSourceLocation());
12245   unsigned NumVars = C->varlist_size();
12246   SmallVector<Expr *, 16> Vars;
12247   Vars.reserve(NumVars);
12248   for (unsigned i = 0; i != NumVars; ++i)
12249     Vars.push_back(Record.readSubExpr());
12250   C->setVarRefs(Vars);
12251   Vars.clear();
12252   for (unsigned i = 0; i != NumVars; ++i)
12253     Vars.push_back(Record.readSubExpr());
12254   C->setPrivateCopies(Vars);
12255   Vars.clear();
12256   for (unsigned i = 0; i != NumVars; ++i)
12257     Vars.push_back(Record.readSubExpr());
12258   C->setSourceExprs(Vars);
12259   Vars.clear();
12260   for (unsigned i = 0; i != NumVars; ++i)
12261     Vars.push_back(Record.readSubExpr());
12262   C->setDestinationExprs(Vars);
12263   Vars.clear();
12264   for (unsigned i = 0; i != NumVars; ++i)
12265     Vars.push_back(Record.readSubExpr());
12266   C->setAssignmentOps(Vars);
12267 }
12268 
12269 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12270   C->setLParenLoc(Record.readSourceLocation());
12271   unsigned NumVars = C->varlist_size();
12272   SmallVector<Expr *, 16> Vars;
12273   Vars.reserve(NumVars);
12274   for (unsigned i = 0; i != NumVars; ++i)
12275     Vars.push_back(Record.readSubExpr());
12276   C->setVarRefs(Vars);
12277 }
12278 
12279 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12280   VisitOMPClauseWithPostUpdate(C);
12281   C->setLParenLoc(Record.readSourceLocation());
12282   C->setModifierLoc(Record.readSourceLocation());
12283   C->setColonLoc(Record.readSourceLocation());
12284   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12285   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12286   C->setQualifierLoc(NNSL);
12287   C->setNameInfo(DNI);
12288 
12289   unsigned NumVars = C->varlist_size();
12290   SmallVector<Expr *, 16> Vars;
12291   Vars.reserve(NumVars);
12292   for (unsigned i = 0; i != NumVars; ++i)
12293     Vars.push_back(Record.readSubExpr());
12294   C->setVarRefs(Vars);
12295   Vars.clear();
12296   for (unsigned i = 0; i != NumVars; ++i)
12297     Vars.push_back(Record.readSubExpr());
12298   C->setPrivates(Vars);
12299   Vars.clear();
12300   for (unsigned i = 0; i != NumVars; ++i)
12301     Vars.push_back(Record.readSubExpr());
12302   C->setLHSExprs(Vars);
12303   Vars.clear();
12304   for (unsigned i = 0; i != NumVars; ++i)
12305     Vars.push_back(Record.readSubExpr());
12306   C->setRHSExprs(Vars);
12307   Vars.clear();
12308   for (unsigned i = 0; i != NumVars; ++i)
12309     Vars.push_back(Record.readSubExpr());
12310   C->setReductionOps(Vars);
12311   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12312     Vars.clear();
12313     for (unsigned i = 0; i != NumVars; ++i)
12314       Vars.push_back(Record.readSubExpr());
12315     C->setInscanCopyOps(Vars);
12316     Vars.clear();
12317     for (unsigned i = 0; i != NumVars; ++i)
12318       Vars.push_back(Record.readSubExpr());
12319     C->setInscanCopyArrayTemps(Vars);
12320     Vars.clear();
12321     for (unsigned i = 0; i != NumVars; ++i)
12322       Vars.push_back(Record.readSubExpr());
12323     C->setInscanCopyArrayElems(Vars);
12324   }
12325 }
12326 
12327 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12328   VisitOMPClauseWithPostUpdate(C);
12329   C->setLParenLoc(Record.readSourceLocation());
12330   C->setColonLoc(Record.readSourceLocation());
12331   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12332   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12333   C->setQualifierLoc(NNSL);
12334   C->setNameInfo(DNI);
12335 
12336   unsigned NumVars = C->varlist_size();
12337   SmallVector<Expr *, 16> Vars;
12338   Vars.reserve(NumVars);
12339   for (unsigned I = 0; I != NumVars; ++I)
12340     Vars.push_back(Record.readSubExpr());
12341   C->setVarRefs(Vars);
12342   Vars.clear();
12343   for (unsigned I = 0; I != NumVars; ++I)
12344     Vars.push_back(Record.readSubExpr());
12345   C->setPrivates(Vars);
12346   Vars.clear();
12347   for (unsigned I = 0; I != NumVars; ++I)
12348     Vars.push_back(Record.readSubExpr());
12349   C->setLHSExprs(Vars);
12350   Vars.clear();
12351   for (unsigned I = 0; I != NumVars; ++I)
12352     Vars.push_back(Record.readSubExpr());
12353   C->setRHSExprs(Vars);
12354   Vars.clear();
12355   for (unsigned I = 0; I != NumVars; ++I)
12356     Vars.push_back(Record.readSubExpr());
12357   C->setReductionOps(Vars);
12358 }
12359 
12360 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12361   VisitOMPClauseWithPostUpdate(C);
12362   C->setLParenLoc(Record.readSourceLocation());
12363   C->setColonLoc(Record.readSourceLocation());
12364   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12365   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12366   C->setQualifierLoc(NNSL);
12367   C->setNameInfo(DNI);
12368 
12369   unsigned NumVars = C->varlist_size();
12370   SmallVector<Expr *, 16> Vars;
12371   Vars.reserve(NumVars);
12372   for (unsigned I = 0; I != NumVars; ++I)
12373     Vars.push_back(Record.readSubExpr());
12374   C->setVarRefs(Vars);
12375   Vars.clear();
12376   for (unsigned I = 0; I != NumVars; ++I)
12377     Vars.push_back(Record.readSubExpr());
12378   C->setPrivates(Vars);
12379   Vars.clear();
12380   for (unsigned I = 0; I != NumVars; ++I)
12381     Vars.push_back(Record.readSubExpr());
12382   C->setLHSExprs(Vars);
12383   Vars.clear();
12384   for (unsigned I = 0; I != NumVars; ++I)
12385     Vars.push_back(Record.readSubExpr());
12386   C->setRHSExprs(Vars);
12387   Vars.clear();
12388   for (unsigned I = 0; I != NumVars; ++I)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setReductionOps(Vars);
12391   Vars.clear();
12392   for (unsigned I = 0; I != NumVars; ++I)
12393     Vars.push_back(Record.readSubExpr());
12394   C->setTaskgroupDescriptors(Vars);
12395 }
12396 
12397 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12398   VisitOMPClauseWithPostUpdate(C);
12399   C->setLParenLoc(Record.readSourceLocation());
12400   C->setColonLoc(Record.readSourceLocation());
12401   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12402   C->setModifierLoc(Record.readSourceLocation());
12403   unsigned NumVars = C->varlist_size();
12404   SmallVector<Expr *, 16> Vars;
12405   Vars.reserve(NumVars);
12406   for (unsigned i = 0; i != NumVars; ++i)
12407     Vars.push_back(Record.readSubExpr());
12408   C->setVarRefs(Vars);
12409   Vars.clear();
12410   for (unsigned i = 0; i != NumVars; ++i)
12411     Vars.push_back(Record.readSubExpr());
12412   C->setPrivates(Vars);
12413   Vars.clear();
12414   for (unsigned i = 0; i != NumVars; ++i)
12415     Vars.push_back(Record.readSubExpr());
12416   C->setInits(Vars);
12417   Vars.clear();
12418   for (unsigned i = 0; i != NumVars; ++i)
12419     Vars.push_back(Record.readSubExpr());
12420   C->setUpdates(Vars);
12421   Vars.clear();
12422   for (unsigned i = 0; i != NumVars; ++i)
12423     Vars.push_back(Record.readSubExpr());
12424   C->setFinals(Vars);
12425   C->setStep(Record.readSubExpr());
12426   C->setCalcStep(Record.readSubExpr());
12427   Vars.clear();
12428   for (unsigned I = 0; I != NumVars + 1; ++I)
12429     Vars.push_back(Record.readSubExpr());
12430   C->setUsedExprs(Vars);
12431 }
12432 
12433 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12434   C->setLParenLoc(Record.readSourceLocation());
12435   C->setColonLoc(Record.readSourceLocation());
12436   unsigned NumVars = C->varlist_size();
12437   SmallVector<Expr *, 16> Vars;
12438   Vars.reserve(NumVars);
12439   for (unsigned i = 0; i != NumVars; ++i)
12440     Vars.push_back(Record.readSubExpr());
12441   C->setVarRefs(Vars);
12442   C->setAlignment(Record.readSubExpr());
12443 }
12444 
12445 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12446   C->setLParenLoc(Record.readSourceLocation());
12447   unsigned NumVars = C->varlist_size();
12448   SmallVector<Expr *, 16> Exprs;
12449   Exprs.reserve(NumVars);
12450   for (unsigned i = 0; i != NumVars; ++i)
12451     Exprs.push_back(Record.readSubExpr());
12452   C->setVarRefs(Exprs);
12453   Exprs.clear();
12454   for (unsigned i = 0; i != NumVars; ++i)
12455     Exprs.push_back(Record.readSubExpr());
12456   C->setSourceExprs(Exprs);
12457   Exprs.clear();
12458   for (unsigned i = 0; i != NumVars; ++i)
12459     Exprs.push_back(Record.readSubExpr());
12460   C->setDestinationExprs(Exprs);
12461   Exprs.clear();
12462   for (unsigned i = 0; i != NumVars; ++i)
12463     Exprs.push_back(Record.readSubExpr());
12464   C->setAssignmentOps(Exprs);
12465 }
12466 
12467 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12468   C->setLParenLoc(Record.readSourceLocation());
12469   unsigned NumVars = C->varlist_size();
12470   SmallVector<Expr *, 16> Exprs;
12471   Exprs.reserve(NumVars);
12472   for (unsigned i = 0; i != NumVars; ++i)
12473     Exprs.push_back(Record.readSubExpr());
12474   C->setVarRefs(Exprs);
12475   Exprs.clear();
12476   for (unsigned i = 0; i != NumVars; ++i)
12477     Exprs.push_back(Record.readSubExpr());
12478   C->setSourceExprs(Exprs);
12479   Exprs.clear();
12480   for (unsigned i = 0; i != NumVars; ++i)
12481     Exprs.push_back(Record.readSubExpr());
12482   C->setDestinationExprs(Exprs);
12483   Exprs.clear();
12484   for (unsigned i = 0; i != NumVars; ++i)
12485     Exprs.push_back(Record.readSubExpr());
12486   C->setAssignmentOps(Exprs);
12487 }
12488 
12489 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12490   C->setLParenLoc(Record.readSourceLocation());
12491   unsigned NumVars = C->varlist_size();
12492   SmallVector<Expr *, 16> Vars;
12493   Vars.reserve(NumVars);
12494   for (unsigned i = 0; i != NumVars; ++i)
12495     Vars.push_back(Record.readSubExpr());
12496   C->setVarRefs(Vars);
12497 }
12498 
12499 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12500   C->setDepobj(Record.readSubExpr());
12501   C->setLParenLoc(Record.readSourceLocation());
12502 }
12503 
12504 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12505   C->setLParenLoc(Record.readSourceLocation());
12506   C->setModifier(Record.readSubExpr());
12507   C->setDependencyKind(
12508       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12509   C->setDependencyLoc(Record.readSourceLocation());
12510   C->setColonLoc(Record.readSourceLocation());
12511   unsigned NumVars = C->varlist_size();
12512   SmallVector<Expr *, 16> Vars;
12513   Vars.reserve(NumVars);
12514   for (unsigned I = 0; I != NumVars; ++I)
12515     Vars.push_back(Record.readSubExpr());
12516   C->setVarRefs(Vars);
12517   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12518     C->setLoopData(I, Record.readSubExpr());
12519 }
12520 
12521 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12522   VisitOMPClauseWithPreInit(C);
12523   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12524   C->setDevice(Record.readSubExpr());
12525   C->setModifierLoc(Record.readSourceLocation());
12526   C->setLParenLoc(Record.readSourceLocation());
12527 }
12528 
12529 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12530   C->setLParenLoc(Record.readSourceLocation());
12531   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12532     C->setMapTypeModifier(
12533         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12534     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12535   }
12536   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12537   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12538   C->setMapType(
12539      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12540   C->setMapLoc(Record.readSourceLocation());
12541   C->setColonLoc(Record.readSourceLocation());
12542   auto NumVars = C->varlist_size();
12543   auto UniqueDecls = C->getUniqueDeclarationsNum();
12544   auto TotalLists = C->getTotalComponentListNum();
12545   auto TotalComponents = C->getTotalComponentsNum();
12546 
12547   SmallVector<Expr *, 16> Vars;
12548   Vars.reserve(NumVars);
12549   for (unsigned i = 0; i != NumVars; ++i)
12550     Vars.push_back(Record.readExpr());
12551   C->setVarRefs(Vars);
12552 
12553   SmallVector<Expr *, 16> UDMappers;
12554   UDMappers.reserve(NumVars);
12555   for (unsigned I = 0; I < NumVars; ++I)
12556     UDMappers.push_back(Record.readExpr());
12557   C->setUDMapperRefs(UDMappers);
12558 
12559   SmallVector<ValueDecl *, 16> Decls;
12560   Decls.reserve(UniqueDecls);
12561   for (unsigned i = 0; i < UniqueDecls; ++i)
12562     Decls.push_back(Record.readDeclAs<ValueDecl>());
12563   C->setUniqueDecls(Decls);
12564 
12565   SmallVector<unsigned, 16> ListsPerDecl;
12566   ListsPerDecl.reserve(UniqueDecls);
12567   for (unsigned i = 0; i < UniqueDecls; ++i)
12568     ListsPerDecl.push_back(Record.readInt());
12569   C->setDeclNumLists(ListsPerDecl);
12570 
12571   SmallVector<unsigned, 32> ListSizes;
12572   ListSizes.reserve(TotalLists);
12573   for (unsigned i = 0; i < TotalLists; ++i)
12574     ListSizes.push_back(Record.readInt());
12575   C->setComponentListSizes(ListSizes);
12576 
12577   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12578   Components.reserve(TotalComponents);
12579   for (unsigned i = 0; i < TotalComponents; ++i) {
12580     Expr *AssociatedExprPr = Record.readExpr();
12581     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12582     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12583                             /*IsNonContiguous=*/false);
12584   }
12585   C->setComponents(Components, ListSizes);
12586 }
12587 
12588 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12589   C->setLParenLoc(Record.readSourceLocation());
12590   C->setColonLoc(Record.readSourceLocation());
12591   C->setAllocator(Record.readSubExpr());
12592   unsigned NumVars = C->varlist_size();
12593   SmallVector<Expr *, 16> Vars;
12594   Vars.reserve(NumVars);
12595   for (unsigned i = 0; i != NumVars; ++i)
12596     Vars.push_back(Record.readSubExpr());
12597   C->setVarRefs(Vars);
12598 }
12599 
12600 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12601   VisitOMPClauseWithPreInit(C);
12602   C->setNumTeams(Record.readSubExpr());
12603   C->setLParenLoc(Record.readSourceLocation());
12604 }
12605 
12606 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12607   VisitOMPClauseWithPreInit(C);
12608   C->setThreadLimit(Record.readSubExpr());
12609   C->setLParenLoc(Record.readSourceLocation());
12610 }
12611 
12612 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12613   VisitOMPClauseWithPreInit(C);
12614   C->setPriority(Record.readSubExpr());
12615   C->setLParenLoc(Record.readSourceLocation());
12616 }
12617 
12618 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12619   VisitOMPClauseWithPreInit(C);
12620   C->setGrainsize(Record.readSubExpr());
12621   C->setLParenLoc(Record.readSourceLocation());
12622 }
12623 
12624 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12625   VisitOMPClauseWithPreInit(C);
12626   C->setNumTasks(Record.readSubExpr());
12627   C->setLParenLoc(Record.readSourceLocation());
12628 }
12629 
12630 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12631   C->setHint(Record.readSubExpr());
12632   C->setLParenLoc(Record.readSourceLocation());
12633 }
12634 
12635 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12636   VisitOMPClauseWithPreInit(C);
12637   C->setDistScheduleKind(
12638       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12639   C->setChunkSize(Record.readSubExpr());
12640   C->setLParenLoc(Record.readSourceLocation());
12641   C->setDistScheduleKindLoc(Record.readSourceLocation());
12642   C->setCommaLoc(Record.readSourceLocation());
12643 }
12644 
12645 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12646   C->setDefaultmapKind(
12647        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12648   C->setDefaultmapModifier(
12649       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12650   C->setLParenLoc(Record.readSourceLocation());
12651   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12652   C->setDefaultmapKindLoc(Record.readSourceLocation());
12653 }
12654 
12655 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12656   C->setLParenLoc(Record.readSourceLocation());
12657   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12658     C->setMotionModifier(
12659         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12660     C->setMotionModifierLoc(I, Record.readSourceLocation());
12661   }
12662   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12663   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12664   C->setColonLoc(Record.readSourceLocation());
12665   auto NumVars = C->varlist_size();
12666   auto UniqueDecls = C->getUniqueDeclarationsNum();
12667   auto TotalLists = C->getTotalComponentListNum();
12668   auto TotalComponents = C->getTotalComponentsNum();
12669 
12670   SmallVector<Expr *, 16> Vars;
12671   Vars.reserve(NumVars);
12672   for (unsigned i = 0; i != NumVars; ++i)
12673     Vars.push_back(Record.readSubExpr());
12674   C->setVarRefs(Vars);
12675 
12676   SmallVector<Expr *, 16> UDMappers;
12677   UDMappers.reserve(NumVars);
12678   for (unsigned I = 0; I < NumVars; ++I)
12679     UDMappers.push_back(Record.readSubExpr());
12680   C->setUDMapperRefs(UDMappers);
12681 
12682   SmallVector<ValueDecl *, 16> Decls;
12683   Decls.reserve(UniqueDecls);
12684   for (unsigned i = 0; i < UniqueDecls; ++i)
12685     Decls.push_back(Record.readDeclAs<ValueDecl>());
12686   C->setUniqueDecls(Decls);
12687 
12688   SmallVector<unsigned, 16> ListsPerDecl;
12689   ListsPerDecl.reserve(UniqueDecls);
12690   for (unsigned i = 0; i < UniqueDecls; ++i)
12691     ListsPerDecl.push_back(Record.readInt());
12692   C->setDeclNumLists(ListsPerDecl);
12693 
12694   SmallVector<unsigned, 32> ListSizes;
12695   ListSizes.reserve(TotalLists);
12696   for (unsigned i = 0; i < TotalLists; ++i)
12697     ListSizes.push_back(Record.readInt());
12698   C->setComponentListSizes(ListSizes);
12699 
12700   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12701   Components.reserve(TotalComponents);
12702   for (unsigned i = 0; i < TotalComponents; ++i) {
12703     Expr *AssociatedExprPr = Record.readSubExpr();
12704     bool IsNonContiguous = Record.readBool();
12705     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12706     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12707   }
12708   C->setComponents(Components, ListSizes);
12709 }
12710 
12711 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12712   C->setLParenLoc(Record.readSourceLocation());
12713   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12714     C->setMotionModifier(
12715         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12716     C->setMotionModifierLoc(I, Record.readSourceLocation());
12717   }
12718   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12719   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12720   C->setColonLoc(Record.readSourceLocation());
12721   auto NumVars = C->varlist_size();
12722   auto UniqueDecls = C->getUniqueDeclarationsNum();
12723   auto TotalLists = C->getTotalComponentListNum();
12724   auto TotalComponents = C->getTotalComponentsNum();
12725 
12726   SmallVector<Expr *, 16> Vars;
12727   Vars.reserve(NumVars);
12728   for (unsigned i = 0; i != NumVars; ++i)
12729     Vars.push_back(Record.readSubExpr());
12730   C->setVarRefs(Vars);
12731 
12732   SmallVector<Expr *, 16> UDMappers;
12733   UDMappers.reserve(NumVars);
12734   for (unsigned I = 0; I < NumVars; ++I)
12735     UDMappers.push_back(Record.readSubExpr());
12736   C->setUDMapperRefs(UDMappers);
12737 
12738   SmallVector<ValueDecl *, 16> Decls;
12739   Decls.reserve(UniqueDecls);
12740   for (unsigned i = 0; i < UniqueDecls; ++i)
12741     Decls.push_back(Record.readDeclAs<ValueDecl>());
12742   C->setUniqueDecls(Decls);
12743 
12744   SmallVector<unsigned, 16> ListsPerDecl;
12745   ListsPerDecl.reserve(UniqueDecls);
12746   for (unsigned i = 0; i < UniqueDecls; ++i)
12747     ListsPerDecl.push_back(Record.readInt());
12748   C->setDeclNumLists(ListsPerDecl);
12749 
12750   SmallVector<unsigned, 32> ListSizes;
12751   ListSizes.reserve(TotalLists);
12752   for (unsigned i = 0; i < TotalLists; ++i)
12753     ListSizes.push_back(Record.readInt());
12754   C->setComponentListSizes(ListSizes);
12755 
12756   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12757   Components.reserve(TotalComponents);
12758   for (unsigned i = 0; i < TotalComponents; ++i) {
12759     Expr *AssociatedExprPr = Record.readSubExpr();
12760     bool IsNonContiguous = Record.readBool();
12761     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12762     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12763   }
12764   C->setComponents(Components, ListSizes);
12765 }
12766 
12767 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12768   C->setLParenLoc(Record.readSourceLocation());
12769   auto NumVars = C->varlist_size();
12770   auto UniqueDecls = C->getUniqueDeclarationsNum();
12771   auto TotalLists = C->getTotalComponentListNum();
12772   auto TotalComponents = C->getTotalComponentsNum();
12773 
12774   SmallVector<Expr *, 16> Vars;
12775   Vars.reserve(NumVars);
12776   for (unsigned i = 0; i != NumVars; ++i)
12777     Vars.push_back(Record.readSubExpr());
12778   C->setVarRefs(Vars);
12779   Vars.clear();
12780   for (unsigned i = 0; i != NumVars; ++i)
12781     Vars.push_back(Record.readSubExpr());
12782   C->setPrivateCopies(Vars);
12783   Vars.clear();
12784   for (unsigned i = 0; i != NumVars; ++i)
12785     Vars.push_back(Record.readSubExpr());
12786   C->setInits(Vars);
12787 
12788   SmallVector<ValueDecl *, 16> Decls;
12789   Decls.reserve(UniqueDecls);
12790   for (unsigned i = 0; i < UniqueDecls; ++i)
12791     Decls.push_back(Record.readDeclAs<ValueDecl>());
12792   C->setUniqueDecls(Decls);
12793 
12794   SmallVector<unsigned, 16> ListsPerDecl;
12795   ListsPerDecl.reserve(UniqueDecls);
12796   for (unsigned i = 0; i < UniqueDecls; ++i)
12797     ListsPerDecl.push_back(Record.readInt());
12798   C->setDeclNumLists(ListsPerDecl);
12799 
12800   SmallVector<unsigned, 32> ListSizes;
12801   ListSizes.reserve(TotalLists);
12802   for (unsigned i = 0; i < TotalLists; ++i)
12803     ListSizes.push_back(Record.readInt());
12804   C->setComponentListSizes(ListSizes);
12805 
12806   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12807   Components.reserve(TotalComponents);
12808   for (unsigned i = 0; i < TotalComponents; ++i) {
12809     auto *AssociatedExprPr = Record.readSubExpr();
12810     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12811     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12812                             /*IsNonContiguous=*/false);
12813   }
12814   C->setComponents(Components, ListSizes);
12815 }
12816 
12817 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12818   C->setLParenLoc(Record.readSourceLocation());
12819   auto NumVars = C->varlist_size();
12820   auto UniqueDecls = C->getUniqueDeclarationsNum();
12821   auto TotalLists = C->getTotalComponentListNum();
12822   auto TotalComponents = C->getTotalComponentsNum();
12823 
12824   SmallVector<Expr *, 16> Vars;
12825   Vars.reserve(NumVars);
12826   for (unsigned i = 0; i != NumVars; ++i)
12827     Vars.push_back(Record.readSubExpr());
12828   C->setVarRefs(Vars);
12829 
12830   SmallVector<ValueDecl *, 16> Decls;
12831   Decls.reserve(UniqueDecls);
12832   for (unsigned i = 0; i < UniqueDecls; ++i)
12833     Decls.push_back(Record.readDeclAs<ValueDecl>());
12834   C->setUniqueDecls(Decls);
12835 
12836   SmallVector<unsigned, 16> ListsPerDecl;
12837   ListsPerDecl.reserve(UniqueDecls);
12838   for (unsigned i = 0; i < UniqueDecls; ++i)
12839     ListsPerDecl.push_back(Record.readInt());
12840   C->setDeclNumLists(ListsPerDecl);
12841 
12842   SmallVector<unsigned, 32> ListSizes;
12843   ListSizes.reserve(TotalLists);
12844   for (unsigned i = 0; i < TotalLists; ++i)
12845     ListSizes.push_back(Record.readInt());
12846   C->setComponentListSizes(ListSizes);
12847 
12848   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12849   Components.reserve(TotalComponents);
12850   for (unsigned i = 0; i < TotalComponents; ++i) {
12851     Expr *AssociatedExpr = Record.readSubExpr();
12852     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12853     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12854                             /*IsNonContiguous*/ false);
12855   }
12856   C->setComponents(Components, ListSizes);
12857 }
12858 
12859 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12860   C->setLParenLoc(Record.readSourceLocation());
12861   auto NumVars = C->varlist_size();
12862   auto UniqueDecls = C->getUniqueDeclarationsNum();
12863   auto TotalLists = C->getTotalComponentListNum();
12864   auto TotalComponents = C->getTotalComponentsNum();
12865 
12866   SmallVector<Expr *, 16> Vars;
12867   Vars.reserve(NumVars);
12868   for (unsigned i = 0; i != NumVars; ++i)
12869     Vars.push_back(Record.readSubExpr());
12870   C->setVarRefs(Vars);
12871   Vars.clear();
12872 
12873   SmallVector<ValueDecl *, 16> Decls;
12874   Decls.reserve(UniqueDecls);
12875   for (unsigned i = 0; i < UniqueDecls; ++i)
12876     Decls.push_back(Record.readDeclAs<ValueDecl>());
12877   C->setUniqueDecls(Decls);
12878 
12879   SmallVector<unsigned, 16> ListsPerDecl;
12880   ListsPerDecl.reserve(UniqueDecls);
12881   for (unsigned i = 0; i < UniqueDecls; ++i)
12882     ListsPerDecl.push_back(Record.readInt());
12883   C->setDeclNumLists(ListsPerDecl);
12884 
12885   SmallVector<unsigned, 32> ListSizes;
12886   ListSizes.reserve(TotalLists);
12887   for (unsigned i = 0; i < TotalLists; ++i)
12888     ListSizes.push_back(Record.readInt());
12889   C->setComponentListSizes(ListSizes);
12890 
12891   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12892   Components.reserve(TotalComponents);
12893   for (unsigned i = 0; i < TotalComponents; ++i) {
12894     Expr *AssociatedExpr = Record.readSubExpr();
12895     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12896     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12897                             /*IsNonContiguous=*/false);
12898   }
12899   C->setComponents(Components, ListSizes);
12900 }
12901 
12902 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12903   C->setLParenLoc(Record.readSourceLocation());
12904   unsigned NumVars = C->varlist_size();
12905   SmallVector<Expr *, 16> Vars;
12906   Vars.reserve(NumVars);
12907   for (unsigned i = 0; i != NumVars; ++i)
12908     Vars.push_back(Record.readSubExpr());
12909   C->setVarRefs(Vars);
12910   Vars.clear();
12911   Vars.reserve(NumVars);
12912   for (unsigned i = 0; i != NumVars; ++i)
12913     Vars.push_back(Record.readSubExpr());
12914   C->setPrivateRefs(Vars);
12915 }
12916 
12917 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12918   C->setLParenLoc(Record.readSourceLocation());
12919   unsigned NumVars = C->varlist_size();
12920   SmallVector<Expr *, 16> Vars;
12921   Vars.reserve(NumVars);
12922   for (unsigned i = 0; i != NumVars; ++i)
12923     Vars.push_back(Record.readSubExpr());
12924   C->setVarRefs(Vars);
12925 }
12926 
12927 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12928   C->setLParenLoc(Record.readSourceLocation());
12929   unsigned NumVars = C->varlist_size();
12930   SmallVector<Expr *, 16> Vars;
12931   Vars.reserve(NumVars);
12932   for (unsigned i = 0; i != NumVars; ++i)
12933     Vars.push_back(Record.readSubExpr());
12934   C->setVarRefs(Vars);
12935 }
12936 
12937 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12938   C->setLParenLoc(Record.readSourceLocation());
12939   unsigned NumOfAllocators = C->getNumberOfAllocators();
12940   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12941   Data.reserve(NumOfAllocators);
12942   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12943     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12944     D.Allocator = Record.readSubExpr();
12945     D.AllocatorTraits = Record.readSubExpr();
12946     D.LParenLoc = Record.readSourceLocation();
12947     D.RParenLoc = Record.readSourceLocation();
12948   }
12949   C->setAllocatorsData(Data);
12950 }
12951 
12952 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12953   C->setLParenLoc(Record.readSourceLocation());
12954   C->setModifier(Record.readSubExpr());
12955   C->setColonLoc(Record.readSourceLocation());
12956   unsigned NumOfLocators = C->varlist_size();
12957   SmallVector<Expr *, 4> Locators;
12958   Locators.reserve(NumOfLocators);
12959   for (unsigned I = 0; I != NumOfLocators; ++I)
12960     Locators.push_back(Record.readSubExpr());
12961   C->setVarRefs(Locators);
12962 }
12963 
12964 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12965   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12966   C->setLParenLoc(Record.readSourceLocation());
12967   C->setKindKwLoc(Record.readSourceLocation());
12968 }
12969 
12970 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12971   VisitOMPClauseWithPreInit(C);
12972   C->setThreadID(Record.readSubExpr());
12973   C->setLParenLoc(Record.readSourceLocation());
12974 }
12975 
12976 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12977   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12978   TI.Sets.resize(readUInt32());
12979   for (auto &Set : TI.Sets) {
12980     Set.Kind = readEnum<llvm::omp::TraitSet>();
12981     Set.Selectors.resize(readUInt32());
12982     for (auto &Selector : Set.Selectors) {
12983       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12984       Selector.ScoreOrCondition = nullptr;
12985       if (readBool())
12986         Selector.ScoreOrCondition = readExprRef();
12987       Selector.Properties.resize(readUInt32());
12988       for (auto &Property : Selector.Properties)
12989         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12990     }
12991   }
12992   return &TI;
12993 }
12994 
12995 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
12996   if (!Data)
12997     return;
12998   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
12999     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13000     skipInts(3);
13001   }
13002   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13003   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13004     Clauses[I] = readOMPClause();
13005   Data->setClauses(Clauses);
13006   if (Data->hasAssociatedStmt())
13007     Data->setAssociatedStmt(readStmt());
13008   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13009     Data->getChildren()[I] = readStmt();
13010 }
13011