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