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, llvm::sys::fs::OF_Text);
4176   if (EC)
4177     return;
4178   OS << "Timestamp file\n";
4179   OS.close();
4180   OS.clear_error(); // Avoid triggering a fatal error.
4181 }
4182 
4183 /// Given a cursor at the start of an AST file, scan ahead and drop the
4184 /// cursor into the start of the given block ID, returning false on success and
4185 /// true on failure.
4186 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4187   while (true) {
4188     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4189     if (!MaybeEntry) {
4190       // FIXME this drops errors on the floor.
4191       consumeError(MaybeEntry.takeError());
4192       return true;
4193     }
4194     llvm::BitstreamEntry Entry = MaybeEntry.get();
4195 
4196     switch (Entry.Kind) {
4197     case llvm::BitstreamEntry::Error:
4198     case llvm::BitstreamEntry::EndBlock:
4199       return true;
4200 
4201     case llvm::BitstreamEntry::Record:
4202       // Ignore top-level records.
4203       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4204         break;
4205       else {
4206         // FIXME this drops errors on the floor.
4207         consumeError(Skipped.takeError());
4208         return true;
4209       }
4210 
4211     case llvm::BitstreamEntry::SubBlock:
4212       if (Entry.ID == BlockID) {
4213         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4214           // FIXME this drops the error on the floor.
4215           consumeError(std::move(Err));
4216           return true;
4217         }
4218         // Found it!
4219         return false;
4220       }
4221 
4222       if (llvm::Error Err = Cursor.SkipBlock()) {
4223         // FIXME this drops the error on the floor.
4224         consumeError(std::move(Err));
4225         return true;
4226       }
4227     }
4228   }
4229 }
4230 
4231 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4232                                             ModuleKind Type,
4233                                             SourceLocation ImportLoc,
4234                                             unsigned ClientLoadCapabilities,
4235                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4236   llvm::SaveAndRestore<SourceLocation>
4237     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4238   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4239       CurrentDeserializingModuleKind, Type);
4240 
4241   // Defer any pending actions until we get to the end of reading the AST file.
4242   Deserializing AnASTFile(this);
4243 
4244   // Bump the generation number.
4245   unsigned PreviousGeneration = 0;
4246   if (ContextObj)
4247     PreviousGeneration = incrementGeneration(*ContextObj);
4248 
4249   unsigned NumModules = ModuleMgr.size();
4250   auto removeModulesAndReturn = [&](ASTReadResult ReadResult) {
4251     assert(ReadResult && "expected to return error");
4252     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4253                             PP.getLangOpts().Modules
4254                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4255                                 : nullptr);
4256 
4257     // If we find that any modules are unusable, the global index is going
4258     // to be out-of-date. Just remove it.
4259     GlobalIndex.reset();
4260     ModuleMgr.setGlobalIndex(nullptr);
4261     return ReadResult;
4262   };
4263 
4264   SmallVector<ImportedModule, 4> Loaded;
4265   switch (ASTReadResult ReadResult =
4266               ReadASTCore(FileName, Type, ImportLoc,
4267                           /*ImportedBy=*/nullptr, Loaded, 0, 0,
4268                           ASTFileSignature(), ClientLoadCapabilities)) {
4269   case Failure:
4270   case Missing:
4271   case OutOfDate:
4272   case VersionMismatch:
4273   case ConfigurationMismatch:
4274   case HadErrors:
4275     return removeModulesAndReturn(ReadResult);
4276   case Success:
4277     break;
4278   }
4279 
4280   // Here comes stuff that we only do once the entire chain is loaded.
4281 
4282   // Load the AST blocks of all of the modules that we loaded.  We can still
4283   // hit errors parsing the ASTs at this point.
4284   for (ImportedModule &M : Loaded) {
4285     ModuleFile &F = *M.Mod;
4286 
4287     // Read the AST block.
4288     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4289       return removeModulesAndReturn(Result);
4290 
4291     // The AST block should always have a definition for the main module.
4292     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4293       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4294       return removeModulesAndReturn(Failure);
4295     }
4296 
4297     // Read the extension blocks.
4298     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4299       if (ASTReadResult Result = ReadExtensionBlock(F))
4300         return removeModulesAndReturn(Result);
4301     }
4302 
4303     // Once read, set the ModuleFile bit base offset and update the size in
4304     // bits of all files we've seen.
4305     F.GlobalBitOffset = TotalModulesSizeInBits;
4306     TotalModulesSizeInBits += F.SizeInBits;
4307     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4308   }
4309 
4310   // Preload source locations and interesting indentifiers.
4311   for (ImportedModule &M : Loaded) {
4312     ModuleFile &F = *M.Mod;
4313 
4314     // Preload SLocEntries.
4315     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4316       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4317       // Load it through the SourceManager and don't call ReadSLocEntry()
4318       // directly because the entry may have already been loaded in which case
4319       // calling ReadSLocEntry() directly would trigger an assertion in
4320       // SourceManager.
4321       SourceMgr.getLoadedSLocEntryByID(Index);
4322     }
4323 
4324     // Map the original source file ID into the ID space of the current
4325     // compilation.
4326     if (F.OriginalSourceFileID.isValid()) {
4327       F.OriginalSourceFileID = FileID::get(
4328           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4329     }
4330 
4331     // Preload all the pending interesting identifiers by marking them out of
4332     // date.
4333     for (auto Offset : F.PreloadIdentifierOffsets) {
4334       const unsigned char *Data = F.IdentifierTableData + Offset;
4335 
4336       ASTIdentifierLookupTrait Trait(*this, F);
4337       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4338       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4339       auto &II = PP.getIdentifierTable().getOwn(Key);
4340       II.setOutOfDate(true);
4341 
4342       // Mark this identifier as being from an AST file so that we can track
4343       // whether we need to serialize it.
4344       markIdentifierFromAST(*this, II);
4345 
4346       // Associate the ID with the identifier so that the writer can reuse it.
4347       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4348       SetIdentifierInfo(ID, &II);
4349     }
4350   }
4351 
4352   // Setup the import locations and notify the module manager that we've
4353   // committed to these module files.
4354   for (ImportedModule &M : Loaded) {
4355     ModuleFile &F = *M.Mod;
4356 
4357     ModuleMgr.moduleFileAccepted(&F);
4358 
4359     // Set the import location.
4360     F.DirectImportLoc = ImportLoc;
4361     // FIXME: We assume that locations from PCH / preamble do not need
4362     // any translation.
4363     if (!M.ImportedBy)
4364       F.ImportLoc = M.ImportLoc;
4365     else
4366       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4367   }
4368 
4369   if (!PP.getLangOpts().CPlusPlus ||
4370       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4371        Type != MK_PrebuiltModule)) {
4372     // Mark all of the identifiers in the identifier table as being out of date,
4373     // so that various accessors know to check the loaded modules when the
4374     // identifier is used.
4375     //
4376     // For C++ modules, we don't need information on many identifiers (just
4377     // those that provide macros or are poisoned), so we mark all of
4378     // the interesting ones via PreloadIdentifierOffsets.
4379     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4380                                 IdEnd = PP.getIdentifierTable().end();
4381          Id != IdEnd; ++Id)
4382       Id->second->setOutOfDate(true);
4383   }
4384   // Mark selectors as out of date.
4385   for (auto Sel : SelectorGeneration)
4386     SelectorOutOfDate[Sel.first] = true;
4387 
4388   // Resolve any unresolved module exports.
4389   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4390     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4391     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4392     Module *ResolvedMod = getSubmodule(GlobalID);
4393 
4394     switch (Unresolved.Kind) {
4395     case UnresolvedModuleRef::Conflict:
4396       if (ResolvedMod) {
4397         Module::Conflict Conflict;
4398         Conflict.Other = ResolvedMod;
4399         Conflict.Message = Unresolved.String.str();
4400         Unresolved.Mod->Conflicts.push_back(Conflict);
4401       }
4402       continue;
4403 
4404     case UnresolvedModuleRef::Import:
4405       if (ResolvedMod)
4406         Unresolved.Mod->Imports.insert(ResolvedMod);
4407       continue;
4408 
4409     case UnresolvedModuleRef::Export:
4410       if (ResolvedMod || Unresolved.IsWildcard)
4411         Unresolved.Mod->Exports.push_back(
4412           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4413       continue;
4414     }
4415   }
4416   UnresolvedModuleRefs.clear();
4417 
4418   if (Imported)
4419     Imported->append(ImportedModules.begin(),
4420                      ImportedModules.end());
4421 
4422   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4423   // Might be unnecessary as use declarations are only used to build the
4424   // module itself.
4425 
4426   if (ContextObj)
4427     InitializeContext();
4428 
4429   if (SemaObj)
4430     UpdateSema();
4431 
4432   if (DeserializationListener)
4433     DeserializationListener->ReaderInitialized(this);
4434 
4435   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4436   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4437     // If this AST file is a precompiled preamble, then set the
4438     // preamble file ID of the source manager to the file source file
4439     // from which the preamble was built.
4440     if (Type == MK_Preamble) {
4441       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4442     } else if (Type == MK_MainFile) {
4443       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4444     }
4445   }
4446 
4447   // For any Objective-C class definitions we have already loaded, make sure
4448   // that we load any additional categories.
4449   if (ContextObj) {
4450     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4451       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4452                          ObjCClassesLoaded[I],
4453                          PreviousGeneration);
4454     }
4455   }
4456 
4457   if (PP.getHeaderSearchInfo()
4458           .getHeaderSearchOpts()
4459           .ModulesValidateOncePerBuildSession) {
4460     // Now we are certain that the module and all modules it depends on are
4461     // up to date.  Create or update timestamp files for modules that are
4462     // located in the module cache (not for PCH files that could be anywhere
4463     // in the filesystem).
4464     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4465       ImportedModule &M = Loaded[I];
4466       if (M.Mod->Kind == MK_ImplicitModule) {
4467         updateModuleTimestamp(*M.Mod);
4468       }
4469     }
4470   }
4471 
4472   return Success;
4473 }
4474 
4475 static ASTFileSignature readASTFileSignature(StringRef PCH);
4476 
4477 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4478 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4479   // FIXME checking magic headers is done in other places such as
4480   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4481   // always done the same. Unify it all with a helper.
4482   if (!Stream.canSkipToPos(4))
4483     return llvm::createStringError(std::errc::illegal_byte_sequence,
4484                                    "file too small to contain AST file magic");
4485   for (unsigned C : {'C', 'P', 'C', 'H'})
4486     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4487       if (Res.get() != C)
4488         return llvm::createStringError(
4489             std::errc::illegal_byte_sequence,
4490             "file doesn't start with AST file magic");
4491     } else
4492       return Res.takeError();
4493   return llvm::Error::success();
4494 }
4495 
4496 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4497   switch (Kind) {
4498   case MK_PCH:
4499     return 0; // PCH
4500   case MK_ImplicitModule:
4501   case MK_ExplicitModule:
4502   case MK_PrebuiltModule:
4503     return 1; // module
4504   case MK_MainFile:
4505   case MK_Preamble:
4506     return 2; // main source file
4507   }
4508   llvm_unreachable("unknown module kind");
4509 }
4510 
4511 ASTReader::ASTReadResult
4512 ASTReader::ReadASTCore(StringRef FileName,
4513                        ModuleKind Type,
4514                        SourceLocation ImportLoc,
4515                        ModuleFile *ImportedBy,
4516                        SmallVectorImpl<ImportedModule> &Loaded,
4517                        off_t ExpectedSize, time_t ExpectedModTime,
4518                        ASTFileSignature ExpectedSignature,
4519                        unsigned ClientLoadCapabilities) {
4520   ModuleFile *M;
4521   std::string ErrorStr;
4522   ModuleManager::AddModuleResult AddResult
4523     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4524                           getGeneration(), ExpectedSize, ExpectedModTime,
4525                           ExpectedSignature, readASTFileSignature,
4526                           M, ErrorStr);
4527 
4528   switch (AddResult) {
4529   case ModuleManager::AlreadyLoaded:
4530     Diag(diag::remark_module_import)
4531         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4532         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4533     return Success;
4534 
4535   case ModuleManager::NewlyLoaded:
4536     // Load module file below.
4537     break;
4538 
4539   case ModuleManager::Missing:
4540     // The module file was missing; if the client can handle that, return
4541     // it.
4542     if (ClientLoadCapabilities & ARR_Missing)
4543       return Missing;
4544 
4545     // Otherwise, return an error.
4546     Diag(diag::err_ast_file_not_found)
4547         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4548         << ErrorStr;
4549     return Failure;
4550 
4551   case ModuleManager::OutOfDate:
4552     // We couldn't load the module file because it is out-of-date. If the
4553     // client can handle out-of-date, return it.
4554     if (ClientLoadCapabilities & ARR_OutOfDate)
4555       return OutOfDate;
4556 
4557     // Otherwise, return an error.
4558     Diag(diag::err_ast_file_out_of_date)
4559         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4560         << ErrorStr;
4561     return Failure;
4562   }
4563 
4564   assert(M && "Missing module file");
4565 
4566   bool ShouldFinalizePCM = false;
4567   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4568     auto &MC = getModuleManager().getModuleCache();
4569     if (ShouldFinalizePCM)
4570       MC.finalizePCM(FileName);
4571     else
4572       MC.tryToDropPCM(FileName);
4573   });
4574   ModuleFile &F = *M;
4575   BitstreamCursor &Stream = F.Stream;
4576   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4577   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4578 
4579   // Sniff for the signature.
4580   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4581     Diag(diag::err_ast_file_invalid)
4582         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4583     return Failure;
4584   }
4585 
4586   // This is used for compatibility with older PCH formats.
4587   bool HaveReadControlBlock = false;
4588   while (true) {
4589     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4590     if (!MaybeEntry) {
4591       Error(MaybeEntry.takeError());
4592       return Failure;
4593     }
4594     llvm::BitstreamEntry Entry = MaybeEntry.get();
4595 
4596     switch (Entry.Kind) {
4597     case llvm::BitstreamEntry::Error:
4598     case llvm::BitstreamEntry::Record:
4599     case llvm::BitstreamEntry::EndBlock:
4600       Error("invalid record at top-level of AST file");
4601       return Failure;
4602 
4603     case llvm::BitstreamEntry::SubBlock:
4604       break;
4605     }
4606 
4607     switch (Entry.ID) {
4608     case CONTROL_BLOCK_ID:
4609       HaveReadControlBlock = true;
4610       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4611       case Success:
4612         // Check that we didn't try to load a non-module AST file as a module.
4613         //
4614         // FIXME: Should we also perform the converse check? Loading a module as
4615         // a PCH file sort of works, but it's a bit wonky.
4616         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4617              Type == MK_PrebuiltModule) &&
4618             F.ModuleName.empty()) {
4619           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4620           if (Result != OutOfDate ||
4621               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4622             Diag(diag::err_module_file_not_module) << FileName;
4623           return Result;
4624         }
4625         break;
4626 
4627       case Failure: return Failure;
4628       case Missing: return Missing;
4629       case OutOfDate: return OutOfDate;
4630       case VersionMismatch: return VersionMismatch;
4631       case ConfigurationMismatch: return ConfigurationMismatch;
4632       case HadErrors: return HadErrors;
4633       }
4634       break;
4635 
4636     case AST_BLOCK_ID:
4637       if (!HaveReadControlBlock) {
4638         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4639           Diag(diag::err_pch_version_too_old);
4640         return VersionMismatch;
4641       }
4642 
4643       // Record that we've loaded this module.
4644       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4645       ShouldFinalizePCM = true;
4646       return Success;
4647 
4648     case UNHASHED_CONTROL_BLOCK_ID:
4649       // This block is handled using look-ahead during ReadControlBlock.  We
4650       // shouldn't get here!
4651       Error("malformed block record in AST file");
4652       return Failure;
4653 
4654     default:
4655       if (llvm::Error Err = Stream.SkipBlock()) {
4656         Error(std::move(Err));
4657         return Failure;
4658       }
4659       break;
4660     }
4661   }
4662 
4663   llvm_unreachable("unexpected break; expected return");
4664 }
4665 
4666 ASTReader::ASTReadResult
4667 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4668                                     unsigned ClientLoadCapabilities) {
4669   const HeaderSearchOptions &HSOpts =
4670       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4671   bool AllowCompatibleConfigurationMismatch =
4672       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4673   bool DisableValidation = shouldDisableValidationForFile(F);
4674 
4675   ASTReadResult Result = readUnhashedControlBlockImpl(
4676       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4677       Listener.get(),
4678       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4679 
4680   // If F was directly imported by another module, it's implicitly validated by
4681   // the importing module.
4682   if (DisableValidation || WasImportedBy ||
4683       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4684     return Success;
4685 
4686   if (Result == Failure) {
4687     Error("malformed block record in AST file");
4688     return Failure;
4689   }
4690 
4691   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4692     // If this module has already been finalized in the ModuleCache, we're stuck
4693     // with it; we can only load a single version of each module.
4694     //
4695     // This can happen when a module is imported in two contexts: in one, as a
4696     // user module; in another, as a system module (due to an import from
4697     // another module marked with the [system] flag).  It usually indicates a
4698     // bug in the module map: this module should also be marked with [system].
4699     //
4700     // If -Wno-system-headers (the default), and the first import is as a
4701     // system module, then validation will fail during the as-user import,
4702     // since -Werror flags won't have been validated.  However, it's reasonable
4703     // to treat this consistently as a system module.
4704     //
4705     // If -Wsystem-headers, the PCM on disk was built with
4706     // -Wno-system-headers, and the first import is as a user module, then
4707     // validation will fail during the as-system import since the PCM on disk
4708     // doesn't guarantee that -Werror was respected.  However, the -Werror
4709     // flags were checked during the initial as-user import.
4710     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4711       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4712       return Success;
4713     }
4714   }
4715 
4716   return Result;
4717 }
4718 
4719 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4720     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4721     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4722     bool ValidateDiagnosticOptions) {
4723   // Initialize a stream.
4724   BitstreamCursor Stream(StreamData);
4725 
4726   // Sniff for the signature.
4727   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4728     // FIXME this drops the error on the floor.
4729     consumeError(std::move(Err));
4730     return Failure;
4731   }
4732 
4733   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4734   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4735     return Failure;
4736 
4737   // Read all of the records in the options block.
4738   RecordData Record;
4739   ASTReadResult Result = Success;
4740   while (true) {
4741     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4742     if (!MaybeEntry) {
4743       // FIXME this drops the error on the floor.
4744       consumeError(MaybeEntry.takeError());
4745       return Failure;
4746     }
4747     llvm::BitstreamEntry Entry = MaybeEntry.get();
4748 
4749     switch (Entry.Kind) {
4750     case llvm::BitstreamEntry::Error:
4751     case llvm::BitstreamEntry::SubBlock:
4752       return Failure;
4753 
4754     case llvm::BitstreamEntry::EndBlock:
4755       return Result;
4756 
4757     case llvm::BitstreamEntry::Record:
4758       // The interesting case.
4759       break;
4760     }
4761 
4762     // Read and process a record.
4763     Record.clear();
4764     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4765     if (!MaybeRecordType) {
4766       // FIXME this drops the error.
4767       return Failure;
4768     }
4769     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4770     case SIGNATURE:
4771       if (F)
4772         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4773       break;
4774     case AST_BLOCK_HASH:
4775       if (F)
4776         F->ASTBlockHash =
4777             ASTFileSignature::create(Record.begin(), Record.end());
4778       break;
4779     case DIAGNOSTIC_OPTIONS: {
4780       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4781       if (Listener && ValidateDiagnosticOptions &&
4782           !AllowCompatibleConfigurationMismatch &&
4783           ParseDiagnosticOptions(Record, Complain, *Listener))
4784         Result = OutOfDate; // Don't return early.  Read the signature.
4785       break;
4786     }
4787     case DIAG_PRAGMA_MAPPINGS:
4788       if (!F)
4789         break;
4790       if (F->PragmaDiagMappings.empty())
4791         F->PragmaDiagMappings.swap(Record);
4792       else
4793         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4794                                      Record.begin(), Record.end());
4795       break;
4796     }
4797   }
4798 }
4799 
4800 /// Parse a record and blob containing module file extension metadata.
4801 static bool parseModuleFileExtensionMetadata(
4802               const SmallVectorImpl<uint64_t> &Record,
4803               StringRef Blob,
4804               ModuleFileExtensionMetadata &Metadata) {
4805   if (Record.size() < 4) return true;
4806 
4807   Metadata.MajorVersion = Record[0];
4808   Metadata.MinorVersion = Record[1];
4809 
4810   unsigned BlockNameLen = Record[2];
4811   unsigned UserInfoLen = Record[3];
4812 
4813   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4814 
4815   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4816   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4817                                   Blob.data() + BlockNameLen + UserInfoLen);
4818   return false;
4819 }
4820 
4821 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4822   BitstreamCursor &Stream = F.Stream;
4823 
4824   RecordData Record;
4825   while (true) {
4826     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4827     if (!MaybeEntry) {
4828       Error(MaybeEntry.takeError());
4829       return Failure;
4830     }
4831     llvm::BitstreamEntry Entry = MaybeEntry.get();
4832 
4833     switch (Entry.Kind) {
4834     case llvm::BitstreamEntry::SubBlock:
4835       if (llvm::Error Err = Stream.SkipBlock()) {
4836         Error(std::move(Err));
4837         return Failure;
4838       }
4839       continue;
4840 
4841     case llvm::BitstreamEntry::EndBlock:
4842       return Success;
4843 
4844     case llvm::BitstreamEntry::Error:
4845       return HadErrors;
4846 
4847     case llvm::BitstreamEntry::Record:
4848       break;
4849     }
4850 
4851     Record.clear();
4852     StringRef Blob;
4853     Expected<unsigned> MaybeRecCode =
4854         Stream.readRecord(Entry.ID, Record, &Blob);
4855     if (!MaybeRecCode) {
4856       Error(MaybeRecCode.takeError());
4857       return Failure;
4858     }
4859     switch (MaybeRecCode.get()) {
4860     case EXTENSION_METADATA: {
4861       ModuleFileExtensionMetadata Metadata;
4862       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4863         Error("malformed EXTENSION_METADATA in AST file");
4864         return Failure;
4865       }
4866 
4867       // Find a module file extension with this block name.
4868       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4869       if (Known == ModuleFileExtensions.end()) break;
4870 
4871       // Form a reader.
4872       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4873                                                              F, Stream)) {
4874         F.ExtensionReaders.push_back(std::move(Reader));
4875       }
4876 
4877       break;
4878     }
4879     }
4880   }
4881 
4882   return Success;
4883 }
4884 
4885 void ASTReader::InitializeContext() {
4886   assert(ContextObj && "no context to initialize");
4887   ASTContext &Context = *ContextObj;
4888 
4889   // If there's a listener, notify them that we "read" the translation unit.
4890   if (DeserializationListener)
4891     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4892                                       Context.getTranslationUnitDecl());
4893 
4894   // FIXME: Find a better way to deal with collisions between these
4895   // built-in types. Right now, we just ignore the problem.
4896 
4897   // Load the special types.
4898   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4899     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4900       if (!Context.CFConstantStringTypeDecl)
4901         Context.setCFConstantStringType(GetType(String));
4902     }
4903 
4904     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4905       QualType FileType = GetType(File);
4906       if (FileType.isNull()) {
4907         Error("FILE type is NULL");
4908         return;
4909       }
4910 
4911       if (!Context.FILEDecl) {
4912         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4913           Context.setFILEDecl(Typedef->getDecl());
4914         else {
4915           const TagType *Tag = FileType->getAs<TagType>();
4916           if (!Tag) {
4917             Error("Invalid FILE type in AST file");
4918             return;
4919           }
4920           Context.setFILEDecl(Tag->getDecl());
4921         }
4922       }
4923     }
4924 
4925     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4926       QualType Jmp_bufType = GetType(Jmp_buf);
4927       if (Jmp_bufType.isNull()) {
4928         Error("jmp_buf type is NULL");
4929         return;
4930       }
4931 
4932       if (!Context.jmp_bufDecl) {
4933         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4934           Context.setjmp_bufDecl(Typedef->getDecl());
4935         else {
4936           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4937           if (!Tag) {
4938             Error("Invalid jmp_buf type in AST file");
4939             return;
4940           }
4941           Context.setjmp_bufDecl(Tag->getDecl());
4942         }
4943       }
4944     }
4945 
4946     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4947       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4948       if (Sigjmp_bufType.isNull()) {
4949         Error("sigjmp_buf type is NULL");
4950         return;
4951       }
4952 
4953       if (!Context.sigjmp_bufDecl) {
4954         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4955           Context.setsigjmp_bufDecl(Typedef->getDecl());
4956         else {
4957           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4958           assert(Tag && "Invalid sigjmp_buf type in AST file");
4959           Context.setsigjmp_bufDecl(Tag->getDecl());
4960         }
4961       }
4962     }
4963 
4964     if (unsigned ObjCIdRedef
4965           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4966       if (Context.ObjCIdRedefinitionType.isNull())
4967         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4968     }
4969 
4970     if (unsigned ObjCClassRedef
4971           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4972       if (Context.ObjCClassRedefinitionType.isNull())
4973         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4974     }
4975 
4976     if (unsigned ObjCSelRedef
4977           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4978       if (Context.ObjCSelRedefinitionType.isNull())
4979         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4980     }
4981 
4982     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4983       QualType Ucontext_tType = GetType(Ucontext_t);
4984       if (Ucontext_tType.isNull()) {
4985         Error("ucontext_t type is NULL");
4986         return;
4987       }
4988 
4989       if (!Context.ucontext_tDecl) {
4990         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4991           Context.setucontext_tDecl(Typedef->getDecl());
4992         else {
4993           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4994           assert(Tag && "Invalid ucontext_t type in AST file");
4995           Context.setucontext_tDecl(Tag->getDecl());
4996         }
4997       }
4998     }
4999   }
5000 
5001   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
5002 
5003   // If there were any CUDA special declarations, deserialize them.
5004   if (!CUDASpecialDeclRefs.empty()) {
5005     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
5006     Context.setcudaConfigureCallDecl(
5007                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
5008   }
5009 
5010   // Re-export any modules that were imported by a non-module AST file.
5011   // FIXME: This does not make macro-only imports visible again.
5012   for (auto &Import : ImportedModules) {
5013     if (Module *Imported = getSubmodule(Import.ID)) {
5014       makeModuleVisible(Imported, Module::AllVisible,
5015                         /*ImportLoc=*/Import.ImportLoc);
5016       if (Import.ImportLoc.isValid())
5017         PP.makeModuleVisible(Imported, Import.ImportLoc);
5018       // This updates visibility for Preprocessor only. For Sema, which can be
5019       // nullptr here, we do the same later, in UpdateSema().
5020     }
5021   }
5022 }
5023 
5024 void ASTReader::finalizeForWriting() {
5025   // Nothing to do for now.
5026 }
5027 
5028 /// Reads and return the signature record from \p PCH's control block, or
5029 /// else returns 0.
5030 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5031   BitstreamCursor Stream(PCH);
5032   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5033     // FIXME this drops the error on the floor.
5034     consumeError(std::move(Err));
5035     return ASTFileSignature();
5036   }
5037 
5038   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5039   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5040     return ASTFileSignature();
5041 
5042   // Scan for SIGNATURE inside the diagnostic options block.
5043   ASTReader::RecordData Record;
5044   while (true) {
5045     Expected<llvm::BitstreamEntry> MaybeEntry =
5046         Stream.advanceSkippingSubblocks();
5047     if (!MaybeEntry) {
5048       // FIXME this drops the error on the floor.
5049       consumeError(MaybeEntry.takeError());
5050       return ASTFileSignature();
5051     }
5052     llvm::BitstreamEntry Entry = MaybeEntry.get();
5053 
5054     if (Entry.Kind != llvm::BitstreamEntry::Record)
5055       return ASTFileSignature();
5056 
5057     Record.clear();
5058     StringRef Blob;
5059     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5060     if (!MaybeRecord) {
5061       // FIXME this drops the error on the floor.
5062       consumeError(MaybeRecord.takeError());
5063       return ASTFileSignature();
5064     }
5065     if (SIGNATURE == MaybeRecord.get())
5066       return ASTFileSignature::create(Record.begin(),
5067                                       Record.begin() + ASTFileSignature::size);
5068   }
5069 }
5070 
5071 /// Retrieve the name of the original source file name
5072 /// directly from the AST file, without actually loading the AST
5073 /// file.
5074 std::string ASTReader::getOriginalSourceFile(
5075     const std::string &ASTFileName, FileManager &FileMgr,
5076     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5077   // Open the AST file.
5078   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5079   if (!Buffer) {
5080     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5081         << ASTFileName << Buffer.getError().message();
5082     return std::string();
5083   }
5084 
5085   // Initialize the stream
5086   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5087 
5088   // Sniff for the signature.
5089   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5090     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5091     return std::string();
5092   }
5093 
5094   // Scan for the CONTROL_BLOCK_ID block.
5095   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5096     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5097     return std::string();
5098   }
5099 
5100   // Scan for ORIGINAL_FILE inside the control block.
5101   RecordData Record;
5102   while (true) {
5103     Expected<llvm::BitstreamEntry> MaybeEntry =
5104         Stream.advanceSkippingSubblocks();
5105     if (!MaybeEntry) {
5106       // FIXME this drops errors on the floor.
5107       consumeError(MaybeEntry.takeError());
5108       return std::string();
5109     }
5110     llvm::BitstreamEntry Entry = MaybeEntry.get();
5111 
5112     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5113       return std::string();
5114 
5115     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5116       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5117       return std::string();
5118     }
5119 
5120     Record.clear();
5121     StringRef Blob;
5122     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5123     if (!MaybeRecord) {
5124       // FIXME this drops the errors on the floor.
5125       consumeError(MaybeRecord.takeError());
5126       return std::string();
5127     }
5128     if (ORIGINAL_FILE == MaybeRecord.get())
5129       return Blob.str();
5130   }
5131 }
5132 
5133 namespace {
5134 
5135   class SimplePCHValidator : public ASTReaderListener {
5136     const LangOptions &ExistingLangOpts;
5137     const TargetOptions &ExistingTargetOpts;
5138     const PreprocessorOptions &ExistingPPOpts;
5139     std::string ExistingModuleCachePath;
5140     FileManager &FileMgr;
5141 
5142   public:
5143     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5144                        const TargetOptions &ExistingTargetOpts,
5145                        const PreprocessorOptions &ExistingPPOpts,
5146                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5147         : ExistingLangOpts(ExistingLangOpts),
5148           ExistingTargetOpts(ExistingTargetOpts),
5149           ExistingPPOpts(ExistingPPOpts),
5150           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5151 
5152     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5153                              bool AllowCompatibleDifferences) override {
5154       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5155                                   AllowCompatibleDifferences);
5156     }
5157 
5158     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5159                            bool AllowCompatibleDifferences) override {
5160       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5161                                 AllowCompatibleDifferences);
5162     }
5163 
5164     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5165                                  StringRef SpecificModuleCachePath,
5166                                  bool Complain) override {
5167       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5168                                       ExistingModuleCachePath,
5169                                       nullptr, ExistingLangOpts);
5170     }
5171 
5172     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5173                                  bool Complain,
5174                                  std::string &SuggestedPredefines) override {
5175       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5176                                       SuggestedPredefines, ExistingLangOpts);
5177     }
5178   };
5179 
5180 } // namespace
5181 
5182 bool ASTReader::readASTFileControlBlock(
5183     StringRef Filename, FileManager &FileMgr,
5184     const PCHContainerReader &PCHContainerRdr,
5185     bool FindModuleFileExtensions,
5186     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5187   // Open the AST file.
5188   // FIXME: This allows use of the VFS; we do not allow use of the
5189   // VFS when actually loading a module.
5190   auto Buffer = FileMgr.getBufferForFile(Filename);
5191   if (!Buffer) {
5192     return true;
5193   }
5194 
5195   // Initialize the stream
5196   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5197   BitstreamCursor Stream(Bytes);
5198 
5199   // Sniff for the signature.
5200   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5201     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5202     return true;
5203   }
5204 
5205   // Scan for the CONTROL_BLOCK_ID block.
5206   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5207     return true;
5208 
5209   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5210   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5211   bool NeedsImports = Listener.needsImportVisitation();
5212   BitstreamCursor InputFilesCursor;
5213 
5214   RecordData Record;
5215   std::string ModuleDir;
5216   bool DoneWithControlBlock = false;
5217   while (!DoneWithControlBlock) {
5218     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5219     if (!MaybeEntry) {
5220       // FIXME this drops the error on the floor.
5221       consumeError(MaybeEntry.takeError());
5222       return true;
5223     }
5224     llvm::BitstreamEntry Entry = MaybeEntry.get();
5225 
5226     switch (Entry.Kind) {
5227     case llvm::BitstreamEntry::SubBlock: {
5228       switch (Entry.ID) {
5229       case OPTIONS_BLOCK_ID: {
5230         std::string IgnoredSuggestedPredefines;
5231         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5232                              /*AllowCompatibleConfigurationMismatch*/ false,
5233                              Listener, IgnoredSuggestedPredefines) != Success)
5234           return true;
5235         break;
5236       }
5237 
5238       case INPUT_FILES_BLOCK_ID:
5239         InputFilesCursor = Stream;
5240         if (llvm::Error Err = Stream.SkipBlock()) {
5241           // FIXME this drops the error on the floor.
5242           consumeError(std::move(Err));
5243           return true;
5244         }
5245         if (NeedsInputFiles &&
5246             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5247           return true;
5248         break;
5249 
5250       default:
5251         if (llvm::Error Err = Stream.SkipBlock()) {
5252           // FIXME this drops the error on the floor.
5253           consumeError(std::move(Err));
5254           return true;
5255         }
5256         break;
5257       }
5258 
5259       continue;
5260     }
5261 
5262     case llvm::BitstreamEntry::EndBlock:
5263       DoneWithControlBlock = true;
5264       break;
5265 
5266     case llvm::BitstreamEntry::Error:
5267       return true;
5268 
5269     case llvm::BitstreamEntry::Record:
5270       break;
5271     }
5272 
5273     if (DoneWithControlBlock) break;
5274 
5275     Record.clear();
5276     StringRef Blob;
5277     Expected<unsigned> MaybeRecCode =
5278         Stream.readRecord(Entry.ID, Record, &Blob);
5279     if (!MaybeRecCode) {
5280       // FIXME this drops the error.
5281       return Failure;
5282     }
5283     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5284     case METADATA:
5285       if (Record[0] != VERSION_MAJOR)
5286         return true;
5287       if (Listener.ReadFullVersionInformation(Blob))
5288         return true;
5289       break;
5290     case MODULE_NAME:
5291       Listener.ReadModuleName(Blob);
5292       break;
5293     case MODULE_DIRECTORY:
5294       ModuleDir = std::string(Blob);
5295       break;
5296     case MODULE_MAP_FILE: {
5297       unsigned Idx = 0;
5298       auto Path = ReadString(Record, Idx);
5299       ResolveImportedPath(Path, ModuleDir);
5300       Listener.ReadModuleMapFile(Path);
5301       break;
5302     }
5303     case INPUT_FILE_OFFSETS: {
5304       if (!NeedsInputFiles)
5305         break;
5306 
5307       unsigned NumInputFiles = Record[0];
5308       unsigned NumUserFiles = Record[1];
5309       const llvm::support::unaligned_uint64_t *InputFileOffs =
5310           (const llvm::support::unaligned_uint64_t *)Blob.data();
5311       for (unsigned I = 0; I != NumInputFiles; ++I) {
5312         // Go find this input file.
5313         bool isSystemFile = I >= NumUserFiles;
5314 
5315         if (isSystemFile && !NeedsSystemInputFiles)
5316           break; // the rest are system input files
5317 
5318         BitstreamCursor &Cursor = InputFilesCursor;
5319         SavedStreamPosition SavedPosition(Cursor);
5320         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5321           // FIXME this drops errors on the floor.
5322           consumeError(std::move(Err));
5323         }
5324 
5325         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5326         if (!MaybeCode) {
5327           // FIXME this drops errors on the floor.
5328           consumeError(MaybeCode.takeError());
5329         }
5330         unsigned Code = MaybeCode.get();
5331 
5332         RecordData Record;
5333         StringRef Blob;
5334         bool shouldContinue = false;
5335         Expected<unsigned> MaybeRecordType =
5336             Cursor.readRecord(Code, Record, &Blob);
5337         if (!MaybeRecordType) {
5338           // FIXME this drops errors on the floor.
5339           consumeError(MaybeRecordType.takeError());
5340         }
5341         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5342         case INPUT_FILE_HASH:
5343           break;
5344         case INPUT_FILE:
5345           bool Overridden = static_cast<bool>(Record[3]);
5346           std::string Filename = std::string(Blob);
5347           ResolveImportedPath(Filename, ModuleDir);
5348           shouldContinue = Listener.visitInputFile(
5349               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5350           break;
5351         }
5352         if (!shouldContinue)
5353           break;
5354       }
5355       break;
5356     }
5357 
5358     case IMPORTS: {
5359       if (!NeedsImports)
5360         break;
5361 
5362       unsigned Idx = 0, N = Record.size();
5363       while (Idx < N) {
5364         // Read information about the AST file.
5365         Idx +=
5366             1 + 1 + 1 + 1 +
5367             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5368         std::string ModuleName = ReadString(Record, Idx);
5369         std::string Filename = ReadString(Record, Idx);
5370         ResolveImportedPath(Filename, ModuleDir);
5371         Listener.visitImport(ModuleName, Filename);
5372       }
5373       break;
5374     }
5375 
5376     default:
5377       // No other validation to perform.
5378       break;
5379     }
5380   }
5381 
5382   // Look for module file extension blocks, if requested.
5383   if (FindModuleFileExtensions) {
5384     BitstreamCursor SavedStream = Stream;
5385     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5386       bool DoneWithExtensionBlock = false;
5387       while (!DoneWithExtensionBlock) {
5388         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5389         if (!MaybeEntry) {
5390           // FIXME this drops the error.
5391           return true;
5392         }
5393         llvm::BitstreamEntry Entry = MaybeEntry.get();
5394 
5395         switch (Entry.Kind) {
5396         case llvm::BitstreamEntry::SubBlock:
5397           if (llvm::Error Err = Stream.SkipBlock()) {
5398             // FIXME this drops the error on the floor.
5399             consumeError(std::move(Err));
5400             return true;
5401           }
5402           continue;
5403 
5404         case llvm::BitstreamEntry::EndBlock:
5405           DoneWithExtensionBlock = true;
5406           continue;
5407 
5408         case llvm::BitstreamEntry::Error:
5409           return true;
5410 
5411         case llvm::BitstreamEntry::Record:
5412           break;
5413         }
5414 
5415        Record.clear();
5416        StringRef Blob;
5417        Expected<unsigned> MaybeRecCode =
5418            Stream.readRecord(Entry.ID, Record, &Blob);
5419        if (!MaybeRecCode) {
5420          // FIXME this drops the error.
5421          return true;
5422        }
5423        switch (MaybeRecCode.get()) {
5424        case EXTENSION_METADATA: {
5425          ModuleFileExtensionMetadata Metadata;
5426          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5427            return true;
5428 
5429          Listener.readModuleFileExtension(Metadata);
5430          break;
5431        }
5432        }
5433       }
5434     }
5435     Stream = SavedStream;
5436   }
5437 
5438   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5439   if (readUnhashedControlBlockImpl(
5440           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5441           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5442           ValidateDiagnosticOptions) != Success)
5443     return true;
5444 
5445   return false;
5446 }
5447 
5448 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5449                                     const PCHContainerReader &PCHContainerRdr,
5450                                     const LangOptions &LangOpts,
5451                                     const TargetOptions &TargetOpts,
5452                                     const PreprocessorOptions &PPOpts,
5453                                     StringRef ExistingModuleCachePath) {
5454   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5455                                ExistingModuleCachePath, FileMgr);
5456   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5457                                   /*FindModuleFileExtensions=*/false,
5458                                   validator,
5459                                   /*ValidateDiagnosticOptions=*/true);
5460 }
5461 
5462 ASTReader::ASTReadResult
5463 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5464   // Enter the submodule block.
5465   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5466     Error(std::move(Err));
5467     return Failure;
5468   }
5469 
5470   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5471   bool First = true;
5472   Module *CurrentModule = nullptr;
5473   RecordData Record;
5474   while (true) {
5475     Expected<llvm::BitstreamEntry> MaybeEntry =
5476         F.Stream.advanceSkippingSubblocks();
5477     if (!MaybeEntry) {
5478       Error(MaybeEntry.takeError());
5479       return Failure;
5480     }
5481     llvm::BitstreamEntry Entry = MaybeEntry.get();
5482 
5483     switch (Entry.Kind) {
5484     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5485     case llvm::BitstreamEntry::Error:
5486       Error("malformed block record in AST file");
5487       return Failure;
5488     case llvm::BitstreamEntry::EndBlock:
5489       return Success;
5490     case llvm::BitstreamEntry::Record:
5491       // The interesting case.
5492       break;
5493     }
5494 
5495     // Read a record.
5496     StringRef Blob;
5497     Record.clear();
5498     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5499     if (!MaybeKind) {
5500       Error(MaybeKind.takeError());
5501       return Failure;
5502     }
5503     unsigned Kind = MaybeKind.get();
5504 
5505     if ((Kind == SUBMODULE_METADATA) != First) {
5506       Error("submodule metadata record should be at beginning of block");
5507       return Failure;
5508     }
5509     First = false;
5510 
5511     // Submodule information is only valid if we have a current module.
5512     // FIXME: Should we error on these cases?
5513     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5514         Kind != SUBMODULE_DEFINITION)
5515       continue;
5516 
5517     switch (Kind) {
5518     default:  // Default behavior: ignore.
5519       break;
5520 
5521     case SUBMODULE_DEFINITION: {
5522       if (Record.size() < 12) {
5523         Error("malformed module definition");
5524         return Failure;
5525       }
5526 
5527       StringRef Name = Blob;
5528       unsigned Idx = 0;
5529       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5530       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5531       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5532       bool IsFramework = Record[Idx++];
5533       bool IsExplicit = Record[Idx++];
5534       bool IsSystem = Record[Idx++];
5535       bool IsExternC = Record[Idx++];
5536       bool InferSubmodules = Record[Idx++];
5537       bool InferExplicitSubmodules = Record[Idx++];
5538       bool InferExportWildcard = Record[Idx++];
5539       bool ConfigMacrosExhaustive = Record[Idx++];
5540       bool ModuleMapIsPrivate = Record[Idx++];
5541 
5542       Module *ParentModule = nullptr;
5543       if (Parent)
5544         ParentModule = getSubmodule(Parent);
5545 
5546       // Retrieve this (sub)module from the module map, creating it if
5547       // necessary.
5548       CurrentModule =
5549           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5550               .first;
5551 
5552       // FIXME: set the definition loc for CurrentModule, or call
5553       // ModMap.setInferredModuleAllowedBy()
5554 
5555       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5556       if (GlobalIndex >= SubmodulesLoaded.size() ||
5557           SubmodulesLoaded[GlobalIndex]) {
5558         Error("too many submodules");
5559         return Failure;
5560       }
5561 
5562       if (!ParentModule) {
5563         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5564           // Don't emit module relocation error if we have -fno-validate-pch
5565           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5566                     DisableValidationForModuleKind::Module) &&
5567               CurFile != F.File) {
5568             Error(diag::err_module_file_conflict,
5569                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5570                   F.File->getName());
5571             return Failure;
5572           }
5573         }
5574 
5575         F.DidReadTopLevelSubmodule = true;
5576         CurrentModule->setASTFile(F.File);
5577         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5578       }
5579 
5580       CurrentModule->Kind = Kind;
5581       CurrentModule->Signature = F.Signature;
5582       CurrentModule->IsFromModuleFile = true;
5583       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5584       CurrentModule->IsExternC = IsExternC;
5585       CurrentModule->InferSubmodules = InferSubmodules;
5586       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5587       CurrentModule->InferExportWildcard = InferExportWildcard;
5588       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5589       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5590       if (DeserializationListener)
5591         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5592 
5593       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5594 
5595       // Clear out data that will be replaced by what is in the module file.
5596       CurrentModule->LinkLibraries.clear();
5597       CurrentModule->ConfigMacros.clear();
5598       CurrentModule->UnresolvedConflicts.clear();
5599       CurrentModule->Conflicts.clear();
5600 
5601       // The module is available unless it's missing a requirement; relevant
5602       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5603       // Missing headers that were present when the module was built do not
5604       // make it unavailable -- if we got this far, this must be an explicitly
5605       // imported module file.
5606       CurrentModule->Requirements.clear();
5607       CurrentModule->MissingHeaders.clear();
5608       CurrentModule->IsUnimportable =
5609           ParentModule && ParentModule->IsUnimportable;
5610       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5611       break;
5612     }
5613 
5614     case SUBMODULE_UMBRELLA_HEADER: {
5615       std::string Filename = std::string(Blob);
5616       ResolveImportedPath(F, Filename);
5617       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5618         if (!CurrentModule->getUmbrellaHeader())
5619           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob);
5620         else if (CurrentModule->getUmbrellaHeader().Entry != *Umbrella) {
5621           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5622             Error("mismatched umbrella headers in submodule");
5623           return OutOfDate;
5624         }
5625       }
5626       break;
5627     }
5628 
5629     case SUBMODULE_HEADER:
5630     case SUBMODULE_EXCLUDED_HEADER:
5631     case SUBMODULE_PRIVATE_HEADER:
5632       // We lazily associate headers with their modules via the HeaderInfo table.
5633       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5634       // of complete filenames or remove it entirely.
5635       break;
5636 
5637     case SUBMODULE_TEXTUAL_HEADER:
5638     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5639       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5640       // them here.
5641       break;
5642 
5643     case SUBMODULE_TOPHEADER:
5644       CurrentModule->addTopHeaderFilename(Blob);
5645       break;
5646 
5647     case SUBMODULE_UMBRELLA_DIR: {
5648       std::string Dirname = std::string(Blob);
5649       ResolveImportedPath(F, Dirname);
5650       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5651         if (!CurrentModule->getUmbrellaDir())
5652           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob);
5653         else if (CurrentModule->getUmbrellaDir().Entry != *Umbrella) {
5654           if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
5655             Error("mismatched umbrella directories in submodule");
5656           return OutOfDate;
5657         }
5658       }
5659       break;
5660     }
5661 
5662     case SUBMODULE_METADATA: {
5663       F.BaseSubmoduleID = getTotalNumSubmodules();
5664       F.LocalNumSubmodules = Record[0];
5665       unsigned LocalBaseSubmoduleID = Record[1];
5666       if (F.LocalNumSubmodules > 0) {
5667         // Introduce the global -> local mapping for submodules within this
5668         // module.
5669         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5670 
5671         // Introduce the local -> global mapping for submodules within this
5672         // module.
5673         F.SubmoduleRemap.insertOrReplace(
5674           std::make_pair(LocalBaseSubmoduleID,
5675                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5676 
5677         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5678       }
5679       break;
5680     }
5681 
5682     case SUBMODULE_IMPORTS:
5683       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5684         UnresolvedModuleRef Unresolved;
5685         Unresolved.File = &F;
5686         Unresolved.Mod = CurrentModule;
5687         Unresolved.ID = Record[Idx];
5688         Unresolved.Kind = UnresolvedModuleRef::Import;
5689         Unresolved.IsWildcard = false;
5690         UnresolvedModuleRefs.push_back(Unresolved);
5691       }
5692       break;
5693 
5694     case SUBMODULE_EXPORTS:
5695       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5696         UnresolvedModuleRef Unresolved;
5697         Unresolved.File = &F;
5698         Unresolved.Mod = CurrentModule;
5699         Unresolved.ID = Record[Idx];
5700         Unresolved.Kind = UnresolvedModuleRef::Export;
5701         Unresolved.IsWildcard = Record[Idx + 1];
5702         UnresolvedModuleRefs.push_back(Unresolved);
5703       }
5704 
5705       // Once we've loaded the set of exports, there's no reason to keep
5706       // the parsed, unresolved exports around.
5707       CurrentModule->UnresolvedExports.clear();
5708       break;
5709 
5710     case SUBMODULE_REQUIRES:
5711       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5712                                     PP.getTargetInfo());
5713       break;
5714 
5715     case SUBMODULE_LINK_LIBRARY:
5716       ModMap.resolveLinkAsDependencies(CurrentModule);
5717       CurrentModule->LinkLibraries.push_back(
5718           Module::LinkLibrary(std::string(Blob), Record[0]));
5719       break;
5720 
5721     case SUBMODULE_CONFIG_MACRO:
5722       CurrentModule->ConfigMacros.push_back(Blob.str());
5723       break;
5724 
5725     case SUBMODULE_CONFLICT: {
5726       UnresolvedModuleRef Unresolved;
5727       Unresolved.File = &F;
5728       Unresolved.Mod = CurrentModule;
5729       Unresolved.ID = Record[0];
5730       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5731       Unresolved.IsWildcard = false;
5732       Unresolved.String = Blob;
5733       UnresolvedModuleRefs.push_back(Unresolved);
5734       break;
5735     }
5736 
5737     case SUBMODULE_INITIALIZERS: {
5738       if (!ContextObj)
5739         break;
5740       SmallVector<uint32_t, 16> Inits;
5741       for (auto &ID : Record)
5742         Inits.push_back(getGlobalDeclID(F, ID));
5743       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5744       break;
5745     }
5746 
5747     case SUBMODULE_EXPORT_AS:
5748       CurrentModule->ExportAsModule = Blob.str();
5749       ModMap.addLinkAsDependency(CurrentModule);
5750       break;
5751     }
5752   }
5753 }
5754 
5755 /// Parse the record that corresponds to a LangOptions data
5756 /// structure.
5757 ///
5758 /// This routine parses the language options from the AST file and then gives
5759 /// them to the AST listener if one is set.
5760 ///
5761 /// \returns true if the listener deems the file unacceptable, false otherwise.
5762 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5763                                      bool Complain,
5764                                      ASTReaderListener &Listener,
5765                                      bool AllowCompatibleDifferences) {
5766   LangOptions LangOpts;
5767   unsigned Idx = 0;
5768 #define LANGOPT(Name, Bits, Default, Description) \
5769   LangOpts.Name = Record[Idx++];
5770 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5771   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5772 #include "clang/Basic/LangOptions.def"
5773 #define SANITIZER(NAME, ID)                                                    \
5774   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5775 #include "clang/Basic/Sanitizers.def"
5776 
5777   for (unsigned N = Record[Idx++]; N; --N)
5778     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5779 
5780   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5781   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5782   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5783 
5784   LangOpts.CurrentModule = ReadString(Record, Idx);
5785 
5786   // Comment options.
5787   for (unsigned N = Record[Idx++]; N; --N) {
5788     LangOpts.CommentOpts.BlockCommandNames.push_back(
5789       ReadString(Record, Idx));
5790   }
5791   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5792 
5793   // OpenMP offloading options.
5794   for (unsigned N = Record[Idx++]; N; --N) {
5795     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5796   }
5797 
5798   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5799 
5800   return Listener.ReadLanguageOptions(LangOpts, Complain,
5801                                       AllowCompatibleDifferences);
5802 }
5803 
5804 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5805                                    ASTReaderListener &Listener,
5806                                    bool AllowCompatibleDifferences) {
5807   unsigned Idx = 0;
5808   TargetOptions TargetOpts;
5809   TargetOpts.Triple = ReadString(Record, Idx);
5810   TargetOpts.CPU = ReadString(Record, Idx);
5811   TargetOpts.TuneCPU = ReadString(Record, Idx);
5812   TargetOpts.ABI = ReadString(Record, Idx);
5813   for (unsigned N = Record[Idx++]; N; --N) {
5814     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5815   }
5816   for (unsigned N = Record[Idx++]; N; --N) {
5817     TargetOpts.Features.push_back(ReadString(Record, Idx));
5818   }
5819 
5820   return Listener.ReadTargetOptions(TargetOpts, Complain,
5821                                     AllowCompatibleDifferences);
5822 }
5823 
5824 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5825                                        ASTReaderListener &Listener) {
5826   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5827   unsigned Idx = 0;
5828 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5829 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5830   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5831 #include "clang/Basic/DiagnosticOptions.def"
5832 
5833   for (unsigned N = Record[Idx++]; N; --N)
5834     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5835   for (unsigned N = Record[Idx++]; N; --N)
5836     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5837 
5838   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5839 }
5840 
5841 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5842                                        ASTReaderListener &Listener) {
5843   FileSystemOptions FSOpts;
5844   unsigned Idx = 0;
5845   FSOpts.WorkingDir = ReadString(Record, Idx);
5846   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5847 }
5848 
5849 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5850                                          bool Complain,
5851                                          ASTReaderListener &Listener) {
5852   HeaderSearchOptions HSOpts;
5853   unsigned Idx = 0;
5854   HSOpts.Sysroot = ReadString(Record, Idx);
5855 
5856   // Include entries.
5857   for (unsigned N = Record[Idx++]; N; --N) {
5858     std::string Path = ReadString(Record, Idx);
5859     frontend::IncludeDirGroup Group
5860       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5861     bool IsFramework = Record[Idx++];
5862     bool IgnoreSysRoot = Record[Idx++];
5863     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5864                                     IgnoreSysRoot);
5865   }
5866 
5867   // System header prefixes.
5868   for (unsigned N = Record[Idx++]; N; --N) {
5869     std::string Prefix = ReadString(Record, Idx);
5870     bool IsSystemHeader = Record[Idx++];
5871     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5872   }
5873 
5874   HSOpts.ResourceDir = ReadString(Record, Idx);
5875   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5876   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5877   HSOpts.DisableModuleHash = Record[Idx++];
5878   HSOpts.ImplicitModuleMaps = Record[Idx++];
5879   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5880   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5881   HSOpts.UseBuiltinIncludes = Record[Idx++];
5882   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5883   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5884   HSOpts.UseLibcxx = Record[Idx++];
5885   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5886 
5887   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5888                                           Complain);
5889 }
5890 
5891 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5892                                          bool Complain,
5893                                          ASTReaderListener &Listener,
5894                                          std::string &SuggestedPredefines) {
5895   PreprocessorOptions PPOpts;
5896   unsigned Idx = 0;
5897 
5898   // Macro definitions/undefs
5899   for (unsigned N = Record[Idx++]; N; --N) {
5900     std::string Macro = ReadString(Record, Idx);
5901     bool IsUndef = Record[Idx++];
5902     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5903   }
5904 
5905   // Includes
5906   for (unsigned N = Record[Idx++]; N; --N) {
5907     PPOpts.Includes.push_back(ReadString(Record, Idx));
5908   }
5909 
5910   // Macro Includes
5911   for (unsigned N = Record[Idx++]; N; --N) {
5912     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5913   }
5914 
5915   PPOpts.UsePredefines = Record[Idx++];
5916   PPOpts.DetailedRecord = Record[Idx++];
5917   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5918   PPOpts.ObjCXXARCStandardLibrary =
5919     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5920   SuggestedPredefines.clear();
5921   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5922                                           SuggestedPredefines);
5923 }
5924 
5925 std::pair<ModuleFile *, unsigned>
5926 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5927   GlobalPreprocessedEntityMapType::iterator
5928   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5929   assert(I != GlobalPreprocessedEntityMap.end() &&
5930          "Corrupted global preprocessed entity map");
5931   ModuleFile *M = I->second;
5932   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5933   return std::make_pair(M, LocalIndex);
5934 }
5935 
5936 llvm::iterator_range<PreprocessingRecord::iterator>
5937 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5938   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5939     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5940                                              Mod.NumPreprocessedEntities);
5941 
5942   return llvm::make_range(PreprocessingRecord::iterator(),
5943                           PreprocessingRecord::iterator());
5944 }
5945 
5946 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5947 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5948   return llvm::make_range(
5949       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5950       ModuleDeclIterator(this, &Mod,
5951                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5952 }
5953 
5954 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5955   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5956   assert(I != GlobalSkippedRangeMap.end() &&
5957     "Corrupted global skipped range map");
5958   ModuleFile *M = I->second;
5959   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5960   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5961   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5962   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5963                     TranslateSourceLocation(*M, RawRange.getEnd()));
5964   assert(Range.isValid());
5965   return Range;
5966 }
5967 
5968 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5969   PreprocessedEntityID PPID = Index+1;
5970   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5971   ModuleFile &M = *PPInfo.first;
5972   unsigned LocalIndex = PPInfo.second;
5973   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5974 
5975   if (!PP.getPreprocessingRecord()) {
5976     Error("no preprocessing record");
5977     return nullptr;
5978   }
5979 
5980   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5981   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5982           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5983     Error(std::move(Err));
5984     return nullptr;
5985   }
5986 
5987   Expected<llvm::BitstreamEntry> MaybeEntry =
5988       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5989   if (!MaybeEntry) {
5990     Error(MaybeEntry.takeError());
5991     return nullptr;
5992   }
5993   llvm::BitstreamEntry Entry = MaybeEntry.get();
5994 
5995   if (Entry.Kind != llvm::BitstreamEntry::Record)
5996     return nullptr;
5997 
5998   // Read the record.
5999   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
6000                     TranslateSourceLocation(M, PPOffs.getEnd()));
6001   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
6002   StringRef Blob;
6003   RecordData Record;
6004   Expected<unsigned> MaybeRecType =
6005       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
6006   if (!MaybeRecType) {
6007     Error(MaybeRecType.takeError());
6008     return nullptr;
6009   }
6010   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
6011   case PPD_MACRO_EXPANSION: {
6012     bool isBuiltin = Record[0];
6013     IdentifierInfo *Name = nullptr;
6014     MacroDefinitionRecord *Def = nullptr;
6015     if (isBuiltin)
6016       Name = getLocalIdentifier(M, Record[1]);
6017     else {
6018       PreprocessedEntityID GlobalID =
6019           getGlobalPreprocessedEntityID(M, Record[1]);
6020       Def = cast<MacroDefinitionRecord>(
6021           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
6022     }
6023 
6024     MacroExpansion *ME;
6025     if (isBuiltin)
6026       ME = new (PPRec) MacroExpansion(Name, Range);
6027     else
6028       ME = new (PPRec) MacroExpansion(Def, Range);
6029 
6030     return ME;
6031   }
6032 
6033   case PPD_MACRO_DEFINITION: {
6034     // Decode the identifier info and then check again; if the macro is
6035     // still defined and associated with the identifier,
6036     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6037     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6038 
6039     if (DeserializationListener)
6040       DeserializationListener->MacroDefinitionRead(PPID, MD);
6041 
6042     return MD;
6043   }
6044 
6045   case PPD_INCLUSION_DIRECTIVE: {
6046     const char *FullFileNameStart = Blob.data() + Record[0];
6047     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6048     const FileEntry *File = nullptr;
6049     if (!FullFileName.empty())
6050       if (auto FE = PP.getFileManager().getFile(FullFileName))
6051         File = *FE;
6052 
6053     // FIXME: Stable encoding
6054     InclusionDirective::InclusionKind Kind
6055       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6056     InclusionDirective *ID
6057       = new (PPRec) InclusionDirective(PPRec, Kind,
6058                                        StringRef(Blob.data(), Record[0]),
6059                                        Record[1], Record[3],
6060                                        File,
6061                                        Range);
6062     return ID;
6063   }
6064   }
6065 
6066   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6067 }
6068 
6069 /// Find the next module that contains entities and return the ID
6070 /// of the first entry.
6071 ///
6072 /// \param SLocMapI points at a chunk of a module that contains no
6073 /// preprocessed entities or the entities it contains are not the ones we are
6074 /// looking for.
6075 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6076                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6077   ++SLocMapI;
6078   for (GlobalSLocOffsetMapType::const_iterator
6079          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6080     ModuleFile &M = *SLocMapI->second;
6081     if (M.NumPreprocessedEntities)
6082       return M.BasePreprocessedEntityID;
6083   }
6084 
6085   return getTotalNumPreprocessedEntities();
6086 }
6087 
6088 namespace {
6089 
6090 struct PPEntityComp {
6091   const ASTReader &Reader;
6092   ModuleFile &M;
6093 
6094   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6095 
6096   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6097     SourceLocation LHS = getLoc(L);
6098     SourceLocation RHS = getLoc(R);
6099     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6100   }
6101 
6102   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6103     SourceLocation LHS = getLoc(L);
6104     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6105   }
6106 
6107   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6108     SourceLocation RHS = getLoc(R);
6109     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6110   }
6111 
6112   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6113     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6114   }
6115 };
6116 
6117 } // namespace
6118 
6119 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6120                                                        bool EndsAfter) const {
6121   if (SourceMgr.isLocalSourceLocation(Loc))
6122     return getTotalNumPreprocessedEntities();
6123 
6124   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6125       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6126   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6127          "Corrupted global sloc offset map");
6128 
6129   if (SLocMapI->second->NumPreprocessedEntities == 0)
6130     return findNextPreprocessedEntity(SLocMapI);
6131 
6132   ModuleFile &M = *SLocMapI->second;
6133 
6134   using pp_iterator = const PPEntityOffset *;
6135 
6136   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6137   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6138 
6139   size_t Count = M.NumPreprocessedEntities;
6140   size_t Half;
6141   pp_iterator First = pp_begin;
6142   pp_iterator PPI;
6143 
6144   if (EndsAfter) {
6145     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6146                            PPEntityComp(*this, M));
6147   } else {
6148     // Do a binary search manually instead of using std::lower_bound because
6149     // The end locations of entities may be unordered (when a macro expansion
6150     // is inside another macro argument), but for this case it is not important
6151     // whether we get the first macro expansion or its containing macro.
6152     while (Count > 0) {
6153       Half = Count / 2;
6154       PPI = First;
6155       std::advance(PPI, Half);
6156       if (SourceMgr.isBeforeInTranslationUnit(
6157               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6158         First = PPI;
6159         ++First;
6160         Count = Count - Half - 1;
6161       } else
6162         Count = Half;
6163     }
6164   }
6165 
6166   if (PPI == pp_end)
6167     return findNextPreprocessedEntity(SLocMapI);
6168 
6169   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6170 }
6171 
6172 /// Returns a pair of [Begin, End) indices of preallocated
6173 /// preprocessed entities that \arg Range encompasses.
6174 std::pair<unsigned, unsigned>
6175     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6176   if (Range.isInvalid())
6177     return std::make_pair(0,0);
6178   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6179 
6180   PreprocessedEntityID BeginID =
6181       findPreprocessedEntity(Range.getBegin(), false);
6182   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6183   return std::make_pair(BeginID, EndID);
6184 }
6185 
6186 /// Optionally returns true or false if the preallocated preprocessed
6187 /// entity with index \arg Index came from file \arg FID.
6188 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6189                                                              FileID FID) {
6190   if (FID.isInvalid())
6191     return false;
6192 
6193   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6194   ModuleFile &M = *PPInfo.first;
6195   unsigned LocalIndex = PPInfo.second;
6196   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6197 
6198   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6199   if (Loc.isInvalid())
6200     return false;
6201 
6202   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6203     return true;
6204   else
6205     return false;
6206 }
6207 
6208 namespace {
6209 
6210   /// Visitor used to search for information about a header file.
6211   class HeaderFileInfoVisitor {
6212     const FileEntry *FE;
6213     Optional<HeaderFileInfo> HFI;
6214 
6215   public:
6216     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6217 
6218     bool operator()(ModuleFile &M) {
6219       HeaderFileInfoLookupTable *Table
6220         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6221       if (!Table)
6222         return false;
6223 
6224       // Look in the on-disk hash table for an entry for this file name.
6225       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6226       if (Pos == Table->end())
6227         return false;
6228 
6229       HFI = *Pos;
6230       return true;
6231     }
6232 
6233     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6234   };
6235 
6236 } // namespace
6237 
6238 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6239   HeaderFileInfoVisitor Visitor(FE);
6240   ModuleMgr.visit(Visitor);
6241   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6242     return *HFI;
6243 
6244   return HeaderFileInfo();
6245 }
6246 
6247 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6248   using DiagState = DiagnosticsEngine::DiagState;
6249   SmallVector<DiagState *, 32> DiagStates;
6250 
6251   for (ModuleFile &F : ModuleMgr) {
6252     unsigned Idx = 0;
6253     auto &Record = F.PragmaDiagMappings;
6254     if (Record.empty())
6255       continue;
6256 
6257     DiagStates.clear();
6258 
6259     auto ReadDiagState =
6260         [&](const DiagState &BasedOn, SourceLocation Loc,
6261             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6262       unsigned BackrefID = Record[Idx++];
6263       if (BackrefID != 0)
6264         return DiagStates[BackrefID - 1];
6265 
6266       // A new DiagState was created here.
6267       Diag.DiagStates.push_back(BasedOn);
6268       DiagState *NewState = &Diag.DiagStates.back();
6269       DiagStates.push_back(NewState);
6270       unsigned Size = Record[Idx++];
6271       assert(Idx + Size * 2 <= Record.size() &&
6272              "Invalid data, not enough diag/map pairs");
6273       while (Size--) {
6274         unsigned DiagID = Record[Idx++];
6275         DiagnosticMapping NewMapping =
6276             DiagnosticMapping::deserialize(Record[Idx++]);
6277         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6278           continue;
6279 
6280         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6281 
6282         // If this mapping was specified as a warning but the severity was
6283         // upgraded due to diagnostic settings, simulate the current diagnostic
6284         // settings (and use a warning).
6285         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6286           NewMapping.setSeverity(diag::Severity::Warning);
6287           NewMapping.setUpgradedFromWarning(false);
6288         }
6289 
6290         Mapping = NewMapping;
6291       }
6292       return NewState;
6293     };
6294 
6295     // Read the first state.
6296     DiagState *FirstState;
6297     if (F.Kind == MK_ImplicitModule) {
6298       // Implicitly-built modules are reused with different diagnostic
6299       // settings.  Use the initial diagnostic state from Diag to simulate this
6300       // compilation's diagnostic settings.
6301       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6302       DiagStates.push_back(FirstState);
6303 
6304       // Skip the initial diagnostic state from the serialized module.
6305       assert(Record[1] == 0 &&
6306              "Invalid data, unexpected backref in initial state");
6307       Idx = 3 + Record[2] * 2;
6308       assert(Idx < Record.size() &&
6309              "Invalid data, not enough state change pairs in initial state");
6310     } else if (F.isModule()) {
6311       // For an explicit module, preserve the flags from the module build
6312       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6313       // -Wblah flags.
6314       unsigned Flags = Record[Idx++];
6315       DiagState Initial;
6316       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6317       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6318       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6319       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6320       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6321       Initial.ExtBehavior = (diag::Severity)Flags;
6322       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6323 
6324       assert(F.OriginalSourceFileID.isValid());
6325 
6326       // Set up the root buffer of the module to start with the initial
6327       // diagnostic state of the module itself, to cover files that contain no
6328       // explicit transitions (for which we did not serialize anything).
6329       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6330           .StateTransitions.push_back({FirstState, 0});
6331     } else {
6332       // For prefix ASTs, start with whatever the user configured on the
6333       // command line.
6334       Idx++; // Skip flags.
6335       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6336                                  SourceLocation(), false);
6337     }
6338 
6339     // Read the state transitions.
6340     unsigned NumLocations = Record[Idx++];
6341     while (NumLocations--) {
6342       assert(Idx < Record.size() &&
6343              "Invalid data, missing pragma diagnostic states");
6344       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6345       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6346       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6347       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6348       unsigned Transitions = Record[Idx++];
6349 
6350       // Note that we don't need to set up Parent/ParentOffset here, because
6351       // we won't be changing the diagnostic state within imported FileIDs
6352       // (other than perhaps appending to the main source file, which has no
6353       // parent).
6354       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6355       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6356       for (unsigned I = 0; I != Transitions; ++I) {
6357         unsigned Offset = Record[Idx++];
6358         auto *State =
6359             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6360         F.StateTransitions.push_back({State, Offset});
6361       }
6362     }
6363 
6364     // Read the final state.
6365     assert(Idx < Record.size() &&
6366            "Invalid data, missing final pragma diagnostic state");
6367     SourceLocation CurStateLoc =
6368         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6369     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6370 
6371     if (!F.isModule()) {
6372       Diag.DiagStatesByLoc.CurDiagState = CurState;
6373       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6374 
6375       // Preserve the property that the imaginary root file describes the
6376       // current state.
6377       FileID NullFile;
6378       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6379       if (T.empty())
6380         T.push_back({CurState, 0});
6381       else
6382         T[0].State = CurState;
6383     }
6384 
6385     // Don't try to read these mappings again.
6386     Record.clear();
6387   }
6388 }
6389 
6390 /// Get the correct cursor and offset for loading a type.
6391 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6392   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6393   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6394   ModuleFile *M = I->second;
6395   return RecordLocation(
6396       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6397              M->DeclsBlockStartOffset);
6398 }
6399 
6400 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6401   switch (code) {
6402 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6403   case TYPE_##CODE_ID: return Type::CLASS_ID;
6404 #include "clang/Serialization/TypeBitCodes.def"
6405   default: return llvm::None;
6406   }
6407 }
6408 
6409 /// Read and return the type with the given index..
6410 ///
6411 /// The index is the type ID, shifted and minus the number of predefs. This
6412 /// routine actually reads the record corresponding to the type at the given
6413 /// location. It is a helper routine for GetType, which deals with reading type
6414 /// IDs.
6415 QualType ASTReader::readTypeRecord(unsigned Index) {
6416   assert(ContextObj && "reading type with no AST context");
6417   ASTContext &Context = *ContextObj;
6418   RecordLocation Loc = TypeCursorForIndex(Index);
6419   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6420 
6421   // Keep track of where we are in the stream, then jump back there
6422   // after reading this type.
6423   SavedStreamPosition SavedPosition(DeclsCursor);
6424 
6425   ReadingKindTracker ReadingKind(Read_Type, *this);
6426 
6427   // Note that we are loading a type record.
6428   Deserializing AType(this);
6429 
6430   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6431     Error(std::move(Err));
6432     return QualType();
6433   }
6434   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6435   if (!RawCode) {
6436     Error(RawCode.takeError());
6437     return QualType();
6438   }
6439 
6440   ASTRecordReader Record(*this, *Loc.F);
6441   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6442   if (!Code) {
6443     Error(Code.takeError());
6444     return QualType();
6445   }
6446   if (Code.get() == TYPE_EXT_QUAL) {
6447     QualType baseType = Record.readQualType();
6448     Qualifiers quals = Record.readQualifiers();
6449     return Context.getQualifiedType(baseType, quals);
6450   }
6451 
6452   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6453   if (!maybeClass) {
6454     Error("Unexpected code for type");
6455     return QualType();
6456   }
6457 
6458   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6459   return TypeReader.read(*maybeClass);
6460 }
6461 
6462 namespace clang {
6463 
6464 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6465   ASTRecordReader &Reader;
6466 
6467   SourceLocation readSourceLocation() {
6468     return Reader.readSourceLocation();
6469   }
6470 
6471   TypeSourceInfo *GetTypeSourceInfo() {
6472     return Reader.readTypeSourceInfo();
6473   }
6474 
6475   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6476     return Reader.readNestedNameSpecifierLoc();
6477   }
6478 
6479   Attr *ReadAttr() {
6480     return Reader.readAttr();
6481   }
6482 
6483 public:
6484   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6485 
6486   // We want compile-time assurance that we've enumerated all of
6487   // these, so unfortunately we have to declare them first, then
6488   // define them out-of-line.
6489 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6490 #define TYPELOC(CLASS, PARENT) \
6491   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6492 #include "clang/AST/TypeLocNodes.def"
6493 
6494   void VisitFunctionTypeLoc(FunctionTypeLoc);
6495   void VisitArrayTypeLoc(ArrayTypeLoc);
6496 };
6497 
6498 } // namespace clang
6499 
6500 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6501   // nothing to do
6502 }
6503 
6504 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6505   TL.setBuiltinLoc(readSourceLocation());
6506   if (TL.needsExtraLocalData()) {
6507     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6508     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6509     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6510     TL.setModeAttr(Reader.readInt());
6511   }
6512 }
6513 
6514 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6515   TL.setNameLoc(readSourceLocation());
6516 }
6517 
6518 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6519   TL.setStarLoc(readSourceLocation());
6520 }
6521 
6522 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6523   // nothing to do
6524 }
6525 
6526 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6527   // nothing to do
6528 }
6529 
6530 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6531   TL.setExpansionLoc(readSourceLocation());
6532 }
6533 
6534 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6535   TL.setCaretLoc(readSourceLocation());
6536 }
6537 
6538 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6539   TL.setAmpLoc(readSourceLocation());
6540 }
6541 
6542 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6543   TL.setAmpAmpLoc(readSourceLocation());
6544 }
6545 
6546 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6547   TL.setStarLoc(readSourceLocation());
6548   TL.setClassTInfo(GetTypeSourceInfo());
6549 }
6550 
6551 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6552   TL.setLBracketLoc(readSourceLocation());
6553   TL.setRBracketLoc(readSourceLocation());
6554   if (Reader.readBool())
6555     TL.setSizeExpr(Reader.readExpr());
6556   else
6557     TL.setSizeExpr(nullptr);
6558 }
6559 
6560 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6561   VisitArrayTypeLoc(TL);
6562 }
6563 
6564 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6565   VisitArrayTypeLoc(TL);
6566 }
6567 
6568 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6569   VisitArrayTypeLoc(TL);
6570 }
6571 
6572 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6573                                             DependentSizedArrayTypeLoc TL) {
6574   VisitArrayTypeLoc(TL);
6575 }
6576 
6577 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6578     DependentAddressSpaceTypeLoc TL) {
6579 
6580     TL.setAttrNameLoc(readSourceLocation());
6581     TL.setAttrOperandParensRange(Reader.readSourceRange());
6582     TL.setAttrExprOperand(Reader.readExpr());
6583 }
6584 
6585 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6586                                         DependentSizedExtVectorTypeLoc TL) {
6587   TL.setNameLoc(readSourceLocation());
6588 }
6589 
6590 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6591   TL.setNameLoc(readSourceLocation());
6592 }
6593 
6594 void TypeLocReader::VisitDependentVectorTypeLoc(
6595     DependentVectorTypeLoc TL) {
6596   TL.setNameLoc(readSourceLocation());
6597 }
6598 
6599 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6600   TL.setNameLoc(readSourceLocation());
6601 }
6602 
6603 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6604   TL.setAttrNameLoc(readSourceLocation());
6605   TL.setAttrOperandParensRange(Reader.readSourceRange());
6606   TL.setAttrRowOperand(Reader.readExpr());
6607   TL.setAttrColumnOperand(Reader.readExpr());
6608 }
6609 
6610 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6611     DependentSizedMatrixTypeLoc TL) {
6612   TL.setAttrNameLoc(readSourceLocation());
6613   TL.setAttrOperandParensRange(Reader.readSourceRange());
6614   TL.setAttrRowOperand(Reader.readExpr());
6615   TL.setAttrColumnOperand(Reader.readExpr());
6616 }
6617 
6618 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6619   TL.setLocalRangeBegin(readSourceLocation());
6620   TL.setLParenLoc(readSourceLocation());
6621   TL.setRParenLoc(readSourceLocation());
6622   TL.setExceptionSpecRange(Reader.readSourceRange());
6623   TL.setLocalRangeEnd(readSourceLocation());
6624   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6625     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6626   }
6627 }
6628 
6629 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6630   VisitFunctionTypeLoc(TL);
6631 }
6632 
6633 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6634   VisitFunctionTypeLoc(TL);
6635 }
6636 
6637 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6638   TL.setNameLoc(readSourceLocation());
6639 }
6640 
6641 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6642   TL.setNameLoc(readSourceLocation());
6643 }
6644 
6645 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6646   TL.setTypeofLoc(readSourceLocation());
6647   TL.setLParenLoc(readSourceLocation());
6648   TL.setRParenLoc(readSourceLocation());
6649 }
6650 
6651 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6652   TL.setTypeofLoc(readSourceLocation());
6653   TL.setLParenLoc(readSourceLocation());
6654   TL.setRParenLoc(readSourceLocation());
6655   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6656 }
6657 
6658 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6659   TL.setNameLoc(readSourceLocation());
6660 }
6661 
6662 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6663   TL.setKWLoc(readSourceLocation());
6664   TL.setLParenLoc(readSourceLocation());
6665   TL.setRParenLoc(readSourceLocation());
6666   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6667 }
6668 
6669 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6670   TL.setNameLoc(readSourceLocation());
6671   if (Reader.readBool()) {
6672     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6673     TL.setTemplateKWLoc(readSourceLocation());
6674     TL.setConceptNameLoc(readSourceLocation());
6675     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6676     TL.setLAngleLoc(readSourceLocation());
6677     TL.setRAngleLoc(readSourceLocation());
6678     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6679       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6680                               TL.getTypePtr()->getArg(i).getKind()));
6681   }
6682 }
6683 
6684 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6685     DeducedTemplateSpecializationTypeLoc TL) {
6686   TL.setTemplateNameLoc(readSourceLocation());
6687 }
6688 
6689 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6690   TL.setNameLoc(readSourceLocation());
6691 }
6692 
6693 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6694   TL.setNameLoc(readSourceLocation());
6695 }
6696 
6697 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6698   TL.setAttr(ReadAttr());
6699 }
6700 
6701 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6702   TL.setNameLoc(readSourceLocation());
6703 }
6704 
6705 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6706                                             SubstTemplateTypeParmTypeLoc TL) {
6707   TL.setNameLoc(readSourceLocation());
6708 }
6709 
6710 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6711                                           SubstTemplateTypeParmPackTypeLoc TL) {
6712   TL.setNameLoc(readSourceLocation());
6713 }
6714 
6715 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6716                                            TemplateSpecializationTypeLoc TL) {
6717   TL.setTemplateKeywordLoc(readSourceLocation());
6718   TL.setTemplateNameLoc(readSourceLocation());
6719   TL.setLAngleLoc(readSourceLocation());
6720   TL.setRAngleLoc(readSourceLocation());
6721   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6722     TL.setArgLocInfo(
6723         i,
6724         Reader.readTemplateArgumentLocInfo(
6725           TL.getTypePtr()->getArg(i).getKind()));
6726 }
6727 
6728 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6729   TL.setLParenLoc(readSourceLocation());
6730   TL.setRParenLoc(readSourceLocation());
6731 }
6732 
6733 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6734   TL.setElaboratedKeywordLoc(readSourceLocation());
6735   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6736 }
6737 
6738 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6739   TL.setNameLoc(readSourceLocation());
6740 }
6741 
6742 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6743   TL.setElaboratedKeywordLoc(readSourceLocation());
6744   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6745   TL.setNameLoc(readSourceLocation());
6746 }
6747 
6748 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6749        DependentTemplateSpecializationTypeLoc TL) {
6750   TL.setElaboratedKeywordLoc(readSourceLocation());
6751   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6752   TL.setTemplateKeywordLoc(readSourceLocation());
6753   TL.setTemplateNameLoc(readSourceLocation());
6754   TL.setLAngleLoc(readSourceLocation());
6755   TL.setRAngleLoc(readSourceLocation());
6756   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6757     TL.setArgLocInfo(
6758         I,
6759         Reader.readTemplateArgumentLocInfo(
6760             TL.getTypePtr()->getArg(I).getKind()));
6761 }
6762 
6763 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6764   TL.setEllipsisLoc(readSourceLocation());
6765 }
6766 
6767 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6768   TL.setNameLoc(readSourceLocation());
6769 }
6770 
6771 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6772   if (TL.getNumProtocols()) {
6773     TL.setProtocolLAngleLoc(readSourceLocation());
6774     TL.setProtocolRAngleLoc(readSourceLocation());
6775   }
6776   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6777     TL.setProtocolLoc(i, readSourceLocation());
6778 }
6779 
6780 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6781   TL.setHasBaseTypeAsWritten(Reader.readBool());
6782   TL.setTypeArgsLAngleLoc(readSourceLocation());
6783   TL.setTypeArgsRAngleLoc(readSourceLocation());
6784   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6785     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6786   TL.setProtocolLAngleLoc(readSourceLocation());
6787   TL.setProtocolRAngleLoc(readSourceLocation());
6788   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6789     TL.setProtocolLoc(i, readSourceLocation());
6790 }
6791 
6792 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6793   TL.setStarLoc(readSourceLocation());
6794 }
6795 
6796 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6797   TL.setKWLoc(readSourceLocation());
6798   TL.setLParenLoc(readSourceLocation());
6799   TL.setRParenLoc(readSourceLocation());
6800 }
6801 
6802 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6803   TL.setKWLoc(readSourceLocation());
6804 }
6805 
6806 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6807   TL.setNameLoc(readSourceLocation());
6808 }
6809 void TypeLocReader::VisitDependentExtIntTypeLoc(
6810     clang::DependentExtIntTypeLoc TL) {
6811   TL.setNameLoc(readSourceLocation());
6812 }
6813 
6814 
6815 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6816   TypeLocReader TLR(*this);
6817   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6818     TLR.Visit(TL);
6819 }
6820 
6821 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6822   QualType InfoTy = readType();
6823   if (InfoTy.isNull())
6824     return nullptr;
6825 
6826   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6827   readTypeLoc(TInfo->getTypeLoc());
6828   return TInfo;
6829 }
6830 
6831 QualType ASTReader::GetType(TypeID ID) {
6832   assert(ContextObj && "reading type with no AST context");
6833   ASTContext &Context = *ContextObj;
6834 
6835   unsigned FastQuals = ID & Qualifiers::FastMask;
6836   unsigned Index = ID >> Qualifiers::FastWidth;
6837 
6838   if (Index < NUM_PREDEF_TYPE_IDS) {
6839     QualType T;
6840     switch ((PredefinedTypeIDs)Index) {
6841     case PREDEF_TYPE_NULL_ID:
6842       return QualType();
6843     case PREDEF_TYPE_VOID_ID:
6844       T = Context.VoidTy;
6845       break;
6846     case PREDEF_TYPE_BOOL_ID:
6847       T = Context.BoolTy;
6848       break;
6849     case PREDEF_TYPE_CHAR_U_ID:
6850     case PREDEF_TYPE_CHAR_S_ID:
6851       // FIXME: Check that the signedness of CharTy is correct!
6852       T = Context.CharTy;
6853       break;
6854     case PREDEF_TYPE_UCHAR_ID:
6855       T = Context.UnsignedCharTy;
6856       break;
6857     case PREDEF_TYPE_USHORT_ID:
6858       T = Context.UnsignedShortTy;
6859       break;
6860     case PREDEF_TYPE_UINT_ID:
6861       T = Context.UnsignedIntTy;
6862       break;
6863     case PREDEF_TYPE_ULONG_ID:
6864       T = Context.UnsignedLongTy;
6865       break;
6866     case PREDEF_TYPE_ULONGLONG_ID:
6867       T = Context.UnsignedLongLongTy;
6868       break;
6869     case PREDEF_TYPE_UINT128_ID:
6870       T = Context.UnsignedInt128Ty;
6871       break;
6872     case PREDEF_TYPE_SCHAR_ID:
6873       T = Context.SignedCharTy;
6874       break;
6875     case PREDEF_TYPE_WCHAR_ID:
6876       T = Context.WCharTy;
6877       break;
6878     case PREDEF_TYPE_SHORT_ID:
6879       T = Context.ShortTy;
6880       break;
6881     case PREDEF_TYPE_INT_ID:
6882       T = Context.IntTy;
6883       break;
6884     case PREDEF_TYPE_LONG_ID:
6885       T = Context.LongTy;
6886       break;
6887     case PREDEF_TYPE_LONGLONG_ID:
6888       T = Context.LongLongTy;
6889       break;
6890     case PREDEF_TYPE_INT128_ID:
6891       T = Context.Int128Ty;
6892       break;
6893     case PREDEF_TYPE_BFLOAT16_ID:
6894       T = Context.BFloat16Ty;
6895       break;
6896     case PREDEF_TYPE_HALF_ID:
6897       T = Context.HalfTy;
6898       break;
6899     case PREDEF_TYPE_FLOAT_ID:
6900       T = Context.FloatTy;
6901       break;
6902     case PREDEF_TYPE_DOUBLE_ID:
6903       T = Context.DoubleTy;
6904       break;
6905     case PREDEF_TYPE_LONGDOUBLE_ID:
6906       T = Context.LongDoubleTy;
6907       break;
6908     case PREDEF_TYPE_SHORT_ACCUM_ID:
6909       T = Context.ShortAccumTy;
6910       break;
6911     case PREDEF_TYPE_ACCUM_ID:
6912       T = Context.AccumTy;
6913       break;
6914     case PREDEF_TYPE_LONG_ACCUM_ID:
6915       T = Context.LongAccumTy;
6916       break;
6917     case PREDEF_TYPE_USHORT_ACCUM_ID:
6918       T = Context.UnsignedShortAccumTy;
6919       break;
6920     case PREDEF_TYPE_UACCUM_ID:
6921       T = Context.UnsignedAccumTy;
6922       break;
6923     case PREDEF_TYPE_ULONG_ACCUM_ID:
6924       T = Context.UnsignedLongAccumTy;
6925       break;
6926     case PREDEF_TYPE_SHORT_FRACT_ID:
6927       T = Context.ShortFractTy;
6928       break;
6929     case PREDEF_TYPE_FRACT_ID:
6930       T = Context.FractTy;
6931       break;
6932     case PREDEF_TYPE_LONG_FRACT_ID:
6933       T = Context.LongFractTy;
6934       break;
6935     case PREDEF_TYPE_USHORT_FRACT_ID:
6936       T = Context.UnsignedShortFractTy;
6937       break;
6938     case PREDEF_TYPE_UFRACT_ID:
6939       T = Context.UnsignedFractTy;
6940       break;
6941     case PREDEF_TYPE_ULONG_FRACT_ID:
6942       T = Context.UnsignedLongFractTy;
6943       break;
6944     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6945       T = Context.SatShortAccumTy;
6946       break;
6947     case PREDEF_TYPE_SAT_ACCUM_ID:
6948       T = Context.SatAccumTy;
6949       break;
6950     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6951       T = Context.SatLongAccumTy;
6952       break;
6953     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6954       T = Context.SatUnsignedShortAccumTy;
6955       break;
6956     case PREDEF_TYPE_SAT_UACCUM_ID:
6957       T = Context.SatUnsignedAccumTy;
6958       break;
6959     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6960       T = Context.SatUnsignedLongAccumTy;
6961       break;
6962     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6963       T = Context.SatShortFractTy;
6964       break;
6965     case PREDEF_TYPE_SAT_FRACT_ID:
6966       T = Context.SatFractTy;
6967       break;
6968     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6969       T = Context.SatLongFractTy;
6970       break;
6971     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6972       T = Context.SatUnsignedShortFractTy;
6973       break;
6974     case PREDEF_TYPE_SAT_UFRACT_ID:
6975       T = Context.SatUnsignedFractTy;
6976       break;
6977     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6978       T = Context.SatUnsignedLongFractTy;
6979       break;
6980     case PREDEF_TYPE_FLOAT16_ID:
6981       T = Context.Float16Ty;
6982       break;
6983     case PREDEF_TYPE_FLOAT128_ID:
6984       T = Context.Float128Ty;
6985       break;
6986     case PREDEF_TYPE_OVERLOAD_ID:
6987       T = Context.OverloadTy;
6988       break;
6989     case PREDEF_TYPE_BOUND_MEMBER:
6990       T = Context.BoundMemberTy;
6991       break;
6992     case PREDEF_TYPE_PSEUDO_OBJECT:
6993       T = Context.PseudoObjectTy;
6994       break;
6995     case PREDEF_TYPE_DEPENDENT_ID:
6996       T = Context.DependentTy;
6997       break;
6998     case PREDEF_TYPE_UNKNOWN_ANY:
6999       T = Context.UnknownAnyTy;
7000       break;
7001     case PREDEF_TYPE_NULLPTR_ID:
7002       T = Context.NullPtrTy;
7003       break;
7004     case PREDEF_TYPE_CHAR8_ID:
7005       T = Context.Char8Ty;
7006       break;
7007     case PREDEF_TYPE_CHAR16_ID:
7008       T = Context.Char16Ty;
7009       break;
7010     case PREDEF_TYPE_CHAR32_ID:
7011       T = Context.Char32Ty;
7012       break;
7013     case PREDEF_TYPE_OBJC_ID:
7014       T = Context.ObjCBuiltinIdTy;
7015       break;
7016     case PREDEF_TYPE_OBJC_CLASS:
7017       T = Context.ObjCBuiltinClassTy;
7018       break;
7019     case PREDEF_TYPE_OBJC_SEL:
7020       T = Context.ObjCBuiltinSelTy;
7021       break;
7022 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
7023     case PREDEF_TYPE_##Id##_ID: \
7024       T = Context.SingletonId; \
7025       break;
7026 #include "clang/Basic/OpenCLImageTypes.def"
7027 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7028     case PREDEF_TYPE_##Id##_ID: \
7029       T = Context.Id##Ty; \
7030       break;
7031 #include "clang/Basic/OpenCLExtensionTypes.def"
7032     case PREDEF_TYPE_SAMPLER_ID:
7033       T = Context.OCLSamplerTy;
7034       break;
7035     case PREDEF_TYPE_EVENT_ID:
7036       T = Context.OCLEventTy;
7037       break;
7038     case PREDEF_TYPE_CLK_EVENT_ID:
7039       T = Context.OCLClkEventTy;
7040       break;
7041     case PREDEF_TYPE_QUEUE_ID:
7042       T = Context.OCLQueueTy;
7043       break;
7044     case PREDEF_TYPE_RESERVE_ID_ID:
7045       T = Context.OCLReserveIDTy;
7046       break;
7047     case PREDEF_TYPE_AUTO_DEDUCT:
7048       T = Context.getAutoDeductType();
7049       break;
7050     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7051       T = Context.getAutoRRefDeductType();
7052       break;
7053     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7054       T = Context.ARCUnbridgedCastTy;
7055       break;
7056     case PREDEF_TYPE_BUILTIN_FN:
7057       T = Context.BuiltinFnTy;
7058       break;
7059     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7060       T = Context.IncompleteMatrixIdxTy;
7061       break;
7062     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7063       T = Context.OMPArraySectionTy;
7064       break;
7065     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7066       T = Context.OMPArraySectionTy;
7067       break;
7068     case PREDEF_TYPE_OMP_ITERATOR:
7069       T = Context.OMPIteratorTy;
7070       break;
7071 #define SVE_TYPE(Name, Id, SingletonId) \
7072     case PREDEF_TYPE_##Id##_ID: \
7073       T = Context.SingletonId; \
7074       break;
7075 #include "clang/Basic/AArch64SVEACLETypes.def"
7076 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7077     case PREDEF_TYPE_##Id##_ID: \
7078       T = Context.Id##Ty; \
7079       break;
7080 #include "clang/Basic/PPCTypes.def"
7081 #define RVV_TYPE(Name, Id, SingletonId) \
7082     case PREDEF_TYPE_##Id##_ID: \
7083       T = Context.SingletonId; \
7084       break;
7085 #include "clang/Basic/RISCVVTypes.def"
7086     }
7087 
7088     assert(!T.isNull() && "Unknown predefined type");
7089     return T.withFastQualifiers(FastQuals);
7090   }
7091 
7092   Index -= NUM_PREDEF_TYPE_IDS;
7093   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7094   if (TypesLoaded[Index].isNull()) {
7095     TypesLoaded[Index] = readTypeRecord(Index);
7096     if (TypesLoaded[Index].isNull())
7097       return QualType();
7098 
7099     TypesLoaded[Index]->setFromAST();
7100     if (DeserializationListener)
7101       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7102                                         TypesLoaded[Index]);
7103   }
7104 
7105   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7106 }
7107 
7108 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7109   return GetType(getGlobalTypeID(F, LocalID));
7110 }
7111 
7112 serialization::TypeID
7113 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7114   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7115   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7116 
7117   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7118     return LocalID;
7119 
7120   if (!F.ModuleOffsetMap.empty())
7121     ReadModuleOffsetMap(F);
7122 
7123   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7124     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7125   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7126 
7127   unsigned GlobalIndex = LocalIndex + I->second;
7128   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7129 }
7130 
7131 TemplateArgumentLocInfo
7132 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7133   switch (Kind) {
7134   case TemplateArgument::Expression:
7135     return readExpr();
7136   case TemplateArgument::Type:
7137     return readTypeSourceInfo();
7138   case TemplateArgument::Template: {
7139     NestedNameSpecifierLoc QualifierLoc =
7140       readNestedNameSpecifierLoc();
7141     SourceLocation TemplateNameLoc = readSourceLocation();
7142     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7143                                    TemplateNameLoc, SourceLocation());
7144   }
7145   case TemplateArgument::TemplateExpansion: {
7146     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7147     SourceLocation TemplateNameLoc = readSourceLocation();
7148     SourceLocation EllipsisLoc = readSourceLocation();
7149     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7150                                    TemplateNameLoc, EllipsisLoc);
7151   }
7152   case TemplateArgument::Null:
7153   case TemplateArgument::Integral:
7154   case TemplateArgument::Declaration:
7155   case TemplateArgument::NullPtr:
7156   case TemplateArgument::Pack:
7157     // FIXME: Is this right?
7158     return TemplateArgumentLocInfo();
7159   }
7160   llvm_unreachable("unexpected template argument loc");
7161 }
7162 
7163 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7164   TemplateArgument Arg = readTemplateArgument();
7165 
7166   if (Arg.getKind() == TemplateArgument::Expression) {
7167     if (readBool()) // bool InfoHasSameExpr.
7168       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7169   }
7170   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7171 }
7172 
7173 const ASTTemplateArgumentListInfo *
7174 ASTRecordReader::readASTTemplateArgumentListInfo() {
7175   SourceLocation LAngleLoc = readSourceLocation();
7176   SourceLocation RAngleLoc = readSourceLocation();
7177   unsigned NumArgsAsWritten = readInt();
7178   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7179   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7180     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7181   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7182 }
7183 
7184 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7185   return GetDecl(ID);
7186 }
7187 
7188 void ASTReader::CompleteRedeclChain(const Decl *D) {
7189   if (NumCurrentElementsDeserializing) {
7190     // We arrange to not care about the complete redeclaration chain while we're
7191     // deserializing. Just remember that the AST has marked this one as complete
7192     // but that it's not actually complete yet, so we know we still need to
7193     // complete it later.
7194     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7195     return;
7196   }
7197 
7198   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7199 
7200   // If this is a named declaration, complete it by looking it up
7201   // within its context.
7202   //
7203   // FIXME: Merging a function definition should merge
7204   // all mergeable entities within it.
7205   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7206       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7207     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7208       if (!getContext().getLangOpts().CPlusPlus &&
7209           isa<TranslationUnitDecl>(DC)) {
7210         // Outside of C++, we don't have a lookup table for the TU, so update
7211         // the identifier instead. (For C++ modules, we don't store decls
7212         // in the serialized identifier table, so we do the lookup in the TU.)
7213         auto *II = Name.getAsIdentifierInfo();
7214         assert(II && "non-identifier name in C?");
7215         if (II->isOutOfDate())
7216           updateOutOfDateIdentifier(*II);
7217       } else
7218         DC->lookup(Name);
7219     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7220       // Find all declarations of this kind from the relevant context.
7221       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7222         auto *DC = cast<DeclContext>(DCDecl);
7223         SmallVector<Decl*, 8> Decls;
7224         FindExternalLexicalDecls(
7225             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7226       }
7227     }
7228   }
7229 
7230   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7231     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7232   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7233     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7234   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7235     if (auto *Template = FD->getPrimaryTemplate())
7236       Template->LoadLazySpecializations();
7237   }
7238 }
7239 
7240 CXXCtorInitializer **
7241 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7242   RecordLocation Loc = getLocalBitOffset(Offset);
7243   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7244   SavedStreamPosition SavedPosition(Cursor);
7245   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7246     Error(std::move(Err));
7247     return nullptr;
7248   }
7249   ReadingKindTracker ReadingKind(Read_Decl, *this);
7250 
7251   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7252   if (!MaybeCode) {
7253     Error(MaybeCode.takeError());
7254     return nullptr;
7255   }
7256   unsigned Code = MaybeCode.get();
7257 
7258   ASTRecordReader Record(*this, *Loc.F);
7259   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7260   if (!MaybeRecCode) {
7261     Error(MaybeRecCode.takeError());
7262     return nullptr;
7263   }
7264   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7265     Error("malformed AST file: missing C++ ctor initializers");
7266     return nullptr;
7267   }
7268 
7269   return Record.readCXXCtorInitializers();
7270 }
7271 
7272 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7273   assert(ContextObj && "reading base specifiers with no AST context");
7274   ASTContext &Context = *ContextObj;
7275 
7276   RecordLocation Loc = getLocalBitOffset(Offset);
7277   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7278   SavedStreamPosition SavedPosition(Cursor);
7279   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7280     Error(std::move(Err));
7281     return nullptr;
7282   }
7283   ReadingKindTracker ReadingKind(Read_Decl, *this);
7284 
7285   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7286   if (!MaybeCode) {
7287     Error(MaybeCode.takeError());
7288     return nullptr;
7289   }
7290   unsigned Code = MaybeCode.get();
7291 
7292   ASTRecordReader Record(*this, *Loc.F);
7293   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7294   if (!MaybeRecCode) {
7295     Error(MaybeCode.takeError());
7296     return nullptr;
7297   }
7298   unsigned RecCode = MaybeRecCode.get();
7299 
7300   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7301     Error("malformed AST file: missing C++ base specifiers");
7302     return nullptr;
7303   }
7304 
7305   unsigned NumBases = Record.readInt();
7306   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7307   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7308   for (unsigned I = 0; I != NumBases; ++I)
7309     Bases[I] = Record.readCXXBaseSpecifier();
7310   return Bases;
7311 }
7312 
7313 serialization::DeclID
7314 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7315   if (LocalID < NUM_PREDEF_DECL_IDS)
7316     return LocalID;
7317 
7318   if (!F.ModuleOffsetMap.empty())
7319     ReadModuleOffsetMap(F);
7320 
7321   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7322     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7323   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7324 
7325   return LocalID + I->second;
7326 }
7327 
7328 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7329                                    ModuleFile &M) const {
7330   // Predefined decls aren't from any module.
7331   if (ID < NUM_PREDEF_DECL_IDS)
7332     return false;
7333 
7334   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7335          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7336 }
7337 
7338 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7339   if (!D->isFromASTFile())
7340     return nullptr;
7341   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7342   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7343   return I->second;
7344 }
7345 
7346 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7347   if (ID < NUM_PREDEF_DECL_IDS)
7348     return SourceLocation();
7349 
7350   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7351 
7352   if (Index > DeclsLoaded.size()) {
7353     Error("declaration ID out-of-range for AST file");
7354     return SourceLocation();
7355   }
7356 
7357   if (Decl *D = DeclsLoaded[Index])
7358     return D->getLocation();
7359 
7360   SourceLocation Loc;
7361   DeclCursorForID(ID, Loc);
7362   return Loc;
7363 }
7364 
7365 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7366   switch (ID) {
7367   case PREDEF_DECL_NULL_ID:
7368     return nullptr;
7369 
7370   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7371     return Context.getTranslationUnitDecl();
7372 
7373   case PREDEF_DECL_OBJC_ID_ID:
7374     return Context.getObjCIdDecl();
7375 
7376   case PREDEF_DECL_OBJC_SEL_ID:
7377     return Context.getObjCSelDecl();
7378 
7379   case PREDEF_DECL_OBJC_CLASS_ID:
7380     return Context.getObjCClassDecl();
7381 
7382   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7383     return Context.getObjCProtocolDecl();
7384 
7385   case PREDEF_DECL_INT_128_ID:
7386     return Context.getInt128Decl();
7387 
7388   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7389     return Context.getUInt128Decl();
7390 
7391   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7392     return Context.getObjCInstanceTypeDecl();
7393 
7394   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7395     return Context.getBuiltinVaListDecl();
7396 
7397   case PREDEF_DECL_VA_LIST_TAG:
7398     return Context.getVaListTagDecl();
7399 
7400   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7401     return Context.getBuiltinMSVaListDecl();
7402 
7403   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7404     return Context.getMSGuidTagDecl();
7405 
7406   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7407     return Context.getExternCContextDecl();
7408 
7409   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7410     return Context.getMakeIntegerSeqDecl();
7411 
7412   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7413     return Context.getCFConstantStringDecl();
7414 
7415   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7416     return Context.getCFConstantStringTagDecl();
7417 
7418   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7419     return Context.getTypePackElementDecl();
7420   }
7421   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7422 }
7423 
7424 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7425   assert(ContextObj && "reading decl with no AST context");
7426   if (ID < NUM_PREDEF_DECL_IDS) {
7427     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7428     if (D) {
7429       // Track that we have merged the declaration with ID \p ID into the
7430       // pre-existing predefined declaration \p D.
7431       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7432       if (Merged.empty())
7433         Merged.push_back(ID);
7434     }
7435     return D;
7436   }
7437 
7438   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7439 
7440   if (Index >= DeclsLoaded.size()) {
7441     assert(0 && "declaration ID out-of-range for AST file");
7442     Error("declaration ID out-of-range for AST file");
7443     return nullptr;
7444   }
7445 
7446   return DeclsLoaded[Index];
7447 }
7448 
7449 Decl *ASTReader::GetDecl(DeclID ID) {
7450   if (ID < NUM_PREDEF_DECL_IDS)
7451     return GetExistingDecl(ID);
7452 
7453   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7454 
7455   if (Index >= DeclsLoaded.size()) {
7456     assert(0 && "declaration ID out-of-range for AST file");
7457     Error("declaration ID out-of-range for AST file");
7458     return nullptr;
7459   }
7460 
7461   if (!DeclsLoaded[Index]) {
7462     ReadDeclRecord(ID);
7463     if (DeserializationListener)
7464       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7465   }
7466 
7467   return DeclsLoaded[Index];
7468 }
7469 
7470 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7471                                                   DeclID GlobalID) {
7472   if (GlobalID < NUM_PREDEF_DECL_IDS)
7473     return GlobalID;
7474 
7475   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7476   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7477   ModuleFile *Owner = I->second;
7478 
7479   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7480     = M.GlobalToLocalDeclIDs.find(Owner);
7481   if (Pos == M.GlobalToLocalDeclIDs.end())
7482     return 0;
7483 
7484   return GlobalID - Owner->BaseDeclID + Pos->second;
7485 }
7486 
7487 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7488                                             const RecordData &Record,
7489                                             unsigned &Idx) {
7490   if (Idx >= Record.size()) {
7491     Error("Corrupted AST file");
7492     return 0;
7493   }
7494 
7495   return getGlobalDeclID(F, Record[Idx++]);
7496 }
7497 
7498 /// Resolve the offset of a statement into a statement.
7499 ///
7500 /// This operation will read a new statement from the external
7501 /// source each time it is called, and is meant to be used via a
7502 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7503 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7504   // Switch case IDs are per Decl.
7505   ClearSwitchCaseIDs();
7506 
7507   // Offset here is a global offset across the entire chain.
7508   RecordLocation Loc = getLocalBitOffset(Offset);
7509   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7510     Error(std::move(Err));
7511     return nullptr;
7512   }
7513   assert(NumCurrentElementsDeserializing == 0 &&
7514          "should not be called while already deserializing");
7515   Deserializing D(this);
7516   return ReadStmtFromStream(*Loc.F);
7517 }
7518 
7519 void ASTReader::FindExternalLexicalDecls(
7520     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7521     SmallVectorImpl<Decl *> &Decls) {
7522   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7523 
7524   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7525     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7526     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7527       auto K = (Decl::Kind)+LexicalDecls[I];
7528       if (!IsKindWeWant(K))
7529         continue;
7530 
7531       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7532 
7533       // Don't add predefined declarations to the lexical context more
7534       // than once.
7535       if (ID < NUM_PREDEF_DECL_IDS) {
7536         if (PredefsVisited[ID])
7537           continue;
7538 
7539         PredefsVisited[ID] = true;
7540       }
7541 
7542       if (Decl *D = GetLocalDecl(*M, ID)) {
7543         assert(D->getKind() == K && "wrong kind for lexical decl");
7544         if (!DC->isDeclInLexicalTraversal(D))
7545           Decls.push_back(D);
7546       }
7547     }
7548   };
7549 
7550   if (isa<TranslationUnitDecl>(DC)) {
7551     for (auto Lexical : TULexicalDecls)
7552       Visit(Lexical.first, Lexical.second);
7553   } else {
7554     auto I = LexicalDecls.find(DC);
7555     if (I != LexicalDecls.end())
7556       Visit(I->second.first, I->second.second);
7557   }
7558 
7559   ++NumLexicalDeclContextsRead;
7560 }
7561 
7562 namespace {
7563 
7564 class DeclIDComp {
7565   ASTReader &Reader;
7566   ModuleFile &Mod;
7567 
7568 public:
7569   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7570 
7571   bool operator()(LocalDeclID L, LocalDeclID R) const {
7572     SourceLocation LHS = getLocation(L);
7573     SourceLocation RHS = getLocation(R);
7574     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7575   }
7576 
7577   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7578     SourceLocation RHS = getLocation(R);
7579     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7580   }
7581 
7582   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7583     SourceLocation LHS = getLocation(L);
7584     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7585   }
7586 
7587   SourceLocation getLocation(LocalDeclID ID) const {
7588     return Reader.getSourceManager().getFileLoc(
7589             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7590   }
7591 };
7592 
7593 } // namespace
7594 
7595 void ASTReader::FindFileRegionDecls(FileID File,
7596                                     unsigned Offset, unsigned Length,
7597                                     SmallVectorImpl<Decl *> &Decls) {
7598   SourceManager &SM = getSourceManager();
7599 
7600   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7601   if (I == FileDeclIDs.end())
7602     return;
7603 
7604   FileDeclsInfo &DInfo = I->second;
7605   if (DInfo.Decls.empty())
7606     return;
7607 
7608   SourceLocation
7609     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7610   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7611 
7612   DeclIDComp DIDComp(*this, *DInfo.Mod);
7613   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7614       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7615   if (BeginIt != DInfo.Decls.begin())
7616     --BeginIt;
7617 
7618   // If we are pointing at a top-level decl inside an objc container, we need
7619   // to backtrack until we find it otherwise we will fail to report that the
7620   // region overlaps with an objc container.
7621   while (BeginIt != DInfo.Decls.begin() &&
7622          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7623              ->isTopLevelDeclInObjCContainer())
7624     --BeginIt;
7625 
7626   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7627       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7628   if (EndIt != DInfo.Decls.end())
7629     ++EndIt;
7630 
7631   for (ArrayRef<serialization::LocalDeclID>::iterator
7632          DIt = BeginIt; DIt != EndIt; ++DIt)
7633     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7634 }
7635 
7636 bool
7637 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7638                                           DeclarationName Name) {
7639   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7640          "DeclContext has no visible decls in storage");
7641   if (!Name)
7642     return false;
7643 
7644   auto It = Lookups.find(DC);
7645   if (It == Lookups.end())
7646     return false;
7647 
7648   Deserializing LookupResults(this);
7649 
7650   // Load the list of declarations.
7651   SmallVector<NamedDecl *, 64> Decls;
7652   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7653   for (DeclID ID : It->second.Table.find(Name)) {
7654     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7655     if (ND->getDeclName() == Name && Found.insert(ND).second)
7656       Decls.push_back(ND);
7657   }
7658 
7659   ++NumVisibleDeclContextsRead;
7660   SetExternalVisibleDeclsForName(DC, Name, Decls);
7661   return !Decls.empty();
7662 }
7663 
7664 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7665   if (!DC->hasExternalVisibleStorage())
7666     return;
7667 
7668   auto It = Lookups.find(DC);
7669   assert(It != Lookups.end() &&
7670          "have external visible storage but no lookup tables");
7671 
7672   DeclsMap Decls;
7673 
7674   for (DeclID ID : It->second.Table.findAll()) {
7675     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7676     Decls[ND->getDeclName()].push_back(ND);
7677   }
7678 
7679   ++NumVisibleDeclContextsRead;
7680 
7681   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7682     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7683   }
7684   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7685 }
7686 
7687 const serialization::reader::DeclContextLookupTable *
7688 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7689   auto I = Lookups.find(Primary);
7690   return I == Lookups.end() ? nullptr : &I->second;
7691 }
7692 
7693 /// Under non-PCH compilation the consumer receives the objc methods
7694 /// before receiving the implementation, and codegen depends on this.
7695 /// We simulate this by deserializing and passing to consumer the methods of the
7696 /// implementation before passing the deserialized implementation decl.
7697 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7698                                        ASTConsumer *Consumer) {
7699   assert(ImplD && Consumer);
7700 
7701   for (auto *I : ImplD->methods())
7702     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7703 
7704   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7705 }
7706 
7707 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7708   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7709     PassObjCImplDeclToConsumer(ImplD, Consumer);
7710   else
7711     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7712 }
7713 
7714 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7715   this->Consumer = Consumer;
7716 
7717   if (Consumer)
7718     PassInterestingDeclsToConsumer();
7719 
7720   if (DeserializationListener)
7721     DeserializationListener->ReaderInitialized(this);
7722 }
7723 
7724 void ASTReader::PrintStats() {
7725   std::fprintf(stderr, "*** AST File Statistics:\n");
7726 
7727   unsigned NumTypesLoaded
7728     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7729                                       QualType());
7730   unsigned NumDeclsLoaded
7731     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7732                                       (Decl *)nullptr);
7733   unsigned NumIdentifiersLoaded
7734     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7735                                             IdentifiersLoaded.end(),
7736                                             (IdentifierInfo *)nullptr);
7737   unsigned NumMacrosLoaded
7738     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7739                                        MacrosLoaded.end(),
7740                                        (MacroInfo *)nullptr);
7741   unsigned NumSelectorsLoaded
7742     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7743                                           SelectorsLoaded.end(),
7744                                           Selector());
7745 
7746   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7747     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7748                  NumSLocEntriesRead, TotalNumSLocEntries,
7749                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7750   if (!TypesLoaded.empty())
7751     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7752                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7753                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7754   if (!DeclsLoaded.empty())
7755     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7756                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7757                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7758   if (!IdentifiersLoaded.empty())
7759     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7760                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7761                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7762   if (!MacrosLoaded.empty())
7763     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7764                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7765                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7766   if (!SelectorsLoaded.empty())
7767     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7768                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7769                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7770   if (TotalNumStatements)
7771     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7772                  NumStatementsRead, TotalNumStatements,
7773                  ((float)NumStatementsRead/TotalNumStatements * 100));
7774   if (TotalNumMacros)
7775     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7776                  NumMacrosRead, TotalNumMacros,
7777                  ((float)NumMacrosRead/TotalNumMacros * 100));
7778   if (TotalLexicalDeclContexts)
7779     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7780                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7781                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7782                   * 100));
7783   if (TotalVisibleDeclContexts)
7784     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7785                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7786                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7787                   * 100));
7788   if (TotalNumMethodPoolEntries)
7789     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7790                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7791                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7792                   * 100));
7793   if (NumMethodPoolLookups)
7794     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7795                  NumMethodPoolHits, NumMethodPoolLookups,
7796                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7797   if (NumMethodPoolTableLookups)
7798     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7799                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7800                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7801                   * 100.0));
7802   if (NumIdentifierLookupHits)
7803     std::fprintf(stderr,
7804                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7805                  NumIdentifierLookupHits, NumIdentifierLookups,
7806                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7807 
7808   if (GlobalIndex) {
7809     std::fprintf(stderr, "\n");
7810     GlobalIndex->printStats();
7811   }
7812 
7813   std::fprintf(stderr, "\n");
7814   dump();
7815   std::fprintf(stderr, "\n");
7816 }
7817 
7818 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7819 LLVM_DUMP_METHOD static void
7820 dumpModuleIDMap(StringRef Name,
7821                 const ContinuousRangeMap<Key, ModuleFile *,
7822                                          InitialCapacity> &Map) {
7823   if (Map.begin() == Map.end())
7824     return;
7825 
7826   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7827 
7828   llvm::errs() << Name << ":\n";
7829   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7830        I != IEnd; ++I) {
7831     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7832       << "\n";
7833   }
7834 }
7835 
7836 LLVM_DUMP_METHOD void ASTReader::dump() {
7837   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7838   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7839   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7840   dumpModuleIDMap("Global type map", GlobalTypeMap);
7841   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7842   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7843   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7844   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7845   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7846   dumpModuleIDMap("Global preprocessed entity map",
7847                   GlobalPreprocessedEntityMap);
7848 
7849   llvm::errs() << "\n*** PCH/Modules Loaded:";
7850   for (ModuleFile &M : ModuleMgr)
7851     M.dump();
7852 }
7853 
7854 /// Return the amount of memory used by memory buffers, breaking down
7855 /// by heap-backed versus mmap'ed memory.
7856 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7857   for (ModuleFile &I : ModuleMgr) {
7858     if (llvm::MemoryBuffer *buf = I.Buffer) {
7859       size_t bytes = buf->getBufferSize();
7860       switch (buf->getBufferKind()) {
7861         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7862           sizes.malloc_bytes += bytes;
7863           break;
7864         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7865           sizes.mmap_bytes += bytes;
7866           break;
7867       }
7868     }
7869   }
7870 }
7871 
7872 void ASTReader::InitializeSema(Sema &S) {
7873   SemaObj = &S;
7874   S.addExternalSource(this);
7875 
7876   // Makes sure any declarations that were deserialized "too early"
7877   // still get added to the identifier's declaration chains.
7878   for (uint64_t ID : PreloadedDeclIDs) {
7879     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7880     pushExternalDeclIntoScope(D, D->getDeclName());
7881   }
7882   PreloadedDeclIDs.clear();
7883 
7884   // FIXME: What happens if these are changed by a module import?
7885   if (!FPPragmaOptions.empty()) {
7886     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7887     FPOptionsOverride NewOverrides =
7888         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7889     SemaObj->CurFPFeatures =
7890         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7891   }
7892 
7893   SemaObj->OpenCLFeatures = OpenCLExtensions;
7894   SemaObj->OpenCLTypeExtMap = OpenCLTypeExtMap;
7895   SemaObj->OpenCLDeclExtMap = OpenCLDeclExtMap;
7896 
7897   UpdateSema();
7898 }
7899 
7900 void ASTReader::UpdateSema() {
7901   assert(SemaObj && "no Sema to update");
7902 
7903   // Load the offsets of the declarations that Sema references.
7904   // They will be lazily deserialized when needed.
7905   if (!SemaDeclRefs.empty()) {
7906     assert(SemaDeclRefs.size() % 3 == 0);
7907     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7908       if (!SemaObj->StdNamespace)
7909         SemaObj->StdNamespace = SemaDeclRefs[I];
7910       if (!SemaObj->StdBadAlloc)
7911         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7912       if (!SemaObj->StdAlignValT)
7913         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7914     }
7915     SemaDeclRefs.clear();
7916   }
7917 
7918   // Update the state of pragmas. Use the same API as if we had encountered the
7919   // pragma in the source.
7920   if(OptimizeOffPragmaLocation.isValid())
7921     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7922   if (PragmaMSStructState != -1)
7923     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7924   if (PointersToMembersPragmaLocation.isValid()) {
7925     SemaObj->ActOnPragmaMSPointersToMembers(
7926         (LangOptions::PragmaMSPointersToMembersKind)
7927             PragmaMSPointersToMembersState,
7928         PointersToMembersPragmaLocation);
7929   }
7930   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7931 
7932   if (PragmaAlignPackCurrentValue) {
7933     // The bottom of the stack might have a default value. It must be adjusted
7934     // to the current value to ensure that the packing state is preserved after
7935     // popping entries that were included/imported from a PCH/module.
7936     bool DropFirst = false;
7937     if (!PragmaAlignPackStack.empty() &&
7938         PragmaAlignPackStack.front().Location.isInvalid()) {
7939       assert(PragmaAlignPackStack.front().Value ==
7940                  SemaObj->AlignPackStack.DefaultValue &&
7941              "Expected a default alignment value");
7942       SemaObj->AlignPackStack.Stack.emplace_back(
7943           PragmaAlignPackStack.front().SlotLabel,
7944           SemaObj->AlignPackStack.CurrentValue,
7945           SemaObj->AlignPackStack.CurrentPragmaLocation,
7946           PragmaAlignPackStack.front().PushLocation);
7947       DropFirst = true;
7948     }
7949     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7950                                  .drop_front(DropFirst ? 1 : 0)) {
7951       SemaObj->AlignPackStack.Stack.emplace_back(
7952           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7953     }
7954     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7955       assert(*PragmaAlignPackCurrentValue ==
7956                  SemaObj->AlignPackStack.DefaultValue &&
7957              "Expected a default align and pack value");
7958       // Keep the current values.
7959     } else {
7960       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7961       SemaObj->AlignPackStack.CurrentPragmaLocation =
7962           PragmaAlignPackCurrentLocation;
7963     }
7964   }
7965   if (FpPragmaCurrentValue) {
7966     // The bottom of the stack might have a default value. It must be adjusted
7967     // to the current value to ensure that fp-pragma state is preserved after
7968     // popping entries that were included/imported from a PCH/module.
7969     bool DropFirst = false;
7970     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7971       assert(FpPragmaStack.front().Value ==
7972                  SemaObj->FpPragmaStack.DefaultValue &&
7973              "Expected a default pragma float_control value");
7974       SemaObj->FpPragmaStack.Stack.emplace_back(
7975           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7976           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7977           FpPragmaStack.front().PushLocation);
7978       DropFirst = true;
7979     }
7980     for (const auto &Entry :
7981          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7982       SemaObj->FpPragmaStack.Stack.emplace_back(
7983           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7984     if (FpPragmaCurrentLocation.isInvalid()) {
7985       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7986              "Expected a default pragma float_control value");
7987       // Keep the current values.
7988     } else {
7989       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7990       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7991     }
7992   }
7993 
7994   // For non-modular AST files, restore visiblity of modules.
7995   for (auto &Import : ImportedModules) {
7996     if (Import.ImportLoc.isInvalid())
7997       continue;
7998     if (Module *Imported = getSubmodule(Import.ID)) {
7999       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
8000     }
8001   }
8002 }
8003 
8004 IdentifierInfo *ASTReader::get(StringRef Name) {
8005   // Note that we are loading an identifier.
8006   Deserializing AnIdentifier(this);
8007 
8008   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
8009                                   NumIdentifierLookups,
8010                                   NumIdentifierLookupHits);
8011 
8012   // We don't need to do identifier table lookups in C++ modules (we preload
8013   // all interesting declarations, and don't need to use the scope for name
8014   // lookups). Perform the lookup in PCH files, though, since we don't build
8015   // a complete initial identifier table if we're carrying on from a PCH.
8016   if (PP.getLangOpts().CPlusPlus) {
8017     for (auto F : ModuleMgr.pch_modules())
8018       if (Visitor(*F))
8019         break;
8020   } else {
8021     // If there is a global index, look there first to determine which modules
8022     // provably do not have any results for this identifier.
8023     GlobalModuleIndex::HitSet Hits;
8024     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8025     if (!loadGlobalIndex()) {
8026       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8027         HitsPtr = &Hits;
8028       }
8029     }
8030 
8031     ModuleMgr.visit(Visitor, HitsPtr);
8032   }
8033 
8034   IdentifierInfo *II = Visitor.getIdentifierInfo();
8035   markIdentifierUpToDate(II);
8036   return II;
8037 }
8038 
8039 namespace clang {
8040 
8041   /// An identifier-lookup iterator that enumerates all of the
8042   /// identifiers stored within a set of AST files.
8043   class ASTIdentifierIterator : public IdentifierIterator {
8044     /// The AST reader whose identifiers are being enumerated.
8045     const ASTReader &Reader;
8046 
8047     /// The current index into the chain of AST files stored in
8048     /// the AST reader.
8049     unsigned Index;
8050 
8051     /// The current position within the identifier lookup table
8052     /// of the current AST file.
8053     ASTIdentifierLookupTable::key_iterator Current;
8054 
8055     /// The end position within the identifier lookup table of
8056     /// the current AST file.
8057     ASTIdentifierLookupTable::key_iterator End;
8058 
8059     /// Whether to skip any modules in the ASTReader.
8060     bool SkipModules;
8061 
8062   public:
8063     explicit ASTIdentifierIterator(const ASTReader &Reader,
8064                                    bool SkipModules = false);
8065 
8066     StringRef Next() override;
8067   };
8068 
8069 } // namespace clang
8070 
8071 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8072                                              bool SkipModules)
8073     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8074 }
8075 
8076 StringRef ASTIdentifierIterator::Next() {
8077   while (Current == End) {
8078     // If we have exhausted all of our AST files, we're done.
8079     if (Index == 0)
8080       return StringRef();
8081 
8082     --Index;
8083     ModuleFile &F = Reader.ModuleMgr[Index];
8084     if (SkipModules && F.isModule())
8085       continue;
8086 
8087     ASTIdentifierLookupTable *IdTable =
8088         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8089     Current = IdTable->key_begin();
8090     End = IdTable->key_end();
8091   }
8092 
8093   // We have any identifiers remaining in the current AST file; return
8094   // the next one.
8095   StringRef Result = *Current;
8096   ++Current;
8097   return Result;
8098 }
8099 
8100 namespace {
8101 
8102 /// A utility for appending two IdentifierIterators.
8103 class ChainedIdentifierIterator : public IdentifierIterator {
8104   std::unique_ptr<IdentifierIterator> Current;
8105   std::unique_ptr<IdentifierIterator> Queued;
8106 
8107 public:
8108   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8109                             std::unique_ptr<IdentifierIterator> Second)
8110       : Current(std::move(First)), Queued(std::move(Second)) {}
8111 
8112   StringRef Next() override {
8113     if (!Current)
8114       return StringRef();
8115 
8116     StringRef result = Current->Next();
8117     if (!result.empty())
8118       return result;
8119 
8120     // Try the queued iterator, which may itself be empty.
8121     Current.reset();
8122     std::swap(Current, Queued);
8123     return Next();
8124   }
8125 };
8126 
8127 } // namespace
8128 
8129 IdentifierIterator *ASTReader::getIdentifiers() {
8130   if (!loadGlobalIndex()) {
8131     std::unique_ptr<IdentifierIterator> ReaderIter(
8132         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8133     std::unique_ptr<IdentifierIterator> ModulesIter(
8134         GlobalIndex->createIdentifierIterator());
8135     return new ChainedIdentifierIterator(std::move(ReaderIter),
8136                                          std::move(ModulesIter));
8137   }
8138 
8139   return new ASTIdentifierIterator(*this);
8140 }
8141 
8142 namespace clang {
8143 namespace serialization {
8144 
8145   class ReadMethodPoolVisitor {
8146     ASTReader &Reader;
8147     Selector Sel;
8148     unsigned PriorGeneration;
8149     unsigned InstanceBits = 0;
8150     unsigned FactoryBits = 0;
8151     bool InstanceHasMoreThanOneDecl = false;
8152     bool FactoryHasMoreThanOneDecl = false;
8153     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8154     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8155 
8156   public:
8157     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8158                           unsigned PriorGeneration)
8159         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8160 
8161     bool operator()(ModuleFile &M) {
8162       if (!M.SelectorLookupTable)
8163         return false;
8164 
8165       // If we've already searched this module file, skip it now.
8166       if (M.Generation <= PriorGeneration)
8167         return true;
8168 
8169       ++Reader.NumMethodPoolTableLookups;
8170       ASTSelectorLookupTable *PoolTable
8171         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8172       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8173       if (Pos == PoolTable->end())
8174         return false;
8175 
8176       ++Reader.NumMethodPoolTableHits;
8177       ++Reader.NumSelectorsRead;
8178       // FIXME: Not quite happy with the statistics here. We probably should
8179       // disable this tracking when called via LoadSelector.
8180       // Also, should entries without methods count as misses?
8181       ++Reader.NumMethodPoolEntriesRead;
8182       ASTSelectorLookupTrait::data_type Data = *Pos;
8183       if (Reader.DeserializationListener)
8184         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8185 
8186       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8187       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8188       InstanceBits = Data.InstanceBits;
8189       FactoryBits = Data.FactoryBits;
8190       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8191       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8192       return true;
8193     }
8194 
8195     /// Retrieve the instance methods found by this visitor.
8196     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8197       return InstanceMethods;
8198     }
8199 
8200     /// Retrieve the instance methods found by this visitor.
8201     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8202       return FactoryMethods;
8203     }
8204 
8205     unsigned getInstanceBits() const { return InstanceBits; }
8206     unsigned getFactoryBits() const { return FactoryBits; }
8207 
8208     bool instanceHasMoreThanOneDecl() const {
8209       return InstanceHasMoreThanOneDecl;
8210     }
8211 
8212     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8213   };
8214 
8215 } // namespace serialization
8216 } // namespace clang
8217 
8218 /// Add the given set of methods to the method list.
8219 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8220                              ObjCMethodList &List) {
8221   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8222     S.addMethodToGlobalList(&List, Methods[I]);
8223   }
8224 }
8225 
8226 void ASTReader::ReadMethodPool(Selector Sel) {
8227   // Get the selector generation and update it to the current generation.
8228   unsigned &Generation = SelectorGeneration[Sel];
8229   unsigned PriorGeneration = Generation;
8230   Generation = getGeneration();
8231   SelectorOutOfDate[Sel] = false;
8232 
8233   // Search for methods defined with this selector.
8234   ++NumMethodPoolLookups;
8235   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8236   ModuleMgr.visit(Visitor);
8237 
8238   if (Visitor.getInstanceMethods().empty() &&
8239       Visitor.getFactoryMethods().empty())
8240     return;
8241 
8242   ++NumMethodPoolHits;
8243 
8244   if (!getSema())
8245     return;
8246 
8247   Sema &S = *getSema();
8248   Sema::GlobalMethodPool::iterator Pos
8249     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8250 
8251   Pos->second.first.setBits(Visitor.getInstanceBits());
8252   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8253   Pos->second.second.setBits(Visitor.getFactoryBits());
8254   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8255 
8256   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8257   // when building a module we keep every method individually and may need to
8258   // update hasMoreThanOneDecl as we add the methods.
8259   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8260   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8261 }
8262 
8263 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8264   if (SelectorOutOfDate[Sel])
8265     ReadMethodPool(Sel);
8266 }
8267 
8268 void ASTReader::ReadKnownNamespaces(
8269                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8270   Namespaces.clear();
8271 
8272   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8273     if (NamespaceDecl *Namespace
8274                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8275       Namespaces.push_back(Namespace);
8276   }
8277 }
8278 
8279 void ASTReader::ReadUndefinedButUsed(
8280     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8281   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8282     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8283     SourceLocation Loc =
8284         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8285     Undefined.insert(std::make_pair(D, Loc));
8286   }
8287 }
8288 
8289 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8290     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8291                                                      Exprs) {
8292   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8293     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8294     uint64_t Count = DelayedDeleteExprs[Idx++];
8295     for (uint64_t C = 0; C < Count; ++C) {
8296       SourceLocation DeleteLoc =
8297           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8298       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8299       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8300     }
8301   }
8302 }
8303 
8304 void ASTReader::ReadTentativeDefinitions(
8305                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8306   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8307     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8308     if (Var)
8309       TentativeDefs.push_back(Var);
8310   }
8311   TentativeDefinitions.clear();
8312 }
8313 
8314 void ASTReader::ReadUnusedFileScopedDecls(
8315                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8316   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8317     DeclaratorDecl *D
8318       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8319     if (D)
8320       Decls.push_back(D);
8321   }
8322   UnusedFileScopedDecls.clear();
8323 }
8324 
8325 void ASTReader::ReadDelegatingConstructors(
8326                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8327   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8328     CXXConstructorDecl *D
8329       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8330     if (D)
8331       Decls.push_back(D);
8332   }
8333   DelegatingCtorDecls.clear();
8334 }
8335 
8336 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8337   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8338     TypedefNameDecl *D
8339       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8340     if (D)
8341       Decls.push_back(D);
8342   }
8343   ExtVectorDecls.clear();
8344 }
8345 
8346 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8347     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8348   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8349        ++I) {
8350     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8351         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8352     if (D)
8353       Decls.insert(D);
8354   }
8355   UnusedLocalTypedefNameCandidates.clear();
8356 }
8357 
8358 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8359     llvm::SmallVector<Decl *, 4> &Decls) {
8360   for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N;
8361        ++I) {
8362     auto *D = dyn_cast_or_null<Decl>(
8363         GetDecl(DeclsToCheckForDeferredDiags[I]));
8364     if (D)
8365       Decls.push_back(D);
8366   }
8367   DeclsToCheckForDeferredDiags.clear();
8368 }
8369 
8370 
8371 void ASTReader::ReadReferencedSelectors(
8372        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8373   if (ReferencedSelectorsData.empty())
8374     return;
8375 
8376   // If there are @selector references added them to its pool. This is for
8377   // implementation of -Wselector.
8378   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8379   unsigned I = 0;
8380   while (I < DataSize) {
8381     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8382     SourceLocation SelLoc
8383       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8384     Sels.push_back(std::make_pair(Sel, SelLoc));
8385   }
8386   ReferencedSelectorsData.clear();
8387 }
8388 
8389 void ASTReader::ReadWeakUndeclaredIdentifiers(
8390        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8391   if (WeakUndeclaredIdentifiers.empty())
8392     return;
8393 
8394   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8395     IdentifierInfo *WeakId
8396       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8397     IdentifierInfo *AliasId
8398       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8399     SourceLocation Loc
8400       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8401     bool Used = WeakUndeclaredIdentifiers[I++];
8402     WeakInfo WI(AliasId, Loc);
8403     WI.setUsed(Used);
8404     WeakIDs.push_back(std::make_pair(WeakId, WI));
8405   }
8406   WeakUndeclaredIdentifiers.clear();
8407 }
8408 
8409 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8410   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8411     ExternalVTableUse VT;
8412     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8413     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8414     VT.DefinitionRequired = VTableUses[Idx++];
8415     VTables.push_back(VT);
8416   }
8417 
8418   VTableUses.clear();
8419 }
8420 
8421 void ASTReader::ReadPendingInstantiations(
8422        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8423   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8424     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8425     SourceLocation Loc
8426       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8427 
8428     Pending.push_back(std::make_pair(D, Loc));
8429   }
8430   PendingInstantiations.clear();
8431 }
8432 
8433 void ASTReader::ReadLateParsedTemplates(
8434     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8435         &LPTMap) {
8436   for (auto &LPT : LateParsedTemplates) {
8437     ModuleFile *FMod = LPT.first;
8438     RecordDataImpl &LateParsed = LPT.second;
8439     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8440          /* In loop */) {
8441       FunctionDecl *FD =
8442           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8443 
8444       auto LT = std::make_unique<LateParsedTemplate>();
8445       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8446 
8447       ModuleFile *F = getOwningModuleFile(LT->D);
8448       assert(F && "No module");
8449 
8450       unsigned TokN = LateParsed[Idx++];
8451       LT->Toks.reserve(TokN);
8452       for (unsigned T = 0; T < TokN; ++T)
8453         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8454 
8455       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8456     }
8457   }
8458 }
8459 
8460 void ASTReader::LoadSelector(Selector Sel) {
8461   // It would be complicated to avoid reading the methods anyway. So don't.
8462   ReadMethodPool(Sel);
8463 }
8464 
8465 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8466   assert(ID && "Non-zero identifier ID required");
8467   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8468   IdentifiersLoaded[ID - 1] = II;
8469   if (DeserializationListener)
8470     DeserializationListener->IdentifierRead(ID, II);
8471 }
8472 
8473 /// Set the globally-visible declarations associated with the given
8474 /// identifier.
8475 ///
8476 /// If the AST reader is currently in a state where the given declaration IDs
8477 /// cannot safely be resolved, they are queued until it is safe to resolve
8478 /// them.
8479 ///
8480 /// \param II an IdentifierInfo that refers to one or more globally-visible
8481 /// declarations.
8482 ///
8483 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8484 /// visible at global scope.
8485 ///
8486 /// \param Decls if non-null, this vector will be populated with the set of
8487 /// deserialized declarations. These declarations will not be pushed into
8488 /// scope.
8489 void
8490 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8491                               const SmallVectorImpl<uint32_t> &DeclIDs,
8492                                    SmallVectorImpl<Decl *> *Decls) {
8493   if (NumCurrentElementsDeserializing && !Decls) {
8494     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8495     return;
8496   }
8497 
8498   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8499     if (!SemaObj) {
8500       // Queue this declaration so that it will be added to the
8501       // translation unit scope and identifier's declaration chain
8502       // once a Sema object is known.
8503       PreloadedDeclIDs.push_back(DeclIDs[I]);
8504       continue;
8505     }
8506 
8507     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8508 
8509     // If we're simply supposed to record the declarations, do so now.
8510     if (Decls) {
8511       Decls->push_back(D);
8512       continue;
8513     }
8514 
8515     // Introduce this declaration into the translation-unit scope
8516     // and add it to the declaration chain for this identifier, so
8517     // that (unqualified) name lookup will find it.
8518     pushExternalDeclIntoScope(D, II);
8519   }
8520 }
8521 
8522 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8523   if (ID == 0)
8524     return nullptr;
8525 
8526   if (IdentifiersLoaded.empty()) {
8527     Error("no identifier table in AST file");
8528     return nullptr;
8529   }
8530 
8531   ID -= 1;
8532   if (!IdentifiersLoaded[ID]) {
8533     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8534     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8535     ModuleFile *M = I->second;
8536     unsigned Index = ID - M->BaseIdentifierID;
8537     const unsigned char *Data =
8538         M->IdentifierTableData + M->IdentifierOffsets[Index];
8539 
8540     ASTIdentifierLookupTrait Trait(*this, *M);
8541     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8542     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8543     auto &II = PP.getIdentifierTable().get(Key);
8544     IdentifiersLoaded[ID] = &II;
8545     markIdentifierFromAST(*this,  II);
8546     if (DeserializationListener)
8547       DeserializationListener->IdentifierRead(ID + 1, &II);
8548   }
8549 
8550   return IdentifiersLoaded[ID];
8551 }
8552 
8553 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8554   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8555 }
8556 
8557 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8558   if (LocalID < NUM_PREDEF_IDENT_IDS)
8559     return LocalID;
8560 
8561   if (!M.ModuleOffsetMap.empty())
8562     ReadModuleOffsetMap(M);
8563 
8564   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8565     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8566   assert(I != M.IdentifierRemap.end()
8567          && "Invalid index into identifier index remap");
8568 
8569   return LocalID + I->second;
8570 }
8571 
8572 MacroInfo *ASTReader::getMacro(MacroID ID) {
8573   if (ID == 0)
8574     return nullptr;
8575 
8576   if (MacrosLoaded.empty()) {
8577     Error("no macro table in AST file");
8578     return nullptr;
8579   }
8580 
8581   ID -= NUM_PREDEF_MACRO_IDS;
8582   if (!MacrosLoaded[ID]) {
8583     GlobalMacroMapType::iterator I
8584       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8585     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8586     ModuleFile *M = I->second;
8587     unsigned Index = ID - M->BaseMacroID;
8588     MacrosLoaded[ID] =
8589         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8590 
8591     if (DeserializationListener)
8592       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8593                                          MacrosLoaded[ID]);
8594   }
8595 
8596   return MacrosLoaded[ID];
8597 }
8598 
8599 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8600   if (LocalID < NUM_PREDEF_MACRO_IDS)
8601     return LocalID;
8602 
8603   if (!M.ModuleOffsetMap.empty())
8604     ReadModuleOffsetMap(M);
8605 
8606   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8607     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8608   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8609 
8610   return LocalID + I->second;
8611 }
8612 
8613 serialization::SubmoduleID
8614 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8615   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8616     return LocalID;
8617 
8618   if (!M.ModuleOffsetMap.empty())
8619     ReadModuleOffsetMap(M);
8620 
8621   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8622     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8623   assert(I != M.SubmoduleRemap.end()
8624          && "Invalid index into submodule index remap");
8625 
8626   return LocalID + I->second;
8627 }
8628 
8629 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8630   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8631     assert(GlobalID == 0 && "Unhandled global submodule ID");
8632     return nullptr;
8633   }
8634 
8635   if (GlobalID > SubmodulesLoaded.size()) {
8636     Error("submodule ID out of range in AST file");
8637     return nullptr;
8638   }
8639 
8640   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8641 }
8642 
8643 Module *ASTReader::getModule(unsigned ID) {
8644   return getSubmodule(ID);
8645 }
8646 
8647 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8648   if (ID & 1) {
8649     // It's a module, look it up by submodule ID.
8650     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8651     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8652   } else {
8653     // It's a prefix (preamble, PCH, ...). Look it up by index.
8654     unsigned IndexFromEnd = ID >> 1;
8655     assert(IndexFromEnd && "got reference to unknown module file");
8656     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8657   }
8658 }
8659 
8660 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8661   if (!F)
8662     return 1;
8663 
8664   // For a file representing a module, use the submodule ID of the top-level
8665   // module as the file ID. For any other kind of file, the number of such
8666   // files loaded beforehand will be the same on reload.
8667   // FIXME: Is this true even if we have an explicit module file and a PCH?
8668   if (F->isModule())
8669     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8670 
8671   auto PCHModules = getModuleManager().pch_modules();
8672   auto I = llvm::find(PCHModules, F);
8673   assert(I != PCHModules.end() && "emitting reference to unknown file");
8674   return (I - PCHModules.end()) << 1;
8675 }
8676 
8677 llvm::Optional<ASTSourceDescriptor>
8678 ASTReader::getSourceDescriptor(unsigned ID) {
8679   if (Module *M = getSubmodule(ID))
8680     return ASTSourceDescriptor(*M);
8681 
8682   // If there is only a single PCH, return it instead.
8683   // Chained PCH are not supported.
8684   const auto &PCHChain = ModuleMgr.pch_modules();
8685   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8686     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8687     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8688     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8689     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8690                                MF.Signature);
8691   }
8692   return None;
8693 }
8694 
8695 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8696   auto I = DefinitionSource.find(FD);
8697   if (I == DefinitionSource.end())
8698     return EK_ReplyHazy;
8699   return I->second ? EK_Never : EK_Always;
8700 }
8701 
8702 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8703   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8704 }
8705 
8706 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8707   if (ID == 0)
8708     return Selector();
8709 
8710   if (ID > SelectorsLoaded.size()) {
8711     Error("selector ID out of range in AST file");
8712     return Selector();
8713   }
8714 
8715   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8716     // Load this selector from the selector table.
8717     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8718     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8719     ModuleFile &M = *I->second;
8720     ASTSelectorLookupTrait Trait(*this, M);
8721     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8722     SelectorsLoaded[ID - 1] =
8723       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8724     if (DeserializationListener)
8725       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8726   }
8727 
8728   return SelectorsLoaded[ID - 1];
8729 }
8730 
8731 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8732   return DecodeSelector(ID);
8733 }
8734 
8735 uint32_t ASTReader::GetNumExternalSelectors() {
8736   // ID 0 (the null selector) is considered an external selector.
8737   return getTotalNumSelectors() + 1;
8738 }
8739 
8740 serialization::SelectorID
8741 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8742   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8743     return LocalID;
8744 
8745   if (!M.ModuleOffsetMap.empty())
8746     ReadModuleOffsetMap(M);
8747 
8748   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8749     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8750   assert(I != M.SelectorRemap.end()
8751          && "Invalid index into selector index remap");
8752 
8753   return LocalID + I->second;
8754 }
8755 
8756 DeclarationNameLoc
8757 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8758   switch (Name.getNameKind()) {
8759   case DeclarationName::CXXConstructorName:
8760   case DeclarationName::CXXDestructorName:
8761   case DeclarationName::CXXConversionFunctionName:
8762     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8763 
8764   case DeclarationName::CXXOperatorName:
8765     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8766 
8767   case DeclarationName::CXXLiteralOperatorName:
8768     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8769         readSourceLocation());
8770 
8771   case DeclarationName::Identifier:
8772   case DeclarationName::ObjCZeroArgSelector:
8773   case DeclarationName::ObjCOneArgSelector:
8774   case DeclarationName::ObjCMultiArgSelector:
8775   case DeclarationName::CXXUsingDirective:
8776   case DeclarationName::CXXDeductionGuideName:
8777     break;
8778   }
8779   return DeclarationNameLoc();
8780 }
8781 
8782 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8783   DeclarationNameInfo NameInfo;
8784   NameInfo.setName(readDeclarationName());
8785   NameInfo.setLoc(readSourceLocation());
8786   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8787   return NameInfo;
8788 }
8789 
8790 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8791   Info.QualifierLoc = readNestedNameSpecifierLoc();
8792   unsigned NumTPLists = readInt();
8793   Info.NumTemplParamLists = NumTPLists;
8794   if (NumTPLists) {
8795     Info.TemplParamLists =
8796         new (getContext()) TemplateParameterList *[NumTPLists];
8797     for (unsigned i = 0; i != NumTPLists; ++i)
8798       Info.TemplParamLists[i] = readTemplateParameterList();
8799   }
8800 }
8801 
8802 TemplateParameterList *
8803 ASTRecordReader::readTemplateParameterList() {
8804   SourceLocation TemplateLoc = readSourceLocation();
8805   SourceLocation LAngleLoc = readSourceLocation();
8806   SourceLocation RAngleLoc = readSourceLocation();
8807 
8808   unsigned NumParams = readInt();
8809   SmallVector<NamedDecl *, 16> Params;
8810   Params.reserve(NumParams);
8811   while (NumParams--)
8812     Params.push_back(readDeclAs<NamedDecl>());
8813 
8814   bool HasRequiresClause = readBool();
8815   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8816 
8817   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8818       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8819   return TemplateParams;
8820 }
8821 
8822 void ASTRecordReader::readTemplateArgumentList(
8823                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8824                         bool Canonicalize) {
8825   unsigned NumTemplateArgs = readInt();
8826   TemplArgs.reserve(NumTemplateArgs);
8827   while (NumTemplateArgs--)
8828     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8829 }
8830 
8831 /// Read a UnresolvedSet structure.
8832 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8833   unsigned NumDecls = readInt();
8834   Set.reserve(getContext(), NumDecls);
8835   while (NumDecls--) {
8836     DeclID ID = readDeclID();
8837     AccessSpecifier AS = (AccessSpecifier) readInt();
8838     Set.addLazyDecl(getContext(), ID, AS);
8839   }
8840 }
8841 
8842 CXXBaseSpecifier
8843 ASTRecordReader::readCXXBaseSpecifier() {
8844   bool isVirtual = readBool();
8845   bool isBaseOfClass = readBool();
8846   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8847   bool inheritConstructors = readBool();
8848   TypeSourceInfo *TInfo = readTypeSourceInfo();
8849   SourceRange Range = readSourceRange();
8850   SourceLocation EllipsisLoc = readSourceLocation();
8851   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8852                           EllipsisLoc);
8853   Result.setInheritConstructors(inheritConstructors);
8854   return Result;
8855 }
8856 
8857 CXXCtorInitializer **
8858 ASTRecordReader::readCXXCtorInitializers() {
8859   ASTContext &Context = getContext();
8860   unsigned NumInitializers = readInt();
8861   assert(NumInitializers && "wrote ctor initializers but have no inits");
8862   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8863   for (unsigned i = 0; i != NumInitializers; ++i) {
8864     TypeSourceInfo *TInfo = nullptr;
8865     bool IsBaseVirtual = false;
8866     FieldDecl *Member = nullptr;
8867     IndirectFieldDecl *IndirectMember = nullptr;
8868 
8869     CtorInitializerType Type = (CtorInitializerType) readInt();
8870     switch (Type) {
8871     case CTOR_INITIALIZER_BASE:
8872       TInfo = readTypeSourceInfo();
8873       IsBaseVirtual = readBool();
8874       break;
8875 
8876     case CTOR_INITIALIZER_DELEGATING:
8877       TInfo = readTypeSourceInfo();
8878       break;
8879 
8880      case CTOR_INITIALIZER_MEMBER:
8881       Member = readDeclAs<FieldDecl>();
8882       break;
8883 
8884      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8885       IndirectMember = readDeclAs<IndirectFieldDecl>();
8886       break;
8887     }
8888 
8889     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8890     Expr *Init = readExpr();
8891     SourceLocation LParenLoc = readSourceLocation();
8892     SourceLocation RParenLoc = readSourceLocation();
8893 
8894     CXXCtorInitializer *BOMInit;
8895     if (Type == CTOR_INITIALIZER_BASE)
8896       BOMInit = new (Context)
8897           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8898                              RParenLoc, MemberOrEllipsisLoc);
8899     else if (Type == CTOR_INITIALIZER_DELEGATING)
8900       BOMInit = new (Context)
8901           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8902     else if (Member)
8903       BOMInit = new (Context)
8904           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8905                              Init, RParenLoc);
8906     else
8907       BOMInit = new (Context)
8908           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8909                              LParenLoc, Init, RParenLoc);
8910 
8911     if (/*IsWritten*/readBool()) {
8912       unsigned SourceOrder = readInt();
8913       BOMInit->setSourceOrder(SourceOrder);
8914     }
8915 
8916     CtorInitializers[i] = BOMInit;
8917   }
8918 
8919   return CtorInitializers;
8920 }
8921 
8922 NestedNameSpecifierLoc
8923 ASTRecordReader::readNestedNameSpecifierLoc() {
8924   ASTContext &Context = getContext();
8925   unsigned N = readInt();
8926   NestedNameSpecifierLocBuilder Builder;
8927   for (unsigned I = 0; I != N; ++I) {
8928     auto Kind = readNestedNameSpecifierKind();
8929     switch (Kind) {
8930     case NestedNameSpecifier::Identifier: {
8931       IdentifierInfo *II = readIdentifier();
8932       SourceRange Range = readSourceRange();
8933       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8934       break;
8935     }
8936 
8937     case NestedNameSpecifier::Namespace: {
8938       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8939       SourceRange Range = readSourceRange();
8940       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8941       break;
8942     }
8943 
8944     case NestedNameSpecifier::NamespaceAlias: {
8945       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8946       SourceRange Range = readSourceRange();
8947       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8948       break;
8949     }
8950 
8951     case NestedNameSpecifier::TypeSpec:
8952     case NestedNameSpecifier::TypeSpecWithTemplate: {
8953       bool Template = readBool();
8954       TypeSourceInfo *T = readTypeSourceInfo();
8955       if (!T)
8956         return NestedNameSpecifierLoc();
8957       SourceLocation ColonColonLoc = readSourceLocation();
8958 
8959       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8960       Builder.Extend(Context,
8961                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8962                      T->getTypeLoc(), ColonColonLoc);
8963       break;
8964     }
8965 
8966     case NestedNameSpecifier::Global: {
8967       SourceLocation ColonColonLoc = readSourceLocation();
8968       Builder.MakeGlobal(Context, ColonColonLoc);
8969       break;
8970     }
8971 
8972     case NestedNameSpecifier::Super: {
8973       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8974       SourceRange Range = readSourceRange();
8975       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8976       break;
8977     }
8978     }
8979   }
8980 
8981   return Builder.getWithLocInContext(Context);
8982 }
8983 
8984 SourceRange
8985 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8986                            unsigned &Idx) {
8987   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8988   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8989   return SourceRange(beg, end);
8990 }
8991 
8992 /// Read a floating-point value
8993 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8994   return llvm::APFloat(Sem, readAPInt());
8995 }
8996 
8997 // Read a string
8998 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8999   unsigned Len = Record[Idx++];
9000   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
9001   Idx += Len;
9002   return Result;
9003 }
9004 
9005 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
9006                                 unsigned &Idx) {
9007   std::string Filename = ReadString(Record, Idx);
9008   ResolveImportedPath(F, Filename);
9009   return Filename;
9010 }
9011 
9012 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9013                                 const RecordData &Record, unsigned &Idx) {
9014   std::string Filename = ReadString(Record, Idx);
9015   if (!BaseDirectory.empty())
9016     ResolveImportedPath(Filename, BaseDirectory);
9017   return Filename;
9018 }
9019 
9020 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9021                                          unsigned &Idx) {
9022   unsigned Major = Record[Idx++];
9023   unsigned Minor = Record[Idx++];
9024   unsigned Subminor = Record[Idx++];
9025   if (Minor == 0)
9026     return VersionTuple(Major);
9027   if (Subminor == 0)
9028     return VersionTuple(Major, Minor - 1);
9029   return VersionTuple(Major, Minor - 1, Subminor - 1);
9030 }
9031 
9032 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9033                                           const RecordData &Record,
9034                                           unsigned &Idx) {
9035   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9036   return CXXTemporary::Create(getContext(), Decl);
9037 }
9038 
9039 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9040   return Diag(CurrentImportLoc, DiagID);
9041 }
9042 
9043 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9044   return Diags.Report(Loc, DiagID);
9045 }
9046 
9047 /// Retrieve the identifier table associated with the
9048 /// preprocessor.
9049 IdentifierTable &ASTReader::getIdentifierTable() {
9050   return PP.getIdentifierTable();
9051 }
9052 
9053 /// Record that the given ID maps to the given switch-case
9054 /// statement.
9055 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9056   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9057          "Already have a SwitchCase with this ID");
9058   (*CurrSwitchCaseStmts)[ID] = SC;
9059 }
9060 
9061 /// Retrieve the switch-case statement with the given ID.
9062 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9063   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9064   return (*CurrSwitchCaseStmts)[ID];
9065 }
9066 
9067 void ASTReader::ClearSwitchCaseIDs() {
9068   CurrSwitchCaseStmts->clear();
9069 }
9070 
9071 void ASTReader::ReadComments() {
9072   ASTContext &Context = getContext();
9073   std::vector<RawComment *> Comments;
9074   for (SmallVectorImpl<std::pair<BitstreamCursor,
9075                                  serialization::ModuleFile *>>::iterator
9076        I = CommentsCursors.begin(),
9077        E = CommentsCursors.end();
9078        I != E; ++I) {
9079     Comments.clear();
9080     BitstreamCursor &Cursor = I->first;
9081     serialization::ModuleFile &F = *I->second;
9082     SavedStreamPosition SavedPosition(Cursor);
9083 
9084     RecordData Record;
9085     while (true) {
9086       Expected<llvm::BitstreamEntry> MaybeEntry =
9087           Cursor.advanceSkippingSubblocks(
9088               BitstreamCursor::AF_DontPopBlockAtEnd);
9089       if (!MaybeEntry) {
9090         Error(MaybeEntry.takeError());
9091         return;
9092       }
9093       llvm::BitstreamEntry Entry = MaybeEntry.get();
9094 
9095       switch (Entry.Kind) {
9096       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9097       case llvm::BitstreamEntry::Error:
9098         Error("malformed block record in AST file");
9099         return;
9100       case llvm::BitstreamEntry::EndBlock:
9101         goto NextCursor;
9102       case llvm::BitstreamEntry::Record:
9103         // The interesting case.
9104         break;
9105       }
9106 
9107       // Read a record.
9108       Record.clear();
9109       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9110       if (!MaybeComment) {
9111         Error(MaybeComment.takeError());
9112         return;
9113       }
9114       switch ((CommentRecordTypes)MaybeComment.get()) {
9115       case COMMENTS_RAW_COMMENT: {
9116         unsigned Idx = 0;
9117         SourceRange SR = ReadSourceRange(F, Record, Idx);
9118         RawComment::CommentKind Kind =
9119             (RawComment::CommentKind) Record[Idx++];
9120         bool IsTrailingComment = Record[Idx++];
9121         bool IsAlmostTrailingComment = Record[Idx++];
9122         Comments.push_back(new (Context) RawComment(
9123             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9124         break;
9125       }
9126       }
9127     }
9128   NextCursor:
9129     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9130         FileToOffsetToComment;
9131     for (RawComment *C : Comments) {
9132       SourceLocation CommentLoc = C->getBeginLoc();
9133       if (CommentLoc.isValid()) {
9134         std::pair<FileID, unsigned> Loc =
9135             SourceMgr.getDecomposedLoc(CommentLoc);
9136         if (Loc.first.isValid())
9137           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9138       }
9139     }
9140   }
9141 }
9142 
9143 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9144                                 bool IncludeSystem, bool Complain,
9145                     llvm::function_ref<void(const serialization::InputFile &IF,
9146                                             bool isSystem)> Visitor) {
9147   unsigned NumUserInputs = MF.NumUserInputFiles;
9148   unsigned NumInputs = MF.InputFilesLoaded.size();
9149   assert(NumUserInputs <= NumInputs);
9150   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9151   for (unsigned I = 0; I < N; ++I) {
9152     bool IsSystem = I >= NumUserInputs;
9153     InputFile IF = getInputFile(MF, I+1, Complain);
9154     Visitor(IF, IsSystem);
9155   }
9156 }
9157 
9158 void ASTReader::visitTopLevelModuleMaps(
9159     serialization::ModuleFile &MF,
9160     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9161   unsigned NumInputs = MF.InputFilesLoaded.size();
9162   for (unsigned I = 0; I < NumInputs; ++I) {
9163     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9164     if (IFI.TopLevelModuleMap)
9165       // FIXME: This unnecessarily re-reads the InputFileInfo.
9166       if (auto FE = getInputFile(MF, I + 1).getFile())
9167         Visitor(FE);
9168   }
9169 }
9170 
9171 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9172   // If we know the owning module, use it.
9173   if (Module *M = D->getImportedOwningModule())
9174     return M->getFullModuleName();
9175 
9176   // Otherwise, use the name of the top-level module the decl is within.
9177   if (ModuleFile *M = getOwningModuleFile(D))
9178     return M->ModuleName;
9179 
9180   // Not from a module.
9181   return {};
9182 }
9183 
9184 void ASTReader::finishPendingActions() {
9185   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9186          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9187          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9188          !PendingUpdateRecords.empty()) {
9189     // If any identifiers with corresponding top-level declarations have
9190     // been loaded, load those declarations now.
9191     using TopLevelDeclsMap =
9192         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9193     TopLevelDeclsMap TopLevelDecls;
9194 
9195     while (!PendingIdentifierInfos.empty()) {
9196       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9197       SmallVector<uint32_t, 4> DeclIDs =
9198           std::move(PendingIdentifierInfos.back().second);
9199       PendingIdentifierInfos.pop_back();
9200 
9201       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9202     }
9203 
9204     // Load each function type that we deferred loading because it was a
9205     // deduced type that might refer to a local type declared within itself.
9206     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9207       auto *FD = PendingFunctionTypes[I].first;
9208       FD->setType(GetType(PendingFunctionTypes[I].second));
9209 
9210       // If we gave a function a deduced return type, remember that we need to
9211       // propagate that along the redeclaration chain.
9212       auto *DT = FD->getReturnType()->getContainedDeducedType();
9213       if (DT && DT->isDeduced())
9214         PendingDeducedTypeUpdates.insert(
9215             {FD->getCanonicalDecl(), FD->getReturnType()});
9216     }
9217     PendingFunctionTypes.clear();
9218 
9219     // For each decl chain that we wanted to complete while deserializing, mark
9220     // it as "still needs to be completed".
9221     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9222       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9223     }
9224     PendingIncompleteDeclChains.clear();
9225 
9226     // Load pending declaration chains.
9227     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9228       loadPendingDeclChain(PendingDeclChains[I].first,
9229                            PendingDeclChains[I].second);
9230     PendingDeclChains.clear();
9231 
9232     // Make the most recent of the top-level declarations visible.
9233     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9234            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9235       IdentifierInfo *II = TLD->first;
9236       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9237         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9238       }
9239     }
9240 
9241     // Load any pending macro definitions.
9242     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9243       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9244       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9245       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9246       // Initialize the macro history from chained-PCHs ahead of module imports.
9247       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9248            ++IDIdx) {
9249         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9250         if (!Info.M->isModule())
9251           resolvePendingMacro(II, Info);
9252       }
9253       // Handle module imports.
9254       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9255            ++IDIdx) {
9256         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9257         if (Info.M->isModule())
9258           resolvePendingMacro(II, Info);
9259       }
9260     }
9261     PendingMacroIDs.clear();
9262 
9263     // Wire up the DeclContexts for Decls that we delayed setting until
9264     // recursive loading is completed.
9265     while (!PendingDeclContextInfos.empty()) {
9266       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9267       PendingDeclContextInfos.pop_front();
9268       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9269       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9270       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9271     }
9272 
9273     // Perform any pending declaration updates.
9274     while (!PendingUpdateRecords.empty()) {
9275       auto Update = PendingUpdateRecords.pop_back_val();
9276       ReadingKindTracker ReadingKind(Read_Decl, *this);
9277       loadDeclUpdateRecords(Update);
9278     }
9279   }
9280 
9281   // At this point, all update records for loaded decls are in place, so any
9282   // fake class definitions should have become real.
9283   assert(PendingFakeDefinitionData.empty() &&
9284          "faked up a class definition but never saw the real one");
9285 
9286   // If we deserialized any C++ or Objective-C class definitions, any
9287   // Objective-C protocol definitions, or any redeclarable templates, make sure
9288   // that all redeclarations point to the definitions. Note that this can only
9289   // happen now, after the redeclaration chains have been fully wired.
9290   for (Decl *D : PendingDefinitions) {
9291     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9292       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9293         // Make sure that the TagType points at the definition.
9294         const_cast<TagType*>(TagT)->decl = TD;
9295       }
9296 
9297       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9298         for (auto *R = getMostRecentExistingDecl(RD); R;
9299              R = R->getPreviousDecl()) {
9300           assert((R == D) ==
9301                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9302                  "declaration thinks it's the definition but it isn't");
9303           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9304         }
9305       }
9306 
9307       continue;
9308     }
9309 
9310     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9311       // Make sure that the ObjCInterfaceType points at the definition.
9312       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9313         ->Decl = ID;
9314 
9315       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9316         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9317 
9318       continue;
9319     }
9320 
9321     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9322       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9323         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9324 
9325       continue;
9326     }
9327 
9328     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9329     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9330       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9331   }
9332   PendingDefinitions.clear();
9333 
9334   // Load the bodies of any functions or methods we've encountered. We do
9335   // this now (delayed) so that we can be sure that the declaration chains
9336   // have been fully wired up (hasBody relies on this).
9337   // FIXME: We shouldn't require complete redeclaration chains here.
9338   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9339                                PBEnd = PendingBodies.end();
9340        PB != PBEnd; ++PB) {
9341     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9342       // For a function defined inline within a class template, force the
9343       // canonical definition to be the one inside the canonical definition of
9344       // the template. This ensures that we instantiate from a correct view
9345       // of the template.
9346       //
9347       // Sadly we can't do this more generally: we can't be sure that all
9348       // copies of an arbitrary class definition will have the same members
9349       // defined (eg, some member functions may not be instantiated, and some
9350       // special members may or may not have been implicitly defined).
9351       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9352         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9353           continue;
9354 
9355       // FIXME: Check for =delete/=default?
9356       // FIXME: Complain about ODR violations here?
9357       const FunctionDecl *Defn = nullptr;
9358       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9359         FD->setLazyBody(PB->second);
9360       } else {
9361         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9362         mergeDefinitionVisibility(NonConstDefn, FD);
9363 
9364         if (!FD->isLateTemplateParsed() &&
9365             !NonConstDefn->isLateTemplateParsed() &&
9366             FD->getODRHash() != NonConstDefn->getODRHash()) {
9367           if (!isa<CXXMethodDecl>(FD)) {
9368             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9369           } else if (FD->getLexicalParent()->isFileContext() &&
9370                      NonConstDefn->getLexicalParent()->isFileContext()) {
9371             // Only diagnose out-of-line method definitions.  If they are
9372             // in class definitions, then an error will be generated when
9373             // processing the class bodies.
9374             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9375           }
9376         }
9377       }
9378       continue;
9379     }
9380 
9381     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9382     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9383       MD->setLazyBody(PB->second);
9384   }
9385   PendingBodies.clear();
9386 
9387   // Do some cleanup.
9388   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9389     getContext().deduplicateMergedDefinitonsFor(ND);
9390   PendingMergedDefinitionsToDeduplicate.clear();
9391 }
9392 
9393 void ASTReader::diagnoseOdrViolations() {
9394   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9395       PendingFunctionOdrMergeFailures.empty() &&
9396       PendingEnumOdrMergeFailures.empty())
9397     return;
9398 
9399   // Trigger the import of the full definition of each class that had any
9400   // odr-merging problems, so we can produce better diagnostics for them.
9401   // These updates may in turn find and diagnose some ODR failures, so take
9402   // ownership of the set first.
9403   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9404   PendingOdrMergeFailures.clear();
9405   for (auto &Merge : OdrMergeFailures) {
9406     Merge.first->buildLookup();
9407     Merge.first->decls_begin();
9408     Merge.first->bases_begin();
9409     Merge.first->vbases_begin();
9410     for (auto &RecordPair : Merge.second) {
9411       auto *RD = RecordPair.first;
9412       RD->decls_begin();
9413       RD->bases_begin();
9414       RD->vbases_begin();
9415     }
9416   }
9417 
9418   // Trigger the import of functions.
9419   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9420   PendingFunctionOdrMergeFailures.clear();
9421   for (auto &Merge : FunctionOdrMergeFailures) {
9422     Merge.first->buildLookup();
9423     Merge.first->decls_begin();
9424     Merge.first->getBody();
9425     for (auto &FD : Merge.second) {
9426       FD->buildLookup();
9427       FD->decls_begin();
9428       FD->getBody();
9429     }
9430   }
9431 
9432   // Trigger the import of enums.
9433   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9434   PendingEnumOdrMergeFailures.clear();
9435   for (auto &Merge : EnumOdrMergeFailures) {
9436     Merge.first->decls_begin();
9437     for (auto &Enum : Merge.second) {
9438       Enum->decls_begin();
9439     }
9440   }
9441 
9442   // For each declaration from a merged context, check that the canonical
9443   // definition of that context also contains a declaration of the same
9444   // entity.
9445   //
9446   // Caution: this loop does things that might invalidate iterators into
9447   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9448   while (!PendingOdrMergeChecks.empty()) {
9449     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9450 
9451     // FIXME: Skip over implicit declarations for now. This matters for things
9452     // like implicitly-declared special member functions. This isn't entirely
9453     // correct; we can end up with multiple unmerged declarations of the same
9454     // implicit entity.
9455     if (D->isImplicit())
9456       continue;
9457 
9458     DeclContext *CanonDef = D->getDeclContext();
9459 
9460     bool Found = false;
9461     const Decl *DCanon = D->getCanonicalDecl();
9462 
9463     for (auto RI : D->redecls()) {
9464       if (RI->getLexicalDeclContext() == CanonDef) {
9465         Found = true;
9466         break;
9467       }
9468     }
9469     if (Found)
9470       continue;
9471 
9472     // Quick check failed, time to do the slow thing. Note, we can't just
9473     // look up the name of D in CanonDef here, because the member that is
9474     // in CanonDef might not be found by name lookup (it might have been
9475     // replaced by a more recent declaration in the lookup table), and we
9476     // can't necessarily find it in the redeclaration chain because it might
9477     // be merely mergeable, not redeclarable.
9478     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9479     for (auto *CanonMember : CanonDef->decls()) {
9480       if (CanonMember->getCanonicalDecl() == DCanon) {
9481         // This can happen if the declaration is merely mergeable and not
9482         // actually redeclarable (we looked for redeclarations earlier).
9483         //
9484         // FIXME: We should be able to detect this more efficiently, without
9485         // pulling in all of the members of CanonDef.
9486         Found = true;
9487         break;
9488       }
9489       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9490         if (ND->getDeclName() == D->getDeclName())
9491           Candidates.push_back(ND);
9492     }
9493 
9494     if (!Found) {
9495       // The AST doesn't like TagDecls becoming invalid after they've been
9496       // completed. We only really need to mark FieldDecls as invalid here.
9497       if (!isa<TagDecl>(D))
9498         D->setInvalidDecl();
9499 
9500       // Ensure we don't accidentally recursively enter deserialization while
9501       // we're producing our diagnostic.
9502       Deserializing RecursionGuard(this);
9503 
9504       std::string CanonDefModule =
9505           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9506       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9507         << D << getOwningModuleNameForDiagnostic(D)
9508         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9509 
9510       if (Candidates.empty())
9511         Diag(cast<Decl>(CanonDef)->getLocation(),
9512              diag::note_module_odr_violation_no_possible_decls) << D;
9513       else {
9514         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9515           Diag(Candidates[I]->getLocation(),
9516                diag::note_module_odr_violation_possible_decl)
9517             << Candidates[I];
9518       }
9519 
9520       DiagnosedOdrMergeFailures.insert(CanonDef);
9521     }
9522   }
9523 
9524   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9525       EnumOdrMergeFailures.empty())
9526     return;
9527 
9528   // Ensure we don't accidentally recursively enter deserialization while
9529   // we're producing our diagnostics.
9530   Deserializing RecursionGuard(this);
9531 
9532   // Common code for hashing helpers.
9533   ODRHash Hash;
9534   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9535     Hash.clear();
9536     Hash.AddQualType(Ty);
9537     return Hash.CalculateHash();
9538   };
9539 
9540   auto ComputeODRHash = [&Hash](const Stmt *S) {
9541     assert(S);
9542     Hash.clear();
9543     Hash.AddStmt(S);
9544     return Hash.CalculateHash();
9545   };
9546 
9547   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9548     assert(D);
9549     Hash.clear();
9550     Hash.AddSubDecl(D);
9551     return Hash.CalculateHash();
9552   };
9553 
9554   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9555     Hash.clear();
9556     Hash.AddTemplateArgument(TA);
9557     return Hash.CalculateHash();
9558   };
9559 
9560   auto ComputeTemplateParameterListODRHash =
9561       [&Hash](const TemplateParameterList *TPL) {
9562         assert(TPL);
9563         Hash.clear();
9564         Hash.AddTemplateParameterList(TPL);
9565         return Hash.CalculateHash();
9566       };
9567 
9568   // Used with err_module_odr_violation_mismatch_decl and
9569   // note_module_odr_violation_mismatch_decl
9570   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9571   enum ODRMismatchDecl {
9572     EndOfClass,
9573     PublicSpecifer,
9574     PrivateSpecifer,
9575     ProtectedSpecifer,
9576     StaticAssert,
9577     Field,
9578     CXXMethod,
9579     TypeAlias,
9580     TypeDef,
9581     Var,
9582     Friend,
9583     FunctionTemplate,
9584     Other
9585   };
9586 
9587   // Used with err_module_odr_violation_mismatch_decl_diff and
9588   // note_module_odr_violation_mismatch_decl_diff
9589   enum ODRMismatchDeclDifference {
9590     StaticAssertCondition,
9591     StaticAssertMessage,
9592     StaticAssertOnlyMessage,
9593     FieldName,
9594     FieldTypeName,
9595     FieldSingleBitField,
9596     FieldDifferentWidthBitField,
9597     FieldSingleMutable,
9598     FieldSingleInitializer,
9599     FieldDifferentInitializers,
9600     MethodName,
9601     MethodDeleted,
9602     MethodDefaulted,
9603     MethodVirtual,
9604     MethodStatic,
9605     MethodVolatile,
9606     MethodConst,
9607     MethodInline,
9608     MethodNumberParameters,
9609     MethodParameterType,
9610     MethodParameterName,
9611     MethodParameterSingleDefaultArgument,
9612     MethodParameterDifferentDefaultArgument,
9613     MethodNoTemplateArguments,
9614     MethodDifferentNumberTemplateArguments,
9615     MethodDifferentTemplateArgument,
9616     MethodSingleBody,
9617     MethodDifferentBody,
9618     TypedefName,
9619     TypedefType,
9620     VarName,
9621     VarType,
9622     VarSingleInitializer,
9623     VarDifferentInitializer,
9624     VarConstexpr,
9625     FriendTypeFunction,
9626     FriendType,
9627     FriendFunction,
9628     FunctionTemplateDifferentNumberParameters,
9629     FunctionTemplateParameterDifferentKind,
9630     FunctionTemplateParameterName,
9631     FunctionTemplateParameterSingleDefaultArgument,
9632     FunctionTemplateParameterDifferentDefaultArgument,
9633     FunctionTemplateParameterDifferentType,
9634     FunctionTemplatePackParameter,
9635   };
9636 
9637   // These lambdas have the common portions of the ODR diagnostics.  This
9638   // has the same return as Diag(), so addition parameters can be passed
9639   // in with operator<<
9640   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9641                                  SourceLocation Loc, SourceRange Range,
9642                                  ODRMismatchDeclDifference DiffType) {
9643     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9644            << FirstRecord << FirstModule.empty() << FirstModule << Range
9645            << DiffType;
9646   };
9647   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9648                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9649     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9650            << SecondModule << Range << DiffType;
9651   };
9652 
9653   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9654                        &ComputeQualTypeODRHash, &ComputeODRHash](
9655                           NamedDecl *FirstRecord, StringRef FirstModule,
9656                           StringRef SecondModule, FieldDecl *FirstField,
9657                           FieldDecl *SecondField) {
9658     IdentifierInfo *FirstII = FirstField->getIdentifier();
9659     IdentifierInfo *SecondII = SecondField->getIdentifier();
9660     if (FirstII->getName() != SecondII->getName()) {
9661       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9662                        FirstField->getSourceRange(), FieldName)
9663           << FirstII;
9664       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9665                       SecondField->getSourceRange(), FieldName)
9666           << SecondII;
9667 
9668       return true;
9669     }
9670 
9671     assert(getContext().hasSameType(FirstField->getType(),
9672                                     SecondField->getType()));
9673 
9674     QualType FirstType = FirstField->getType();
9675     QualType SecondType = SecondField->getType();
9676     if (ComputeQualTypeODRHash(FirstType) !=
9677         ComputeQualTypeODRHash(SecondType)) {
9678       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9679                        FirstField->getSourceRange(), FieldTypeName)
9680           << FirstII << FirstType;
9681       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9682                       SecondField->getSourceRange(), FieldTypeName)
9683           << SecondII << SecondType;
9684 
9685       return true;
9686     }
9687 
9688     const bool IsFirstBitField = FirstField->isBitField();
9689     const bool IsSecondBitField = SecondField->isBitField();
9690     if (IsFirstBitField != IsSecondBitField) {
9691       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9692                        FirstField->getSourceRange(), FieldSingleBitField)
9693           << FirstII << IsFirstBitField;
9694       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9695                       SecondField->getSourceRange(), FieldSingleBitField)
9696           << SecondII << IsSecondBitField;
9697       return true;
9698     }
9699 
9700     if (IsFirstBitField && IsSecondBitField) {
9701       unsigned FirstBitWidthHash =
9702           ComputeODRHash(FirstField->getBitWidth());
9703       unsigned SecondBitWidthHash =
9704           ComputeODRHash(SecondField->getBitWidth());
9705       if (FirstBitWidthHash != SecondBitWidthHash) {
9706         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9707                          FirstField->getSourceRange(),
9708                          FieldDifferentWidthBitField)
9709             << FirstII << FirstField->getBitWidth()->getSourceRange();
9710         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9711                         SecondField->getSourceRange(),
9712                         FieldDifferentWidthBitField)
9713             << SecondII << SecondField->getBitWidth()->getSourceRange();
9714         return true;
9715       }
9716     }
9717 
9718     if (!PP.getLangOpts().CPlusPlus)
9719       return false;
9720 
9721     const bool IsFirstMutable = FirstField->isMutable();
9722     const bool IsSecondMutable = SecondField->isMutable();
9723     if (IsFirstMutable != IsSecondMutable) {
9724       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9725                        FirstField->getSourceRange(), FieldSingleMutable)
9726           << FirstII << IsFirstMutable;
9727       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9728                       SecondField->getSourceRange(), FieldSingleMutable)
9729           << SecondII << IsSecondMutable;
9730       return true;
9731     }
9732 
9733     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9734     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9735     if ((!FirstInitializer && SecondInitializer) ||
9736         (FirstInitializer && !SecondInitializer)) {
9737       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9738                        FirstField->getSourceRange(), FieldSingleInitializer)
9739           << FirstII << (FirstInitializer != nullptr);
9740       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9741                       SecondField->getSourceRange(), FieldSingleInitializer)
9742           << SecondII << (SecondInitializer != nullptr);
9743       return true;
9744     }
9745 
9746     if (FirstInitializer && SecondInitializer) {
9747       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9748       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9749       if (FirstInitHash != SecondInitHash) {
9750         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9751                          FirstField->getSourceRange(),
9752                          FieldDifferentInitializers)
9753             << FirstII << FirstInitializer->getSourceRange();
9754         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9755                         SecondField->getSourceRange(),
9756                         FieldDifferentInitializers)
9757             << SecondII << SecondInitializer->getSourceRange();
9758         return true;
9759       }
9760     }
9761 
9762     return false;
9763   };
9764 
9765   auto ODRDiagTypeDefOrAlias =
9766       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9767           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9768           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9769           bool IsTypeAlias) {
9770         auto FirstName = FirstTD->getDeclName();
9771         auto SecondName = SecondTD->getDeclName();
9772         if (FirstName != SecondName) {
9773           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9774                            FirstTD->getSourceRange(), TypedefName)
9775               << IsTypeAlias << FirstName;
9776           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9777                           SecondTD->getSourceRange(), TypedefName)
9778               << IsTypeAlias << SecondName;
9779           return true;
9780         }
9781 
9782         QualType FirstType = FirstTD->getUnderlyingType();
9783         QualType SecondType = SecondTD->getUnderlyingType();
9784         if (ComputeQualTypeODRHash(FirstType) !=
9785             ComputeQualTypeODRHash(SecondType)) {
9786           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9787                            FirstTD->getSourceRange(), TypedefType)
9788               << IsTypeAlias << FirstName << FirstType;
9789           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9790                           SecondTD->getSourceRange(), TypedefType)
9791               << IsTypeAlias << SecondName << SecondType;
9792           return true;
9793         }
9794 
9795         return false;
9796   };
9797 
9798   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9799                      &ComputeQualTypeODRHash, &ComputeODRHash,
9800                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9801                            StringRef SecondModule, VarDecl *FirstVD,
9802                            VarDecl *SecondVD) {
9803     auto FirstName = FirstVD->getDeclName();
9804     auto SecondName = SecondVD->getDeclName();
9805     if (FirstName != SecondName) {
9806       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9807                        FirstVD->getSourceRange(), VarName)
9808           << FirstName;
9809       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9810                       SecondVD->getSourceRange(), VarName)
9811           << SecondName;
9812       return true;
9813     }
9814 
9815     QualType FirstType = FirstVD->getType();
9816     QualType SecondType = SecondVD->getType();
9817     if (ComputeQualTypeODRHash(FirstType) !=
9818         ComputeQualTypeODRHash(SecondType)) {
9819       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9820                        FirstVD->getSourceRange(), VarType)
9821           << FirstName << FirstType;
9822       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9823                       SecondVD->getSourceRange(), VarType)
9824           << SecondName << SecondType;
9825       return true;
9826     }
9827 
9828     if (!PP.getLangOpts().CPlusPlus)
9829       return false;
9830 
9831     const Expr *FirstInit = FirstVD->getInit();
9832     const Expr *SecondInit = SecondVD->getInit();
9833     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9834       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9835                        FirstVD->getSourceRange(), VarSingleInitializer)
9836           << FirstName << (FirstInit == nullptr)
9837           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9838       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9839                       SecondVD->getSourceRange(), VarSingleInitializer)
9840           << SecondName << (SecondInit == nullptr)
9841           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9842       return true;
9843     }
9844 
9845     if (FirstInit && SecondInit &&
9846         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9847       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9848                        FirstVD->getSourceRange(), VarDifferentInitializer)
9849           << FirstName << FirstInit->getSourceRange();
9850       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9851                       SecondVD->getSourceRange(), VarDifferentInitializer)
9852           << SecondName << SecondInit->getSourceRange();
9853       return true;
9854     }
9855 
9856     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9857     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9858     if (FirstIsConstexpr != SecondIsConstexpr) {
9859       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9860                        FirstVD->getSourceRange(), VarConstexpr)
9861           << FirstName << FirstIsConstexpr;
9862       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9863                       SecondVD->getSourceRange(), VarConstexpr)
9864           << SecondName << SecondIsConstexpr;
9865       return true;
9866     }
9867     return false;
9868   };
9869 
9870   auto DifferenceSelector = [](Decl *D) {
9871     assert(D && "valid Decl required");
9872     switch (D->getKind()) {
9873     default:
9874       return Other;
9875     case Decl::AccessSpec:
9876       switch (D->getAccess()) {
9877       case AS_public:
9878         return PublicSpecifer;
9879       case AS_private:
9880         return PrivateSpecifer;
9881       case AS_protected:
9882         return ProtectedSpecifer;
9883       case AS_none:
9884         break;
9885       }
9886       llvm_unreachable("Invalid access specifier");
9887     case Decl::StaticAssert:
9888       return StaticAssert;
9889     case Decl::Field:
9890       return Field;
9891     case Decl::CXXMethod:
9892     case Decl::CXXConstructor:
9893     case Decl::CXXDestructor:
9894       return CXXMethod;
9895     case Decl::TypeAlias:
9896       return TypeAlias;
9897     case Decl::Typedef:
9898       return TypeDef;
9899     case Decl::Var:
9900       return Var;
9901     case Decl::Friend:
9902       return Friend;
9903     case Decl::FunctionTemplate:
9904       return FunctionTemplate;
9905     }
9906   };
9907 
9908   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9909   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9910                                                  RecordDecl *Record,
9911                                                  const DeclContext *DC) {
9912     for (auto *D : Record->decls()) {
9913       if (!ODRHash::isDeclToBeProcessed(D, DC))
9914         continue;
9915       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9916     }
9917   };
9918 
9919   struct DiffResult {
9920     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9921     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9922   };
9923 
9924   // If there is a diagnoseable difference, FirstDiffType and
9925   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9926   // filled in if not EndOfClass.
9927   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9928                                              DeclHashes &SecondHashes) {
9929     DiffResult DR;
9930     auto FirstIt = FirstHashes.begin();
9931     auto SecondIt = SecondHashes.begin();
9932     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9933       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9934           FirstIt->second == SecondIt->second) {
9935         ++FirstIt;
9936         ++SecondIt;
9937         continue;
9938       }
9939 
9940       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9941       DR.SecondDecl =
9942           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9943 
9944       DR.FirstDiffType =
9945           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9946       DR.SecondDiffType =
9947           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9948       return DR;
9949     }
9950     return DR;
9951   };
9952 
9953   // Use this to diagnose that an unexpected Decl was encountered
9954   // or no difference was detected. This causes a generic error
9955   // message to be emitted.
9956   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9957                                       StringRef FirstModule,
9958                                       NamedDecl *SecondRecord,
9959                                       StringRef SecondModule) {
9960     Diag(FirstRecord->getLocation(),
9961          diag::err_module_odr_violation_different_definitions)
9962         << FirstRecord << FirstModule.empty() << FirstModule;
9963 
9964     if (DR.FirstDecl) {
9965       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9966           << FirstRecord << DR.FirstDecl->getSourceRange();
9967     }
9968 
9969     Diag(SecondRecord->getLocation(),
9970          diag::note_module_odr_violation_different_definitions)
9971         << SecondModule;
9972 
9973     if (DR.SecondDecl) {
9974       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9975           << DR.SecondDecl->getSourceRange();
9976     }
9977   };
9978 
9979   auto DiagnoseODRMismatch =
9980       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9981              NamedDecl *SecondRecord, StringRef SecondModule) {
9982         SourceLocation FirstLoc;
9983         SourceRange FirstRange;
9984         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9985         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9986           FirstLoc = FirstTag->getBraceRange().getEnd();
9987         } else {
9988           FirstLoc = DR.FirstDecl->getLocation();
9989           FirstRange = DR.FirstDecl->getSourceRange();
9990         }
9991         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9992             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9993             << DR.FirstDiffType;
9994 
9995         SourceLocation SecondLoc;
9996         SourceRange SecondRange;
9997         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9998         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9999           SecondLoc = SecondTag->getBraceRange().getEnd();
10000         } else {
10001           SecondLoc = DR.SecondDecl->getLocation();
10002           SecondRange = DR.SecondDecl->getSourceRange();
10003         }
10004         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
10005             << SecondModule << SecondRange << DR.SecondDiffType;
10006       };
10007 
10008   // Issue any pending ODR-failure diagnostics.
10009   for (auto &Merge : OdrMergeFailures) {
10010     // If we've already pointed out a specific problem with this class, don't
10011     // bother issuing a general "something's different" diagnostic.
10012     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10013       continue;
10014 
10015     bool Diagnosed = false;
10016     CXXRecordDecl *FirstRecord = Merge.first;
10017     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10018     for (auto &RecordPair : Merge.second) {
10019       CXXRecordDecl *SecondRecord = RecordPair.first;
10020       // Multiple different declarations got merged together; tell the user
10021       // where they came from.
10022       if (FirstRecord == SecondRecord)
10023         continue;
10024 
10025       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10026 
10027       auto *FirstDD = FirstRecord->DefinitionData;
10028       auto *SecondDD = RecordPair.second;
10029 
10030       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10031 
10032       // Diagnostics from DefinitionData are emitted here.
10033       if (FirstDD != SecondDD) {
10034         enum ODRDefinitionDataDifference {
10035           NumBases,
10036           NumVBases,
10037           BaseType,
10038           BaseVirtual,
10039           BaseAccess,
10040         };
10041         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10042                                  this](SourceLocation Loc, SourceRange Range,
10043                                        ODRDefinitionDataDifference DiffType) {
10044           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10045                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10046                  << DiffType;
10047         };
10048         auto ODRDiagBaseNote = [&SecondModule,
10049                                 this](SourceLocation Loc, SourceRange Range,
10050                                       ODRDefinitionDataDifference DiffType) {
10051           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10052                  << SecondModule << Range << DiffType;
10053         };
10054 
10055         unsigned FirstNumBases = FirstDD->NumBases;
10056         unsigned FirstNumVBases = FirstDD->NumVBases;
10057         unsigned SecondNumBases = SecondDD->NumBases;
10058         unsigned SecondNumVBases = SecondDD->NumVBases;
10059 
10060         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10061           unsigned NumBases = DD->NumBases;
10062           if (NumBases == 0) return SourceRange();
10063           auto bases = DD->bases();
10064           return SourceRange(bases[0].getBeginLoc(),
10065                              bases[NumBases - 1].getEndLoc());
10066         };
10067 
10068         if (FirstNumBases != SecondNumBases) {
10069           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10070                            NumBases)
10071               << FirstNumBases;
10072           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10073                           NumBases)
10074               << SecondNumBases;
10075           Diagnosed = true;
10076           break;
10077         }
10078 
10079         if (FirstNumVBases != SecondNumVBases) {
10080           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10081                            NumVBases)
10082               << FirstNumVBases;
10083           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10084                           NumVBases)
10085               << SecondNumVBases;
10086           Diagnosed = true;
10087           break;
10088         }
10089 
10090         auto FirstBases = FirstDD->bases();
10091         auto SecondBases = SecondDD->bases();
10092         unsigned i = 0;
10093         for (i = 0; i < FirstNumBases; ++i) {
10094           auto FirstBase = FirstBases[i];
10095           auto SecondBase = SecondBases[i];
10096           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10097               ComputeQualTypeODRHash(SecondBase.getType())) {
10098             ODRDiagBaseError(FirstRecord->getLocation(),
10099                              FirstBase.getSourceRange(), BaseType)
10100                 << (i + 1) << FirstBase.getType();
10101             ODRDiagBaseNote(SecondRecord->getLocation(),
10102                             SecondBase.getSourceRange(), BaseType)
10103                 << (i + 1) << SecondBase.getType();
10104             break;
10105           }
10106 
10107           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10108             ODRDiagBaseError(FirstRecord->getLocation(),
10109                              FirstBase.getSourceRange(), BaseVirtual)
10110                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10111             ODRDiagBaseNote(SecondRecord->getLocation(),
10112                             SecondBase.getSourceRange(), BaseVirtual)
10113                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10114             break;
10115           }
10116 
10117           if (FirstBase.getAccessSpecifierAsWritten() !=
10118               SecondBase.getAccessSpecifierAsWritten()) {
10119             ODRDiagBaseError(FirstRecord->getLocation(),
10120                              FirstBase.getSourceRange(), BaseAccess)
10121                 << (i + 1) << FirstBase.getType()
10122                 << (int)FirstBase.getAccessSpecifierAsWritten();
10123             ODRDiagBaseNote(SecondRecord->getLocation(),
10124                             SecondBase.getSourceRange(), BaseAccess)
10125                 << (i + 1) << SecondBase.getType()
10126                 << (int)SecondBase.getAccessSpecifierAsWritten();
10127             break;
10128           }
10129         }
10130 
10131         if (i != FirstNumBases) {
10132           Diagnosed = true;
10133           break;
10134         }
10135       }
10136 
10137       const ClassTemplateDecl *FirstTemplate =
10138           FirstRecord->getDescribedClassTemplate();
10139       const ClassTemplateDecl *SecondTemplate =
10140           SecondRecord->getDescribedClassTemplate();
10141 
10142       assert(!FirstTemplate == !SecondTemplate &&
10143              "Both pointers should be null or non-null");
10144 
10145       enum ODRTemplateDifference {
10146         ParamEmptyName,
10147         ParamName,
10148         ParamSingleDefaultArgument,
10149         ParamDifferentDefaultArgument,
10150       };
10151 
10152       if (FirstTemplate && SecondTemplate) {
10153         DeclHashes FirstTemplateHashes;
10154         DeclHashes SecondTemplateHashes;
10155 
10156         auto PopulateTemplateParameterHashs =
10157             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10158                                      const ClassTemplateDecl *TD) {
10159               for (auto *D : TD->getTemplateParameters()->asArray()) {
10160                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10161               }
10162             };
10163 
10164         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10165         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10166 
10167         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10168                "Number of template parameters should be equal.");
10169 
10170         auto FirstIt = FirstTemplateHashes.begin();
10171         auto FirstEnd = FirstTemplateHashes.end();
10172         auto SecondIt = SecondTemplateHashes.begin();
10173         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10174           if (FirstIt->second == SecondIt->second)
10175             continue;
10176 
10177           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10178                                           SourceLocation Loc, SourceRange Range,
10179                                           ODRTemplateDifference DiffType) {
10180             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10181                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10182                    << DiffType;
10183           };
10184           auto ODRDiagTemplateNote = [&SecondModule, this](
10185                                          SourceLocation Loc, SourceRange Range,
10186                                          ODRTemplateDifference DiffType) {
10187             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10188                    << SecondModule << Range << DiffType;
10189           };
10190 
10191           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10192           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10193 
10194           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10195                  "Parameter Decl's should be the same kind.");
10196 
10197           DeclarationName FirstName = FirstDecl->getDeclName();
10198           DeclarationName SecondName = SecondDecl->getDeclName();
10199 
10200           if (FirstName != SecondName) {
10201             const bool FirstNameEmpty =
10202                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10203             const bool SecondNameEmpty =
10204                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10205             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10206                    "Both template parameters cannot be unnamed.");
10207             ODRDiagTemplateError(FirstDecl->getLocation(),
10208                                  FirstDecl->getSourceRange(),
10209                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10210                 << FirstName;
10211             ODRDiagTemplateNote(SecondDecl->getLocation(),
10212                                 SecondDecl->getSourceRange(),
10213                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10214                 << SecondName;
10215             break;
10216           }
10217 
10218           switch (FirstDecl->getKind()) {
10219           default:
10220             llvm_unreachable("Invalid template parameter type.");
10221           case Decl::TemplateTypeParm: {
10222             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10223             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10224             const bool HasFirstDefaultArgument =
10225                 FirstParam->hasDefaultArgument() &&
10226                 !FirstParam->defaultArgumentWasInherited();
10227             const bool HasSecondDefaultArgument =
10228                 SecondParam->hasDefaultArgument() &&
10229                 !SecondParam->defaultArgumentWasInherited();
10230 
10231             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10232               ODRDiagTemplateError(FirstDecl->getLocation(),
10233                                    FirstDecl->getSourceRange(),
10234                                    ParamSingleDefaultArgument)
10235                   << HasFirstDefaultArgument;
10236               ODRDiagTemplateNote(SecondDecl->getLocation(),
10237                                   SecondDecl->getSourceRange(),
10238                                   ParamSingleDefaultArgument)
10239                   << HasSecondDefaultArgument;
10240               break;
10241             }
10242 
10243             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10244                    "Expecting default arguments.");
10245 
10246             ODRDiagTemplateError(FirstDecl->getLocation(),
10247                                  FirstDecl->getSourceRange(),
10248                                  ParamDifferentDefaultArgument);
10249             ODRDiagTemplateNote(SecondDecl->getLocation(),
10250                                 SecondDecl->getSourceRange(),
10251                                 ParamDifferentDefaultArgument);
10252 
10253             break;
10254           }
10255           case Decl::NonTypeTemplateParm: {
10256             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10257             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10258             const bool HasFirstDefaultArgument =
10259                 FirstParam->hasDefaultArgument() &&
10260                 !FirstParam->defaultArgumentWasInherited();
10261             const bool HasSecondDefaultArgument =
10262                 SecondParam->hasDefaultArgument() &&
10263                 !SecondParam->defaultArgumentWasInherited();
10264 
10265             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10266               ODRDiagTemplateError(FirstDecl->getLocation(),
10267                                    FirstDecl->getSourceRange(),
10268                                    ParamSingleDefaultArgument)
10269                   << HasFirstDefaultArgument;
10270               ODRDiagTemplateNote(SecondDecl->getLocation(),
10271                                   SecondDecl->getSourceRange(),
10272                                   ParamSingleDefaultArgument)
10273                   << HasSecondDefaultArgument;
10274               break;
10275             }
10276 
10277             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10278                    "Expecting default arguments.");
10279 
10280             ODRDiagTemplateError(FirstDecl->getLocation(),
10281                                  FirstDecl->getSourceRange(),
10282                                  ParamDifferentDefaultArgument);
10283             ODRDiagTemplateNote(SecondDecl->getLocation(),
10284                                 SecondDecl->getSourceRange(),
10285                                 ParamDifferentDefaultArgument);
10286 
10287             break;
10288           }
10289           case Decl::TemplateTemplateParm: {
10290             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10291             const auto *SecondParam =
10292                 cast<TemplateTemplateParmDecl>(SecondDecl);
10293             const bool HasFirstDefaultArgument =
10294                 FirstParam->hasDefaultArgument() &&
10295                 !FirstParam->defaultArgumentWasInherited();
10296             const bool HasSecondDefaultArgument =
10297                 SecondParam->hasDefaultArgument() &&
10298                 !SecondParam->defaultArgumentWasInherited();
10299 
10300             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10301               ODRDiagTemplateError(FirstDecl->getLocation(),
10302                                    FirstDecl->getSourceRange(),
10303                                    ParamSingleDefaultArgument)
10304                   << HasFirstDefaultArgument;
10305               ODRDiagTemplateNote(SecondDecl->getLocation(),
10306                                   SecondDecl->getSourceRange(),
10307                                   ParamSingleDefaultArgument)
10308                   << HasSecondDefaultArgument;
10309               break;
10310             }
10311 
10312             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10313                    "Expecting default arguments.");
10314 
10315             ODRDiagTemplateError(FirstDecl->getLocation(),
10316                                  FirstDecl->getSourceRange(),
10317                                  ParamDifferentDefaultArgument);
10318             ODRDiagTemplateNote(SecondDecl->getLocation(),
10319                                 SecondDecl->getSourceRange(),
10320                                 ParamDifferentDefaultArgument);
10321 
10322             break;
10323           }
10324           }
10325 
10326           break;
10327         }
10328 
10329         if (FirstIt != FirstEnd) {
10330           Diagnosed = true;
10331           break;
10332         }
10333       }
10334 
10335       DeclHashes FirstHashes;
10336       DeclHashes SecondHashes;
10337       const DeclContext *DC = FirstRecord;
10338       PopulateHashes(FirstHashes, FirstRecord, DC);
10339       PopulateHashes(SecondHashes, SecondRecord, DC);
10340 
10341       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10342       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10343       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10344       Decl *FirstDecl = DR.FirstDecl;
10345       Decl *SecondDecl = DR.SecondDecl;
10346 
10347       if (FirstDiffType == Other || SecondDiffType == Other) {
10348         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10349                               SecondModule);
10350         Diagnosed = true;
10351         break;
10352       }
10353 
10354       if (FirstDiffType != SecondDiffType) {
10355         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10356                             SecondModule);
10357         Diagnosed = true;
10358         break;
10359       }
10360 
10361       assert(FirstDiffType == SecondDiffType);
10362 
10363       switch (FirstDiffType) {
10364       case Other:
10365       case EndOfClass:
10366       case PublicSpecifer:
10367       case PrivateSpecifer:
10368       case ProtectedSpecifer:
10369         llvm_unreachable("Invalid diff type");
10370 
10371       case StaticAssert: {
10372         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10373         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10374 
10375         Expr *FirstExpr = FirstSA->getAssertExpr();
10376         Expr *SecondExpr = SecondSA->getAssertExpr();
10377         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10378         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10379         if (FirstODRHash != SecondODRHash) {
10380           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10381                            FirstExpr->getSourceRange(), StaticAssertCondition);
10382           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10383                           SecondExpr->getSourceRange(), StaticAssertCondition);
10384           Diagnosed = true;
10385           break;
10386         }
10387 
10388         StringLiteral *FirstStr = FirstSA->getMessage();
10389         StringLiteral *SecondStr = SecondSA->getMessage();
10390         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10391         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10392           SourceLocation FirstLoc, SecondLoc;
10393           SourceRange FirstRange, SecondRange;
10394           if (FirstStr) {
10395             FirstLoc = FirstStr->getBeginLoc();
10396             FirstRange = FirstStr->getSourceRange();
10397           } else {
10398             FirstLoc = FirstSA->getBeginLoc();
10399             FirstRange = FirstSA->getSourceRange();
10400           }
10401           if (SecondStr) {
10402             SecondLoc = SecondStr->getBeginLoc();
10403             SecondRange = SecondStr->getSourceRange();
10404           } else {
10405             SecondLoc = SecondSA->getBeginLoc();
10406             SecondRange = SecondSA->getSourceRange();
10407           }
10408           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10409                            StaticAssertOnlyMessage)
10410               << (FirstStr == nullptr);
10411           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10412                           StaticAssertOnlyMessage)
10413               << (SecondStr == nullptr);
10414           Diagnosed = true;
10415           break;
10416         }
10417 
10418         if (FirstStr && SecondStr &&
10419             FirstStr->getString() != SecondStr->getString()) {
10420           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10421                            FirstStr->getSourceRange(), StaticAssertMessage);
10422           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10423                           SecondStr->getSourceRange(), StaticAssertMessage);
10424           Diagnosed = true;
10425           break;
10426         }
10427         break;
10428       }
10429       case Field: {
10430         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10431                                  cast<FieldDecl>(FirstDecl),
10432                                  cast<FieldDecl>(SecondDecl));
10433         break;
10434       }
10435       case CXXMethod: {
10436         enum {
10437           DiagMethod,
10438           DiagConstructor,
10439           DiagDestructor,
10440         } FirstMethodType,
10441             SecondMethodType;
10442         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10443           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10444           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10445           return DiagMethod;
10446         };
10447         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10448         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10449         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10450         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10451         auto FirstName = FirstMethod->getDeclName();
10452         auto SecondName = SecondMethod->getDeclName();
10453         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10454           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10455                            FirstMethod->getSourceRange(), MethodName)
10456               << FirstMethodType << FirstName;
10457           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10458                           SecondMethod->getSourceRange(), MethodName)
10459               << SecondMethodType << SecondName;
10460 
10461           Diagnosed = true;
10462           break;
10463         }
10464 
10465         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10466         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10467         if (FirstDeleted != SecondDeleted) {
10468           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10469                            FirstMethod->getSourceRange(), MethodDeleted)
10470               << FirstMethodType << FirstName << FirstDeleted;
10471 
10472           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10473                           SecondMethod->getSourceRange(), MethodDeleted)
10474               << SecondMethodType << SecondName << SecondDeleted;
10475           Diagnosed = true;
10476           break;
10477         }
10478 
10479         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10480         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10481         if (FirstDefaulted != SecondDefaulted) {
10482           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10483                            FirstMethod->getSourceRange(), MethodDefaulted)
10484               << FirstMethodType << FirstName << FirstDefaulted;
10485 
10486           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10487                           SecondMethod->getSourceRange(), MethodDefaulted)
10488               << SecondMethodType << SecondName << SecondDefaulted;
10489           Diagnosed = true;
10490           break;
10491         }
10492 
10493         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10494         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10495         const bool FirstPure = FirstMethod->isPure();
10496         const bool SecondPure = SecondMethod->isPure();
10497         if ((FirstVirtual || SecondVirtual) &&
10498             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10499           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10500                            FirstMethod->getSourceRange(), MethodVirtual)
10501               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10502           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10503                           SecondMethod->getSourceRange(), MethodVirtual)
10504               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10505           Diagnosed = true;
10506           break;
10507         }
10508 
10509         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10510         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10511         // class needs to be checked instead.
10512         const auto FirstStorage = FirstMethod->getStorageClass();
10513         const auto SecondStorage = SecondMethod->getStorageClass();
10514         const bool FirstStatic = FirstStorage == SC_Static;
10515         const bool SecondStatic = SecondStorage == SC_Static;
10516         if (FirstStatic != SecondStatic) {
10517           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10518                            FirstMethod->getSourceRange(), MethodStatic)
10519               << FirstMethodType << FirstName << FirstStatic;
10520           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10521                           SecondMethod->getSourceRange(), MethodStatic)
10522               << SecondMethodType << SecondName << SecondStatic;
10523           Diagnosed = true;
10524           break;
10525         }
10526 
10527         const bool FirstVolatile = FirstMethod->isVolatile();
10528         const bool SecondVolatile = SecondMethod->isVolatile();
10529         if (FirstVolatile != SecondVolatile) {
10530           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10531                            FirstMethod->getSourceRange(), MethodVolatile)
10532               << FirstMethodType << FirstName << FirstVolatile;
10533           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10534                           SecondMethod->getSourceRange(), MethodVolatile)
10535               << SecondMethodType << SecondName << SecondVolatile;
10536           Diagnosed = true;
10537           break;
10538         }
10539 
10540         const bool FirstConst = FirstMethod->isConst();
10541         const bool SecondConst = SecondMethod->isConst();
10542         if (FirstConst != SecondConst) {
10543           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10544                            FirstMethod->getSourceRange(), MethodConst)
10545               << FirstMethodType << FirstName << FirstConst;
10546           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10547                           SecondMethod->getSourceRange(), MethodConst)
10548               << SecondMethodType << SecondName << SecondConst;
10549           Diagnosed = true;
10550           break;
10551         }
10552 
10553         const bool FirstInline = FirstMethod->isInlineSpecified();
10554         const bool SecondInline = SecondMethod->isInlineSpecified();
10555         if (FirstInline != SecondInline) {
10556           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10557                            FirstMethod->getSourceRange(), MethodInline)
10558               << FirstMethodType << FirstName << FirstInline;
10559           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10560                           SecondMethod->getSourceRange(), MethodInline)
10561               << SecondMethodType << SecondName << SecondInline;
10562           Diagnosed = true;
10563           break;
10564         }
10565 
10566         const unsigned FirstNumParameters = FirstMethod->param_size();
10567         const unsigned SecondNumParameters = SecondMethod->param_size();
10568         if (FirstNumParameters != SecondNumParameters) {
10569           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10570                            FirstMethod->getSourceRange(),
10571                            MethodNumberParameters)
10572               << FirstMethodType << FirstName << FirstNumParameters;
10573           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10574                           SecondMethod->getSourceRange(),
10575                           MethodNumberParameters)
10576               << SecondMethodType << SecondName << SecondNumParameters;
10577           Diagnosed = true;
10578           break;
10579         }
10580 
10581         // Need this status boolean to know when break out of the switch.
10582         bool ParameterMismatch = false;
10583         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10584           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10585           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10586 
10587           QualType FirstParamType = FirstParam->getType();
10588           QualType SecondParamType = SecondParam->getType();
10589           if (FirstParamType != SecondParamType &&
10590               ComputeQualTypeODRHash(FirstParamType) !=
10591                   ComputeQualTypeODRHash(SecondParamType)) {
10592             if (const DecayedType *ParamDecayedType =
10593                     FirstParamType->getAs<DecayedType>()) {
10594               ODRDiagDeclError(
10595                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10596                   FirstMethod->getSourceRange(), MethodParameterType)
10597                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10598                   << true << ParamDecayedType->getOriginalType();
10599             } else {
10600               ODRDiagDeclError(
10601                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10602                   FirstMethod->getSourceRange(), MethodParameterType)
10603                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10604                   << false;
10605             }
10606 
10607             if (const DecayedType *ParamDecayedType =
10608                     SecondParamType->getAs<DecayedType>()) {
10609               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10610                               SecondMethod->getSourceRange(),
10611                               MethodParameterType)
10612                   << SecondMethodType << SecondName << (I + 1)
10613                   << SecondParamType << true
10614                   << ParamDecayedType->getOriginalType();
10615             } else {
10616               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10617                               SecondMethod->getSourceRange(),
10618                               MethodParameterType)
10619                   << SecondMethodType << SecondName << (I + 1)
10620                   << SecondParamType << false;
10621             }
10622             ParameterMismatch = true;
10623             break;
10624           }
10625 
10626           DeclarationName FirstParamName = FirstParam->getDeclName();
10627           DeclarationName SecondParamName = SecondParam->getDeclName();
10628           if (FirstParamName != SecondParamName) {
10629             ODRDiagDeclError(FirstRecord, FirstModule,
10630                              FirstMethod->getLocation(),
10631                              FirstMethod->getSourceRange(), MethodParameterName)
10632                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10633             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10634                             SecondMethod->getSourceRange(), MethodParameterName)
10635                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10636             ParameterMismatch = true;
10637             break;
10638           }
10639 
10640           const Expr *FirstInit = FirstParam->getInit();
10641           const Expr *SecondInit = SecondParam->getInit();
10642           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10643             ODRDiagDeclError(FirstRecord, FirstModule,
10644                              FirstMethod->getLocation(),
10645                              FirstMethod->getSourceRange(),
10646                              MethodParameterSingleDefaultArgument)
10647                 << FirstMethodType << FirstName << (I + 1)
10648                 << (FirstInit == nullptr)
10649                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10650             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10651                             SecondMethod->getSourceRange(),
10652                             MethodParameterSingleDefaultArgument)
10653                 << SecondMethodType << SecondName << (I + 1)
10654                 << (SecondInit == nullptr)
10655                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10656             ParameterMismatch = true;
10657             break;
10658           }
10659 
10660           if (FirstInit && SecondInit &&
10661               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10662             ODRDiagDeclError(FirstRecord, FirstModule,
10663                              FirstMethod->getLocation(),
10664                              FirstMethod->getSourceRange(),
10665                              MethodParameterDifferentDefaultArgument)
10666                 << FirstMethodType << FirstName << (I + 1)
10667                 << FirstInit->getSourceRange();
10668             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10669                             SecondMethod->getSourceRange(),
10670                             MethodParameterDifferentDefaultArgument)
10671                 << SecondMethodType << SecondName << (I + 1)
10672                 << SecondInit->getSourceRange();
10673             ParameterMismatch = true;
10674             break;
10675 
10676           }
10677         }
10678 
10679         if (ParameterMismatch) {
10680           Diagnosed = true;
10681           break;
10682         }
10683 
10684         const auto *FirstTemplateArgs =
10685             FirstMethod->getTemplateSpecializationArgs();
10686         const auto *SecondTemplateArgs =
10687             SecondMethod->getTemplateSpecializationArgs();
10688 
10689         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10690             (!FirstTemplateArgs && SecondTemplateArgs)) {
10691           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10692                            FirstMethod->getSourceRange(),
10693                            MethodNoTemplateArguments)
10694               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10695           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10696                           SecondMethod->getSourceRange(),
10697                           MethodNoTemplateArguments)
10698               << SecondMethodType << SecondName
10699               << (SecondTemplateArgs != nullptr);
10700 
10701           Diagnosed = true;
10702           break;
10703         }
10704 
10705         if (FirstTemplateArgs && SecondTemplateArgs) {
10706           // Remove pack expansions from argument list.
10707           auto ExpandTemplateArgumentList =
10708               [](const TemplateArgumentList *TAL) {
10709                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10710                 for (const TemplateArgument &TA : TAL->asArray()) {
10711                   if (TA.getKind() != TemplateArgument::Pack) {
10712                     ExpandedList.push_back(&TA);
10713                     continue;
10714                   }
10715                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10716                     ExpandedList.push_back(&PackTA);
10717                   }
10718                 }
10719                 return ExpandedList;
10720               };
10721           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10722               ExpandTemplateArgumentList(FirstTemplateArgs);
10723           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10724               ExpandTemplateArgumentList(SecondTemplateArgs);
10725 
10726           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10727             ODRDiagDeclError(FirstRecord, FirstModule,
10728                              FirstMethod->getLocation(),
10729                              FirstMethod->getSourceRange(),
10730                              MethodDifferentNumberTemplateArguments)
10731                 << FirstMethodType << FirstName
10732                 << (unsigned)FirstExpandedList.size();
10733             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10734                             SecondMethod->getSourceRange(),
10735                             MethodDifferentNumberTemplateArguments)
10736                 << SecondMethodType << SecondName
10737                 << (unsigned)SecondExpandedList.size();
10738 
10739             Diagnosed = true;
10740             break;
10741           }
10742 
10743           bool TemplateArgumentMismatch = false;
10744           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10745             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10746                                    &SecondTA = *SecondExpandedList[i];
10747             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10748                 ComputeTemplateArgumentODRHash(SecondTA)) {
10749               continue;
10750             }
10751 
10752             ODRDiagDeclError(
10753                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10754                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10755                 << FirstMethodType << FirstName << FirstTA << i + 1;
10756             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10757                             SecondMethod->getSourceRange(),
10758                             MethodDifferentTemplateArgument)
10759                 << SecondMethodType << SecondName << SecondTA << i + 1;
10760 
10761             TemplateArgumentMismatch = true;
10762             break;
10763           }
10764 
10765           if (TemplateArgumentMismatch) {
10766             Diagnosed = true;
10767             break;
10768           }
10769         }
10770 
10771         // Compute the hash of the method as if it has no body.
10772         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10773           Hash.clear();
10774           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10775           return Hash.CalculateHash();
10776         };
10777 
10778         // Compare the hash generated to the hash stored.  A difference means
10779         // that a body was present in the original source.  Due to merging,
10780         // the stardard way of detecting a body will not work.
10781         const bool HasFirstBody =
10782             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10783         const bool HasSecondBody =
10784             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10785 
10786         if (HasFirstBody != HasSecondBody) {
10787           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10788                            FirstMethod->getSourceRange(), MethodSingleBody)
10789               << FirstMethodType << FirstName << HasFirstBody;
10790           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10791                           SecondMethod->getSourceRange(), MethodSingleBody)
10792               << SecondMethodType << SecondName << HasSecondBody;
10793           Diagnosed = true;
10794           break;
10795         }
10796 
10797         if (HasFirstBody && HasSecondBody) {
10798           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10799                            FirstMethod->getSourceRange(), MethodDifferentBody)
10800               << FirstMethodType << FirstName;
10801           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10802                           SecondMethod->getSourceRange(), MethodDifferentBody)
10803               << SecondMethodType << SecondName;
10804           Diagnosed = true;
10805           break;
10806         }
10807 
10808         break;
10809       }
10810       case TypeAlias:
10811       case TypeDef: {
10812         Diagnosed = ODRDiagTypeDefOrAlias(
10813             FirstRecord, FirstModule, SecondModule,
10814             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10815             FirstDiffType == TypeAlias);
10816         break;
10817       }
10818       case Var: {
10819         Diagnosed =
10820             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10821                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10822         break;
10823       }
10824       case Friend: {
10825         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10826         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10827 
10828         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10829         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10830 
10831         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10832         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10833 
10834         if (FirstND && SecondND) {
10835           ODRDiagDeclError(FirstRecord, FirstModule,
10836                            FirstFriend->getFriendLoc(),
10837                            FirstFriend->getSourceRange(), FriendFunction)
10838               << FirstND;
10839           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10840                           SecondFriend->getSourceRange(), FriendFunction)
10841               << SecondND;
10842 
10843           Diagnosed = true;
10844           break;
10845         }
10846 
10847         if (FirstTSI && SecondTSI) {
10848           QualType FirstFriendType = FirstTSI->getType();
10849           QualType SecondFriendType = SecondTSI->getType();
10850           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10851                  ComputeQualTypeODRHash(SecondFriendType));
10852           ODRDiagDeclError(FirstRecord, FirstModule,
10853                            FirstFriend->getFriendLoc(),
10854                            FirstFriend->getSourceRange(), FriendType)
10855               << FirstFriendType;
10856           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10857                           SecondFriend->getSourceRange(), FriendType)
10858               << SecondFriendType;
10859           Diagnosed = true;
10860           break;
10861         }
10862 
10863         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10864                          FirstFriend->getSourceRange(), FriendTypeFunction)
10865             << (FirstTSI == nullptr);
10866         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10867                         SecondFriend->getSourceRange(), FriendTypeFunction)
10868             << (SecondTSI == nullptr);
10869 
10870         Diagnosed = true;
10871         break;
10872       }
10873       case FunctionTemplate: {
10874         FunctionTemplateDecl *FirstTemplate =
10875             cast<FunctionTemplateDecl>(FirstDecl);
10876         FunctionTemplateDecl *SecondTemplate =
10877             cast<FunctionTemplateDecl>(SecondDecl);
10878 
10879         TemplateParameterList *FirstTPL =
10880             FirstTemplate->getTemplateParameters();
10881         TemplateParameterList *SecondTPL =
10882             SecondTemplate->getTemplateParameters();
10883 
10884         if (FirstTPL->size() != SecondTPL->size()) {
10885           ODRDiagDeclError(FirstRecord, FirstModule,
10886                            FirstTemplate->getLocation(),
10887                            FirstTemplate->getSourceRange(),
10888                            FunctionTemplateDifferentNumberParameters)
10889               << FirstTemplate << FirstTPL->size();
10890           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10891                           SecondTemplate->getSourceRange(),
10892                           FunctionTemplateDifferentNumberParameters)
10893               << SecondTemplate << SecondTPL->size();
10894 
10895           Diagnosed = true;
10896           break;
10897         }
10898 
10899         bool ParameterMismatch = false;
10900         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10901           NamedDecl *FirstParam = FirstTPL->getParam(i);
10902           NamedDecl *SecondParam = SecondTPL->getParam(i);
10903 
10904           if (FirstParam->getKind() != SecondParam->getKind()) {
10905             enum {
10906               TemplateTypeParameter,
10907               NonTypeTemplateParameter,
10908               TemplateTemplateParameter,
10909             };
10910             auto GetParamType = [](NamedDecl *D) {
10911               switch (D->getKind()) {
10912                 default:
10913                   llvm_unreachable("Unexpected template parameter type");
10914                 case Decl::TemplateTypeParm:
10915                   return TemplateTypeParameter;
10916                 case Decl::NonTypeTemplateParm:
10917                   return NonTypeTemplateParameter;
10918                 case Decl::TemplateTemplateParm:
10919                   return TemplateTemplateParameter;
10920               }
10921             };
10922 
10923             ODRDiagDeclError(FirstRecord, FirstModule,
10924                              FirstTemplate->getLocation(),
10925                              FirstTemplate->getSourceRange(),
10926                              FunctionTemplateParameterDifferentKind)
10927                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10928             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10929                             SecondTemplate->getSourceRange(),
10930                             FunctionTemplateParameterDifferentKind)
10931                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10932 
10933             ParameterMismatch = true;
10934             break;
10935           }
10936 
10937           if (FirstParam->getName() != SecondParam->getName()) {
10938             ODRDiagDeclError(
10939                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10940                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10941                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10942                 << FirstParam;
10943             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10944                             SecondTemplate->getSourceRange(),
10945                             FunctionTemplateParameterName)
10946                 << SecondTemplate << (i + 1)
10947                 << (bool)SecondParam->getIdentifier() << SecondParam;
10948             ParameterMismatch = true;
10949             break;
10950           }
10951 
10952           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10953               isa<TemplateTypeParmDecl>(SecondParam)) {
10954             TemplateTypeParmDecl *FirstTTPD =
10955                 cast<TemplateTypeParmDecl>(FirstParam);
10956             TemplateTypeParmDecl *SecondTTPD =
10957                 cast<TemplateTypeParmDecl>(SecondParam);
10958             bool HasFirstDefaultArgument =
10959                 FirstTTPD->hasDefaultArgument() &&
10960                 !FirstTTPD->defaultArgumentWasInherited();
10961             bool HasSecondDefaultArgument =
10962                 SecondTTPD->hasDefaultArgument() &&
10963                 !SecondTTPD->defaultArgumentWasInherited();
10964             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10965               ODRDiagDeclError(FirstRecord, FirstModule,
10966                                FirstTemplate->getLocation(),
10967                                FirstTemplate->getSourceRange(),
10968                                FunctionTemplateParameterSingleDefaultArgument)
10969                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10970               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10971                               SecondTemplate->getSourceRange(),
10972                               FunctionTemplateParameterSingleDefaultArgument)
10973                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10974               ParameterMismatch = true;
10975               break;
10976             }
10977 
10978             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10979               QualType FirstType = FirstTTPD->getDefaultArgument();
10980               QualType SecondType = SecondTTPD->getDefaultArgument();
10981               if (ComputeQualTypeODRHash(FirstType) !=
10982                   ComputeQualTypeODRHash(SecondType)) {
10983                 ODRDiagDeclError(
10984                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10985                     FirstTemplate->getSourceRange(),
10986                     FunctionTemplateParameterDifferentDefaultArgument)
10987                     << FirstTemplate << (i + 1) << FirstType;
10988                 ODRDiagDeclNote(
10989                     SecondModule, SecondTemplate->getLocation(),
10990                     SecondTemplate->getSourceRange(),
10991                     FunctionTemplateParameterDifferentDefaultArgument)
10992                     << SecondTemplate << (i + 1) << SecondType;
10993                 ParameterMismatch = true;
10994                 break;
10995               }
10996             }
10997 
10998             if (FirstTTPD->isParameterPack() !=
10999                 SecondTTPD->isParameterPack()) {
11000               ODRDiagDeclError(FirstRecord, FirstModule,
11001                                FirstTemplate->getLocation(),
11002                                FirstTemplate->getSourceRange(),
11003                                FunctionTemplatePackParameter)
11004                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11005               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11006                               SecondTemplate->getSourceRange(),
11007                               FunctionTemplatePackParameter)
11008                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11009               ParameterMismatch = true;
11010               break;
11011             }
11012           }
11013 
11014           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11015               isa<TemplateTemplateParmDecl>(SecondParam)) {
11016             TemplateTemplateParmDecl *FirstTTPD =
11017                 cast<TemplateTemplateParmDecl>(FirstParam);
11018             TemplateTemplateParmDecl *SecondTTPD =
11019                 cast<TemplateTemplateParmDecl>(SecondParam);
11020 
11021             TemplateParameterList *FirstTPL =
11022                 FirstTTPD->getTemplateParameters();
11023             TemplateParameterList *SecondTPL =
11024                 SecondTTPD->getTemplateParameters();
11025 
11026             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11027                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11028               ODRDiagDeclError(FirstRecord, FirstModule,
11029                                FirstTemplate->getLocation(),
11030                                FirstTemplate->getSourceRange(),
11031                                FunctionTemplateParameterDifferentType)
11032                   << FirstTemplate << (i + 1);
11033               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11034                               SecondTemplate->getSourceRange(),
11035                               FunctionTemplateParameterDifferentType)
11036                   << SecondTemplate << (i + 1);
11037               ParameterMismatch = true;
11038               break;
11039             }
11040 
11041             bool HasFirstDefaultArgument =
11042                 FirstTTPD->hasDefaultArgument() &&
11043                 !FirstTTPD->defaultArgumentWasInherited();
11044             bool HasSecondDefaultArgument =
11045                 SecondTTPD->hasDefaultArgument() &&
11046                 !SecondTTPD->defaultArgumentWasInherited();
11047             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11048               ODRDiagDeclError(FirstRecord, FirstModule,
11049                                FirstTemplate->getLocation(),
11050                                FirstTemplate->getSourceRange(),
11051                                FunctionTemplateParameterSingleDefaultArgument)
11052                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11053               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11054                               SecondTemplate->getSourceRange(),
11055                               FunctionTemplateParameterSingleDefaultArgument)
11056                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11057               ParameterMismatch = true;
11058               break;
11059             }
11060 
11061             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11062               TemplateArgument FirstTA =
11063                   FirstTTPD->getDefaultArgument().getArgument();
11064               TemplateArgument SecondTA =
11065                   SecondTTPD->getDefaultArgument().getArgument();
11066               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11067                   ComputeTemplateArgumentODRHash(SecondTA)) {
11068                 ODRDiagDeclError(
11069                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11070                     FirstTemplate->getSourceRange(),
11071                     FunctionTemplateParameterDifferentDefaultArgument)
11072                     << FirstTemplate << (i + 1) << FirstTA;
11073                 ODRDiagDeclNote(
11074                     SecondModule, SecondTemplate->getLocation(),
11075                     SecondTemplate->getSourceRange(),
11076                     FunctionTemplateParameterDifferentDefaultArgument)
11077                     << SecondTemplate << (i + 1) << SecondTA;
11078                 ParameterMismatch = true;
11079                 break;
11080               }
11081             }
11082 
11083             if (FirstTTPD->isParameterPack() !=
11084                 SecondTTPD->isParameterPack()) {
11085               ODRDiagDeclError(FirstRecord, FirstModule,
11086                                FirstTemplate->getLocation(),
11087                                FirstTemplate->getSourceRange(),
11088                                FunctionTemplatePackParameter)
11089                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11090               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11091                               SecondTemplate->getSourceRange(),
11092                               FunctionTemplatePackParameter)
11093                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11094               ParameterMismatch = true;
11095               break;
11096             }
11097           }
11098 
11099           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11100               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11101             NonTypeTemplateParmDecl *FirstNTTPD =
11102                 cast<NonTypeTemplateParmDecl>(FirstParam);
11103             NonTypeTemplateParmDecl *SecondNTTPD =
11104                 cast<NonTypeTemplateParmDecl>(SecondParam);
11105 
11106             QualType FirstType = FirstNTTPD->getType();
11107             QualType SecondType = SecondNTTPD->getType();
11108             if (ComputeQualTypeODRHash(FirstType) !=
11109                 ComputeQualTypeODRHash(SecondType)) {
11110               ODRDiagDeclError(FirstRecord, FirstModule,
11111                                FirstTemplate->getLocation(),
11112                                FirstTemplate->getSourceRange(),
11113                                FunctionTemplateParameterDifferentType)
11114                   << FirstTemplate << (i + 1);
11115               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11116                               SecondTemplate->getSourceRange(),
11117                               FunctionTemplateParameterDifferentType)
11118                   << SecondTemplate << (i + 1);
11119               ParameterMismatch = true;
11120               break;
11121             }
11122 
11123             bool HasFirstDefaultArgument =
11124                 FirstNTTPD->hasDefaultArgument() &&
11125                 !FirstNTTPD->defaultArgumentWasInherited();
11126             bool HasSecondDefaultArgument =
11127                 SecondNTTPD->hasDefaultArgument() &&
11128                 !SecondNTTPD->defaultArgumentWasInherited();
11129             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11130               ODRDiagDeclError(FirstRecord, FirstModule,
11131                                FirstTemplate->getLocation(),
11132                                FirstTemplate->getSourceRange(),
11133                                FunctionTemplateParameterSingleDefaultArgument)
11134                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11135               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11136                               SecondTemplate->getSourceRange(),
11137                               FunctionTemplateParameterSingleDefaultArgument)
11138                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11139               ParameterMismatch = true;
11140               break;
11141             }
11142 
11143             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11144               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11145               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11146               if (ComputeODRHash(FirstDefaultArgument) !=
11147                   ComputeODRHash(SecondDefaultArgument)) {
11148                 ODRDiagDeclError(
11149                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11150                     FirstTemplate->getSourceRange(),
11151                     FunctionTemplateParameterDifferentDefaultArgument)
11152                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11153                 ODRDiagDeclNote(
11154                     SecondModule, SecondTemplate->getLocation(),
11155                     SecondTemplate->getSourceRange(),
11156                     FunctionTemplateParameterDifferentDefaultArgument)
11157                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11158                 ParameterMismatch = true;
11159                 break;
11160               }
11161             }
11162 
11163             if (FirstNTTPD->isParameterPack() !=
11164                 SecondNTTPD->isParameterPack()) {
11165               ODRDiagDeclError(FirstRecord, FirstModule,
11166                                FirstTemplate->getLocation(),
11167                                FirstTemplate->getSourceRange(),
11168                                FunctionTemplatePackParameter)
11169                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11170               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11171                               SecondTemplate->getSourceRange(),
11172                               FunctionTemplatePackParameter)
11173                   << SecondTemplate << (i + 1)
11174                   << SecondNTTPD->isParameterPack();
11175               ParameterMismatch = true;
11176               break;
11177             }
11178           }
11179         }
11180 
11181         if (ParameterMismatch) {
11182           Diagnosed = true;
11183           break;
11184         }
11185 
11186         break;
11187       }
11188       }
11189 
11190       if (Diagnosed)
11191         continue;
11192 
11193       Diag(FirstDecl->getLocation(),
11194            diag::err_module_odr_violation_mismatch_decl_unknown)
11195           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11196           << FirstDecl->getSourceRange();
11197       Diag(SecondDecl->getLocation(),
11198            diag::note_module_odr_violation_mismatch_decl_unknown)
11199           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11200       Diagnosed = true;
11201     }
11202 
11203     if (!Diagnosed) {
11204       // All definitions are updates to the same declaration. This happens if a
11205       // module instantiates the declaration of a class template specialization
11206       // and two or more other modules instantiate its definition.
11207       //
11208       // FIXME: Indicate which modules had instantiations of this definition.
11209       // FIXME: How can this even happen?
11210       Diag(Merge.first->getLocation(),
11211            diag::err_module_odr_violation_different_instantiations)
11212         << Merge.first;
11213     }
11214   }
11215 
11216   // Issue ODR failures diagnostics for functions.
11217   for (auto &Merge : FunctionOdrMergeFailures) {
11218     enum ODRFunctionDifference {
11219       ReturnType,
11220       ParameterName,
11221       ParameterType,
11222       ParameterSingleDefaultArgument,
11223       ParameterDifferentDefaultArgument,
11224       FunctionBody,
11225     };
11226 
11227     FunctionDecl *FirstFunction = Merge.first;
11228     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11229 
11230     bool Diagnosed = false;
11231     for (auto &SecondFunction : Merge.second) {
11232 
11233       if (FirstFunction == SecondFunction)
11234         continue;
11235 
11236       std::string SecondModule =
11237           getOwningModuleNameForDiagnostic(SecondFunction);
11238 
11239       auto ODRDiagError = [FirstFunction, &FirstModule,
11240                            this](SourceLocation Loc, SourceRange Range,
11241                                  ODRFunctionDifference DiffType) {
11242         return Diag(Loc, diag::err_module_odr_violation_function)
11243                << FirstFunction << FirstModule.empty() << FirstModule << Range
11244                << DiffType;
11245       };
11246       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11247                                                SourceRange Range,
11248                                                ODRFunctionDifference DiffType) {
11249         return Diag(Loc, diag::note_module_odr_violation_function)
11250                << SecondModule << Range << DiffType;
11251       };
11252 
11253       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11254           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11255         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11256                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11257             << FirstFunction->getReturnType();
11258         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11259                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11260             << SecondFunction->getReturnType();
11261         Diagnosed = true;
11262         break;
11263       }
11264 
11265       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11266              "Merged functions with different number of parameters");
11267 
11268       auto ParamSize = FirstFunction->param_size();
11269       bool ParameterMismatch = false;
11270       for (unsigned I = 0; I < ParamSize; ++I) {
11271         auto *FirstParam = FirstFunction->getParamDecl(I);
11272         auto *SecondParam = SecondFunction->getParamDecl(I);
11273 
11274         assert(getContext().hasSameType(FirstParam->getType(),
11275                                       SecondParam->getType()) &&
11276                "Merged function has different parameter types.");
11277 
11278         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11279           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11280                        ParameterName)
11281               << I + 1 << FirstParam->getDeclName();
11282           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11283                       ParameterName)
11284               << I + 1 << SecondParam->getDeclName();
11285           ParameterMismatch = true;
11286           break;
11287         };
11288 
11289         QualType FirstParamType = FirstParam->getType();
11290         QualType SecondParamType = SecondParam->getType();
11291         if (FirstParamType != SecondParamType &&
11292             ComputeQualTypeODRHash(FirstParamType) !=
11293                 ComputeQualTypeODRHash(SecondParamType)) {
11294           if (const DecayedType *ParamDecayedType =
11295                   FirstParamType->getAs<DecayedType>()) {
11296             ODRDiagError(FirstParam->getLocation(),
11297                          FirstParam->getSourceRange(), ParameterType)
11298                 << (I + 1) << FirstParamType << true
11299                 << ParamDecayedType->getOriginalType();
11300           } else {
11301             ODRDiagError(FirstParam->getLocation(),
11302                          FirstParam->getSourceRange(), ParameterType)
11303                 << (I + 1) << FirstParamType << false;
11304           }
11305 
11306           if (const DecayedType *ParamDecayedType =
11307                   SecondParamType->getAs<DecayedType>()) {
11308             ODRDiagNote(SecondParam->getLocation(),
11309                         SecondParam->getSourceRange(), ParameterType)
11310                 << (I + 1) << SecondParamType << true
11311                 << ParamDecayedType->getOriginalType();
11312           } else {
11313             ODRDiagNote(SecondParam->getLocation(),
11314                         SecondParam->getSourceRange(), ParameterType)
11315                 << (I + 1) << SecondParamType << false;
11316           }
11317           ParameterMismatch = true;
11318           break;
11319         }
11320 
11321         const Expr *FirstInit = FirstParam->getInit();
11322         const Expr *SecondInit = SecondParam->getInit();
11323         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11324           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11325                        ParameterSingleDefaultArgument)
11326               << (I + 1) << (FirstInit == nullptr)
11327               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11328           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11329                       ParameterSingleDefaultArgument)
11330               << (I + 1) << (SecondInit == nullptr)
11331               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11332           ParameterMismatch = true;
11333           break;
11334         }
11335 
11336         if (FirstInit && SecondInit &&
11337             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11338           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11339                        ParameterDifferentDefaultArgument)
11340               << (I + 1) << FirstInit->getSourceRange();
11341           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11342                       ParameterDifferentDefaultArgument)
11343               << (I + 1) << SecondInit->getSourceRange();
11344           ParameterMismatch = true;
11345           break;
11346         }
11347 
11348         assert(ComputeSubDeclODRHash(FirstParam) ==
11349                    ComputeSubDeclODRHash(SecondParam) &&
11350                "Undiagnosed parameter difference.");
11351       }
11352 
11353       if (ParameterMismatch) {
11354         Diagnosed = true;
11355         break;
11356       }
11357 
11358       // If no error has been generated before now, assume the problem is in
11359       // the body and generate a message.
11360       ODRDiagError(FirstFunction->getLocation(),
11361                    FirstFunction->getSourceRange(), FunctionBody);
11362       ODRDiagNote(SecondFunction->getLocation(),
11363                   SecondFunction->getSourceRange(), FunctionBody);
11364       Diagnosed = true;
11365       break;
11366     }
11367     (void)Diagnosed;
11368     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11369   }
11370 
11371   // Issue ODR failures diagnostics for enums.
11372   for (auto &Merge : EnumOdrMergeFailures) {
11373     enum ODREnumDifference {
11374       SingleScopedEnum,
11375       EnumTagKeywordMismatch,
11376       SingleSpecifiedType,
11377       DifferentSpecifiedTypes,
11378       DifferentNumberEnumConstants,
11379       EnumConstantName,
11380       EnumConstantSingleInitilizer,
11381       EnumConstantDifferentInitilizer,
11382     };
11383 
11384     // If we've already pointed out a specific problem with this enum, don't
11385     // bother issuing a general "something's different" diagnostic.
11386     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11387       continue;
11388 
11389     EnumDecl *FirstEnum = Merge.first;
11390     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11391 
11392     using DeclHashes =
11393         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11394     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11395                               DeclHashes &Hashes, EnumDecl *Enum) {
11396       for (auto *D : Enum->decls()) {
11397         // Due to decl merging, the first EnumDecl is the parent of
11398         // Decls in both records.
11399         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11400           continue;
11401         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11402         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11403                             ComputeSubDeclODRHash(D));
11404       }
11405     };
11406     DeclHashes FirstHashes;
11407     PopulateHashes(FirstHashes, FirstEnum);
11408     bool Diagnosed = false;
11409     for (auto &SecondEnum : Merge.second) {
11410 
11411       if (FirstEnum == SecondEnum)
11412         continue;
11413 
11414       std::string SecondModule =
11415           getOwningModuleNameForDiagnostic(SecondEnum);
11416 
11417       auto ODRDiagError = [FirstEnum, &FirstModule,
11418                            this](SourceLocation Loc, SourceRange Range,
11419                                  ODREnumDifference DiffType) {
11420         return Diag(Loc, diag::err_module_odr_violation_enum)
11421                << FirstEnum << FirstModule.empty() << FirstModule << Range
11422                << DiffType;
11423       };
11424       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11425                                                SourceRange Range,
11426                                                ODREnumDifference DiffType) {
11427         return Diag(Loc, diag::note_module_odr_violation_enum)
11428                << SecondModule << Range << DiffType;
11429       };
11430 
11431       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11432         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11433                      SingleScopedEnum)
11434             << FirstEnum->isScoped();
11435         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11436                     SingleScopedEnum)
11437             << SecondEnum->isScoped();
11438         Diagnosed = true;
11439         continue;
11440       }
11441 
11442       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11443         if (FirstEnum->isScopedUsingClassTag() !=
11444             SecondEnum->isScopedUsingClassTag()) {
11445           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11446                        EnumTagKeywordMismatch)
11447               << FirstEnum->isScopedUsingClassTag();
11448           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11449                       EnumTagKeywordMismatch)
11450               << SecondEnum->isScopedUsingClassTag();
11451           Diagnosed = true;
11452           continue;
11453         }
11454       }
11455 
11456       QualType FirstUnderlyingType =
11457           FirstEnum->getIntegerTypeSourceInfo()
11458               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11459               : QualType();
11460       QualType SecondUnderlyingType =
11461           SecondEnum->getIntegerTypeSourceInfo()
11462               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11463               : QualType();
11464       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11465           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11466                        SingleSpecifiedType)
11467               << !FirstUnderlyingType.isNull();
11468           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11469                       SingleSpecifiedType)
11470               << !SecondUnderlyingType.isNull();
11471           Diagnosed = true;
11472           continue;
11473       }
11474 
11475       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11476         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11477             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11478           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11479                        DifferentSpecifiedTypes)
11480               << FirstUnderlyingType;
11481           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11482                       DifferentSpecifiedTypes)
11483               << SecondUnderlyingType;
11484           Diagnosed = true;
11485           continue;
11486         }
11487       }
11488 
11489       DeclHashes SecondHashes;
11490       PopulateHashes(SecondHashes, SecondEnum);
11491 
11492       if (FirstHashes.size() != SecondHashes.size()) {
11493         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11494                      DifferentNumberEnumConstants)
11495             << (int)FirstHashes.size();
11496         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11497                     DifferentNumberEnumConstants)
11498             << (int)SecondHashes.size();
11499         Diagnosed = true;
11500         continue;
11501       }
11502 
11503       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11504         if (FirstHashes[I].second == SecondHashes[I].second)
11505           continue;
11506         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11507         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11508 
11509         if (FirstEnumConstant->getDeclName() !=
11510             SecondEnumConstant->getDeclName()) {
11511 
11512           ODRDiagError(FirstEnumConstant->getLocation(),
11513                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11514               << I + 1 << FirstEnumConstant;
11515           ODRDiagNote(SecondEnumConstant->getLocation(),
11516                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11517               << I + 1 << SecondEnumConstant;
11518           Diagnosed = true;
11519           break;
11520         }
11521 
11522         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11523         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11524         if (!FirstInit && !SecondInit)
11525           continue;
11526 
11527         if (!FirstInit || !SecondInit) {
11528           ODRDiagError(FirstEnumConstant->getLocation(),
11529                        FirstEnumConstant->getSourceRange(),
11530                        EnumConstantSingleInitilizer)
11531               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11532           ODRDiagNote(SecondEnumConstant->getLocation(),
11533                       SecondEnumConstant->getSourceRange(),
11534                       EnumConstantSingleInitilizer)
11535               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11536           Diagnosed = true;
11537           break;
11538         }
11539 
11540         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11541           ODRDiagError(FirstEnumConstant->getLocation(),
11542                        FirstEnumConstant->getSourceRange(),
11543                        EnumConstantDifferentInitilizer)
11544               << I + 1 << FirstEnumConstant;
11545           ODRDiagNote(SecondEnumConstant->getLocation(),
11546                       SecondEnumConstant->getSourceRange(),
11547                       EnumConstantDifferentInitilizer)
11548               << I + 1 << SecondEnumConstant;
11549           Diagnosed = true;
11550           break;
11551         }
11552       }
11553     }
11554 
11555     (void)Diagnosed;
11556     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11557   }
11558 }
11559 
11560 void ASTReader::StartedDeserializing() {
11561   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11562     ReadTimer->startTimer();
11563 }
11564 
11565 void ASTReader::FinishedDeserializing() {
11566   assert(NumCurrentElementsDeserializing &&
11567          "FinishedDeserializing not paired with StartedDeserializing");
11568   if (NumCurrentElementsDeserializing == 1) {
11569     // We decrease NumCurrentElementsDeserializing only after pending actions
11570     // are finished, to avoid recursively re-calling finishPendingActions().
11571     finishPendingActions();
11572   }
11573   --NumCurrentElementsDeserializing;
11574 
11575   if (NumCurrentElementsDeserializing == 0) {
11576     // Propagate exception specification and deduced type updates along
11577     // redeclaration chains.
11578     //
11579     // We do this now rather than in finishPendingActions because we want to
11580     // be able to walk the complete redeclaration chains of the updated decls.
11581     while (!PendingExceptionSpecUpdates.empty() ||
11582            !PendingDeducedTypeUpdates.empty()) {
11583       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11584       PendingExceptionSpecUpdates.clear();
11585       for (auto Update : ESUpdates) {
11586         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11587         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11588         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11589         if (auto *Listener = getContext().getASTMutationListener())
11590           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11591         for (auto *Redecl : Update.second->redecls())
11592           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11593       }
11594 
11595       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11596       PendingDeducedTypeUpdates.clear();
11597       for (auto Update : DTUpdates) {
11598         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11599         // FIXME: If the return type is already deduced, check that it matches.
11600         getContext().adjustDeducedFunctionResultType(Update.first,
11601                                                      Update.second);
11602       }
11603     }
11604 
11605     if (ReadTimer)
11606       ReadTimer->stopTimer();
11607 
11608     diagnoseOdrViolations();
11609 
11610     // We are not in recursive loading, so it's safe to pass the "interesting"
11611     // decls to the consumer.
11612     if (Consumer)
11613       PassInterestingDeclsToConsumer();
11614   }
11615 }
11616 
11617 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11618   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11619     // Remove any fake results before adding any real ones.
11620     auto It = PendingFakeLookupResults.find(II);
11621     if (It != PendingFakeLookupResults.end()) {
11622       for (auto *ND : It->second)
11623         SemaObj->IdResolver.RemoveDecl(ND);
11624       // FIXME: this works around module+PCH performance issue.
11625       // Rather than erase the result from the map, which is O(n), just clear
11626       // the vector of NamedDecls.
11627       It->second.clear();
11628     }
11629   }
11630 
11631   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11632     SemaObj->TUScope->AddDecl(D);
11633   } else if (SemaObj->TUScope) {
11634     // Adding the decl to IdResolver may have failed because it was already in
11635     // (even though it was not added in scope). If it is already in, make sure
11636     // it gets in the scope as well.
11637     if (std::find(SemaObj->IdResolver.begin(Name),
11638                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11639       SemaObj->TUScope->AddDecl(D);
11640   }
11641 }
11642 
11643 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11644                      ASTContext *Context,
11645                      const PCHContainerReader &PCHContainerRdr,
11646                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11647                      StringRef isysroot,
11648                      DisableValidationForModuleKind DisableValidationKind,
11649                      bool AllowASTWithCompilerErrors,
11650                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11651                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11652                      std::unique_ptr<llvm::Timer> ReadTimer)
11653     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11654                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11655                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11656       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11657       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11658       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11659                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11660       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11661       DisableValidationKind(DisableValidationKind),
11662       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11663       AllowConfigurationMismatch(AllowConfigurationMismatch),
11664       ValidateSystemInputs(ValidateSystemInputs),
11665       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11666       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11667   SourceMgr.setExternalSLocEntrySource(this);
11668 
11669   for (const auto &Ext : Extensions) {
11670     auto BlockName = Ext->getExtensionMetadata().BlockName;
11671     auto Known = ModuleFileExtensions.find(BlockName);
11672     if (Known != ModuleFileExtensions.end()) {
11673       Diags.Report(diag::warn_duplicate_module_file_extension)
11674         << BlockName;
11675       continue;
11676     }
11677 
11678     ModuleFileExtensions.insert({BlockName, Ext});
11679   }
11680 }
11681 
11682 ASTReader::~ASTReader() {
11683   if (OwnsDeserializationListener)
11684     delete DeserializationListener;
11685 }
11686 
11687 IdentifierResolver &ASTReader::getIdResolver() {
11688   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11689 }
11690 
11691 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11692                                                unsigned AbbrevID) {
11693   Idx = 0;
11694   Record.clear();
11695   return Cursor.readRecord(AbbrevID, Record);
11696 }
11697 //===----------------------------------------------------------------------===//
11698 //// OMPClauseReader implementation
11699 ////===----------------------------------------------------------------------===//
11700 
11701 // This has to be in namespace clang because it's friended by all
11702 // of the OMP clauses.
11703 namespace clang {
11704 
11705 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11706   ASTRecordReader &Record;
11707   ASTContext &Context;
11708 
11709 public:
11710   OMPClauseReader(ASTRecordReader &Record)
11711       : Record(Record), Context(Record.getContext()) {}
11712 #define GEN_CLANG_CLAUSE_CLASS
11713 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11714 #include "llvm/Frontend/OpenMP/OMP.inc"
11715   OMPClause *readClause();
11716   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11717   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11718 };
11719 
11720 } // end namespace clang
11721 
11722 OMPClause *ASTRecordReader::readOMPClause() {
11723   return OMPClauseReader(*this).readClause();
11724 }
11725 
11726 OMPClause *OMPClauseReader::readClause() {
11727   OMPClause *C = nullptr;
11728   switch (llvm::omp::Clause(Record.readInt())) {
11729   case llvm::omp::OMPC_if:
11730     C = new (Context) OMPIfClause();
11731     break;
11732   case llvm::omp::OMPC_final:
11733     C = new (Context) OMPFinalClause();
11734     break;
11735   case llvm::omp::OMPC_num_threads:
11736     C = new (Context) OMPNumThreadsClause();
11737     break;
11738   case llvm::omp::OMPC_safelen:
11739     C = new (Context) OMPSafelenClause();
11740     break;
11741   case llvm::omp::OMPC_simdlen:
11742     C = new (Context) OMPSimdlenClause();
11743     break;
11744   case llvm::omp::OMPC_sizes: {
11745     unsigned NumSizes = Record.readInt();
11746     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11747     break;
11748   }
11749   case llvm::omp::OMPC_allocator:
11750     C = new (Context) OMPAllocatorClause();
11751     break;
11752   case llvm::omp::OMPC_collapse:
11753     C = new (Context) OMPCollapseClause();
11754     break;
11755   case llvm::omp::OMPC_default:
11756     C = new (Context) OMPDefaultClause();
11757     break;
11758   case llvm::omp::OMPC_proc_bind:
11759     C = new (Context) OMPProcBindClause();
11760     break;
11761   case llvm::omp::OMPC_schedule:
11762     C = new (Context) OMPScheduleClause();
11763     break;
11764   case llvm::omp::OMPC_ordered:
11765     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11766     break;
11767   case llvm::omp::OMPC_nowait:
11768     C = new (Context) OMPNowaitClause();
11769     break;
11770   case llvm::omp::OMPC_untied:
11771     C = new (Context) OMPUntiedClause();
11772     break;
11773   case llvm::omp::OMPC_mergeable:
11774     C = new (Context) OMPMergeableClause();
11775     break;
11776   case llvm::omp::OMPC_read:
11777     C = new (Context) OMPReadClause();
11778     break;
11779   case llvm::omp::OMPC_write:
11780     C = new (Context) OMPWriteClause();
11781     break;
11782   case llvm::omp::OMPC_update:
11783     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11784     break;
11785   case llvm::omp::OMPC_capture:
11786     C = new (Context) OMPCaptureClause();
11787     break;
11788   case llvm::omp::OMPC_seq_cst:
11789     C = new (Context) OMPSeqCstClause();
11790     break;
11791   case llvm::omp::OMPC_acq_rel:
11792     C = new (Context) OMPAcqRelClause();
11793     break;
11794   case llvm::omp::OMPC_acquire:
11795     C = new (Context) OMPAcquireClause();
11796     break;
11797   case llvm::omp::OMPC_release:
11798     C = new (Context) OMPReleaseClause();
11799     break;
11800   case llvm::omp::OMPC_relaxed:
11801     C = new (Context) OMPRelaxedClause();
11802     break;
11803   case llvm::omp::OMPC_threads:
11804     C = new (Context) OMPThreadsClause();
11805     break;
11806   case llvm::omp::OMPC_simd:
11807     C = new (Context) OMPSIMDClause();
11808     break;
11809   case llvm::omp::OMPC_nogroup:
11810     C = new (Context) OMPNogroupClause();
11811     break;
11812   case llvm::omp::OMPC_unified_address:
11813     C = new (Context) OMPUnifiedAddressClause();
11814     break;
11815   case llvm::omp::OMPC_unified_shared_memory:
11816     C = new (Context) OMPUnifiedSharedMemoryClause();
11817     break;
11818   case llvm::omp::OMPC_reverse_offload:
11819     C = new (Context) OMPReverseOffloadClause();
11820     break;
11821   case llvm::omp::OMPC_dynamic_allocators:
11822     C = new (Context) OMPDynamicAllocatorsClause();
11823     break;
11824   case llvm::omp::OMPC_atomic_default_mem_order:
11825     C = new (Context) OMPAtomicDefaultMemOrderClause();
11826     break;
11827  case llvm::omp::OMPC_private:
11828     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11829     break;
11830   case llvm::omp::OMPC_firstprivate:
11831     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11832     break;
11833   case llvm::omp::OMPC_lastprivate:
11834     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11835     break;
11836   case llvm::omp::OMPC_shared:
11837     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11838     break;
11839   case llvm::omp::OMPC_reduction: {
11840     unsigned N = Record.readInt();
11841     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11842     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11843     break;
11844   }
11845   case llvm::omp::OMPC_task_reduction:
11846     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11847     break;
11848   case llvm::omp::OMPC_in_reduction:
11849     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11850     break;
11851   case llvm::omp::OMPC_linear:
11852     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11853     break;
11854   case llvm::omp::OMPC_aligned:
11855     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11856     break;
11857   case llvm::omp::OMPC_copyin:
11858     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11859     break;
11860   case llvm::omp::OMPC_copyprivate:
11861     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11862     break;
11863   case llvm::omp::OMPC_flush:
11864     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11865     break;
11866   case llvm::omp::OMPC_depobj:
11867     C = OMPDepobjClause::CreateEmpty(Context);
11868     break;
11869   case llvm::omp::OMPC_depend: {
11870     unsigned NumVars = Record.readInt();
11871     unsigned NumLoops = Record.readInt();
11872     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11873     break;
11874   }
11875   case llvm::omp::OMPC_device:
11876     C = new (Context) OMPDeviceClause();
11877     break;
11878   case llvm::omp::OMPC_map: {
11879     OMPMappableExprListSizeTy Sizes;
11880     Sizes.NumVars = Record.readInt();
11881     Sizes.NumUniqueDeclarations = Record.readInt();
11882     Sizes.NumComponentLists = Record.readInt();
11883     Sizes.NumComponents = Record.readInt();
11884     C = OMPMapClause::CreateEmpty(Context, Sizes);
11885     break;
11886   }
11887   case llvm::omp::OMPC_num_teams:
11888     C = new (Context) OMPNumTeamsClause();
11889     break;
11890   case llvm::omp::OMPC_thread_limit:
11891     C = new (Context) OMPThreadLimitClause();
11892     break;
11893   case llvm::omp::OMPC_priority:
11894     C = new (Context) OMPPriorityClause();
11895     break;
11896   case llvm::omp::OMPC_grainsize:
11897     C = new (Context) OMPGrainsizeClause();
11898     break;
11899   case llvm::omp::OMPC_num_tasks:
11900     C = new (Context) OMPNumTasksClause();
11901     break;
11902   case llvm::omp::OMPC_hint:
11903     C = new (Context) OMPHintClause();
11904     break;
11905   case llvm::omp::OMPC_dist_schedule:
11906     C = new (Context) OMPDistScheduleClause();
11907     break;
11908   case llvm::omp::OMPC_defaultmap:
11909     C = new (Context) OMPDefaultmapClause();
11910     break;
11911   case llvm::omp::OMPC_to: {
11912     OMPMappableExprListSizeTy Sizes;
11913     Sizes.NumVars = Record.readInt();
11914     Sizes.NumUniqueDeclarations = Record.readInt();
11915     Sizes.NumComponentLists = Record.readInt();
11916     Sizes.NumComponents = Record.readInt();
11917     C = OMPToClause::CreateEmpty(Context, Sizes);
11918     break;
11919   }
11920   case llvm::omp::OMPC_from: {
11921     OMPMappableExprListSizeTy Sizes;
11922     Sizes.NumVars = Record.readInt();
11923     Sizes.NumUniqueDeclarations = Record.readInt();
11924     Sizes.NumComponentLists = Record.readInt();
11925     Sizes.NumComponents = Record.readInt();
11926     C = OMPFromClause::CreateEmpty(Context, Sizes);
11927     break;
11928   }
11929   case llvm::omp::OMPC_use_device_ptr: {
11930     OMPMappableExprListSizeTy Sizes;
11931     Sizes.NumVars = Record.readInt();
11932     Sizes.NumUniqueDeclarations = Record.readInt();
11933     Sizes.NumComponentLists = Record.readInt();
11934     Sizes.NumComponents = Record.readInt();
11935     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11936     break;
11937   }
11938   case llvm::omp::OMPC_use_device_addr: {
11939     OMPMappableExprListSizeTy Sizes;
11940     Sizes.NumVars = Record.readInt();
11941     Sizes.NumUniqueDeclarations = Record.readInt();
11942     Sizes.NumComponentLists = Record.readInt();
11943     Sizes.NumComponents = Record.readInt();
11944     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11945     break;
11946   }
11947   case llvm::omp::OMPC_is_device_ptr: {
11948     OMPMappableExprListSizeTy Sizes;
11949     Sizes.NumVars = Record.readInt();
11950     Sizes.NumUniqueDeclarations = Record.readInt();
11951     Sizes.NumComponentLists = Record.readInt();
11952     Sizes.NumComponents = Record.readInt();
11953     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11954     break;
11955   }
11956   case llvm::omp::OMPC_allocate:
11957     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11958     break;
11959   case llvm::omp::OMPC_nontemporal:
11960     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11961     break;
11962   case llvm::omp::OMPC_inclusive:
11963     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11964     break;
11965   case llvm::omp::OMPC_exclusive:
11966     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11967     break;
11968   case llvm::omp::OMPC_order:
11969     C = new (Context) OMPOrderClause();
11970     break;
11971   case llvm::omp::OMPC_init:
11972     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11973     break;
11974   case llvm::omp::OMPC_use:
11975     C = new (Context) OMPUseClause();
11976     break;
11977   case llvm::omp::OMPC_destroy:
11978     C = new (Context) OMPDestroyClause();
11979     break;
11980   case llvm::omp::OMPC_detach:
11981     C = new (Context) OMPDetachClause();
11982     break;
11983   case llvm::omp::OMPC_uses_allocators:
11984     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11985     break;
11986   case llvm::omp::OMPC_affinity:
11987     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11988     break;
11989 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11990   case llvm::omp::Enum:                                                        \
11991     break;
11992 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11993   default:
11994     break;
11995   }
11996   assert(C && "Unknown OMPClause type");
11997 
11998   Visit(C);
11999   C->setLocStart(Record.readSourceLocation());
12000   C->setLocEnd(Record.readSourceLocation());
12001 
12002   return C;
12003 }
12004 
12005 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12006   C->setPreInitStmt(Record.readSubStmt(),
12007                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12008 }
12009 
12010 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12011   VisitOMPClauseWithPreInit(C);
12012   C->setPostUpdateExpr(Record.readSubExpr());
12013 }
12014 
12015 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12016   VisitOMPClauseWithPreInit(C);
12017   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12018   C->setNameModifierLoc(Record.readSourceLocation());
12019   C->setColonLoc(Record.readSourceLocation());
12020   C->setCondition(Record.readSubExpr());
12021   C->setLParenLoc(Record.readSourceLocation());
12022 }
12023 
12024 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12025   VisitOMPClauseWithPreInit(C);
12026   C->setCondition(Record.readSubExpr());
12027   C->setLParenLoc(Record.readSourceLocation());
12028 }
12029 
12030 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12031   VisitOMPClauseWithPreInit(C);
12032   C->setNumThreads(Record.readSubExpr());
12033   C->setLParenLoc(Record.readSourceLocation());
12034 }
12035 
12036 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12037   C->setSafelen(Record.readSubExpr());
12038   C->setLParenLoc(Record.readSourceLocation());
12039 }
12040 
12041 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12042   C->setSimdlen(Record.readSubExpr());
12043   C->setLParenLoc(Record.readSourceLocation());
12044 }
12045 
12046 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12047   for (Expr *&E : C->getSizesRefs())
12048     E = Record.readSubExpr();
12049   C->setLParenLoc(Record.readSourceLocation());
12050 }
12051 
12052 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12053   C->setAllocator(Record.readExpr());
12054   C->setLParenLoc(Record.readSourceLocation());
12055 }
12056 
12057 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12058   C->setNumForLoops(Record.readSubExpr());
12059   C->setLParenLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12063   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12064   C->setLParenLoc(Record.readSourceLocation());
12065   C->setDefaultKindKwLoc(Record.readSourceLocation());
12066 }
12067 
12068 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12069   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12070   C->setLParenLoc(Record.readSourceLocation());
12071   C->setProcBindKindKwLoc(Record.readSourceLocation());
12072 }
12073 
12074 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12075   VisitOMPClauseWithPreInit(C);
12076   C->setScheduleKind(
12077        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12078   C->setFirstScheduleModifier(
12079       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12080   C->setSecondScheduleModifier(
12081       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12082   C->setChunkSize(Record.readSubExpr());
12083   C->setLParenLoc(Record.readSourceLocation());
12084   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12085   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12086   C->setScheduleKindLoc(Record.readSourceLocation());
12087   C->setCommaLoc(Record.readSourceLocation());
12088 }
12089 
12090 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12091   C->setNumForLoops(Record.readSubExpr());
12092   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12093     C->setLoopNumIterations(I, Record.readSubExpr());
12094   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12095     C->setLoopCounter(I, Record.readSubExpr());
12096   C->setLParenLoc(Record.readSourceLocation());
12097 }
12098 
12099 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12100   C->setEventHandler(Record.readSubExpr());
12101   C->setLParenLoc(Record.readSourceLocation());
12102 }
12103 
12104 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12105 
12106 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12107 
12108 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12109 
12110 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12111 
12112 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12113 
12114 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12115   if (C->isExtended()) {
12116     C->setLParenLoc(Record.readSourceLocation());
12117     C->setArgumentLoc(Record.readSourceLocation());
12118     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12119   }
12120 }
12121 
12122 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12123 
12124 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12125 
12126 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12127 
12128 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12129 
12130 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12131 
12132 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12133 
12134 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12135 
12136 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12137 
12138 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12139 
12140 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12141   unsigned NumVars = C->varlist_size();
12142   SmallVector<Expr *, 16> Vars;
12143   Vars.reserve(NumVars);
12144   for (unsigned I = 0; I != NumVars; ++I)
12145     Vars.push_back(Record.readSubExpr());
12146   C->setVarRefs(Vars);
12147   C->setIsTarget(Record.readBool());
12148   C->setIsTargetSync(Record.readBool());
12149   C->setLParenLoc(Record.readSourceLocation());
12150   C->setVarLoc(Record.readSourceLocation());
12151 }
12152 
12153 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12154   C->setInteropVar(Record.readSubExpr());
12155   C->setLParenLoc(Record.readSourceLocation());
12156   C->setVarLoc(Record.readSourceLocation());
12157 }
12158 
12159 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12160   C->setInteropVar(Record.readSubExpr());
12161   C->setLParenLoc(Record.readSourceLocation());
12162   C->setVarLoc(Record.readSourceLocation());
12163 }
12164 
12165 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12166 
12167 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12168     OMPUnifiedSharedMemoryClause *) {}
12169 
12170 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12171 
12172 void
12173 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12174 }
12175 
12176 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12177     OMPAtomicDefaultMemOrderClause *C) {
12178   C->setAtomicDefaultMemOrderKind(
12179       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12180   C->setLParenLoc(Record.readSourceLocation());
12181   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12182 }
12183 
12184 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12185   C->setLParenLoc(Record.readSourceLocation());
12186   unsigned NumVars = C->varlist_size();
12187   SmallVector<Expr *, 16> Vars;
12188   Vars.reserve(NumVars);
12189   for (unsigned i = 0; i != NumVars; ++i)
12190     Vars.push_back(Record.readSubExpr());
12191   C->setVarRefs(Vars);
12192   Vars.clear();
12193   for (unsigned i = 0; i != NumVars; ++i)
12194     Vars.push_back(Record.readSubExpr());
12195   C->setPrivateCopies(Vars);
12196 }
12197 
12198 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12199   VisitOMPClauseWithPreInit(C);
12200   C->setLParenLoc(Record.readSourceLocation());
12201   unsigned NumVars = C->varlist_size();
12202   SmallVector<Expr *, 16> Vars;
12203   Vars.reserve(NumVars);
12204   for (unsigned i = 0; i != NumVars; ++i)
12205     Vars.push_back(Record.readSubExpr());
12206   C->setVarRefs(Vars);
12207   Vars.clear();
12208   for (unsigned i = 0; i != NumVars; ++i)
12209     Vars.push_back(Record.readSubExpr());
12210   C->setPrivateCopies(Vars);
12211   Vars.clear();
12212   for (unsigned i = 0; i != NumVars; ++i)
12213     Vars.push_back(Record.readSubExpr());
12214   C->setInits(Vars);
12215 }
12216 
12217 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12218   VisitOMPClauseWithPostUpdate(C);
12219   C->setLParenLoc(Record.readSourceLocation());
12220   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12221   C->setKindLoc(Record.readSourceLocation());
12222   C->setColonLoc(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->setSourceExprs(Vars);
12237   Vars.clear();
12238   for (unsigned i = 0; i != NumVars; ++i)
12239     Vars.push_back(Record.readSubExpr());
12240   C->setDestinationExprs(Vars);
12241   Vars.clear();
12242   for (unsigned i = 0; i != NumVars; ++i)
12243     Vars.push_back(Record.readSubExpr());
12244   C->setAssignmentOps(Vars);
12245 }
12246 
12247 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12248   C->setLParenLoc(Record.readSourceLocation());
12249   unsigned NumVars = C->varlist_size();
12250   SmallVector<Expr *, 16> Vars;
12251   Vars.reserve(NumVars);
12252   for (unsigned i = 0; i != NumVars; ++i)
12253     Vars.push_back(Record.readSubExpr());
12254   C->setVarRefs(Vars);
12255 }
12256 
12257 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12258   VisitOMPClauseWithPostUpdate(C);
12259   C->setLParenLoc(Record.readSourceLocation());
12260   C->setModifierLoc(Record.readSourceLocation());
12261   C->setColonLoc(Record.readSourceLocation());
12262   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12263   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12264   C->setQualifierLoc(NNSL);
12265   C->setNameInfo(DNI);
12266 
12267   unsigned NumVars = C->varlist_size();
12268   SmallVector<Expr *, 16> Vars;
12269   Vars.reserve(NumVars);
12270   for (unsigned i = 0; i != NumVars; ++i)
12271     Vars.push_back(Record.readSubExpr());
12272   C->setVarRefs(Vars);
12273   Vars.clear();
12274   for (unsigned i = 0; i != NumVars; ++i)
12275     Vars.push_back(Record.readSubExpr());
12276   C->setPrivates(Vars);
12277   Vars.clear();
12278   for (unsigned i = 0; i != NumVars; ++i)
12279     Vars.push_back(Record.readSubExpr());
12280   C->setLHSExprs(Vars);
12281   Vars.clear();
12282   for (unsigned i = 0; i != NumVars; ++i)
12283     Vars.push_back(Record.readSubExpr());
12284   C->setRHSExprs(Vars);
12285   Vars.clear();
12286   for (unsigned i = 0; i != NumVars; ++i)
12287     Vars.push_back(Record.readSubExpr());
12288   C->setReductionOps(Vars);
12289   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12290     Vars.clear();
12291     for (unsigned i = 0; i != NumVars; ++i)
12292       Vars.push_back(Record.readSubExpr());
12293     C->setInscanCopyOps(Vars);
12294     Vars.clear();
12295     for (unsigned i = 0; i != NumVars; ++i)
12296       Vars.push_back(Record.readSubExpr());
12297     C->setInscanCopyArrayTemps(Vars);
12298     Vars.clear();
12299     for (unsigned i = 0; i != NumVars; ++i)
12300       Vars.push_back(Record.readSubExpr());
12301     C->setInscanCopyArrayElems(Vars);
12302   }
12303 }
12304 
12305 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12306   VisitOMPClauseWithPostUpdate(C);
12307   C->setLParenLoc(Record.readSourceLocation());
12308   C->setColonLoc(Record.readSourceLocation());
12309   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12310   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12311   C->setQualifierLoc(NNSL);
12312   C->setNameInfo(DNI);
12313 
12314   unsigned NumVars = C->varlist_size();
12315   SmallVector<Expr *, 16> Vars;
12316   Vars.reserve(NumVars);
12317   for (unsigned I = 0; I != NumVars; ++I)
12318     Vars.push_back(Record.readSubExpr());
12319   C->setVarRefs(Vars);
12320   Vars.clear();
12321   for (unsigned I = 0; I != NumVars; ++I)
12322     Vars.push_back(Record.readSubExpr());
12323   C->setPrivates(Vars);
12324   Vars.clear();
12325   for (unsigned I = 0; I != NumVars; ++I)
12326     Vars.push_back(Record.readSubExpr());
12327   C->setLHSExprs(Vars);
12328   Vars.clear();
12329   for (unsigned I = 0; I != NumVars; ++I)
12330     Vars.push_back(Record.readSubExpr());
12331   C->setRHSExprs(Vars);
12332   Vars.clear();
12333   for (unsigned I = 0; I != NumVars; ++I)
12334     Vars.push_back(Record.readSubExpr());
12335   C->setReductionOps(Vars);
12336 }
12337 
12338 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12339   VisitOMPClauseWithPostUpdate(C);
12340   C->setLParenLoc(Record.readSourceLocation());
12341   C->setColonLoc(Record.readSourceLocation());
12342   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12343   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12344   C->setQualifierLoc(NNSL);
12345   C->setNameInfo(DNI);
12346 
12347   unsigned NumVars = C->varlist_size();
12348   SmallVector<Expr *, 16> Vars;
12349   Vars.reserve(NumVars);
12350   for (unsigned I = 0; I != NumVars; ++I)
12351     Vars.push_back(Record.readSubExpr());
12352   C->setVarRefs(Vars);
12353   Vars.clear();
12354   for (unsigned I = 0; I != NumVars; ++I)
12355     Vars.push_back(Record.readSubExpr());
12356   C->setPrivates(Vars);
12357   Vars.clear();
12358   for (unsigned I = 0; I != NumVars; ++I)
12359     Vars.push_back(Record.readSubExpr());
12360   C->setLHSExprs(Vars);
12361   Vars.clear();
12362   for (unsigned I = 0; I != NumVars; ++I)
12363     Vars.push_back(Record.readSubExpr());
12364   C->setRHSExprs(Vars);
12365   Vars.clear();
12366   for (unsigned I = 0; I != NumVars; ++I)
12367     Vars.push_back(Record.readSubExpr());
12368   C->setReductionOps(Vars);
12369   Vars.clear();
12370   for (unsigned I = 0; I != NumVars; ++I)
12371     Vars.push_back(Record.readSubExpr());
12372   C->setTaskgroupDescriptors(Vars);
12373 }
12374 
12375 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12376   VisitOMPClauseWithPostUpdate(C);
12377   C->setLParenLoc(Record.readSourceLocation());
12378   C->setColonLoc(Record.readSourceLocation());
12379   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12380   C->setModifierLoc(Record.readSourceLocation());
12381   unsigned NumVars = C->varlist_size();
12382   SmallVector<Expr *, 16> Vars;
12383   Vars.reserve(NumVars);
12384   for (unsigned i = 0; i != NumVars; ++i)
12385     Vars.push_back(Record.readSubExpr());
12386   C->setVarRefs(Vars);
12387   Vars.clear();
12388   for (unsigned i = 0; i != NumVars; ++i)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setPrivates(Vars);
12391   Vars.clear();
12392   for (unsigned i = 0; i != NumVars; ++i)
12393     Vars.push_back(Record.readSubExpr());
12394   C->setInits(Vars);
12395   Vars.clear();
12396   for (unsigned i = 0; i != NumVars; ++i)
12397     Vars.push_back(Record.readSubExpr());
12398   C->setUpdates(Vars);
12399   Vars.clear();
12400   for (unsigned i = 0; i != NumVars; ++i)
12401     Vars.push_back(Record.readSubExpr());
12402   C->setFinals(Vars);
12403   C->setStep(Record.readSubExpr());
12404   C->setCalcStep(Record.readSubExpr());
12405   Vars.clear();
12406   for (unsigned I = 0; I != NumVars + 1; ++I)
12407     Vars.push_back(Record.readSubExpr());
12408   C->setUsedExprs(Vars);
12409 }
12410 
12411 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12412   C->setLParenLoc(Record.readSourceLocation());
12413   C->setColonLoc(Record.readSourceLocation());
12414   unsigned NumVars = C->varlist_size();
12415   SmallVector<Expr *, 16> Vars;
12416   Vars.reserve(NumVars);
12417   for (unsigned i = 0; i != NumVars; ++i)
12418     Vars.push_back(Record.readSubExpr());
12419   C->setVarRefs(Vars);
12420   C->setAlignment(Record.readSubExpr());
12421 }
12422 
12423 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12424   C->setLParenLoc(Record.readSourceLocation());
12425   unsigned NumVars = C->varlist_size();
12426   SmallVector<Expr *, 16> Exprs;
12427   Exprs.reserve(NumVars);
12428   for (unsigned i = 0; i != NumVars; ++i)
12429     Exprs.push_back(Record.readSubExpr());
12430   C->setVarRefs(Exprs);
12431   Exprs.clear();
12432   for (unsigned i = 0; i != NumVars; ++i)
12433     Exprs.push_back(Record.readSubExpr());
12434   C->setSourceExprs(Exprs);
12435   Exprs.clear();
12436   for (unsigned i = 0; i != NumVars; ++i)
12437     Exprs.push_back(Record.readSubExpr());
12438   C->setDestinationExprs(Exprs);
12439   Exprs.clear();
12440   for (unsigned i = 0; i != NumVars; ++i)
12441     Exprs.push_back(Record.readSubExpr());
12442   C->setAssignmentOps(Exprs);
12443 }
12444 
12445 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *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::VisitOMPFlushClause(OMPFlushClause *C) {
12468   C->setLParenLoc(Record.readSourceLocation());
12469   unsigned NumVars = C->varlist_size();
12470   SmallVector<Expr *, 16> Vars;
12471   Vars.reserve(NumVars);
12472   for (unsigned i = 0; i != NumVars; ++i)
12473     Vars.push_back(Record.readSubExpr());
12474   C->setVarRefs(Vars);
12475 }
12476 
12477 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12478   C->setDepobj(Record.readSubExpr());
12479   C->setLParenLoc(Record.readSourceLocation());
12480 }
12481 
12482 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12483   C->setLParenLoc(Record.readSourceLocation());
12484   C->setModifier(Record.readSubExpr());
12485   C->setDependencyKind(
12486       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12487   C->setDependencyLoc(Record.readSourceLocation());
12488   C->setColonLoc(Record.readSourceLocation());
12489   unsigned NumVars = C->varlist_size();
12490   SmallVector<Expr *, 16> Vars;
12491   Vars.reserve(NumVars);
12492   for (unsigned I = 0; I != NumVars; ++I)
12493     Vars.push_back(Record.readSubExpr());
12494   C->setVarRefs(Vars);
12495   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12496     C->setLoopData(I, Record.readSubExpr());
12497 }
12498 
12499 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12500   VisitOMPClauseWithPreInit(C);
12501   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12502   C->setDevice(Record.readSubExpr());
12503   C->setModifierLoc(Record.readSourceLocation());
12504   C->setLParenLoc(Record.readSourceLocation());
12505 }
12506 
12507 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12508   C->setLParenLoc(Record.readSourceLocation());
12509   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12510     C->setMapTypeModifier(
12511         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12512     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12513   }
12514   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12515   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12516   C->setMapType(
12517      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12518   C->setMapLoc(Record.readSourceLocation());
12519   C->setColonLoc(Record.readSourceLocation());
12520   auto NumVars = C->varlist_size();
12521   auto UniqueDecls = C->getUniqueDeclarationsNum();
12522   auto TotalLists = C->getTotalComponentListNum();
12523   auto TotalComponents = C->getTotalComponentsNum();
12524 
12525   SmallVector<Expr *, 16> Vars;
12526   Vars.reserve(NumVars);
12527   for (unsigned i = 0; i != NumVars; ++i)
12528     Vars.push_back(Record.readExpr());
12529   C->setVarRefs(Vars);
12530 
12531   SmallVector<Expr *, 16> UDMappers;
12532   UDMappers.reserve(NumVars);
12533   for (unsigned I = 0; I < NumVars; ++I)
12534     UDMappers.push_back(Record.readExpr());
12535   C->setUDMapperRefs(UDMappers);
12536 
12537   SmallVector<ValueDecl *, 16> Decls;
12538   Decls.reserve(UniqueDecls);
12539   for (unsigned i = 0; i < UniqueDecls; ++i)
12540     Decls.push_back(Record.readDeclAs<ValueDecl>());
12541   C->setUniqueDecls(Decls);
12542 
12543   SmallVector<unsigned, 16> ListsPerDecl;
12544   ListsPerDecl.reserve(UniqueDecls);
12545   for (unsigned i = 0; i < UniqueDecls; ++i)
12546     ListsPerDecl.push_back(Record.readInt());
12547   C->setDeclNumLists(ListsPerDecl);
12548 
12549   SmallVector<unsigned, 32> ListSizes;
12550   ListSizes.reserve(TotalLists);
12551   for (unsigned i = 0; i < TotalLists; ++i)
12552     ListSizes.push_back(Record.readInt());
12553   C->setComponentListSizes(ListSizes);
12554 
12555   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12556   Components.reserve(TotalComponents);
12557   for (unsigned i = 0; i < TotalComponents; ++i) {
12558     Expr *AssociatedExprPr = Record.readExpr();
12559     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12560     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12561                             /*IsNonContiguous=*/false);
12562   }
12563   C->setComponents(Components, ListSizes);
12564 }
12565 
12566 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12567   C->setLParenLoc(Record.readSourceLocation());
12568   C->setColonLoc(Record.readSourceLocation());
12569   C->setAllocator(Record.readSubExpr());
12570   unsigned NumVars = C->varlist_size();
12571   SmallVector<Expr *, 16> Vars;
12572   Vars.reserve(NumVars);
12573   for (unsigned i = 0; i != NumVars; ++i)
12574     Vars.push_back(Record.readSubExpr());
12575   C->setVarRefs(Vars);
12576 }
12577 
12578 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12579   VisitOMPClauseWithPreInit(C);
12580   C->setNumTeams(Record.readSubExpr());
12581   C->setLParenLoc(Record.readSourceLocation());
12582 }
12583 
12584 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12585   VisitOMPClauseWithPreInit(C);
12586   C->setThreadLimit(Record.readSubExpr());
12587   C->setLParenLoc(Record.readSourceLocation());
12588 }
12589 
12590 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12591   VisitOMPClauseWithPreInit(C);
12592   C->setPriority(Record.readSubExpr());
12593   C->setLParenLoc(Record.readSourceLocation());
12594 }
12595 
12596 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12597   VisitOMPClauseWithPreInit(C);
12598   C->setGrainsize(Record.readSubExpr());
12599   C->setLParenLoc(Record.readSourceLocation());
12600 }
12601 
12602 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12603   VisitOMPClauseWithPreInit(C);
12604   C->setNumTasks(Record.readSubExpr());
12605   C->setLParenLoc(Record.readSourceLocation());
12606 }
12607 
12608 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12609   C->setHint(Record.readSubExpr());
12610   C->setLParenLoc(Record.readSourceLocation());
12611 }
12612 
12613 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12614   VisitOMPClauseWithPreInit(C);
12615   C->setDistScheduleKind(
12616       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12617   C->setChunkSize(Record.readSubExpr());
12618   C->setLParenLoc(Record.readSourceLocation());
12619   C->setDistScheduleKindLoc(Record.readSourceLocation());
12620   C->setCommaLoc(Record.readSourceLocation());
12621 }
12622 
12623 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12624   C->setDefaultmapKind(
12625        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12626   C->setDefaultmapModifier(
12627       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12628   C->setLParenLoc(Record.readSourceLocation());
12629   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12630   C->setDefaultmapKindLoc(Record.readSourceLocation());
12631 }
12632 
12633 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12634   C->setLParenLoc(Record.readSourceLocation());
12635   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12636     C->setMotionModifier(
12637         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12638     C->setMotionModifierLoc(I, Record.readSourceLocation());
12639   }
12640   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12641   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12642   C->setColonLoc(Record.readSourceLocation());
12643   auto NumVars = C->varlist_size();
12644   auto UniqueDecls = C->getUniqueDeclarationsNum();
12645   auto TotalLists = C->getTotalComponentListNum();
12646   auto TotalComponents = C->getTotalComponentsNum();
12647 
12648   SmallVector<Expr *, 16> Vars;
12649   Vars.reserve(NumVars);
12650   for (unsigned i = 0; i != NumVars; ++i)
12651     Vars.push_back(Record.readSubExpr());
12652   C->setVarRefs(Vars);
12653 
12654   SmallVector<Expr *, 16> UDMappers;
12655   UDMappers.reserve(NumVars);
12656   for (unsigned I = 0; I < NumVars; ++I)
12657     UDMappers.push_back(Record.readSubExpr());
12658   C->setUDMapperRefs(UDMappers);
12659 
12660   SmallVector<ValueDecl *, 16> Decls;
12661   Decls.reserve(UniqueDecls);
12662   for (unsigned i = 0; i < UniqueDecls; ++i)
12663     Decls.push_back(Record.readDeclAs<ValueDecl>());
12664   C->setUniqueDecls(Decls);
12665 
12666   SmallVector<unsigned, 16> ListsPerDecl;
12667   ListsPerDecl.reserve(UniqueDecls);
12668   for (unsigned i = 0; i < UniqueDecls; ++i)
12669     ListsPerDecl.push_back(Record.readInt());
12670   C->setDeclNumLists(ListsPerDecl);
12671 
12672   SmallVector<unsigned, 32> ListSizes;
12673   ListSizes.reserve(TotalLists);
12674   for (unsigned i = 0; i < TotalLists; ++i)
12675     ListSizes.push_back(Record.readInt());
12676   C->setComponentListSizes(ListSizes);
12677 
12678   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12679   Components.reserve(TotalComponents);
12680   for (unsigned i = 0; i < TotalComponents; ++i) {
12681     Expr *AssociatedExprPr = Record.readSubExpr();
12682     bool IsNonContiguous = Record.readBool();
12683     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12684     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12685   }
12686   C->setComponents(Components, ListSizes);
12687 }
12688 
12689 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12690   C->setLParenLoc(Record.readSourceLocation());
12691   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12692     C->setMotionModifier(
12693         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12694     C->setMotionModifierLoc(I, Record.readSourceLocation());
12695   }
12696   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12697   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12698   C->setColonLoc(Record.readSourceLocation());
12699   auto NumVars = C->varlist_size();
12700   auto UniqueDecls = C->getUniqueDeclarationsNum();
12701   auto TotalLists = C->getTotalComponentListNum();
12702   auto TotalComponents = C->getTotalComponentsNum();
12703 
12704   SmallVector<Expr *, 16> Vars;
12705   Vars.reserve(NumVars);
12706   for (unsigned i = 0; i != NumVars; ++i)
12707     Vars.push_back(Record.readSubExpr());
12708   C->setVarRefs(Vars);
12709 
12710   SmallVector<Expr *, 16> UDMappers;
12711   UDMappers.reserve(NumVars);
12712   for (unsigned I = 0; I < NumVars; ++I)
12713     UDMappers.push_back(Record.readSubExpr());
12714   C->setUDMapperRefs(UDMappers);
12715 
12716   SmallVector<ValueDecl *, 16> Decls;
12717   Decls.reserve(UniqueDecls);
12718   for (unsigned i = 0; i < UniqueDecls; ++i)
12719     Decls.push_back(Record.readDeclAs<ValueDecl>());
12720   C->setUniqueDecls(Decls);
12721 
12722   SmallVector<unsigned, 16> ListsPerDecl;
12723   ListsPerDecl.reserve(UniqueDecls);
12724   for (unsigned i = 0; i < UniqueDecls; ++i)
12725     ListsPerDecl.push_back(Record.readInt());
12726   C->setDeclNumLists(ListsPerDecl);
12727 
12728   SmallVector<unsigned, 32> ListSizes;
12729   ListSizes.reserve(TotalLists);
12730   for (unsigned i = 0; i < TotalLists; ++i)
12731     ListSizes.push_back(Record.readInt());
12732   C->setComponentListSizes(ListSizes);
12733 
12734   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12735   Components.reserve(TotalComponents);
12736   for (unsigned i = 0; i < TotalComponents; ++i) {
12737     Expr *AssociatedExprPr = Record.readSubExpr();
12738     bool IsNonContiguous = Record.readBool();
12739     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12740     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12741   }
12742   C->setComponents(Components, ListSizes);
12743 }
12744 
12745 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12746   C->setLParenLoc(Record.readSourceLocation());
12747   auto NumVars = C->varlist_size();
12748   auto UniqueDecls = C->getUniqueDeclarationsNum();
12749   auto TotalLists = C->getTotalComponentListNum();
12750   auto TotalComponents = C->getTotalComponentsNum();
12751 
12752   SmallVector<Expr *, 16> Vars;
12753   Vars.reserve(NumVars);
12754   for (unsigned i = 0; i != NumVars; ++i)
12755     Vars.push_back(Record.readSubExpr());
12756   C->setVarRefs(Vars);
12757   Vars.clear();
12758   for (unsigned i = 0; i != NumVars; ++i)
12759     Vars.push_back(Record.readSubExpr());
12760   C->setPrivateCopies(Vars);
12761   Vars.clear();
12762   for (unsigned i = 0; i != NumVars; ++i)
12763     Vars.push_back(Record.readSubExpr());
12764   C->setInits(Vars);
12765 
12766   SmallVector<ValueDecl *, 16> Decls;
12767   Decls.reserve(UniqueDecls);
12768   for (unsigned i = 0; i < UniqueDecls; ++i)
12769     Decls.push_back(Record.readDeclAs<ValueDecl>());
12770   C->setUniqueDecls(Decls);
12771 
12772   SmallVector<unsigned, 16> ListsPerDecl;
12773   ListsPerDecl.reserve(UniqueDecls);
12774   for (unsigned i = 0; i < UniqueDecls; ++i)
12775     ListsPerDecl.push_back(Record.readInt());
12776   C->setDeclNumLists(ListsPerDecl);
12777 
12778   SmallVector<unsigned, 32> ListSizes;
12779   ListSizes.reserve(TotalLists);
12780   for (unsigned i = 0; i < TotalLists; ++i)
12781     ListSizes.push_back(Record.readInt());
12782   C->setComponentListSizes(ListSizes);
12783 
12784   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12785   Components.reserve(TotalComponents);
12786   for (unsigned i = 0; i < TotalComponents; ++i) {
12787     auto *AssociatedExprPr = Record.readSubExpr();
12788     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12789     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12790                             /*IsNonContiguous=*/false);
12791   }
12792   C->setComponents(Components, ListSizes);
12793 }
12794 
12795 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12796   C->setLParenLoc(Record.readSourceLocation());
12797   auto NumVars = C->varlist_size();
12798   auto UniqueDecls = C->getUniqueDeclarationsNum();
12799   auto TotalLists = C->getTotalComponentListNum();
12800   auto TotalComponents = C->getTotalComponentsNum();
12801 
12802   SmallVector<Expr *, 16> Vars;
12803   Vars.reserve(NumVars);
12804   for (unsigned i = 0; i != NumVars; ++i)
12805     Vars.push_back(Record.readSubExpr());
12806   C->setVarRefs(Vars);
12807 
12808   SmallVector<ValueDecl *, 16> Decls;
12809   Decls.reserve(UniqueDecls);
12810   for (unsigned i = 0; i < UniqueDecls; ++i)
12811     Decls.push_back(Record.readDeclAs<ValueDecl>());
12812   C->setUniqueDecls(Decls);
12813 
12814   SmallVector<unsigned, 16> ListsPerDecl;
12815   ListsPerDecl.reserve(UniqueDecls);
12816   for (unsigned i = 0; i < UniqueDecls; ++i)
12817     ListsPerDecl.push_back(Record.readInt());
12818   C->setDeclNumLists(ListsPerDecl);
12819 
12820   SmallVector<unsigned, 32> ListSizes;
12821   ListSizes.reserve(TotalLists);
12822   for (unsigned i = 0; i < TotalLists; ++i)
12823     ListSizes.push_back(Record.readInt());
12824   C->setComponentListSizes(ListSizes);
12825 
12826   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12827   Components.reserve(TotalComponents);
12828   for (unsigned i = 0; i < TotalComponents; ++i) {
12829     Expr *AssociatedExpr = Record.readSubExpr();
12830     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12831     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12832                             /*IsNonContiguous*/ false);
12833   }
12834   C->setComponents(Components, ListSizes);
12835 }
12836 
12837 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12838   C->setLParenLoc(Record.readSourceLocation());
12839   auto NumVars = C->varlist_size();
12840   auto UniqueDecls = C->getUniqueDeclarationsNum();
12841   auto TotalLists = C->getTotalComponentListNum();
12842   auto TotalComponents = C->getTotalComponentsNum();
12843 
12844   SmallVector<Expr *, 16> Vars;
12845   Vars.reserve(NumVars);
12846   for (unsigned i = 0; i != NumVars; ++i)
12847     Vars.push_back(Record.readSubExpr());
12848   C->setVarRefs(Vars);
12849   Vars.clear();
12850 
12851   SmallVector<ValueDecl *, 16> Decls;
12852   Decls.reserve(UniqueDecls);
12853   for (unsigned i = 0; i < UniqueDecls; ++i)
12854     Decls.push_back(Record.readDeclAs<ValueDecl>());
12855   C->setUniqueDecls(Decls);
12856 
12857   SmallVector<unsigned, 16> ListsPerDecl;
12858   ListsPerDecl.reserve(UniqueDecls);
12859   for (unsigned i = 0; i < UniqueDecls; ++i)
12860     ListsPerDecl.push_back(Record.readInt());
12861   C->setDeclNumLists(ListsPerDecl);
12862 
12863   SmallVector<unsigned, 32> ListSizes;
12864   ListSizes.reserve(TotalLists);
12865   for (unsigned i = 0; i < TotalLists; ++i)
12866     ListSizes.push_back(Record.readInt());
12867   C->setComponentListSizes(ListSizes);
12868 
12869   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12870   Components.reserve(TotalComponents);
12871   for (unsigned i = 0; i < TotalComponents; ++i) {
12872     Expr *AssociatedExpr = Record.readSubExpr();
12873     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12874     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12875                             /*IsNonContiguous=*/false);
12876   }
12877   C->setComponents(Components, ListSizes);
12878 }
12879 
12880 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12881   C->setLParenLoc(Record.readSourceLocation());
12882   unsigned NumVars = C->varlist_size();
12883   SmallVector<Expr *, 16> Vars;
12884   Vars.reserve(NumVars);
12885   for (unsigned i = 0; i != NumVars; ++i)
12886     Vars.push_back(Record.readSubExpr());
12887   C->setVarRefs(Vars);
12888   Vars.clear();
12889   Vars.reserve(NumVars);
12890   for (unsigned i = 0; i != NumVars; ++i)
12891     Vars.push_back(Record.readSubExpr());
12892   C->setPrivateRefs(Vars);
12893 }
12894 
12895 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12896   C->setLParenLoc(Record.readSourceLocation());
12897   unsigned NumVars = C->varlist_size();
12898   SmallVector<Expr *, 16> Vars;
12899   Vars.reserve(NumVars);
12900   for (unsigned i = 0; i != NumVars; ++i)
12901     Vars.push_back(Record.readSubExpr());
12902   C->setVarRefs(Vars);
12903 }
12904 
12905 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12906   C->setLParenLoc(Record.readSourceLocation());
12907   unsigned NumVars = C->varlist_size();
12908   SmallVector<Expr *, 16> Vars;
12909   Vars.reserve(NumVars);
12910   for (unsigned i = 0; i != NumVars; ++i)
12911     Vars.push_back(Record.readSubExpr());
12912   C->setVarRefs(Vars);
12913 }
12914 
12915 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12916   C->setLParenLoc(Record.readSourceLocation());
12917   unsigned NumOfAllocators = C->getNumberOfAllocators();
12918   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12919   Data.reserve(NumOfAllocators);
12920   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12921     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12922     D.Allocator = Record.readSubExpr();
12923     D.AllocatorTraits = Record.readSubExpr();
12924     D.LParenLoc = Record.readSourceLocation();
12925     D.RParenLoc = Record.readSourceLocation();
12926   }
12927   C->setAllocatorsData(Data);
12928 }
12929 
12930 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12931   C->setLParenLoc(Record.readSourceLocation());
12932   C->setModifier(Record.readSubExpr());
12933   C->setColonLoc(Record.readSourceLocation());
12934   unsigned NumOfLocators = C->varlist_size();
12935   SmallVector<Expr *, 4> Locators;
12936   Locators.reserve(NumOfLocators);
12937   for (unsigned I = 0; I != NumOfLocators; ++I)
12938     Locators.push_back(Record.readSubExpr());
12939   C->setVarRefs(Locators);
12940 }
12941 
12942 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12943   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12944   C->setLParenLoc(Record.readSourceLocation());
12945   C->setKindKwLoc(Record.readSourceLocation());
12946 }
12947 
12948 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12949   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12950   TI.Sets.resize(readUInt32());
12951   for (auto &Set : TI.Sets) {
12952     Set.Kind = readEnum<llvm::omp::TraitSet>();
12953     Set.Selectors.resize(readUInt32());
12954     for (auto &Selector : Set.Selectors) {
12955       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12956       Selector.ScoreOrCondition = nullptr;
12957       if (readBool())
12958         Selector.ScoreOrCondition = readExprRef();
12959       Selector.Properties.resize(readUInt32());
12960       for (auto &Property : Selector.Properties)
12961         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12962     }
12963   }
12964   return &TI;
12965 }
12966 
12967 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
12968   if (!Data)
12969     return;
12970   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
12971     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
12972     skipInts(3);
12973   }
12974   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
12975   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
12976     Clauses[I] = readOMPClause();
12977   Data->setClauses(Clauses);
12978   if (Data->hasAssociatedStmt())
12979     Data->setAssociatedStmt(readStmt());
12980   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
12981     Data->getChildren()[I] = readStmt();
12982 }
12983