1 //===- ASTReader.cpp - AST File Reader ------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file defines the ASTReader class, which reads AST files.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "clang/Basic/OpenMPKinds.h"
14 #include "clang/Serialization/ASTRecordReader.h"
15 #include "ASTCommon.h"
16 #include "ASTReaderInternals.h"
17 #include "clang/AST/AbstractTypeReader.h"
18 #include "clang/AST/ASTConsumer.h"
19 #include "clang/AST/ASTContext.h"
20 #include "clang/AST/ASTMutationListener.h"
21 #include "clang/AST/ASTUnresolvedSet.h"
22 #include "clang/AST/Decl.h"
23 #include "clang/AST/DeclBase.h"
24 #include "clang/AST/DeclCXX.h"
25 #include "clang/AST/DeclFriend.h"
26 #include "clang/AST/DeclGroup.h"
27 #include "clang/AST/DeclObjC.h"
28 #include "clang/AST/DeclTemplate.h"
29 #include "clang/AST/DeclarationName.h"
30 #include "clang/AST/Expr.h"
31 #include "clang/AST/ExprCXX.h"
32 #include "clang/AST/ExternalASTSource.h"
33 #include "clang/AST/NestedNameSpecifier.h"
34 #include "clang/AST/OpenMPClause.h"
35 #include "clang/AST/ODRHash.h"
36 #include "clang/AST/RawCommentList.h"
37 #include "clang/AST/TemplateBase.h"
38 #include "clang/AST/TemplateName.h"
39 #include "clang/AST/Type.h"
40 #include "clang/AST/TypeLoc.h"
41 #include "clang/AST/TypeLocVisitor.h"
42 #include "clang/AST/UnresolvedSet.h"
43 #include "clang/Basic/CommentOptions.h"
44 #include "clang/Basic/Diagnostic.h"
45 #include "clang/Basic/DiagnosticOptions.h"
46 #include "clang/Basic/ExceptionSpecificationType.h"
47 #include "clang/Basic/FileManager.h"
48 #include "clang/Basic/FileSystemOptions.h"
49 #include "clang/Basic/IdentifierTable.h"
50 #include "clang/Basic/LLVM.h"
51 #include "clang/Basic/LangOptions.h"
52 #include "clang/Basic/Module.h"
53 #include "clang/Basic/ObjCRuntime.h"
54 #include "clang/Basic/OperatorKinds.h"
55 #include "clang/Basic/PragmaKinds.h"
56 #include "clang/Basic/Sanitizers.h"
57 #include "clang/Basic/SourceLocation.h"
58 #include "clang/Basic/SourceManager.h"
59 #include "clang/Basic/SourceManagerInternals.h"
60 #include "clang/Basic/Specifiers.h"
61 #include "clang/Basic/TargetInfo.h"
62 #include "clang/Basic/TargetOptions.h"
63 #include "clang/Basic/TokenKinds.h"
64 #include "clang/Basic/Version.h"
65 #include "clang/Lex/HeaderSearch.h"
66 #include "clang/Lex/HeaderSearchOptions.h"
67 #include "clang/Lex/MacroInfo.h"
68 #include "clang/Lex/ModuleMap.h"
69 #include "clang/Lex/PreprocessingRecord.h"
70 #include "clang/Lex/Preprocessor.h"
71 #include "clang/Lex/PreprocessorOptions.h"
72 #include "clang/Lex/Token.h"
73 #include "clang/Sema/ObjCMethodList.h"
74 #include "clang/Sema/Scope.h"
75 #include "clang/Sema/Sema.h"
76 #include "clang/Sema/Weak.h"
77 #include "clang/Serialization/ASTBitCodes.h"
78 #include "clang/Serialization/ASTDeserializationListener.h"
79 #include "clang/Serialization/ContinuousRangeMap.h"
80 #include "clang/Serialization/GlobalModuleIndex.h"
81 #include "clang/Serialization/InMemoryModuleCache.h"
82 #include "clang/Serialization/ModuleFile.h"
83 #include "clang/Serialization/ModuleFileExtension.h"
84 #include "clang/Serialization/ModuleManager.h"
85 #include "clang/Serialization/PCHContainerOperations.h"
86 #include "clang/Serialization/SerializationDiagnostic.h"
87 #include "llvm/ADT/APFloat.h"
88 #include "llvm/ADT/APInt.h"
89 #include "llvm/ADT/APSInt.h"
90 #include "llvm/ADT/ArrayRef.h"
91 #include "llvm/ADT/DenseMap.h"
92 #include "llvm/ADT/FloatingPointMode.h"
93 #include "llvm/ADT/FoldingSet.h"
94 #include "llvm/ADT/Hashing.h"
95 #include "llvm/ADT/IntrusiveRefCntPtr.h"
96 #include "llvm/ADT/None.h"
97 #include "llvm/ADT/Optional.h"
98 #include "llvm/ADT/STLExtras.h"
99 #include "llvm/ADT/ScopeExit.h"
100 #include "llvm/ADT/SmallPtrSet.h"
101 #include "llvm/ADT/SmallString.h"
102 #include "llvm/ADT/SmallVector.h"
103 #include "llvm/ADT/StringExtras.h"
104 #include "llvm/ADT/StringMap.h"
105 #include "llvm/ADT/StringRef.h"
106 #include "llvm/ADT/Triple.h"
107 #include "llvm/ADT/iterator_range.h"
108 #include "llvm/Bitstream/BitstreamReader.h"
109 #include "llvm/Support/Casting.h"
110 #include "llvm/Support/Compiler.h"
111 #include "llvm/Support/Compression.h"
112 #include "llvm/Support/DJB.h"
113 #include "llvm/Support/Endian.h"
114 #include "llvm/Support/Error.h"
115 #include "llvm/Support/ErrorHandling.h"
116 #include "llvm/Support/FileSystem.h"
117 #include "llvm/Support/LEB128.h"
118 #include "llvm/Support/MemoryBuffer.h"
119 #include "llvm/Support/Path.h"
120 #include "llvm/Support/SaveAndRestore.h"
121 #include "llvm/Support/Timer.h"
122 #include "llvm/Support/VersionTuple.h"
123 #include "llvm/Support/raw_ostream.h"
124 #include <algorithm>
125 #include <cassert>
126 #include <cstddef>
127 #include <cstdint>
128 #include <cstdio>
129 #include <ctime>
130 #include <iterator>
131 #include <limits>
132 #include <map>
133 #include <memory>
134 #include <string>
135 #include <system_error>
136 #include <tuple>
137 #include <utility>
138 #include <vector>
139 
140 using namespace clang;
141 using namespace clang::serialization;
142 using namespace clang::serialization::reader;
143 using llvm::BitstreamCursor;
144 using llvm::RoundingMode;
145 
146 //===----------------------------------------------------------------------===//
147 // ChainedASTReaderListener implementation
148 //===----------------------------------------------------------------------===//
149 
150 bool
151 ChainedASTReaderListener::ReadFullVersionInformation(StringRef FullVersion) {
152   return First->ReadFullVersionInformation(FullVersion) ||
153          Second->ReadFullVersionInformation(FullVersion);
154 }
155 
156 void ChainedASTReaderListener::ReadModuleName(StringRef ModuleName) {
157   First->ReadModuleName(ModuleName);
158   Second->ReadModuleName(ModuleName);
159 }
160 
161 void ChainedASTReaderListener::ReadModuleMapFile(StringRef ModuleMapPath) {
162   First->ReadModuleMapFile(ModuleMapPath);
163   Second->ReadModuleMapFile(ModuleMapPath);
164 }
165 
166 bool
167 ChainedASTReaderListener::ReadLanguageOptions(const LangOptions &LangOpts,
168                                               bool Complain,
169                                               bool AllowCompatibleDifferences) {
170   return First->ReadLanguageOptions(LangOpts, Complain,
171                                     AllowCompatibleDifferences) ||
172          Second->ReadLanguageOptions(LangOpts, Complain,
173                                      AllowCompatibleDifferences);
174 }
175 
176 bool ChainedASTReaderListener::ReadTargetOptions(
177     const TargetOptions &TargetOpts, bool Complain,
178     bool AllowCompatibleDifferences) {
179   return First->ReadTargetOptions(TargetOpts, Complain,
180                                   AllowCompatibleDifferences) ||
181          Second->ReadTargetOptions(TargetOpts, Complain,
182                                    AllowCompatibleDifferences);
183 }
184 
185 bool ChainedASTReaderListener::ReadDiagnosticOptions(
186     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
187   return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
188          Second->ReadDiagnosticOptions(DiagOpts, Complain);
189 }
190 
191 bool
192 ChainedASTReaderListener::ReadFileSystemOptions(const FileSystemOptions &FSOpts,
193                                                 bool Complain) {
194   return First->ReadFileSystemOptions(FSOpts, Complain) ||
195          Second->ReadFileSystemOptions(FSOpts, Complain);
196 }
197 
198 bool ChainedASTReaderListener::ReadHeaderSearchOptions(
199     const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath,
200     bool Complain) {
201   return First->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
202                                         Complain) ||
203          Second->ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
204                                          Complain);
205 }
206 
207 bool ChainedASTReaderListener::ReadPreprocessorOptions(
208     const PreprocessorOptions &PPOpts, bool Complain,
209     std::string &SuggestedPredefines) {
210   return First->ReadPreprocessorOptions(PPOpts, Complain,
211                                         SuggestedPredefines) ||
212          Second->ReadPreprocessorOptions(PPOpts, Complain, SuggestedPredefines);
213 }
214 
215 void ChainedASTReaderListener::ReadCounter(const serialization::ModuleFile &M,
216                                            unsigned Value) {
217   First->ReadCounter(M, Value);
218   Second->ReadCounter(M, Value);
219 }
220 
221 bool ChainedASTReaderListener::needsInputFileVisitation() {
222   return First->needsInputFileVisitation() ||
223          Second->needsInputFileVisitation();
224 }
225 
226 bool ChainedASTReaderListener::needsSystemInputFileVisitation() {
227   return First->needsSystemInputFileVisitation() ||
228   Second->needsSystemInputFileVisitation();
229 }
230 
231 void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
232                                                ModuleKind Kind) {
233   First->visitModuleFile(Filename, Kind);
234   Second->visitModuleFile(Filename, Kind);
235 }
236 
237 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
238                                               bool isSystem,
239                                               bool isOverridden,
240                                               bool isExplicitModule) {
241   bool Continue = false;
242   if (First->needsInputFileVisitation() &&
243       (!isSystem || First->needsSystemInputFileVisitation()))
244     Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
245                                       isExplicitModule);
246   if (Second->needsInputFileVisitation() &&
247       (!isSystem || Second->needsSystemInputFileVisitation()))
248     Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
249                                        isExplicitModule);
250   return Continue;
251 }
252 
253 void ChainedASTReaderListener::readModuleFileExtension(
254        const ModuleFileExtensionMetadata &Metadata) {
255   First->readModuleFileExtension(Metadata);
256   Second->readModuleFileExtension(Metadata);
257 }
258 
259 //===----------------------------------------------------------------------===//
260 // PCH validator implementation
261 //===----------------------------------------------------------------------===//
262 
263 ASTReaderListener::~ASTReaderListener() = default;
264 
265 /// Compare the given set of language options against an existing set of
266 /// language options.
267 ///
268 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
269 /// \param AllowCompatibleDifferences If true, differences between compatible
270 ///        language options will be permitted.
271 ///
272 /// \returns true if the languagae options mis-match, false otherwise.
273 static bool checkLanguageOptions(const LangOptions &LangOpts,
274                                  const LangOptions &ExistingLangOpts,
275                                  DiagnosticsEngine *Diags,
276                                  bool AllowCompatibleDifferences = true) {
277 #define LANGOPT(Name, Bits, Default, Description)                 \
278   if (ExistingLangOpts.Name != LangOpts.Name) {                   \
279     if (Diags)                                                    \
280       Diags->Report(diag::err_pch_langopt_mismatch)               \
281         << Description << LangOpts.Name << ExistingLangOpts.Name; \
282     return true;                                                  \
283   }
284 
285 #define VALUE_LANGOPT(Name, Bits, Default, Description)   \
286   if (ExistingLangOpts.Name != LangOpts.Name) {           \
287     if (Diags)                                            \
288       Diags->Report(diag::err_pch_langopt_value_mismatch) \
289         << Description;                                   \
290     return true;                                          \
291   }
292 
293 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description)   \
294   if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) {  \
295     if (Diags)                                                 \
296       Diags->Report(diag::err_pch_langopt_value_mismatch)      \
297         << Description;                                        \
298     return true;                                               \
299   }
300 
301 #define COMPATIBLE_LANGOPT(Name, Bits, Default, Description)  \
302   if (!AllowCompatibleDifferences)                            \
303     LANGOPT(Name, Bits, Default, Description)
304 
305 #define COMPATIBLE_ENUM_LANGOPT(Name, Bits, Default, Description)  \
306   if (!AllowCompatibleDifferences)                                 \
307     ENUM_LANGOPT(Name, Bits, Default, Description)
308 
309 #define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
310   if (!AllowCompatibleDifferences)                                 \
311     VALUE_LANGOPT(Name, Bits, Default, Description)
312 
313 #define BENIGN_LANGOPT(Name, Bits, Default, Description)
314 #define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
315 #define BENIGN_VALUE_LANGOPT(Name, Type, Bits, Default, Description)
316 #include "clang/Basic/LangOptions.def"
317 
318   if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {
319     if (Diags)
320       Diags->Report(diag::err_pch_langopt_value_mismatch) << "module features";
321     return true;
322   }
323 
324   if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {
325     if (Diags)
326       Diags->Report(diag::err_pch_langopt_value_mismatch)
327       << "target Objective-C runtime";
328     return true;
329   }
330 
331   if (ExistingLangOpts.CommentOpts.BlockCommandNames !=
332       LangOpts.CommentOpts.BlockCommandNames) {
333     if (Diags)
334       Diags->Report(diag::err_pch_langopt_value_mismatch)
335         << "block command names";
336     return true;
337   }
338 
339   // Sanitizer feature mismatches are treated as compatible differences. If
340   // compatible differences aren't allowed, we still only want to check for
341   // mismatches of non-modular sanitizers (the only ones which can affect AST
342   // generation).
343   if (!AllowCompatibleDifferences) {
344     SanitizerMask ModularSanitizers = getPPTransparentSanitizers();
345     SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize;
346     SanitizerSet ImportedSanitizers = LangOpts.Sanitize;
347     ExistingSanitizers.clear(ModularSanitizers);
348     ImportedSanitizers.clear(ModularSanitizers);
349     if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) {
350       const std::string Flag = "-fsanitize=";
351       if (Diags) {
352 #define SANITIZER(NAME, ID)                                                    \
353   {                                                                            \
354     bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \
355     bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \
356     if (InExistingModule != InImportedModule)                                  \
357       Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \
358           << InExistingModule << (Flag + NAME);                                \
359   }
360 #include "clang/Basic/Sanitizers.def"
361       }
362       return true;
363     }
364   }
365 
366   return false;
367 }
368 
369 /// Compare the given set of target options against an existing set of
370 /// target options.
371 ///
372 /// \param Diags If non-NULL, diagnostics will be emitted via this engine.
373 ///
374 /// \returns true if the target options mis-match, false otherwise.
375 static bool checkTargetOptions(const TargetOptions &TargetOpts,
376                                const TargetOptions &ExistingTargetOpts,
377                                DiagnosticsEngine *Diags,
378                                bool AllowCompatibleDifferences = true) {
379 #define CHECK_TARGET_OPT(Field, Name)                             \
380   if (TargetOpts.Field != ExistingTargetOpts.Field) {             \
381     if (Diags)                                                    \
382       Diags->Report(diag::err_pch_targetopt_mismatch)             \
383         << Name << TargetOpts.Field << ExistingTargetOpts.Field;  \
384     return true;                                                  \
385   }
386 
387   // The triple and ABI must match exactly.
388   CHECK_TARGET_OPT(Triple, "target");
389   CHECK_TARGET_OPT(ABI, "target ABI");
390 
391   // We can tolerate different CPUs in many cases, notably when one CPU
392   // supports a strict superset of another. When allowing compatible
393   // differences skip this check.
394   if (!AllowCompatibleDifferences) {
395     CHECK_TARGET_OPT(CPU, "target CPU");
396     CHECK_TARGET_OPT(TuneCPU, "tune CPU");
397   }
398 
399 #undef CHECK_TARGET_OPT
400 
401   // Compare feature sets.
402   SmallVector<StringRef, 4> ExistingFeatures(
403                                              ExistingTargetOpts.FeaturesAsWritten.begin(),
404                                              ExistingTargetOpts.FeaturesAsWritten.end());
405   SmallVector<StringRef, 4> ReadFeatures(TargetOpts.FeaturesAsWritten.begin(),
406                                          TargetOpts.FeaturesAsWritten.end());
407   llvm::sort(ExistingFeatures);
408   llvm::sort(ReadFeatures);
409 
410   // We compute the set difference in both directions explicitly so that we can
411   // diagnose the differences differently.
412   SmallVector<StringRef, 4> UnmatchedExistingFeatures, UnmatchedReadFeatures;
413   std::set_difference(
414       ExistingFeatures.begin(), ExistingFeatures.end(), ReadFeatures.begin(),
415       ReadFeatures.end(), std::back_inserter(UnmatchedExistingFeatures));
416   std::set_difference(ReadFeatures.begin(), ReadFeatures.end(),
417                       ExistingFeatures.begin(), ExistingFeatures.end(),
418                       std::back_inserter(UnmatchedReadFeatures));
419 
420   // If we are allowing compatible differences and the read feature set is
421   // a strict subset of the existing feature set, there is nothing to diagnose.
422   if (AllowCompatibleDifferences && UnmatchedReadFeatures.empty())
423     return false;
424 
425   if (Diags) {
426     for (StringRef Feature : UnmatchedReadFeatures)
427       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
428           << /* is-existing-feature */ false << Feature;
429     for (StringRef Feature : UnmatchedExistingFeatures)
430       Diags->Report(diag::err_pch_targetopt_feature_mismatch)
431           << /* is-existing-feature */ true << Feature;
432   }
433 
434   return !UnmatchedReadFeatures.empty() || !UnmatchedExistingFeatures.empty();
435 }
436 
437 bool
438 PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts,
439                                   bool Complain,
440                                   bool AllowCompatibleDifferences) {
441   const LangOptions &ExistingLangOpts = PP.getLangOpts();
442   return checkLanguageOptions(LangOpts, ExistingLangOpts,
443                               Complain ? &Reader.Diags : nullptr,
444                               AllowCompatibleDifferences);
445 }
446 
447 bool PCHValidator::ReadTargetOptions(const TargetOptions &TargetOpts,
448                                      bool Complain,
449                                      bool AllowCompatibleDifferences) {
450   const TargetOptions &ExistingTargetOpts = PP.getTargetInfo().getTargetOpts();
451   return checkTargetOptions(TargetOpts, ExistingTargetOpts,
452                             Complain ? &Reader.Diags : nullptr,
453                             AllowCompatibleDifferences);
454 }
455 
456 namespace {
457 
458 using MacroDefinitionsMap =
459     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>;
460 using DeclsMap = llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8>>;
461 
462 } // namespace
463 
464 static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
465                                          DiagnosticsEngine &Diags,
466                                          bool Complain) {
467   using Level = DiagnosticsEngine::Level;
468 
469   // Check current mappings for new -Werror mappings, and the stored mappings
470   // for cases that were explicitly mapped to *not* be errors that are now
471   // errors because of options like -Werror.
472   DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
473 
474   for (DiagnosticsEngine *MappingSource : MappingSources) {
475     for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
476       diag::kind DiagID = DiagIDMappingPair.first;
477       Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
478       if (CurLevel < DiagnosticsEngine::Error)
479         continue; // not significant
480       Level StoredLevel =
481           StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
482       if (StoredLevel < DiagnosticsEngine::Error) {
483         if (Complain)
484           Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
485               Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
486         return true;
487       }
488     }
489   }
490 
491   return false;
492 }
493 
494 static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
495   diag::Severity Ext = Diags.getExtensionHandlingBehavior();
496   if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors())
497     return true;
498   return Ext >= diag::Severity::Error;
499 }
500 
501 static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
502                                     DiagnosticsEngine &Diags,
503                                     bool IsSystem, bool Complain) {
504   // Top-level options
505   if (IsSystem) {
506     if (Diags.getSuppressSystemWarnings())
507       return false;
508     // If -Wsystem-headers was not enabled before, be conservative
509     if (StoredDiags.getSuppressSystemWarnings()) {
510       if (Complain)
511         Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
512       return true;
513     }
514   }
515 
516   if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
517     if (Complain)
518       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
519     return true;
520   }
521 
522   if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
523       !StoredDiags.getEnableAllWarnings()) {
524     if (Complain)
525       Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
526     return true;
527   }
528 
529   if (isExtHandlingFromDiagsError(Diags) &&
530       !isExtHandlingFromDiagsError(StoredDiags)) {
531     if (Complain)
532       Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
533     return true;
534   }
535 
536   return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
537 }
538 
539 /// Return the top import module if it is implicit, nullptr otherwise.
540 static Module *getTopImportImplicitModule(ModuleManager &ModuleMgr,
541                                           Preprocessor &PP) {
542   // If the original import came from a file explicitly generated by the user,
543   // don't check the diagnostic mappings.
544   // FIXME: currently this is approximated by checking whether this is not a
545   // module import of an implicitly-loaded module file.
546   // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
547   // the transitive closure of its imports, since unrelated modules cannot be
548   // imported until after this module finishes validation.
549   ModuleFile *TopImport = &*ModuleMgr.rbegin();
550   while (!TopImport->ImportedBy.empty())
551     TopImport = TopImport->ImportedBy[0];
552   if (TopImport->Kind != MK_ImplicitModule)
553     return nullptr;
554 
555   StringRef ModuleName = TopImport->ModuleName;
556   assert(!ModuleName.empty() && "diagnostic options read before module name");
557 
558   Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName);
559   assert(M && "missing module");
560   return M;
561 }
562 
563 bool PCHValidator::ReadDiagnosticOptions(
564     IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
565   DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
566   IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
567   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
568       new DiagnosticsEngine(DiagIDs, DiagOpts.get()));
569   // This should never fail, because we would have processed these options
570   // before writing them to an ASTFile.
571   ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
572 
573   ModuleManager &ModuleMgr = Reader.getModuleManager();
574   assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
575 
576   Module *TopM = getTopImportImplicitModule(ModuleMgr, PP);
577   if (!TopM)
578     return false;
579 
580   // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
581   // contains the union of their flags.
582   return checkDiagnosticMappings(*Diags, ExistingDiags, TopM->IsSystem,
583                                  Complain);
584 }
585 
586 /// Collect the macro definitions provided by the given preprocessor
587 /// options.
588 static void
589 collectMacroDefinitions(const PreprocessorOptions &PPOpts,
590                         MacroDefinitionsMap &Macros,
591                         SmallVectorImpl<StringRef> *MacroNames = nullptr) {
592   for (unsigned I = 0, N = PPOpts.Macros.size(); I != N; ++I) {
593     StringRef Macro = PPOpts.Macros[I].first;
594     bool IsUndef = PPOpts.Macros[I].second;
595 
596     std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
597     StringRef MacroName = MacroPair.first;
598     StringRef MacroBody = MacroPair.second;
599 
600     // For an #undef'd macro, we only care about the name.
601     if (IsUndef) {
602       if (MacroNames && !Macros.count(MacroName))
603         MacroNames->push_back(MacroName);
604 
605       Macros[MacroName] = std::make_pair("", true);
606       continue;
607     }
608 
609     // For a #define'd macro, figure out the actual definition.
610     if (MacroName.size() == Macro.size())
611       MacroBody = "1";
612     else {
613       // Note: GCC drops anything following an end-of-line character.
614       StringRef::size_type End = MacroBody.find_first_of("\n\r");
615       MacroBody = MacroBody.substr(0, End);
616     }
617 
618     if (MacroNames && !Macros.count(MacroName))
619       MacroNames->push_back(MacroName);
620     Macros[MacroName] = std::make_pair(MacroBody, false);
621   }
622 }
623 
624 /// Check the preprocessor options deserialized from the control block
625 /// against the preprocessor options in an existing preprocessor.
626 ///
627 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
628 /// \param Validate If true, validate preprocessor options. If false, allow
629 ///        macros defined by \p ExistingPPOpts to override those defined by
630 ///        \p PPOpts in SuggestedPredefines.
631 static bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts,
632                                      const PreprocessorOptions &ExistingPPOpts,
633                                      DiagnosticsEngine *Diags,
634                                      FileManager &FileMgr,
635                                      std::string &SuggestedPredefines,
636                                      const LangOptions &LangOpts,
637                                      bool Validate = true) {
638   // Check macro definitions.
639   MacroDefinitionsMap ASTFileMacros;
640   collectMacroDefinitions(PPOpts, ASTFileMacros);
641   MacroDefinitionsMap ExistingMacros;
642   SmallVector<StringRef, 4> ExistingMacroNames;
643   collectMacroDefinitions(ExistingPPOpts, ExistingMacros, &ExistingMacroNames);
644 
645   for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {
646     // Dig out the macro definition in the existing preprocessor options.
647     StringRef MacroName = ExistingMacroNames[I];
648     std::pair<StringRef, bool> Existing = ExistingMacros[MacroName];
649 
650     // Check whether we know anything about this macro name or not.
651     llvm::StringMap<std::pair<StringRef, bool /*IsUndef*/>>::iterator Known =
652         ASTFileMacros.find(MacroName);
653     if (!Validate || Known == ASTFileMacros.end()) {
654       // FIXME: Check whether this identifier was referenced anywhere in the
655       // AST file. If so, we should reject the AST file. Unfortunately, this
656       // information isn't in the control block. What shall we do about it?
657 
658       if (Existing.second) {
659         SuggestedPredefines += "#undef ";
660         SuggestedPredefines += MacroName.str();
661         SuggestedPredefines += '\n';
662       } else {
663         SuggestedPredefines += "#define ";
664         SuggestedPredefines += MacroName.str();
665         SuggestedPredefines += ' ';
666         SuggestedPredefines += Existing.first.str();
667         SuggestedPredefines += '\n';
668       }
669       continue;
670     }
671 
672     // If the macro was defined in one but undef'd in the other, we have a
673     // conflict.
674     if (Existing.second != Known->second.second) {
675       if (Diags) {
676         Diags->Report(diag::err_pch_macro_def_undef)
677           << MacroName << Known->second.second;
678       }
679       return true;
680     }
681 
682     // If the macro was #undef'd in both, or if the macro bodies are identical,
683     // it's fine.
684     if (Existing.second || Existing.first == Known->second.first)
685       continue;
686 
687     // The macro bodies differ; complain.
688     if (Diags) {
689       Diags->Report(diag::err_pch_macro_def_conflict)
690         << MacroName << Known->second.first << Existing.first;
691     }
692     return true;
693   }
694 
695   // Check whether we're using predefines.
696   if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validate) {
697     if (Diags) {
698       Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;
699     }
700     return true;
701   }
702 
703   // Detailed record is important since it is used for the module cache hash.
704   if (LangOpts.Modules &&
705       PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validate) {
706     if (Diags) {
707       Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;
708     }
709     return true;
710   }
711 
712   // Compute the #include and #include_macros lines we need.
713   for (unsigned I = 0, N = ExistingPPOpts.Includes.size(); I != N; ++I) {
714     StringRef File = ExistingPPOpts.Includes[I];
715 
716     if (!ExistingPPOpts.ImplicitPCHInclude.empty() &&
717         !ExistingPPOpts.PCHThroughHeader.empty()) {
718       // In case the through header is an include, we must add all the includes
719       // to the predefines so the start point can be determined.
720       SuggestedPredefines += "#include \"";
721       SuggestedPredefines += File;
722       SuggestedPredefines += "\"\n";
723       continue;
724     }
725 
726     if (File == ExistingPPOpts.ImplicitPCHInclude)
727       continue;
728 
729     if (std::find(PPOpts.Includes.begin(), PPOpts.Includes.end(), File)
730           != PPOpts.Includes.end())
731       continue;
732 
733     SuggestedPredefines += "#include \"";
734     SuggestedPredefines += File;
735     SuggestedPredefines += "\"\n";
736   }
737 
738   for (unsigned I = 0, N = ExistingPPOpts.MacroIncludes.size(); I != N; ++I) {
739     StringRef File = ExistingPPOpts.MacroIncludes[I];
740     if (std::find(PPOpts.MacroIncludes.begin(), PPOpts.MacroIncludes.end(),
741                   File)
742         != PPOpts.MacroIncludes.end())
743       continue;
744 
745     SuggestedPredefines += "#__include_macros \"";
746     SuggestedPredefines += File;
747     SuggestedPredefines += "\"\n##\n";
748   }
749 
750   return false;
751 }
752 
753 bool PCHValidator::ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
754                                            bool Complain,
755                                            std::string &SuggestedPredefines) {
756   const PreprocessorOptions &ExistingPPOpts = PP.getPreprocessorOpts();
757 
758   return checkPreprocessorOptions(PPOpts, ExistingPPOpts,
759                                   Complain? &Reader.Diags : nullptr,
760                                   PP.getFileManager(),
761                                   SuggestedPredefines,
762                                   PP.getLangOpts());
763 }
764 
765 bool SimpleASTReaderListener::ReadPreprocessorOptions(
766                                   const PreprocessorOptions &PPOpts,
767                                   bool Complain,
768                                   std::string &SuggestedPredefines) {
769   return checkPreprocessorOptions(PPOpts,
770                                   PP.getPreprocessorOpts(),
771                                   nullptr,
772                                   PP.getFileManager(),
773                                   SuggestedPredefines,
774                                   PP.getLangOpts(),
775                                   false);
776 }
777 
778 /// Check the header search options deserialized from the control block
779 /// against the header search options in an existing preprocessor.
780 ///
781 /// \param Diags If non-null, produce diagnostics for any mismatches incurred.
782 static bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
783                                      StringRef SpecificModuleCachePath,
784                                      StringRef ExistingModuleCachePath,
785                                      DiagnosticsEngine *Diags,
786                                      const LangOptions &LangOpts,
787                                      const PreprocessorOptions &PPOpts) {
788   if (LangOpts.Modules) {
789     if (SpecificModuleCachePath != ExistingModuleCachePath &&
790         !PPOpts.AllowPCHWithDifferentModulesCachePath) {
791       if (Diags)
792         Diags->Report(diag::err_pch_modulecache_mismatch)
793           << SpecificModuleCachePath << ExistingModuleCachePath;
794       return true;
795     }
796   }
797 
798   return false;
799 }
800 
801 bool PCHValidator::ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
802                                            StringRef SpecificModuleCachePath,
803                                            bool Complain) {
804   return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
805                                   PP.getHeaderSearchInfo().getModuleCachePath(),
806                                   Complain ? &Reader.Diags : nullptr,
807                                   PP.getLangOpts(), PP.getPreprocessorOpts());
808 }
809 
810 void PCHValidator::ReadCounter(const ModuleFile &M, unsigned Value) {
811   PP.setCounterValue(Value);
812 }
813 
814 //===----------------------------------------------------------------------===//
815 // AST reader implementation
816 //===----------------------------------------------------------------------===//
817 
818 static uint64_t readULEB(const unsigned char *&P) {
819   unsigned Length = 0;
820   const char *Error = nullptr;
821 
822   uint64_t Val = llvm::decodeULEB128(P, &Length, nullptr, &Error);
823   if (Error)
824     llvm::report_fatal_error(Error);
825   P += Length;
826   return Val;
827 }
828 
829 /// Read ULEB-encoded key length and data length.
830 static std::pair<unsigned, unsigned>
831 readULEBKeyDataLength(const unsigned char *&P) {
832   unsigned KeyLen = readULEB(P);
833   if ((unsigned)KeyLen != KeyLen)
834     llvm::report_fatal_error("key too large");
835 
836   unsigned DataLen = readULEB(P);
837   if ((unsigned)DataLen != DataLen)
838     llvm::report_fatal_error("data too large");
839 
840   return std::make_pair(KeyLen, DataLen);
841 }
842 
843 void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener,
844                                            bool TakeOwnership) {
845   DeserializationListener = Listener;
846   OwnsDeserializationListener = TakeOwnership;
847 }
848 
849 unsigned ASTSelectorLookupTrait::ComputeHash(Selector Sel) {
850   return serialization::ComputeHash(Sel);
851 }
852 
853 std::pair<unsigned, unsigned>
854 ASTSelectorLookupTrait::ReadKeyDataLength(const unsigned char*& d) {
855   return readULEBKeyDataLength(d);
856 }
857 
858 ASTSelectorLookupTrait::internal_key_type
859 ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) {
860   using namespace llvm::support;
861 
862   SelectorTable &SelTable = Reader.getContext().Selectors;
863   unsigned N = endian::readNext<uint16_t, little, unaligned>(d);
864   IdentifierInfo *FirstII = Reader.getLocalIdentifier(
865       F, endian::readNext<uint32_t, little, unaligned>(d));
866   if (N == 0)
867     return SelTable.getNullarySelector(FirstII);
868   else if (N == 1)
869     return SelTable.getUnarySelector(FirstII);
870 
871   SmallVector<IdentifierInfo *, 16> Args;
872   Args.push_back(FirstII);
873   for (unsigned I = 1; I != N; ++I)
874     Args.push_back(Reader.getLocalIdentifier(
875         F, endian::readNext<uint32_t, little, unaligned>(d)));
876 
877   return SelTable.getSelector(N, Args.data());
878 }
879 
880 ASTSelectorLookupTrait::data_type
881 ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d,
882                                  unsigned DataLen) {
883   using namespace llvm::support;
884 
885   data_type Result;
886 
887   Result.ID = Reader.getGlobalSelectorID(
888       F, endian::readNext<uint32_t, little, unaligned>(d));
889   unsigned FullInstanceBits = endian::readNext<uint16_t, little, unaligned>(d);
890   unsigned FullFactoryBits = endian::readNext<uint16_t, little, unaligned>(d);
891   Result.InstanceBits = FullInstanceBits & 0x3;
892   Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1;
893   Result.FactoryBits = FullFactoryBits & 0x3;
894   Result.FactoryHasMoreThanOneDecl = (FullFactoryBits >> 2) & 0x1;
895   unsigned NumInstanceMethods = FullInstanceBits >> 3;
896   unsigned NumFactoryMethods = FullFactoryBits >> 3;
897 
898   // Load instance methods
899   for (unsigned I = 0; I != NumInstanceMethods; ++I) {
900     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
901             F, endian::readNext<uint32_t, little, unaligned>(d)))
902       Result.Instance.push_back(Method);
903   }
904 
905   // Load factory methods
906   for (unsigned I = 0; I != NumFactoryMethods; ++I) {
907     if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>(
908             F, endian::readNext<uint32_t, little, unaligned>(d)))
909       Result.Factory.push_back(Method);
910   }
911 
912   return Result;
913 }
914 
915 unsigned ASTIdentifierLookupTraitBase::ComputeHash(const internal_key_type& a) {
916   return llvm::djbHash(a);
917 }
918 
919 std::pair<unsigned, unsigned>
920 ASTIdentifierLookupTraitBase::ReadKeyDataLength(const unsigned char*& d) {
921   return readULEBKeyDataLength(d);
922 }
923 
924 ASTIdentifierLookupTraitBase::internal_key_type
925 ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
926   assert(n >= 2 && d[n-1] == '\0');
927   return StringRef((const char*) d, n-1);
928 }
929 
930 /// Whether the given identifier is "interesting".
931 static bool isInterestingIdentifier(ASTReader &Reader, IdentifierInfo &II,
932                                     bool IsModule) {
933   return II.hadMacroDefinition() || II.isPoisoned() ||
934          (!IsModule && II.getObjCOrBuiltinID()) ||
935          II.hasRevertedTokenIDToIdentifier() ||
936          (!(IsModule && Reader.getPreprocessor().getLangOpts().CPlusPlus) &&
937           II.getFETokenInfo());
938 }
939 
940 static bool readBit(unsigned &Bits) {
941   bool Value = Bits & 0x1;
942   Bits >>= 1;
943   return Value;
944 }
945 
946 IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
947   using namespace llvm::support;
948 
949   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
950   return Reader.getGlobalIdentifierID(F, RawID >> 1);
951 }
952 
953 static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
954   if (!II.isFromAST()) {
955     II.setIsFromAST();
956     bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
957     if (isInterestingIdentifier(Reader, II, IsModule))
958       II.setChangedSinceDeserialization();
959   }
960 }
961 
962 IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
963                                                    const unsigned char* d,
964                                                    unsigned DataLen) {
965   using namespace llvm::support;
966 
967   unsigned RawID = endian::readNext<uint32_t, little, unaligned>(d);
968   bool IsInteresting = RawID & 0x01;
969 
970   // Wipe out the "is interesting" bit.
971   RawID = RawID >> 1;
972 
973   // Build the IdentifierInfo and link the identifier ID with it.
974   IdentifierInfo *II = KnownII;
975   if (!II) {
976     II = &Reader.getIdentifierTable().getOwn(k);
977     KnownII = II;
978   }
979   markIdentifierFromAST(Reader, *II);
980   Reader.markIdentifierUpToDate(II);
981 
982   IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
983   if (!IsInteresting) {
984     // For uninteresting identifiers, there's nothing else to do. Just notify
985     // the reader that we've finished loading this identifier.
986     Reader.SetIdentifierInfo(ID, II);
987     return II;
988   }
989 
990   unsigned ObjCOrBuiltinID = endian::readNext<uint16_t, little, unaligned>(d);
991   unsigned Bits = endian::readNext<uint16_t, little, unaligned>(d);
992   bool CPlusPlusOperatorKeyword = readBit(Bits);
993   bool HasRevertedTokenIDToIdentifier = readBit(Bits);
994   bool Poisoned = readBit(Bits);
995   bool ExtensionToken = readBit(Bits);
996   bool HadMacroDefinition = readBit(Bits);
997 
998   assert(Bits == 0 && "Extra bits in the identifier?");
999   DataLen -= 8;
1000 
1001   // Set or check the various bits in the IdentifierInfo structure.
1002   // Token IDs are read-only.
1003   if (HasRevertedTokenIDToIdentifier && II->getTokenID() != tok::identifier)
1004     II->revertTokenIDToIdentifier();
1005   if (!F.isModule())
1006     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
1007   assert(II->isExtensionToken() == ExtensionToken &&
1008          "Incorrect extension token flag");
1009   (void)ExtensionToken;
1010   if (Poisoned)
1011     II->setIsPoisoned(true);
1012   assert(II->isCPlusPlusOperatorKeyword() == CPlusPlusOperatorKeyword &&
1013          "Incorrect C++ operator keyword flag");
1014   (void)CPlusPlusOperatorKeyword;
1015 
1016   // If this identifier is a macro, deserialize the macro
1017   // definition.
1018   if (HadMacroDefinition) {
1019     uint32_t MacroDirectivesOffset =
1020         endian::readNext<uint32_t, little, unaligned>(d);
1021     DataLen -= 4;
1022 
1023     Reader.addPendingMacro(II, &F, MacroDirectivesOffset);
1024   }
1025 
1026   Reader.SetIdentifierInfo(ID, II);
1027 
1028   // Read all of the declarations visible at global scope with this
1029   // name.
1030   if (DataLen > 0) {
1031     SmallVector<uint32_t, 4> DeclIDs;
1032     for (; DataLen > 0; DataLen -= 4)
1033       DeclIDs.push_back(Reader.getGlobalDeclID(
1034           F, endian::readNext<uint32_t, little, unaligned>(d)));
1035     Reader.SetGloballyVisibleDecls(II, DeclIDs);
1036   }
1037 
1038   return II;
1039 }
1040 
1041 DeclarationNameKey::DeclarationNameKey(DeclarationName Name)
1042     : Kind(Name.getNameKind()) {
1043   switch (Kind) {
1044   case DeclarationName::Identifier:
1045     Data = (uint64_t)Name.getAsIdentifierInfo();
1046     break;
1047   case DeclarationName::ObjCZeroArgSelector:
1048   case DeclarationName::ObjCOneArgSelector:
1049   case DeclarationName::ObjCMultiArgSelector:
1050     Data = (uint64_t)Name.getObjCSelector().getAsOpaquePtr();
1051     break;
1052   case DeclarationName::CXXOperatorName:
1053     Data = Name.getCXXOverloadedOperator();
1054     break;
1055   case DeclarationName::CXXLiteralOperatorName:
1056     Data = (uint64_t)Name.getCXXLiteralIdentifier();
1057     break;
1058   case DeclarationName::CXXDeductionGuideName:
1059     Data = (uint64_t)Name.getCXXDeductionGuideTemplate()
1060                ->getDeclName().getAsIdentifierInfo();
1061     break;
1062   case DeclarationName::CXXConstructorName:
1063   case DeclarationName::CXXDestructorName:
1064   case DeclarationName::CXXConversionFunctionName:
1065   case DeclarationName::CXXUsingDirective:
1066     Data = 0;
1067     break;
1068   }
1069 }
1070 
1071 unsigned DeclarationNameKey::getHash() const {
1072   llvm::FoldingSetNodeID ID;
1073   ID.AddInteger(Kind);
1074 
1075   switch (Kind) {
1076   case DeclarationName::Identifier:
1077   case DeclarationName::CXXLiteralOperatorName:
1078   case DeclarationName::CXXDeductionGuideName:
1079     ID.AddString(((IdentifierInfo*)Data)->getName());
1080     break;
1081   case DeclarationName::ObjCZeroArgSelector:
1082   case DeclarationName::ObjCOneArgSelector:
1083   case DeclarationName::ObjCMultiArgSelector:
1084     ID.AddInteger(serialization::ComputeHash(Selector(Data)));
1085     break;
1086   case DeclarationName::CXXOperatorName:
1087     ID.AddInteger((OverloadedOperatorKind)Data);
1088     break;
1089   case DeclarationName::CXXConstructorName:
1090   case DeclarationName::CXXDestructorName:
1091   case DeclarationName::CXXConversionFunctionName:
1092   case DeclarationName::CXXUsingDirective:
1093     break;
1094   }
1095 
1096   return ID.ComputeHash();
1097 }
1098 
1099 ModuleFile *
1100 ASTDeclContextNameLookupTrait::ReadFileRef(const unsigned char *&d) {
1101   using namespace llvm::support;
1102 
1103   uint32_t ModuleFileID = endian::readNext<uint32_t, little, unaligned>(d);
1104   return Reader.getLocalModuleFile(F, ModuleFileID);
1105 }
1106 
1107 std::pair<unsigned, unsigned>
1108 ASTDeclContextNameLookupTrait::ReadKeyDataLength(const unsigned char *&d) {
1109   return readULEBKeyDataLength(d);
1110 }
1111 
1112 ASTDeclContextNameLookupTrait::internal_key_type
1113 ASTDeclContextNameLookupTrait::ReadKey(const unsigned char *d, unsigned) {
1114   using namespace llvm::support;
1115 
1116   auto Kind = (DeclarationName::NameKind)*d++;
1117   uint64_t Data;
1118   switch (Kind) {
1119   case DeclarationName::Identifier:
1120   case DeclarationName::CXXLiteralOperatorName:
1121   case DeclarationName::CXXDeductionGuideName:
1122     Data = (uint64_t)Reader.getLocalIdentifier(
1123         F, endian::readNext<uint32_t, little, unaligned>(d));
1124     break;
1125   case DeclarationName::ObjCZeroArgSelector:
1126   case DeclarationName::ObjCOneArgSelector:
1127   case DeclarationName::ObjCMultiArgSelector:
1128     Data =
1129         (uint64_t)Reader.getLocalSelector(
1130                              F, endian::readNext<uint32_t, little, unaligned>(
1131                                     d)).getAsOpaquePtr();
1132     break;
1133   case DeclarationName::CXXOperatorName:
1134     Data = *d++; // OverloadedOperatorKind
1135     break;
1136   case DeclarationName::CXXConstructorName:
1137   case DeclarationName::CXXDestructorName:
1138   case DeclarationName::CXXConversionFunctionName:
1139   case DeclarationName::CXXUsingDirective:
1140     Data = 0;
1141     break;
1142   }
1143 
1144   return DeclarationNameKey(Kind, Data);
1145 }
1146 
1147 void ASTDeclContextNameLookupTrait::ReadDataInto(internal_key_type,
1148                                                  const unsigned char *d,
1149                                                  unsigned DataLen,
1150                                                  data_type_builder &Val) {
1151   using namespace llvm::support;
1152 
1153   for (unsigned NumDecls = DataLen / 4; NumDecls; --NumDecls) {
1154     uint32_t LocalID = endian::readNext<uint32_t, little, unaligned>(d);
1155     Val.insert(Reader.getGlobalDeclID(F, LocalID));
1156   }
1157 }
1158 
1159 bool ASTReader::ReadLexicalDeclContextStorage(ModuleFile &M,
1160                                               BitstreamCursor &Cursor,
1161                                               uint64_t Offset,
1162                                               DeclContext *DC) {
1163   assert(Offset != 0);
1164 
1165   SavedStreamPosition SavedPosition(Cursor);
1166   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1167     Error(std::move(Err));
1168     return true;
1169   }
1170 
1171   RecordData Record;
1172   StringRef Blob;
1173   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1174   if (!MaybeCode) {
1175     Error(MaybeCode.takeError());
1176     return true;
1177   }
1178   unsigned Code = MaybeCode.get();
1179 
1180   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1181   if (!MaybeRecCode) {
1182     Error(MaybeRecCode.takeError());
1183     return true;
1184   }
1185   unsigned RecCode = MaybeRecCode.get();
1186   if (RecCode != DECL_CONTEXT_LEXICAL) {
1187     Error("Expected lexical block");
1188     return true;
1189   }
1190 
1191   assert(!isa<TranslationUnitDecl>(DC) &&
1192          "expected a TU_UPDATE_LEXICAL record for TU");
1193   // If we are handling a C++ class template instantiation, we can see multiple
1194   // lexical updates for the same record. It's important that we select only one
1195   // of them, so that field numbering works properly. Just pick the first one we
1196   // see.
1197   auto &Lex = LexicalDecls[DC];
1198   if (!Lex.first) {
1199     Lex = std::make_pair(
1200         &M, llvm::makeArrayRef(
1201                 reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
1202                     Blob.data()),
1203                 Blob.size() / 4));
1204   }
1205   DC->setHasExternalLexicalStorage(true);
1206   return false;
1207 }
1208 
1209 bool ASTReader::ReadVisibleDeclContextStorage(ModuleFile &M,
1210                                               BitstreamCursor &Cursor,
1211                                               uint64_t Offset,
1212                                               DeclID ID) {
1213   assert(Offset != 0);
1214 
1215   SavedStreamPosition SavedPosition(Cursor);
1216   if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1217     Error(std::move(Err));
1218     return true;
1219   }
1220 
1221   RecordData Record;
1222   StringRef Blob;
1223   Expected<unsigned> MaybeCode = Cursor.ReadCode();
1224   if (!MaybeCode) {
1225     Error(MaybeCode.takeError());
1226     return true;
1227   }
1228   unsigned Code = MaybeCode.get();
1229 
1230   Expected<unsigned> MaybeRecCode = Cursor.readRecord(Code, Record, &Blob);
1231   if (!MaybeRecCode) {
1232     Error(MaybeRecCode.takeError());
1233     return true;
1234   }
1235   unsigned RecCode = MaybeRecCode.get();
1236   if (RecCode != DECL_CONTEXT_VISIBLE) {
1237     Error("Expected visible lookup table block");
1238     return true;
1239   }
1240 
1241   // We can't safely determine the primary context yet, so delay attaching the
1242   // lookup table until we're done with recursive deserialization.
1243   auto *Data = (const unsigned char*)Blob.data();
1244   PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&M, Data});
1245   return false;
1246 }
1247 
1248 void ASTReader::Error(StringRef Msg) const {
1249   Error(diag::err_fe_pch_malformed, Msg);
1250   if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() &&
1251       !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {
1252     Diag(diag::note_module_cache_path)
1253       << PP.getHeaderSearchInfo().getModuleCachePath();
1254   }
1255 }
1256 
1257 void ASTReader::Error(unsigned DiagID, StringRef Arg1, StringRef Arg2,
1258                       StringRef Arg3) const {
1259   if (Diags.isDiagnosticInFlight())
1260     Diags.SetDelayedDiagnostic(DiagID, Arg1, Arg2, Arg3);
1261   else
1262     Diag(DiagID) << Arg1 << Arg2 << Arg3;
1263 }
1264 
1265 void ASTReader::Error(llvm::Error &&Err) const {
1266   Error(toString(std::move(Err)));
1267 }
1268 
1269 //===----------------------------------------------------------------------===//
1270 // Source Manager Deserialization
1271 //===----------------------------------------------------------------------===//
1272 
1273 /// Read the line table in the source manager block.
1274 /// \returns true if there was an error.
1275 bool ASTReader::ParseLineTable(ModuleFile &F,
1276                                const RecordData &Record) {
1277   unsigned Idx = 0;
1278   LineTableInfo &LineTable = SourceMgr.getLineTable();
1279 
1280   // Parse the file names
1281   std::map<int, int> FileIDs;
1282   FileIDs[-1] = -1; // For unspecified filenames.
1283   for (unsigned I = 0; Record[Idx]; ++I) {
1284     // Extract the file name
1285     auto Filename = ReadPath(F, Record, Idx);
1286     FileIDs[I] = LineTable.getLineTableFilenameID(Filename);
1287   }
1288   ++Idx;
1289 
1290   // Parse the line entries
1291   std::vector<LineEntry> Entries;
1292   while (Idx < Record.size()) {
1293     int FID = Record[Idx++];
1294     assert(FID >= 0 && "Serialized line entries for non-local file.");
1295     // Remap FileID from 1-based old view.
1296     FID += F.SLocEntryBaseID - 1;
1297 
1298     // Extract the line entries
1299     unsigned NumEntries = Record[Idx++];
1300     assert(NumEntries && "no line entries for file ID");
1301     Entries.clear();
1302     Entries.reserve(NumEntries);
1303     for (unsigned I = 0; I != NumEntries; ++I) {
1304       unsigned FileOffset = Record[Idx++];
1305       unsigned LineNo = Record[Idx++];
1306       int FilenameID = FileIDs[Record[Idx++]];
1307       SrcMgr::CharacteristicKind FileKind
1308         = (SrcMgr::CharacteristicKind)Record[Idx++];
1309       unsigned IncludeOffset = Record[Idx++];
1310       Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
1311                                        FileKind, IncludeOffset));
1312     }
1313     LineTable.AddEntry(FileID::get(FID), Entries);
1314   }
1315 
1316   return false;
1317 }
1318 
1319 /// Read a source manager block
1320 bool ASTReader::ReadSourceManagerBlock(ModuleFile &F) {
1321   using namespace SrcMgr;
1322 
1323   BitstreamCursor &SLocEntryCursor = F.SLocEntryCursor;
1324 
1325   // Set the source-location entry cursor to the current position in
1326   // the stream. This cursor will be used to read the contents of the
1327   // source manager block initially, and then lazily read
1328   // source-location entries as needed.
1329   SLocEntryCursor = F.Stream;
1330 
1331   // The stream itself is going to skip over the source manager block.
1332   if (llvm::Error Err = F.Stream.SkipBlock()) {
1333     Error(std::move(Err));
1334     return true;
1335   }
1336 
1337   // Enter the source manager block.
1338   if (llvm::Error Err =
1339           SLocEntryCursor.EnterSubBlock(SOURCE_MANAGER_BLOCK_ID)) {
1340     Error(std::move(Err));
1341     return true;
1342   }
1343   F.SourceManagerBlockStartOffset = SLocEntryCursor.GetCurrentBitNo();
1344 
1345   RecordData Record;
1346   while (true) {
1347     Expected<llvm::BitstreamEntry> MaybeE =
1348         SLocEntryCursor.advanceSkippingSubblocks();
1349     if (!MaybeE) {
1350       Error(MaybeE.takeError());
1351       return true;
1352     }
1353     llvm::BitstreamEntry E = MaybeE.get();
1354 
1355     switch (E.Kind) {
1356     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1357     case llvm::BitstreamEntry::Error:
1358       Error("malformed block record in AST file");
1359       return true;
1360     case llvm::BitstreamEntry::EndBlock:
1361       return false;
1362     case llvm::BitstreamEntry::Record:
1363       // The interesting case.
1364       break;
1365     }
1366 
1367     // Read a record.
1368     Record.clear();
1369     StringRef Blob;
1370     Expected<unsigned> MaybeRecord =
1371         SLocEntryCursor.readRecord(E.ID, Record, &Blob);
1372     if (!MaybeRecord) {
1373       Error(MaybeRecord.takeError());
1374       return true;
1375     }
1376     switch (MaybeRecord.get()) {
1377     default:  // Default behavior: ignore.
1378       break;
1379 
1380     case SM_SLOC_FILE_ENTRY:
1381     case SM_SLOC_BUFFER_ENTRY:
1382     case SM_SLOC_EXPANSION_ENTRY:
1383       // Once we hit one of the source location entries, we're done.
1384       return false;
1385     }
1386   }
1387 }
1388 
1389 /// If a header file is not found at the path that we expect it to be
1390 /// and the PCH file was moved from its original location, try to resolve the
1391 /// file by assuming that header+PCH were moved together and the header is in
1392 /// the same place relative to the PCH.
1393 static std::string
1394 resolveFileRelativeToOriginalDir(const std::string &Filename,
1395                                  const std::string &OriginalDir,
1396                                  const std::string &CurrDir) {
1397   assert(OriginalDir != CurrDir &&
1398          "No point trying to resolve the file if the PCH dir didn't change");
1399 
1400   using namespace llvm::sys;
1401 
1402   SmallString<128> filePath(Filename);
1403   fs::make_absolute(filePath);
1404   assert(path::is_absolute(OriginalDir));
1405   SmallString<128> currPCHPath(CurrDir);
1406 
1407   path::const_iterator fileDirI = path::begin(path::parent_path(filePath)),
1408                        fileDirE = path::end(path::parent_path(filePath));
1409   path::const_iterator origDirI = path::begin(OriginalDir),
1410                        origDirE = path::end(OriginalDir);
1411   // Skip the common path components from filePath and OriginalDir.
1412   while (fileDirI != fileDirE && origDirI != origDirE &&
1413          *fileDirI == *origDirI) {
1414     ++fileDirI;
1415     ++origDirI;
1416   }
1417   for (; origDirI != origDirE; ++origDirI)
1418     path::append(currPCHPath, "..");
1419   path::append(currPCHPath, fileDirI, fileDirE);
1420   path::append(currPCHPath, path::filename(Filename));
1421   return std::string(currPCHPath.str());
1422 }
1423 
1424 bool ASTReader::ReadSLocEntry(int ID) {
1425   if (ID == 0)
1426     return false;
1427 
1428   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1429     Error("source location entry ID out-of-range for AST file");
1430     return true;
1431   }
1432 
1433   // Local helper to read the (possibly-compressed) buffer data following the
1434   // entry record.
1435   auto ReadBuffer = [this](
1436       BitstreamCursor &SLocEntryCursor,
1437       StringRef Name) -> std::unique_ptr<llvm::MemoryBuffer> {
1438     RecordData Record;
1439     StringRef Blob;
1440     Expected<unsigned> MaybeCode = SLocEntryCursor.ReadCode();
1441     if (!MaybeCode) {
1442       Error(MaybeCode.takeError());
1443       return nullptr;
1444     }
1445     unsigned Code = MaybeCode.get();
1446 
1447     Expected<unsigned> MaybeRecCode =
1448         SLocEntryCursor.readRecord(Code, Record, &Blob);
1449     if (!MaybeRecCode) {
1450       Error(MaybeRecCode.takeError());
1451       return nullptr;
1452     }
1453     unsigned RecCode = MaybeRecCode.get();
1454 
1455     if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
1456       if (!llvm::zlib::isAvailable()) {
1457         Error("zlib is not available");
1458         return nullptr;
1459       }
1460       SmallString<0> Uncompressed;
1461       if (llvm::Error E =
1462               llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
1463         Error("could not decompress embedded file contents: " +
1464               llvm::toString(std::move(E)));
1465         return nullptr;
1466       }
1467       return llvm::MemoryBuffer::getMemBufferCopy(Uncompressed, Name);
1468     } else if (RecCode == SM_SLOC_BUFFER_BLOB) {
1469       return llvm::MemoryBuffer::getMemBuffer(Blob.drop_back(1), Name, true);
1470     } else {
1471       Error("AST record has invalid code");
1472       return nullptr;
1473     }
1474   };
1475 
1476   ModuleFile *F = GlobalSLocEntryMap.find(-ID)->second;
1477   if (llvm::Error Err = F->SLocEntryCursor.JumpToBit(
1478           F->SLocEntryOffsetsBase +
1479           F->SLocEntryOffsets[ID - F->SLocEntryBaseID])) {
1480     Error(std::move(Err));
1481     return true;
1482   }
1483 
1484   BitstreamCursor &SLocEntryCursor = F->SLocEntryCursor;
1485   SourceLocation::UIntTy BaseOffset = F->SLocEntryBaseOffset;
1486 
1487   ++NumSLocEntriesRead;
1488   Expected<llvm::BitstreamEntry> MaybeEntry = SLocEntryCursor.advance();
1489   if (!MaybeEntry) {
1490     Error(MaybeEntry.takeError());
1491     return true;
1492   }
1493   llvm::BitstreamEntry Entry = MaybeEntry.get();
1494 
1495   if (Entry.Kind != llvm::BitstreamEntry::Record) {
1496     Error("incorrectly-formatted source location entry in AST file");
1497     return true;
1498   }
1499 
1500   RecordData Record;
1501   StringRef Blob;
1502   Expected<unsigned> MaybeSLOC =
1503       SLocEntryCursor.readRecord(Entry.ID, Record, &Blob);
1504   if (!MaybeSLOC) {
1505     Error(MaybeSLOC.takeError());
1506     return true;
1507   }
1508   switch (MaybeSLOC.get()) {
1509   default:
1510     Error("incorrectly-formatted source location entry in AST file");
1511     return true;
1512 
1513   case SM_SLOC_FILE_ENTRY: {
1514     // We will detect whether a file changed and return 'Failure' for it, but
1515     // we will also try to fail gracefully by setting up the SLocEntry.
1516     unsigned InputID = Record[4];
1517     InputFile IF = getInputFile(*F, InputID);
1518     Optional<FileEntryRef> File = IF.getFile();
1519     bool OverriddenBuffer = IF.isOverridden();
1520 
1521     // Note that we only check if a File was returned. If it was out-of-date
1522     // we have complained but we will continue creating a FileID to recover
1523     // gracefully.
1524     if (!File)
1525       return true;
1526 
1527     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1528     if (IncludeLoc.isInvalid() && F->Kind != MK_MainFile) {
1529       // This is the module's main file.
1530       IncludeLoc = getImportLocation(F);
1531     }
1532     SrcMgr::CharacteristicKind
1533       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1534     FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1535                                         BaseOffset + Record[0]);
1536     SrcMgr::FileInfo &FileInfo =
1537           const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
1538     FileInfo.NumCreatedFIDs = Record[5];
1539     if (Record[3])
1540       FileInfo.setHasLineDirectives();
1541 
1542     unsigned NumFileDecls = Record[7];
1543     if (NumFileDecls && ContextObj) {
1544       const DeclID *FirstDecl = F->FileSortedDecls + Record[6];
1545       assert(F->FileSortedDecls && "FILE_SORTED_DECLS not encountered yet ?");
1546       FileDeclIDs[FID] = FileDeclsInfo(F, llvm::makeArrayRef(FirstDecl,
1547                                                              NumFileDecls));
1548     }
1549 
1550     const SrcMgr::ContentCache &ContentCache =
1551         SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
1552     if (OverriddenBuffer && !ContentCache.BufferOverridden &&
1553         ContentCache.ContentsEntry == ContentCache.OrigEntry &&
1554         !ContentCache.getBufferIfLoaded()) {
1555       auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
1556       if (!Buffer)
1557         return true;
1558       SourceMgr.overrideFileContents(*File, std::move(Buffer));
1559     }
1560 
1561     break;
1562   }
1563 
1564   case SM_SLOC_BUFFER_ENTRY: {
1565     const char *Name = Blob.data();
1566     unsigned Offset = Record[0];
1567     SrcMgr::CharacteristicKind
1568       FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1569     SourceLocation IncludeLoc = ReadSourceLocation(*F, Record[1]);
1570     if (IncludeLoc.isInvalid() && F->isModule()) {
1571       IncludeLoc = getImportLocation(F);
1572     }
1573 
1574     auto Buffer = ReadBuffer(SLocEntryCursor, Name);
1575     if (!Buffer)
1576       return true;
1577     SourceMgr.createFileID(std::move(Buffer), FileCharacter, ID,
1578                            BaseOffset + Offset, IncludeLoc);
1579     break;
1580   }
1581 
1582   case SM_SLOC_EXPANSION_ENTRY: {
1583     SourceLocation SpellingLoc = ReadSourceLocation(*F, Record[1]);
1584     SourceMgr.createExpansionLoc(SpellingLoc,
1585                                      ReadSourceLocation(*F, Record[2]),
1586                                      ReadSourceLocation(*F, Record[3]),
1587                                      Record[5],
1588                                      Record[4],
1589                                      ID,
1590                                      BaseOffset + Record[0]);
1591     break;
1592   }
1593   }
1594 
1595   return false;
1596 }
1597 
1598 std::pair<SourceLocation, StringRef> ASTReader::getModuleImportLoc(int ID) {
1599   if (ID == 0)
1600     return std::make_pair(SourceLocation(), "");
1601 
1602   if (unsigned(-ID) - 2 >= getTotalNumSLocs() || ID > 0) {
1603     Error("source location entry ID out-of-range for AST file");
1604     return std::make_pair(SourceLocation(), "");
1605   }
1606 
1607   // Find which module file this entry lands in.
1608   ModuleFile *M = GlobalSLocEntryMap.find(-ID)->second;
1609   if (!M->isModule())
1610     return std::make_pair(SourceLocation(), "");
1611 
1612   // FIXME: Can we map this down to a particular submodule? That would be
1613   // ideal.
1614   return std::make_pair(M->ImportLoc, StringRef(M->ModuleName));
1615 }
1616 
1617 /// Find the location where the module F is imported.
1618 SourceLocation ASTReader::getImportLocation(ModuleFile *F) {
1619   if (F->ImportLoc.isValid())
1620     return F->ImportLoc;
1621 
1622   // Otherwise we have a PCH. It's considered to be "imported" at the first
1623   // location of its includer.
1624   if (F->ImportedBy.empty() || !F->ImportedBy[0]) {
1625     // Main file is the importer.
1626     assert(SourceMgr.getMainFileID().isValid() && "missing main file");
1627     return SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID());
1628   }
1629   return F->ImportedBy[0]->FirstLoc;
1630 }
1631 
1632 /// Enter a subblock of the specified BlockID with the specified cursor. Read
1633 /// the abbreviations that are at the top of the block and then leave the cursor
1634 /// pointing into the block.
1635 bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID,
1636                                  uint64_t *StartOfBlockOffset) {
1637   if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
1638     // FIXME this drops errors on the floor.
1639     consumeError(std::move(Err));
1640     return true;
1641   }
1642 
1643   if (StartOfBlockOffset)
1644     *StartOfBlockOffset = Cursor.GetCurrentBitNo();
1645 
1646   while (true) {
1647     uint64_t Offset = Cursor.GetCurrentBitNo();
1648     Expected<unsigned> MaybeCode = Cursor.ReadCode();
1649     if (!MaybeCode) {
1650       // FIXME this drops errors on the floor.
1651       consumeError(MaybeCode.takeError());
1652       return true;
1653     }
1654     unsigned Code = MaybeCode.get();
1655 
1656     // We expect all abbrevs to be at the start of the block.
1657     if (Code != llvm::bitc::DEFINE_ABBREV) {
1658       if (llvm::Error Err = Cursor.JumpToBit(Offset)) {
1659         // FIXME this drops errors on the floor.
1660         consumeError(std::move(Err));
1661         return true;
1662       }
1663       return false;
1664     }
1665     if (llvm::Error Err = Cursor.ReadAbbrevRecord()) {
1666       // FIXME this drops errors on the floor.
1667       consumeError(std::move(Err));
1668       return true;
1669     }
1670   }
1671 }
1672 
1673 Token ASTReader::ReadToken(ModuleFile &F, const RecordDataImpl &Record,
1674                            unsigned &Idx) {
1675   Token Tok;
1676   Tok.startToken();
1677   Tok.setLocation(ReadSourceLocation(F, Record, Idx));
1678   Tok.setLength(Record[Idx++]);
1679   if (IdentifierInfo *II = getLocalIdentifier(F, Record[Idx++]))
1680     Tok.setIdentifierInfo(II);
1681   Tok.setKind((tok::TokenKind)Record[Idx++]);
1682   Tok.setFlag((Token::TokenFlags)Record[Idx++]);
1683   return Tok;
1684 }
1685 
1686 MacroInfo *ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset) {
1687   BitstreamCursor &Stream = F.MacroCursor;
1688 
1689   // Keep track of where we are in the stream, then jump back there
1690   // after reading this macro.
1691   SavedStreamPosition SavedPosition(Stream);
1692 
1693   if (llvm::Error Err = Stream.JumpToBit(Offset)) {
1694     // FIXME this drops errors on the floor.
1695     consumeError(std::move(Err));
1696     return nullptr;
1697   }
1698   RecordData Record;
1699   SmallVector<IdentifierInfo*, 16> MacroParams;
1700   MacroInfo *Macro = nullptr;
1701 
1702   while (true) {
1703     // Advance to the next record, but if we get to the end of the block, don't
1704     // pop it (removing all the abbreviations from the cursor) since we want to
1705     // be able to reseek within the block and read entries.
1706     unsigned Flags = BitstreamCursor::AF_DontPopBlockAtEnd;
1707     Expected<llvm::BitstreamEntry> MaybeEntry =
1708         Stream.advanceSkippingSubblocks(Flags);
1709     if (!MaybeEntry) {
1710       Error(MaybeEntry.takeError());
1711       return Macro;
1712     }
1713     llvm::BitstreamEntry Entry = MaybeEntry.get();
1714 
1715     switch (Entry.Kind) {
1716     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1717     case llvm::BitstreamEntry::Error:
1718       Error("malformed block record in AST file");
1719       return Macro;
1720     case llvm::BitstreamEntry::EndBlock:
1721       return Macro;
1722     case llvm::BitstreamEntry::Record:
1723       // The interesting case.
1724       break;
1725     }
1726 
1727     // Read a record.
1728     Record.clear();
1729     PreprocessorRecordTypes RecType;
1730     if (Expected<unsigned> MaybeRecType = Stream.readRecord(Entry.ID, Record))
1731       RecType = (PreprocessorRecordTypes)MaybeRecType.get();
1732     else {
1733       Error(MaybeRecType.takeError());
1734       return Macro;
1735     }
1736     switch (RecType) {
1737     case PP_MODULE_MACRO:
1738     case PP_MACRO_DIRECTIVE_HISTORY:
1739       return Macro;
1740 
1741     case PP_MACRO_OBJECT_LIKE:
1742     case PP_MACRO_FUNCTION_LIKE: {
1743       // If we already have a macro, that means that we've hit the end
1744       // of the definition of the macro we were looking for. We're
1745       // done.
1746       if (Macro)
1747         return Macro;
1748 
1749       unsigned NextIndex = 1; // Skip identifier ID.
1750       SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
1751       MacroInfo *MI = PP.AllocateMacroInfo(Loc);
1752       MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
1753       MI->setIsUsed(Record[NextIndex++]);
1754       MI->setUsedForHeaderGuard(Record[NextIndex++]);
1755 
1756       if (RecType == PP_MACRO_FUNCTION_LIKE) {
1757         // Decode function-like macro info.
1758         bool isC99VarArgs = Record[NextIndex++];
1759         bool isGNUVarArgs = Record[NextIndex++];
1760         bool hasCommaPasting = Record[NextIndex++];
1761         MacroParams.clear();
1762         unsigned NumArgs = Record[NextIndex++];
1763         for (unsigned i = 0; i != NumArgs; ++i)
1764           MacroParams.push_back(getLocalIdentifier(F, Record[NextIndex++]));
1765 
1766         // Install function-like macro info.
1767         MI->setIsFunctionLike();
1768         if (isC99VarArgs) MI->setIsC99Varargs();
1769         if (isGNUVarArgs) MI->setIsGNUVarargs();
1770         if (hasCommaPasting) MI->setHasCommaPasting();
1771         MI->setParameterList(MacroParams, PP.getPreprocessorAllocator());
1772       }
1773 
1774       // Remember that we saw this macro last so that we add the tokens that
1775       // form its body to it.
1776       Macro = MI;
1777 
1778       if (NextIndex + 1 == Record.size() && PP.getPreprocessingRecord() &&
1779           Record[NextIndex]) {
1780         // We have a macro definition. Register the association
1781         PreprocessedEntityID
1782             GlobalID = getGlobalPreprocessedEntityID(F, Record[NextIndex]);
1783         PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
1784         PreprocessingRecord::PPEntityID PPID =
1785             PPRec.getPPEntityID(GlobalID - 1, /*isLoaded=*/true);
1786         MacroDefinitionRecord *PPDef = cast_or_null<MacroDefinitionRecord>(
1787             PPRec.getPreprocessedEntity(PPID));
1788         if (PPDef)
1789           PPRec.RegisterMacroDefinition(Macro, PPDef);
1790       }
1791 
1792       ++NumMacrosRead;
1793       break;
1794     }
1795 
1796     case PP_TOKEN: {
1797       // If we see a TOKEN before a PP_MACRO_*, then the file is
1798       // erroneous, just pretend we didn't see this.
1799       if (!Macro) break;
1800 
1801       unsigned Idx = 0;
1802       Token Tok = ReadToken(F, Record, Idx);
1803       Macro->AddTokenToBody(Tok);
1804       break;
1805     }
1806     }
1807   }
1808 }
1809 
1810 PreprocessedEntityID
1811 ASTReader::getGlobalPreprocessedEntityID(ModuleFile &M,
1812                                          unsigned LocalID) const {
1813   if (!M.ModuleOffsetMap.empty())
1814     ReadModuleOffsetMap(M);
1815 
1816   ContinuousRangeMap<uint32_t, int, 2>::const_iterator
1817     I = M.PreprocessedEntityRemap.find(LocalID - NUM_PREDEF_PP_ENTITY_IDS);
1818   assert(I != M.PreprocessedEntityRemap.end()
1819          && "Invalid index into preprocessed entity index remap");
1820 
1821   return LocalID + I->second;
1822 }
1823 
1824 unsigned HeaderFileInfoTrait::ComputeHash(internal_key_ref ikey) {
1825   return llvm::hash_combine(ikey.Size, ikey.ModTime);
1826 }
1827 
1828 HeaderFileInfoTrait::internal_key_type
1829 HeaderFileInfoTrait::GetInternalKey(const FileEntry *FE) {
1830   internal_key_type ikey = {FE->getSize(),
1831                             M.HasTimestamps ? FE->getModificationTime() : 0,
1832                             FE->getName(), /*Imported*/ false};
1833   return ikey;
1834 }
1835 
1836 bool HeaderFileInfoTrait::EqualKey(internal_key_ref a, internal_key_ref b) {
1837   if (a.Size != b.Size || (a.ModTime && b.ModTime && a.ModTime != b.ModTime))
1838     return false;
1839 
1840   if (llvm::sys::path::is_absolute(a.Filename) && a.Filename == b.Filename)
1841     return true;
1842 
1843   // Determine whether the actual files are equivalent.
1844   FileManager &FileMgr = Reader.getFileManager();
1845   auto GetFile = [&](const internal_key_type &Key) -> const FileEntry* {
1846     if (!Key.Imported) {
1847       if (auto File = FileMgr.getFile(Key.Filename))
1848         return *File;
1849       return nullptr;
1850     }
1851 
1852     std::string Resolved = std::string(Key.Filename);
1853     Reader.ResolveImportedPath(M, Resolved);
1854     if (auto File = FileMgr.getFile(Resolved))
1855       return *File;
1856     return nullptr;
1857   };
1858 
1859   const FileEntry *FEA = GetFile(a);
1860   const FileEntry *FEB = GetFile(b);
1861   return FEA && FEA == FEB;
1862 }
1863 
1864 std::pair<unsigned, unsigned>
1865 HeaderFileInfoTrait::ReadKeyDataLength(const unsigned char*& d) {
1866   return readULEBKeyDataLength(d);
1867 }
1868 
1869 HeaderFileInfoTrait::internal_key_type
1870 HeaderFileInfoTrait::ReadKey(const unsigned char *d, unsigned) {
1871   using namespace llvm::support;
1872 
1873   internal_key_type ikey;
1874   ikey.Size = off_t(endian::readNext<uint64_t, little, unaligned>(d));
1875   ikey.ModTime = time_t(endian::readNext<uint64_t, little, unaligned>(d));
1876   ikey.Filename = (const char *)d;
1877   ikey.Imported = true;
1878   return ikey;
1879 }
1880 
1881 HeaderFileInfoTrait::data_type
1882 HeaderFileInfoTrait::ReadData(internal_key_ref key, const unsigned char *d,
1883                               unsigned DataLen) {
1884   using namespace llvm::support;
1885 
1886   const unsigned char *End = d + DataLen;
1887   HeaderFileInfo HFI;
1888   unsigned Flags = *d++;
1889   // FIXME: Refactor with mergeHeaderFileInfo in HeaderSearch.cpp.
1890   HFI.isImport |= (Flags >> 5) & 0x01;
1891   HFI.isPragmaOnce |= (Flags >> 4) & 0x01;
1892   HFI.DirInfo = (Flags >> 1) & 0x07;
1893   HFI.IndexHeaderMapHeader = Flags & 0x01;
1894   // FIXME: Find a better way to handle this. Maybe just store a
1895   // "has been included" flag?
1896   HFI.NumIncludes = std::max(endian::readNext<uint16_t, little, unaligned>(d),
1897                              HFI.NumIncludes);
1898   HFI.ControllingMacroID = Reader.getGlobalIdentifierID(
1899       M, endian::readNext<uint32_t, little, unaligned>(d));
1900   if (unsigned FrameworkOffset =
1901           endian::readNext<uint32_t, little, unaligned>(d)) {
1902     // The framework offset is 1 greater than the actual offset,
1903     // since 0 is used as an indicator for "no framework name".
1904     StringRef FrameworkName(FrameworkStrings + FrameworkOffset - 1);
1905     HFI.Framework = HS->getUniqueFrameworkName(FrameworkName);
1906   }
1907 
1908   assert((End - d) % 4 == 0 &&
1909          "Wrong data length in HeaderFileInfo deserialization");
1910   while (d != End) {
1911     uint32_t LocalSMID = endian::readNext<uint32_t, little, unaligned>(d);
1912     auto HeaderRole = static_cast<ModuleMap::ModuleHeaderRole>(LocalSMID & 3);
1913     LocalSMID >>= 2;
1914 
1915     // This header is part of a module. Associate it with the module to enable
1916     // implicit module import.
1917     SubmoduleID GlobalSMID = Reader.getGlobalSubmoduleID(M, LocalSMID);
1918     Module *Mod = Reader.getSubmodule(GlobalSMID);
1919     FileManager &FileMgr = Reader.getFileManager();
1920     ModuleMap &ModMap =
1921         Reader.getPreprocessor().getHeaderSearchInfo().getModuleMap();
1922 
1923     std::string Filename = std::string(key.Filename);
1924     if (key.Imported)
1925       Reader.ResolveImportedPath(M, Filename);
1926     // FIXME: NameAsWritten
1927     Module::Header H = {std::string(key.Filename), "",
1928                         *FileMgr.getFile(Filename)};
1929     ModMap.addHeader(Mod, H, HeaderRole, /*Imported*/true);
1930     HFI.isModuleHeader |= !(HeaderRole & ModuleMap::TextualHeader);
1931   }
1932 
1933   // This HeaderFileInfo was externally loaded.
1934   HFI.External = true;
1935   HFI.IsValid = true;
1936   return HFI;
1937 }
1938 
1939 void ASTReader::addPendingMacro(IdentifierInfo *II, ModuleFile *M,
1940                                 uint32_t MacroDirectivesOffset) {
1941   assert(NumCurrentElementsDeserializing > 0 &&"Missing deserialization guard");
1942   PendingMacroIDs[II].push_back(PendingMacroInfo(M, MacroDirectivesOffset));
1943 }
1944 
1945 void ASTReader::ReadDefinedMacros() {
1946   // Note that we are loading defined macros.
1947   Deserializing Macros(this);
1948 
1949   for (ModuleFile &I : llvm::reverse(ModuleMgr)) {
1950     BitstreamCursor &MacroCursor = I.MacroCursor;
1951 
1952     // If there was no preprocessor block, skip this file.
1953     if (MacroCursor.getBitcodeBytes().empty())
1954       continue;
1955 
1956     BitstreamCursor Cursor = MacroCursor;
1957     if (llvm::Error Err = Cursor.JumpToBit(I.MacroStartOffset)) {
1958       Error(std::move(Err));
1959       return;
1960     }
1961 
1962     RecordData Record;
1963     while (true) {
1964       Expected<llvm::BitstreamEntry> MaybeE = Cursor.advanceSkippingSubblocks();
1965       if (!MaybeE) {
1966         Error(MaybeE.takeError());
1967         return;
1968       }
1969       llvm::BitstreamEntry E = MaybeE.get();
1970 
1971       switch (E.Kind) {
1972       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
1973       case llvm::BitstreamEntry::Error:
1974         Error("malformed block record in AST file");
1975         return;
1976       case llvm::BitstreamEntry::EndBlock:
1977         goto NextCursor;
1978 
1979       case llvm::BitstreamEntry::Record: {
1980         Record.clear();
1981         Expected<unsigned> MaybeRecord = Cursor.readRecord(E.ID, Record);
1982         if (!MaybeRecord) {
1983           Error(MaybeRecord.takeError());
1984           return;
1985         }
1986         switch (MaybeRecord.get()) {
1987         default:  // Default behavior: ignore.
1988           break;
1989 
1990         case PP_MACRO_OBJECT_LIKE:
1991         case PP_MACRO_FUNCTION_LIKE: {
1992           IdentifierInfo *II = getLocalIdentifier(I, Record[0]);
1993           if (II->isOutOfDate())
1994             updateOutOfDateIdentifier(*II);
1995           break;
1996         }
1997 
1998         case PP_TOKEN:
1999           // Ignore tokens.
2000           break;
2001         }
2002         break;
2003       }
2004       }
2005     }
2006     NextCursor:  ;
2007   }
2008 }
2009 
2010 namespace {
2011 
2012   /// Visitor class used to look up identifirs in an AST file.
2013   class IdentifierLookupVisitor {
2014     StringRef Name;
2015     unsigned NameHash;
2016     unsigned PriorGeneration;
2017     unsigned &NumIdentifierLookups;
2018     unsigned &NumIdentifierLookupHits;
2019     IdentifierInfo *Found = nullptr;
2020 
2021   public:
2022     IdentifierLookupVisitor(StringRef Name, unsigned PriorGeneration,
2023                             unsigned &NumIdentifierLookups,
2024                             unsigned &NumIdentifierLookupHits)
2025       : Name(Name), NameHash(ASTIdentifierLookupTrait::ComputeHash(Name)),
2026         PriorGeneration(PriorGeneration),
2027         NumIdentifierLookups(NumIdentifierLookups),
2028         NumIdentifierLookupHits(NumIdentifierLookupHits) {}
2029 
2030     bool operator()(ModuleFile &M) {
2031       // If we've already searched this module file, skip it now.
2032       if (M.Generation <= PriorGeneration)
2033         return true;
2034 
2035       ASTIdentifierLookupTable *IdTable
2036         = (ASTIdentifierLookupTable *)M.IdentifierLookupTable;
2037       if (!IdTable)
2038         return false;
2039 
2040       ASTIdentifierLookupTrait Trait(IdTable->getInfoObj().getReader(), M,
2041                                      Found);
2042       ++NumIdentifierLookups;
2043       ASTIdentifierLookupTable::iterator Pos =
2044           IdTable->find_hashed(Name, NameHash, &Trait);
2045       if (Pos == IdTable->end())
2046         return false;
2047 
2048       // Dereferencing the iterator has the effect of building the
2049       // IdentifierInfo node and populating it with the various
2050       // declarations it needs.
2051       ++NumIdentifierLookupHits;
2052       Found = *Pos;
2053       return true;
2054     }
2055 
2056     // Retrieve the identifier info found within the module
2057     // files.
2058     IdentifierInfo *getIdentifierInfo() const { return Found; }
2059   };
2060 
2061 } // namespace
2062 
2063 void ASTReader::updateOutOfDateIdentifier(IdentifierInfo &II) {
2064   // Note that we are loading an identifier.
2065   Deserializing AnIdentifier(this);
2066 
2067   unsigned PriorGeneration = 0;
2068   if (getContext().getLangOpts().Modules)
2069     PriorGeneration = IdentifierGeneration[&II];
2070 
2071   // If there is a global index, look there first to determine which modules
2072   // provably do not have any results for this identifier.
2073   GlobalModuleIndex::HitSet Hits;
2074   GlobalModuleIndex::HitSet *HitsPtr = nullptr;
2075   if (!loadGlobalIndex()) {
2076     if (GlobalIndex->lookupIdentifier(II.getName(), Hits)) {
2077       HitsPtr = &Hits;
2078     }
2079   }
2080 
2081   IdentifierLookupVisitor Visitor(II.getName(), PriorGeneration,
2082                                   NumIdentifierLookups,
2083                                   NumIdentifierLookupHits);
2084   ModuleMgr.visit(Visitor, HitsPtr);
2085   markIdentifierUpToDate(&II);
2086 }
2087 
2088 void ASTReader::markIdentifierUpToDate(IdentifierInfo *II) {
2089   if (!II)
2090     return;
2091 
2092   II->setOutOfDate(false);
2093 
2094   // Update the generation for this identifier.
2095   if (getContext().getLangOpts().Modules)
2096     IdentifierGeneration[II] = getGeneration();
2097 }
2098 
2099 void ASTReader::resolvePendingMacro(IdentifierInfo *II,
2100                                     const PendingMacroInfo &PMInfo) {
2101   ModuleFile &M = *PMInfo.M;
2102 
2103   BitstreamCursor &Cursor = M.MacroCursor;
2104   SavedStreamPosition SavedPosition(Cursor);
2105   if (llvm::Error Err =
2106           Cursor.JumpToBit(M.MacroOffsetsBase + PMInfo.MacroDirectivesOffset)) {
2107     Error(std::move(Err));
2108     return;
2109   }
2110 
2111   struct ModuleMacroRecord {
2112     SubmoduleID SubModID;
2113     MacroInfo *MI;
2114     SmallVector<SubmoduleID, 8> Overrides;
2115   };
2116   llvm::SmallVector<ModuleMacroRecord, 8> ModuleMacros;
2117 
2118   // We expect to see a sequence of PP_MODULE_MACRO records listing exported
2119   // macros, followed by a PP_MACRO_DIRECTIVE_HISTORY record with the complete
2120   // macro histroy.
2121   RecordData Record;
2122   while (true) {
2123     Expected<llvm::BitstreamEntry> MaybeEntry =
2124         Cursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
2125     if (!MaybeEntry) {
2126       Error(MaybeEntry.takeError());
2127       return;
2128     }
2129     llvm::BitstreamEntry Entry = MaybeEntry.get();
2130 
2131     if (Entry.Kind != llvm::BitstreamEntry::Record) {
2132       Error("malformed block record in AST file");
2133       return;
2134     }
2135 
2136     Record.clear();
2137     Expected<unsigned> MaybePP = Cursor.readRecord(Entry.ID, Record);
2138     if (!MaybePP) {
2139       Error(MaybePP.takeError());
2140       return;
2141     }
2142     switch ((PreprocessorRecordTypes)MaybePP.get()) {
2143     case PP_MACRO_DIRECTIVE_HISTORY:
2144       break;
2145 
2146     case PP_MODULE_MACRO: {
2147       ModuleMacros.push_back(ModuleMacroRecord());
2148       auto &Info = ModuleMacros.back();
2149       Info.SubModID = getGlobalSubmoduleID(M, Record[0]);
2150       Info.MI = getMacro(getGlobalMacroID(M, Record[1]));
2151       for (int I = 2, N = Record.size(); I != N; ++I)
2152         Info.Overrides.push_back(getGlobalSubmoduleID(M, Record[I]));
2153       continue;
2154     }
2155 
2156     default:
2157       Error("malformed block record in AST file");
2158       return;
2159     }
2160 
2161     // We found the macro directive history; that's the last record
2162     // for this macro.
2163     break;
2164   }
2165 
2166   // Module macros are listed in reverse dependency order.
2167   {
2168     std::reverse(ModuleMacros.begin(), ModuleMacros.end());
2169     llvm::SmallVector<ModuleMacro*, 8> Overrides;
2170     for (auto &MMR : ModuleMacros) {
2171       Overrides.clear();
2172       for (unsigned ModID : MMR.Overrides) {
2173         Module *Mod = getSubmodule(ModID);
2174         auto *Macro = PP.getModuleMacro(Mod, II);
2175         assert(Macro && "missing definition for overridden macro");
2176         Overrides.push_back(Macro);
2177       }
2178 
2179       bool Inserted = false;
2180       Module *Owner = getSubmodule(MMR.SubModID);
2181       PP.addModuleMacro(Owner, II, MMR.MI, Overrides, Inserted);
2182     }
2183   }
2184 
2185   // Don't read the directive history for a module; we don't have anywhere
2186   // to put it.
2187   if (M.isModule())
2188     return;
2189 
2190   // Deserialize the macro directives history in reverse source-order.
2191   MacroDirective *Latest = nullptr, *Earliest = nullptr;
2192   unsigned Idx = 0, N = Record.size();
2193   while (Idx < N) {
2194     MacroDirective *MD = nullptr;
2195     SourceLocation Loc = ReadSourceLocation(M, Record, Idx);
2196     MacroDirective::Kind K = (MacroDirective::Kind)Record[Idx++];
2197     switch (K) {
2198     case MacroDirective::MD_Define: {
2199       MacroInfo *MI = getMacro(getGlobalMacroID(M, Record[Idx++]));
2200       MD = PP.AllocateDefMacroDirective(MI, Loc);
2201       break;
2202     }
2203     case MacroDirective::MD_Undefine:
2204       MD = PP.AllocateUndefMacroDirective(Loc);
2205       break;
2206     case MacroDirective::MD_Visibility:
2207       bool isPublic = Record[Idx++];
2208       MD = PP.AllocateVisibilityMacroDirective(Loc, isPublic);
2209       break;
2210     }
2211 
2212     if (!Latest)
2213       Latest = MD;
2214     if (Earliest)
2215       Earliest->setPrevious(MD);
2216     Earliest = MD;
2217   }
2218 
2219   if (Latest)
2220     PP.setLoadedMacroDirective(II, Earliest, Latest);
2221 }
2222 
2223 bool ASTReader::shouldDisableValidationForFile(
2224     const serialization::ModuleFile &M) const {
2225   if (DisableValidationKind == DisableValidationForModuleKind::None)
2226     return false;
2227 
2228   // If a PCH is loaded and validation is disabled for PCH then disable
2229   // validation for the PCH and the modules it loads.
2230   ModuleKind K = CurrentDeserializingModuleKind.getValueOr(M.Kind);
2231 
2232   switch (K) {
2233   case MK_MainFile:
2234   case MK_Preamble:
2235   case MK_PCH:
2236     return bool(DisableValidationKind & DisableValidationForModuleKind::PCH);
2237   case MK_ImplicitModule:
2238   case MK_ExplicitModule:
2239   case MK_PrebuiltModule:
2240     return bool(DisableValidationKind & DisableValidationForModuleKind::Module);
2241   }
2242 
2243   return false;
2244 }
2245 
2246 ASTReader::InputFileInfo
2247 ASTReader::readInputFileInfo(ModuleFile &F, unsigned ID) {
2248   // Go find this input file.
2249   BitstreamCursor &Cursor = F.InputFilesCursor;
2250   SavedStreamPosition SavedPosition(Cursor);
2251   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2252     // FIXME this drops errors on the floor.
2253     consumeError(std::move(Err));
2254   }
2255 
2256   Expected<unsigned> MaybeCode = Cursor.ReadCode();
2257   if (!MaybeCode) {
2258     // FIXME this drops errors on the floor.
2259     consumeError(MaybeCode.takeError());
2260   }
2261   unsigned Code = MaybeCode.get();
2262   RecordData Record;
2263   StringRef Blob;
2264 
2265   if (Expected<unsigned> Maybe = Cursor.readRecord(Code, Record, &Blob))
2266     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE &&
2267            "invalid record type for input file");
2268   else {
2269     // FIXME this drops errors on the floor.
2270     consumeError(Maybe.takeError());
2271   }
2272 
2273   assert(Record[0] == ID && "Bogus stored ID or offset");
2274   InputFileInfo R;
2275   R.StoredSize = static_cast<off_t>(Record[1]);
2276   R.StoredTime = static_cast<time_t>(Record[2]);
2277   R.Overridden = static_cast<bool>(Record[3]);
2278   R.Transient = static_cast<bool>(Record[4]);
2279   R.TopLevelModuleMap = static_cast<bool>(Record[5]);
2280   R.Filename = std::string(Blob);
2281   ResolveImportedPath(F, R.Filename);
2282 
2283   Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
2284   if (!MaybeEntry) // FIXME this drops errors on the floor.
2285     consumeError(MaybeEntry.takeError());
2286   llvm::BitstreamEntry Entry = MaybeEntry.get();
2287   assert(Entry.Kind == llvm::BitstreamEntry::Record &&
2288          "expected record type for input file hash");
2289 
2290   Record.clear();
2291   if (Expected<unsigned> Maybe = Cursor.readRecord(Entry.ID, Record))
2292     assert(static_cast<InputFileRecordTypes>(Maybe.get()) == INPUT_FILE_HASH &&
2293            "invalid record type for input file hash");
2294   else {
2295     // FIXME this drops errors on the floor.
2296     consumeError(Maybe.takeError());
2297   }
2298   R.ContentHash = (static_cast<uint64_t>(Record[1]) << 32) |
2299                   static_cast<uint64_t>(Record[0]);
2300   return R;
2301 }
2302 
2303 static unsigned moduleKindForDiagnostic(ModuleKind Kind);
2304 InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) {
2305   // If this ID is bogus, just return an empty input file.
2306   if (ID == 0 || ID > F.InputFilesLoaded.size())
2307     return InputFile();
2308 
2309   // If we've already loaded this input file, return it.
2310   if (F.InputFilesLoaded[ID-1].getFile())
2311     return F.InputFilesLoaded[ID-1];
2312 
2313   if (F.InputFilesLoaded[ID-1].isNotFound())
2314     return InputFile();
2315 
2316   // Go find this input file.
2317   BitstreamCursor &Cursor = F.InputFilesCursor;
2318   SavedStreamPosition SavedPosition(Cursor);
2319   if (llvm::Error Err = Cursor.JumpToBit(F.InputFileOffsets[ID - 1])) {
2320     // FIXME this drops errors on the floor.
2321     consumeError(std::move(Err));
2322   }
2323 
2324   InputFileInfo FI = readInputFileInfo(F, ID);
2325   off_t StoredSize = FI.StoredSize;
2326   time_t StoredTime = FI.StoredTime;
2327   bool Overridden = FI.Overridden;
2328   bool Transient = FI.Transient;
2329   StringRef Filename = FI.Filename;
2330   uint64_t StoredContentHash = FI.ContentHash;
2331 
2332   OptionalFileEntryRefDegradesToFileEntryPtr File =
2333       expectedToOptional(FileMgr.getFileRef(Filename, /*OpenFile=*/false));
2334 
2335   // If we didn't find the file, resolve it relative to the
2336   // original directory from which this AST file was created.
2337   if (!File && !F.OriginalDir.empty() && !F.BaseDirectory.empty() &&
2338       F.OriginalDir != F.BaseDirectory) {
2339     std::string Resolved = resolveFileRelativeToOriginalDir(
2340         std::string(Filename), F.OriginalDir, F.BaseDirectory);
2341     if (!Resolved.empty())
2342       File = expectedToOptional(FileMgr.getFileRef(Resolved));
2343   }
2344 
2345   // For an overridden file, create a virtual file with the stored
2346   // size/timestamp.
2347   if ((Overridden || Transient) && !File)
2348     File = FileMgr.getVirtualFileRef(Filename, StoredSize, StoredTime);
2349 
2350   if (!File) {
2351     if (Complain) {
2352       std::string ErrorStr = "could not find file '";
2353       ErrorStr += Filename;
2354       ErrorStr += "' referenced by AST file '";
2355       ErrorStr += F.FileName;
2356       ErrorStr += "'";
2357       Error(ErrorStr);
2358     }
2359     // Record that we didn't find the file.
2360     F.InputFilesLoaded[ID-1] = InputFile::getNotFound();
2361     return InputFile();
2362   }
2363 
2364   // Check if there was a request to override the contents of the file
2365   // that was part of the precompiled header. Overriding such a file
2366   // can lead to problems when lexing using the source locations from the
2367   // PCH.
2368   SourceManager &SM = getSourceManager();
2369   // FIXME: Reject if the overrides are different.
2370   if ((!Overridden && !Transient) && SM.isFileOverridden(File)) {
2371     if (Complain)
2372       Error(diag::err_fe_pch_file_overridden, Filename);
2373 
2374     // After emitting the diagnostic, bypass the overriding file to recover
2375     // (this creates a separate FileEntry).
2376     File = SM.bypassFileContentsOverride(*File);
2377     if (!File) {
2378       F.InputFilesLoaded[ID - 1] = InputFile::getNotFound();
2379       return InputFile();
2380     }
2381   }
2382 
2383   enum ModificationType {
2384     Size,
2385     ModTime,
2386     Content,
2387     None,
2388   };
2389   auto HasInputFileChanged = [&]() {
2390     if (StoredSize != File->getSize())
2391       return ModificationType::Size;
2392     if (!shouldDisableValidationForFile(F) && StoredTime &&
2393         StoredTime != File->getModificationTime()) {
2394       // In case the modification time changes but not the content,
2395       // accept the cached file as legit.
2396       if (ValidateASTInputFilesContent &&
2397           StoredContentHash != static_cast<uint64_t>(llvm::hash_code(-1))) {
2398         auto MemBuffOrError = FileMgr.getBufferForFile(File);
2399         if (!MemBuffOrError) {
2400           if (!Complain)
2401             return ModificationType::ModTime;
2402           std::string ErrorStr = "could not get buffer for file '";
2403           ErrorStr += File->getName();
2404           ErrorStr += "'";
2405           Error(ErrorStr);
2406           return ModificationType::ModTime;
2407         }
2408 
2409         auto ContentHash = hash_value(MemBuffOrError.get()->getBuffer());
2410         if (StoredContentHash == static_cast<uint64_t>(ContentHash))
2411           return ModificationType::None;
2412         return ModificationType::Content;
2413       }
2414       return ModificationType::ModTime;
2415     }
2416     return ModificationType::None;
2417   };
2418 
2419   bool IsOutOfDate = false;
2420   auto FileChange = HasInputFileChanged();
2421   // For an overridden file, there is nothing to validate.
2422   if (!Overridden && FileChange != ModificationType::None) {
2423     if (Complain && !Diags.isDiagnosticInFlight()) {
2424       // Build a list of the PCH imports that got us here (in reverse).
2425       SmallVector<ModuleFile *, 4> ImportStack(1, &F);
2426       while (!ImportStack.back()->ImportedBy.empty())
2427         ImportStack.push_back(ImportStack.back()->ImportedBy[0]);
2428 
2429       // The top-level PCH is stale.
2430       StringRef TopLevelPCHName(ImportStack.back()->FileName);
2431       Diag(diag::err_fe_ast_file_modified)
2432           << Filename << moduleKindForDiagnostic(ImportStack.back()->Kind)
2433           << TopLevelPCHName << FileChange;
2434 
2435       // Print the import stack.
2436       if (ImportStack.size() > 1) {
2437         Diag(diag::note_pch_required_by)
2438           << Filename << ImportStack[0]->FileName;
2439         for (unsigned I = 1; I < ImportStack.size(); ++I)
2440           Diag(diag::note_pch_required_by)
2441             << ImportStack[I-1]->FileName << ImportStack[I]->FileName;
2442       }
2443 
2444       Diag(diag::note_pch_rebuild_required) << TopLevelPCHName;
2445     }
2446 
2447     IsOutOfDate = true;
2448   }
2449   // FIXME: If the file is overridden and we've already opened it,
2450   // issue an error (or split it into a separate FileEntry).
2451 
2452   InputFile IF = InputFile(*File, Overridden || Transient, IsOutOfDate);
2453 
2454   // Note that we've loaded this input file.
2455   F.InputFilesLoaded[ID-1] = IF;
2456   return IF;
2457 }
2458 
2459 /// If we are loading a relocatable PCH or module file, and the filename
2460 /// is not an absolute path, add the system or module root to the beginning of
2461 /// the file name.
2462 void ASTReader::ResolveImportedPath(ModuleFile &M, std::string &Filename) {
2463   // Resolve relative to the base directory, if we have one.
2464   if (!M.BaseDirectory.empty())
2465     return ResolveImportedPath(Filename, M.BaseDirectory);
2466 }
2467 
2468 void ASTReader::ResolveImportedPath(std::string &Filename, StringRef Prefix) {
2469   if (Filename.empty() || llvm::sys::path::is_absolute(Filename))
2470     return;
2471 
2472   SmallString<128> Buffer;
2473   llvm::sys::path::append(Buffer, Prefix, Filename);
2474   Filename.assign(Buffer.begin(), Buffer.end());
2475 }
2476 
2477 static bool isDiagnosedResult(ASTReader::ASTReadResult ARR, unsigned Caps) {
2478   switch (ARR) {
2479   case ASTReader::Failure: return true;
2480   case ASTReader::Missing: return !(Caps & ASTReader::ARR_Missing);
2481   case ASTReader::OutOfDate: return !(Caps & ASTReader::ARR_OutOfDate);
2482   case ASTReader::VersionMismatch: return !(Caps & ASTReader::ARR_VersionMismatch);
2483   case ASTReader::ConfigurationMismatch:
2484     return !(Caps & ASTReader::ARR_ConfigurationMismatch);
2485   case ASTReader::HadErrors: return true;
2486   case ASTReader::Success: return false;
2487   }
2488 
2489   llvm_unreachable("unknown ASTReadResult");
2490 }
2491 
2492 ASTReader::ASTReadResult ASTReader::ReadOptionsBlock(
2493     BitstreamCursor &Stream, unsigned ClientLoadCapabilities,
2494     bool AllowCompatibleConfigurationMismatch, ASTReaderListener &Listener,
2495     std::string &SuggestedPredefines) {
2496   if (llvm::Error Err = Stream.EnterSubBlock(OPTIONS_BLOCK_ID)) {
2497     // FIXME this drops errors on the floor.
2498     consumeError(std::move(Err));
2499     return Failure;
2500   }
2501 
2502   // Read all of the records in the options block.
2503   RecordData Record;
2504   ASTReadResult Result = Success;
2505   while (true) {
2506     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2507     if (!MaybeEntry) {
2508       // FIXME this drops errors on the floor.
2509       consumeError(MaybeEntry.takeError());
2510       return Failure;
2511     }
2512     llvm::BitstreamEntry Entry = MaybeEntry.get();
2513 
2514     switch (Entry.Kind) {
2515     case llvm::BitstreamEntry::Error:
2516     case llvm::BitstreamEntry::SubBlock:
2517       return Failure;
2518 
2519     case llvm::BitstreamEntry::EndBlock:
2520       return Result;
2521 
2522     case llvm::BitstreamEntry::Record:
2523       // The interesting case.
2524       break;
2525     }
2526 
2527     // Read and process a record.
2528     Record.clear();
2529     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
2530     if (!MaybeRecordType) {
2531       // FIXME this drops errors on the floor.
2532       consumeError(MaybeRecordType.takeError());
2533       return Failure;
2534     }
2535     switch ((OptionsRecordTypes)MaybeRecordType.get()) {
2536     case LANGUAGE_OPTIONS: {
2537       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2538       if (ParseLanguageOptions(Record, Complain, Listener,
2539                                AllowCompatibleConfigurationMismatch))
2540         Result = ConfigurationMismatch;
2541       break;
2542     }
2543 
2544     case TARGET_OPTIONS: {
2545       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2546       if (ParseTargetOptions(Record, Complain, Listener,
2547                              AllowCompatibleConfigurationMismatch))
2548         Result = ConfigurationMismatch;
2549       break;
2550     }
2551 
2552     case FILE_SYSTEM_OPTIONS: {
2553       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2554       if (!AllowCompatibleConfigurationMismatch &&
2555           ParseFileSystemOptions(Record, Complain, Listener))
2556         Result = ConfigurationMismatch;
2557       break;
2558     }
2559 
2560     case HEADER_SEARCH_OPTIONS: {
2561       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2562       if (!AllowCompatibleConfigurationMismatch &&
2563           ParseHeaderSearchOptions(Record, Complain, Listener))
2564         Result = ConfigurationMismatch;
2565       break;
2566     }
2567 
2568     case PREPROCESSOR_OPTIONS:
2569       bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch) == 0;
2570       if (!AllowCompatibleConfigurationMismatch &&
2571           ParsePreprocessorOptions(Record, Complain, Listener,
2572                                    SuggestedPredefines))
2573         Result = ConfigurationMismatch;
2574       break;
2575     }
2576   }
2577 }
2578 
2579 ASTReader::ASTReadResult
2580 ASTReader::ReadControlBlock(ModuleFile &F,
2581                             SmallVectorImpl<ImportedModule> &Loaded,
2582                             const ModuleFile *ImportedBy,
2583                             unsigned ClientLoadCapabilities) {
2584   BitstreamCursor &Stream = F.Stream;
2585 
2586   if (llvm::Error Err = Stream.EnterSubBlock(CONTROL_BLOCK_ID)) {
2587     Error(std::move(Err));
2588     return Failure;
2589   }
2590 
2591   // Lambda to read the unhashed control block the first time it's called.
2592   //
2593   // For PCM files, the unhashed control block cannot be read until after the
2594   // MODULE_NAME record.  However, PCH files have no MODULE_NAME, and yet still
2595   // need to look ahead before reading the IMPORTS record.  For consistency,
2596   // this block is always read somehow (see BitstreamEntry::EndBlock).
2597   bool HasReadUnhashedControlBlock = false;
2598   auto readUnhashedControlBlockOnce = [&]() {
2599     if (!HasReadUnhashedControlBlock) {
2600       HasReadUnhashedControlBlock = true;
2601       if (ASTReadResult Result =
2602               readUnhashedControlBlock(F, ImportedBy, ClientLoadCapabilities))
2603         return Result;
2604     }
2605     return Success;
2606   };
2607 
2608   bool DisableValidation = shouldDisableValidationForFile(F);
2609 
2610   // Read all of the records and blocks in the control block.
2611   RecordData Record;
2612   unsigned NumInputs = 0;
2613   unsigned NumUserInputs = 0;
2614   StringRef BaseDirectoryAsWritten;
2615   while (true) {
2616     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2617     if (!MaybeEntry) {
2618       Error(MaybeEntry.takeError());
2619       return Failure;
2620     }
2621     llvm::BitstreamEntry Entry = MaybeEntry.get();
2622 
2623     switch (Entry.Kind) {
2624     case llvm::BitstreamEntry::Error:
2625       Error("malformed block record in AST file");
2626       return Failure;
2627     case llvm::BitstreamEntry::EndBlock: {
2628       // Validate the module before returning.  This call catches an AST with
2629       // no module name and no imports.
2630       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2631         return Result;
2632 
2633       // Validate input files.
2634       const HeaderSearchOptions &HSOpts =
2635           PP.getHeaderSearchInfo().getHeaderSearchOpts();
2636 
2637       // All user input files reside at the index range [0, NumUserInputs), and
2638       // system input files reside at [NumUserInputs, NumInputs). For explicitly
2639       // loaded module files, ignore missing inputs.
2640       if (!DisableValidation && F.Kind != MK_ExplicitModule &&
2641           F.Kind != MK_PrebuiltModule) {
2642         bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
2643 
2644         // If we are reading a module, we will create a verification timestamp,
2645         // so we verify all input files.  Otherwise, verify only user input
2646         // files.
2647 
2648         unsigned N = NumUserInputs;
2649         if (ValidateSystemInputs ||
2650             (HSOpts.ModulesValidateOncePerBuildSession &&
2651              F.InputFilesValidationTimestamp <= HSOpts.BuildSessionTimestamp &&
2652              F.Kind == MK_ImplicitModule))
2653           N = NumInputs;
2654 
2655         for (unsigned I = 0; I < N; ++I) {
2656           InputFile IF = getInputFile(F, I+1, Complain);
2657           if (!IF.getFile() || IF.isOutOfDate())
2658             return OutOfDate;
2659         }
2660       }
2661 
2662       if (Listener)
2663         Listener->visitModuleFile(F.FileName, F.Kind);
2664 
2665       if (Listener && Listener->needsInputFileVisitation()) {
2666         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs
2667                                                                 : NumUserInputs;
2668         for (unsigned I = 0; I < N; ++I) {
2669           bool IsSystem = I >= NumUserInputs;
2670           InputFileInfo FI = readInputFileInfo(F, I+1);
2671           Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
2672                                    F.Kind == MK_ExplicitModule ||
2673                                    F.Kind == MK_PrebuiltModule);
2674         }
2675       }
2676 
2677       return Success;
2678     }
2679 
2680     case llvm::BitstreamEntry::SubBlock:
2681       switch (Entry.ID) {
2682       case INPUT_FILES_BLOCK_ID:
2683         F.InputFilesCursor = Stream;
2684         if (llvm::Error Err = Stream.SkipBlock()) {
2685           Error(std::move(Err));
2686           return Failure;
2687         }
2688         if (ReadBlockAbbrevs(F.InputFilesCursor, INPUT_FILES_BLOCK_ID)) {
2689           Error("malformed block record in AST file");
2690           return Failure;
2691         }
2692         continue;
2693 
2694       case OPTIONS_BLOCK_ID:
2695         // If we're reading the first module for this group, check its options
2696         // are compatible with ours. For modules it imports, no further checking
2697         // is required, because we checked them when we built it.
2698         if (Listener && !ImportedBy) {
2699           // Should we allow the configuration of the module file to differ from
2700           // the configuration of the current translation unit in a compatible
2701           // way?
2702           //
2703           // FIXME: Allow this for files explicitly specified with -include-pch.
2704           bool AllowCompatibleConfigurationMismatch =
2705               F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
2706 
2707           ASTReadResult Result =
2708               ReadOptionsBlock(Stream, ClientLoadCapabilities,
2709                                AllowCompatibleConfigurationMismatch, *Listener,
2710                                SuggestedPredefines);
2711           if (Result == Failure) {
2712             Error("malformed block record in AST file");
2713             return Result;
2714           }
2715 
2716           if (DisableValidation ||
2717               (AllowConfigurationMismatch && Result == ConfigurationMismatch))
2718             Result = Success;
2719 
2720           // If we can't load the module, exit early since we likely
2721           // will rebuild the module anyway. The stream may be in the
2722           // middle of a block.
2723           if (Result != Success)
2724             return Result;
2725         } else if (llvm::Error Err = Stream.SkipBlock()) {
2726           Error(std::move(Err));
2727           return Failure;
2728         }
2729         continue;
2730 
2731       default:
2732         if (llvm::Error Err = Stream.SkipBlock()) {
2733           Error(std::move(Err));
2734           return Failure;
2735         }
2736         continue;
2737       }
2738 
2739     case llvm::BitstreamEntry::Record:
2740       // The interesting case.
2741       break;
2742     }
2743 
2744     // Read and process a record.
2745     Record.clear();
2746     StringRef Blob;
2747     Expected<unsigned> MaybeRecordType =
2748         Stream.readRecord(Entry.ID, Record, &Blob);
2749     if (!MaybeRecordType) {
2750       Error(MaybeRecordType.takeError());
2751       return Failure;
2752     }
2753     switch ((ControlRecordTypes)MaybeRecordType.get()) {
2754     case METADATA: {
2755       if (Record[0] != VERSION_MAJOR && !DisableValidation) {
2756         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2757           Diag(Record[0] < VERSION_MAJOR? diag::err_pch_version_too_old
2758                                         : diag::err_pch_version_too_new);
2759         return VersionMismatch;
2760       }
2761 
2762       bool hasErrors = Record[6];
2763       if (hasErrors && !DisableValidation) {
2764         // If requested by the caller and the module hasn't already been read
2765         // or compiled, mark modules on error as out-of-date.
2766         if ((ClientLoadCapabilities & ARR_TreatModuleWithErrorsAsOutOfDate) &&
2767             canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2768           return OutOfDate;
2769 
2770         if (!AllowASTWithCompilerErrors) {
2771           Diag(diag::err_pch_with_compiler_errors);
2772           return HadErrors;
2773         }
2774       }
2775       if (hasErrors) {
2776         Diags.ErrorOccurred = true;
2777         Diags.UncompilableErrorOccurred = true;
2778         Diags.UnrecoverableErrorOccurred = true;
2779       }
2780 
2781       F.RelocatablePCH = Record[4];
2782       // Relative paths in a relocatable PCH are relative to our sysroot.
2783       if (F.RelocatablePCH)
2784         F.BaseDirectory = isysroot.empty() ? "/" : isysroot;
2785 
2786       F.HasTimestamps = Record[5];
2787 
2788       const std::string &CurBranch = getClangFullRepositoryVersion();
2789       StringRef ASTBranch = Blob;
2790       if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {
2791         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
2792           Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;
2793         return VersionMismatch;
2794       }
2795       break;
2796     }
2797 
2798     case IMPORTS: {
2799       // Validate the AST before processing any imports (otherwise, untangling
2800       // them can be error-prone and expensive).  A module will have a name and
2801       // will already have been validated, but this catches the PCH case.
2802       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2803         return Result;
2804 
2805       // Load each of the imported PCH files.
2806       unsigned Idx = 0, N = Record.size();
2807       while (Idx < N) {
2808         // Read information about the AST file.
2809         ModuleKind ImportedKind = (ModuleKind)Record[Idx++];
2810         // The import location will be the local one for now; we will adjust
2811         // all import locations of module imports after the global source
2812         // location info are setup, in ReadAST.
2813         SourceLocation ImportLoc =
2814             ReadUntranslatedSourceLocation(Record[Idx++]);
2815         off_t StoredSize = (off_t)Record[Idx++];
2816         time_t StoredModTime = (time_t)Record[Idx++];
2817         auto FirstSignatureByte = Record.begin() + Idx;
2818         ASTFileSignature StoredSignature = ASTFileSignature::create(
2819             FirstSignatureByte, FirstSignatureByte + ASTFileSignature::size);
2820         Idx += ASTFileSignature::size;
2821 
2822         std::string ImportedName = ReadString(Record, Idx);
2823         std::string ImportedFile;
2824 
2825         // For prebuilt and explicit modules first consult the file map for
2826         // an override. Note that here we don't search prebuilt module
2827         // directories, only the explicit name to file mappings. Also, we will
2828         // still verify the size/signature making sure it is essentially the
2829         // same file but perhaps in a different location.
2830         if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule)
2831           ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName(
2832             ImportedName, /*FileMapOnly*/ true);
2833 
2834         if (ImportedFile.empty())
2835           // Use BaseDirectoryAsWritten to ensure we use the same path in the
2836           // ModuleCache as when writing.
2837           ImportedFile = ReadPath(BaseDirectoryAsWritten, Record, Idx);
2838         else
2839           SkipPath(Record, Idx);
2840 
2841         // If our client can't cope with us being out of date, we can't cope with
2842         // our dependency being missing.
2843         unsigned Capabilities = ClientLoadCapabilities;
2844         if ((ClientLoadCapabilities & ARR_OutOfDate) == 0)
2845           Capabilities &= ~ARR_Missing;
2846 
2847         // Load the AST file.
2848         auto Result = ReadASTCore(ImportedFile, ImportedKind, ImportLoc, &F,
2849                                   Loaded, StoredSize, StoredModTime,
2850                                   StoredSignature, Capabilities);
2851 
2852         // If we diagnosed a problem, produce a backtrace.
2853         bool recompilingFinalized =
2854             Result == OutOfDate && (Capabilities & ARR_OutOfDate) &&
2855             getModuleManager().getModuleCache().isPCMFinal(F.FileName);
2856         if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)
2857           Diag(diag::note_module_file_imported_by)
2858               << F.FileName << !F.ModuleName.empty() << F.ModuleName;
2859         if (recompilingFinalized)
2860           Diag(diag::note_module_file_conflict);
2861 
2862         switch (Result) {
2863         case Failure: return Failure;
2864           // If we have to ignore the dependency, we'll have to ignore this too.
2865         case Missing:
2866         case OutOfDate: return OutOfDate;
2867         case VersionMismatch: return VersionMismatch;
2868         case ConfigurationMismatch: return ConfigurationMismatch;
2869         case HadErrors: return HadErrors;
2870         case Success: break;
2871         }
2872       }
2873       break;
2874     }
2875 
2876     case ORIGINAL_FILE:
2877       F.OriginalSourceFileID = FileID::get(Record[0]);
2878       F.ActualOriginalSourceFileName = std::string(Blob);
2879       F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
2880       ResolveImportedPath(F, F.OriginalSourceFileName);
2881       break;
2882 
2883     case ORIGINAL_FILE_ID:
2884       F.OriginalSourceFileID = FileID::get(Record[0]);
2885       break;
2886 
2887     case ORIGINAL_PCH_DIR:
2888       F.OriginalDir = std::string(Blob);
2889       break;
2890 
2891     case MODULE_NAME:
2892       F.ModuleName = std::string(Blob);
2893       Diag(diag::remark_module_import)
2894           << F.ModuleName << F.FileName << (ImportedBy ? true : false)
2895           << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
2896       if (Listener)
2897         Listener->ReadModuleName(F.ModuleName);
2898 
2899       // Validate the AST as soon as we have a name so we can exit early on
2900       // failure.
2901       if (ASTReadResult Result = readUnhashedControlBlockOnce())
2902         return Result;
2903 
2904       break;
2905 
2906     case MODULE_DIRECTORY: {
2907       // Save the BaseDirectory as written in the PCM for computing the module
2908       // filename for the ModuleCache.
2909       BaseDirectoryAsWritten = Blob;
2910       assert(!F.ModuleName.empty() &&
2911              "MODULE_DIRECTORY found before MODULE_NAME");
2912       // If we've already loaded a module map file covering this module, we may
2913       // have a better path for it (relative to the current build).
2914       Module *M = PP.getHeaderSearchInfo().lookupModule(
2915           F.ModuleName, /*AllowSearch*/ true,
2916           /*AllowExtraModuleMapSearch*/ true);
2917       if (M && M->Directory) {
2918         // If we're implicitly loading a module, the base directory can't
2919         // change between the build and use.
2920         // Don't emit module relocation error if we have -fno-validate-pch
2921         if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
2922                   DisableValidationForModuleKind::Module) &&
2923             F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {
2924           auto BuildDir = PP.getFileManager().getDirectory(Blob);
2925           if (!BuildDir || *BuildDir != M->Directory) {
2926             if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
2927               Diag(diag::err_imported_module_relocated)
2928                   << F.ModuleName << Blob << M->Directory->getName();
2929             return OutOfDate;
2930           }
2931         }
2932         F.BaseDirectory = std::string(M->Directory->getName());
2933       } else {
2934         F.BaseDirectory = std::string(Blob);
2935       }
2936       break;
2937     }
2938 
2939     case MODULE_MAP_FILE:
2940       if (ASTReadResult Result =
2941               ReadModuleMapFileBlock(Record, F, ImportedBy, ClientLoadCapabilities))
2942         return Result;
2943       break;
2944 
2945     case INPUT_FILE_OFFSETS:
2946       NumInputs = Record[0];
2947       NumUserInputs = Record[1];
2948       F.InputFileOffsets =
2949           (const llvm::support::unaligned_uint64_t *)Blob.data();
2950       F.InputFilesLoaded.resize(NumInputs);
2951       F.NumUserInputFiles = NumUserInputs;
2952       break;
2953     }
2954   }
2955 }
2956 
2957 ASTReader::ASTReadResult
2958 ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
2959   BitstreamCursor &Stream = F.Stream;
2960 
2961   if (llvm::Error Err = Stream.EnterSubBlock(AST_BLOCK_ID)) {
2962     Error(std::move(Err));
2963     return Failure;
2964   }
2965   F.ASTBlockStartOffset = Stream.GetCurrentBitNo();
2966 
2967   // Read all of the records and blocks for the AST file.
2968   RecordData Record;
2969   while (true) {
2970     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
2971     if (!MaybeEntry) {
2972       Error(MaybeEntry.takeError());
2973       return Failure;
2974     }
2975     llvm::BitstreamEntry Entry = MaybeEntry.get();
2976 
2977     switch (Entry.Kind) {
2978     case llvm::BitstreamEntry::Error:
2979       Error("error at end of module block in AST file");
2980       return Failure;
2981     case llvm::BitstreamEntry::EndBlock:
2982       // Outside of C++, we do not store a lookup map for the translation unit.
2983       // Instead, mark it as needing a lookup map to be built if this module
2984       // contains any declarations lexically within it (which it always does!).
2985       // This usually has no cost, since we very rarely need the lookup map for
2986       // the translation unit outside C++.
2987       if (ASTContext *Ctx = ContextObj) {
2988         DeclContext *DC = Ctx->getTranslationUnitDecl();
2989         if (DC->hasExternalLexicalStorage() && !Ctx->getLangOpts().CPlusPlus)
2990           DC->setMustBuildLookupTable();
2991       }
2992 
2993       return Success;
2994     case llvm::BitstreamEntry::SubBlock:
2995       switch (Entry.ID) {
2996       case DECLTYPES_BLOCK_ID:
2997         // We lazily load the decls block, but we want to set up the
2998         // DeclsCursor cursor to point into it.  Clone our current bitcode
2999         // cursor to it, enter the block and read the abbrevs in that block.
3000         // With the main cursor, we just skip over it.
3001         F.DeclsCursor = Stream;
3002         if (llvm::Error Err = Stream.SkipBlock()) {
3003           Error(std::move(Err));
3004           return Failure;
3005         }
3006         if (ReadBlockAbbrevs(F.DeclsCursor, DECLTYPES_BLOCK_ID,
3007                              &F.DeclsBlockStartOffset)) {
3008           Error("malformed block record in AST file");
3009           return Failure;
3010         }
3011         break;
3012 
3013       case PREPROCESSOR_BLOCK_ID:
3014         F.MacroCursor = Stream;
3015         if (!PP.getExternalSource())
3016           PP.setExternalSource(this);
3017 
3018         if (llvm::Error Err = Stream.SkipBlock()) {
3019           Error(std::move(Err));
3020           return Failure;
3021         }
3022         if (ReadBlockAbbrevs(F.MacroCursor, PREPROCESSOR_BLOCK_ID)) {
3023           Error("malformed block record in AST file");
3024           return Failure;
3025         }
3026         F.MacroStartOffset = F.MacroCursor.GetCurrentBitNo();
3027         break;
3028 
3029       case PREPROCESSOR_DETAIL_BLOCK_ID:
3030         F.PreprocessorDetailCursor = Stream;
3031 
3032         if (llvm::Error Err = Stream.SkipBlock()) {
3033           Error(std::move(Err));
3034           return Failure;
3035         }
3036         if (ReadBlockAbbrevs(F.PreprocessorDetailCursor,
3037                              PREPROCESSOR_DETAIL_BLOCK_ID)) {
3038           Error("malformed preprocessor detail record in AST file");
3039           return Failure;
3040         }
3041         F.PreprocessorDetailStartOffset
3042         = F.PreprocessorDetailCursor.GetCurrentBitNo();
3043 
3044         if (!PP.getPreprocessingRecord())
3045           PP.createPreprocessingRecord();
3046         if (!PP.getPreprocessingRecord()->getExternalSource())
3047           PP.getPreprocessingRecord()->SetExternalSource(*this);
3048         break;
3049 
3050       case SOURCE_MANAGER_BLOCK_ID:
3051         if (ReadSourceManagerBlock(F))
3052           return Failure;
3053         break;
3054 
3055       case SUBMODULE_BLOCK_ID:
3056         if (ASTReadResult Result =
3057                 ReadSubmoduleBlock(F, ClientLoadCapabilities))
3058           return Result;
3059         break;
3060 
3061       case COMMENTS_BLOCK_ID: {
3062         BitstreamCursor C = Stream;
3063 
3064         if (llvm::Error Err = Stream.SkipBlock()) {
3065           Error(std::move(Err));
3066           return Failure;
3067         }
3068         if (ReadBlockAbbrevs(C, COMMENTS_BLOCK_ID)) {
3069           Error("malformed comments block in AST file");
3070           return Failure;
3071         }
3072         CommentsCursors.push_back(std::make_pair(C, &F));
3073         break;
3074       }
3075 
3076       default:
3077         if (llvm::Error Err = Stream.SkipBlock()) {
3078           Error(std::move(Err));
3079           return Failure;
3080         }
3081         break;
3082       }
3083       continue;
3084 
3085     case llvm::BitstreamEntry::Record:
3086       // The interesting case.
3087       break;
3088     }
3089 
3090     // Read and process a record.
3091     Record.clear();
3092     StringRef Blob;
3093     Expected<unsigned> MaybeRecordType =
3094         Stream.readRecord(Entry.ID, Record, &Blob);
3095     if (!MaybeRecordType) {
3096       Error(MaybeRecordType.takeError());
3097       return Failure;
3098     }
3099     ASTRecordTypes RecordType = (ASTRecordTypes)MaybeRecordType.get();
3100 
3101     // If we're not loading an AST context, we don't care about most records.
3102     if (!ContextObj) {
3103       switch (RecordType) {
3104       case IDENTIFIER_TABLE:
3105       case IDENTIFIER_OFFSET:
3106       case INTERESTING_IDENTIFIERS:
3107       case STATISTICS:
3108       case PP_CONDITIONAL_STACK:
3109       case PP_COUNTER_VALUE:
3110       case SOURCE_LOCATION_OFFSETS:
3111       case MODULE_OFFSET_MAP:
3112       case SOURCE_MANAGER_LINE_TABLE:
3113       case SOURCE_LOCATION_PRELOADS:
3114       case PPD_ENTITIES_OFFSETS:
3115       case HEADER_SEARCH_TABLE:
3116       case IMPORTED_MODULES:
3117       case MACRO_OFFSET:
3118         break;
3119       default:
3120         continue;
3121       }
3122     }
3123 
3124     switch (RecordType) {
3125     default:  // Default behavior: ignore.
3126       break;
3127 
3128     case TYPE_OFFSET: {
3129       if (F.LocalNumTypes != 0) {
3130         Error("duplicate TYPE_OFFSET record in AST file");
3131         return Failure;
3132       }
3133       F.TypeOffsets = reinterpret_cast<const UnderalignedInt64 *>(Blob.data());
3134       F.LocalNumTypes = Record[0];
3135       unsigned LocalBaseTypeIndex = Record[1];
3136       F.BaseTypeIndex = getTotalNumTypes();
3137 
3138       if (F.LocalNumTypes > 0) {
3139         // Introduce the global -> local mapping for types within this module.
3140         GlobalTypeMap.insert(std::make_pair(getTotalNumTypes(), &F));
3141 
3142         // Introduce the local -> global mapping for types within this module.
3143         F.TypeRemap.insertOrReplace(
3144           std::make_pair(LocalBaseTypeIndex,
3145                          F.BaseTypeIndex - LocalBaseTypeIndex));
3146 
3147         TypesLoaded.resize(TypesLoaded.size() + F.LocalNumTypes);
3148       }
3149       break;
3150     }
3151 
3152     case DECL_OFFSET: {
3153       if (F.LocalNumDecls != 0) {
3154         Error("duplicate DECL_OFFSET record in AST file");
3155         return Failure;
3156       }
3157       F.DeclOffsets = (const DeclOffset *)Blob.data();
3158       F.LocalNumDecls = Record[0];
3159       unsigned LocalBaseDeclID = Record[1];
3160       F.BaseDeclID = getTotalNumDecls();
3161 
3162       if (F.LocalNumDecls > 0) {
3163         // Introduce the global -> local mapping for declarations within this
3164         // module.
3165         GlobalDeclMap.insert(
3166           std::make_pair(getTotalNumDecls() + NUM_PREDEF_DECL_IDS, &F));
3167 
3168         // Introduce the local -> global mapping for declarations within this
3169         // module.
3170         F.DeclRemap.insertOrReplace(
3171           std::make_pair(LocalBaseDeclID, F.BaseDeclID - LocalBaseDeclID));
3172 
3173         // Introduce the global -> local mapping for declarations within this
3174         // module.
3175         F.GlobalToLocalDeclIDs[&F] = LocalBaseDeclID;
3176 
3177         DeclsLoaded.resize(DeclsLoaded.size() + F.LocalNumDecls);
3178       }
3179       break;
3180     }
3181 
3182     case TU_UPDATE_LEXICAL: {
3183       DeclContext *TU = ContextObj->getTranslationUnitDecl();
3184       LexicalContents Contents(
3185           reinterpret_cast<const llvm::support::unaligned_uint32_t *>(
3186               Blob.data()),
3187           static_cast<unsigned int>(Blob.size() / 4));
3188       TULexicalDecls.push_back(std::make_pair(&F, Contents));
3189       TU->setHasExternalLexicalStorage(true);
3190       break;
3191     }
3192 
3193     case UPDATE_VISIBLE: {
3194       unsigned Idx = 0;
3195       serialization::DeclID ID = ReadDeclID(F, Record, Idx);
3196       auto *Data = (const unsigned char*)Blob.data();
3197       PendingVisibleUpdates[ID].push_back(PendingVisibleUpdate{&F, Data});
3198       // If we've already loaded the decl, perform the updates when we finish
3199       // loading this block.
3200       if (Decl *D = GetExistingDecl(ID))
3201         PendingUpdateRecords.push_back(
3202             PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3203       break;
3204     }
3205 
3206     case IDENTIFIER_TABLE:
3207       F.IdentifierTableData =
3208           reinterpret_cast<const unsigned char *>(Blob.data());
3209       if (Record[0]) {
3210         F.IdentifierLookupTable = ASTIdentifierLookupTable::Create(
3211             F.IdentifierTableData + Record[0],
3212             F.IdentifierTableData + sizeof(uint32_t),
3213             F.IdentifierTableData,
3214             ASTIdentifierLookupTrait(*this, F));
3215 
3216         PP.getIdentifierTable().setExternalIdentifierLookup(this);
3217       }
3218       break;
3219 
3220     case IDENTIFIER_OFFSET: {
3221       if (F.LocalNumIdentifiers != 0) {
3222         Error("duplicate IDENTIFIER_OFFSET record in AST file");
3223         return Failure;
3224       }
3225       F.IdentifierOffsets = (const uint32_t *)Blob.data();
3226       F.LocalNumIdentifiers = Record[0];
3227       unsigned LocalBaseIdentifierID = Record[1];
3228       F.BaseIdentifierID = getTotalNumIdentifiers();
3229 
3230       if (F.LocalNumIdentifiers > 0) {
3231         // Introduce the global -> local mapping for identifiers within this
3232         // module.
3233         GlobalIdentifierMap.insert(std::make_pair(getTotalNumIdentifiers() + 1,
3234                                                   &F));
3235 
3236         // Introduce the local -> global mapping for identifiers within this
3237         // module.
3238         F.IdentifierRemap.insertOrReplace(
3239           std::make_pair(LocalBaseIdentifierID,
3240                          F.BaseIdentifierID - LocalBaseIdentifierID));
3241 
3242         IdentifiersLoaded.resize(IdentifiersLoaded.size()
3243                                  + F.LocalNumIdentifiers);
3244       }
3245       break;
3246     }
3247 
3248     case INTERESTING_IDENTIFIERS:
3249       F.PreloadIdentifierOffsets.assign(Record.begin(), Record.end());
3250       break;
3251 
3252     case EAGERLY_DESERIALIZED_DECLS:
3253       // FIXME: Skip reading this record if our ASTConsumer doesn't care
3254       // about "interesting" decls (for instance, if we're building a module).
3255       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3256         EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3257       break;
3258 
3259     case MODULAR_CODEGEN_DECLS:
3260       // FIXME: Skip reading this record if our ASTConsumer doesn't care about
3261       // them (ie: if we're not codegenerating this module).
3262       if (F.Kind == MK_MainFile ||
3263           getContext().getLangOpts().BuildingPCHWithObjectFile)
3264         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3265           EagerlyDeserializedDecls.push_back(getGlobalDeclID(F, Record[I]));
3266       break;
3267 
3268     case SPECIAL_TYPES:
3269       if (SpecialTypes.empty()) {
3270         for (unsigned I = 0, N = Record.size(); I != N; ++I)
3271           SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
3272         break;
3273       }
3274 
3275       if (SpecialTypes.size() != Record.size()) {
3276         Error("invalid special-types record");
3277         return Failure;
3278       }
3279 
3280       for (unsigned I = 0, N = Record.size(); I != N; ++I) {
3281         serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
3282         if (!SpecialTypes[I])
3283           SpecialTypes[I] = ID;
3284         // FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
3285         // merge step?
3286       }
3287       break;
3288 
3289     case STATISTICS:
3290       TotalNumStatements += Record[0];
3291       TotalNumMacros += Record[1];
3292       TotalLexicalDeclContexts += Record[2];
3293       TotalVisibleDeclContexts += Record[3];
3294       break;
3295 
3296     case UNUSED_FILESCOPED_DECLS:
3297       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3298         UnusedFileScopedDecls.push_back(getGlobalDeclID(F, Record[I]));
3299       break;
3300 
3301     case DELEGATING_CTORS:
3302       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3303         DelegatingCtorDecls.push_back(getGlobalDeclID(F, Record[I]));
3304       break;
3305 
3306     case WEAK_UNDECLARED_IDENTIFIERS:
3307       if (Record.size() % 4 != 0) {
3308         Error("invalid weak identifiers record");
3309         return Failure;
3310       }
3311 
3312       // FIXME: Ignore weak undeclared identifiers from non-original PCH
3313       // files. This isn't the way to do it :)
3314       WeakUndeclaredIdentifiers.clear();
3315 
3316       // Translate the weak, undeclared identifiers into global IDs.
3317       for (unsigned I = 0, N = Record.size(); I < N; /* in loop */) {
3318         WeakUndeclaredIdentifiers.push_back(
3319           getGlobalIdentifierID(F, Record[I++]));
3320         WeakUndeclaredIdentifiers.push_back(
3321           getGlobalIdentifierID(F, Record[I++]));
3322         WeakUndeclaredIdentifiers.push_back(
3323           ReadSourceLocation(F, Record, I).getRawEncoding());
3324         WeakUndeclaredIdentifiers.push_back(Record[I++]);
3325       }
3326       break;
3327 
3328     case SELECTOR_OFFSETS: {
3329       F.SelectorOffsets = (const uint32_t *)Blob.data();
3330       F.LocalNumSelectors = Record[0];
3331       unsigned LocalBaseSelectorID = Record[1];
3332       F.BaseSelectorID = getTotalNumSelectors();
3333 
3334       if (F.LocalNumSelectors > 0) {
3335         // Introduce the global -> local mapping for selectors within this
3336         // module.
3337         GlobalSelectorMap.insert(std::make_pair(getTotalNumSelectors()+1, &F));
3338 
3339         // Introduce the local -> global mapping for selectors within this
3340         // module.
3341         F.SelectorRemap.insertOrReplace(
3342           std::make_pair(LocalBaseSelectorID,
3343                          F.BaseSelectorID - LocalBaseSelectorID));
3344 
3345         SelectorsLoaded.resize(SelectorsLoaded.size() + F.LocalNumSelectors);
3346       }
3347       break;
3348     }
3349 
3350     case METHOD_POOL:
3351       F.SelectorLookupTableData = (const unsigned char *)Blob.data();
3352       if (Record[0])
3353         F.SelectorLookupTable
3354           = ASTSelectorLookupTable::Create(
3355                         F.SelectorLookupTableData + Record[0],
3356                         F.SelectorLookupTableData,
3357                         ASTSelectorLookupTrait(*this, F));
3358       TotalNumMethodPoolEntries += Record[1];
3359       break;
3360 
3361     case REFERENCED_SELECTOR_POOL:
3362       if (!Record.empty()) {
3363         for (unsigned Idx = 0, N = Record.size() - 1; Idx < N; /* in loop */) {
3364           ReferencedSelectorsData.push_back(getGlobalSelectorID(F,
3365                                                                 Record[Idx++]));
3366           ReferencedSelectorsData.push_back(ReadSourceLocation(F, Record, Idx).
3367                                               getRawEncoding());
3368         }
3369       }
3370       break;
3371 
3372     case PP_CONDITIONAL_STACK:
3373       if (!Record.empty()) {
3374         unsigned Idx = 0, End = Record.size() - 1;
3375         bool ReachedEOFWhileSkipping = Record[Idx++];
3376         llvm::Optional<Preprocessor::PreambleSkipInfo> SkipInfo;
3377         if (ReachedEOFWhileSkipping) {
3378           SourceLocation HashToken = ReadSourceLocation(F, Record, Idx);
3379           SourceLocation IfTokenLoc = ReadSourceLocation(F, Record, Idx);
3380           bool FoundNonSkipPortion = Record[Idx++];
3381           bool FoundElse = Record[Idx++];
3382           SourceLocation ElseLoc = ReadSourceLocation(F, Record, Idx);
3383           SkipInfo.emplace(HashToken, IfTokenLoc, FoundNonSkipPortion,
3384                            FoundElse, ElseLoc);
3385         }
3386         SmallVector<PPConditionalInfo, 4> ConditionalStack;
3387         while (Idx < End) {
3388           auto Loc = ReadSourceLocation(F, Record, Idx);
3389           bool WasSkipping = Record[Idx++];
3390           bool FoundNonSkip = Record[Idx++];
3391           bool FoundElse = Record[Idx++];
3392           ConditionalStack.push_back(
3393               {Loc, WasSkipping, FoundNonSkip, FoundElse});
3394         }
3395         PP.setReplayablePreambleConditionalStack(ConditionalStack, SkipInfo);
3396       }
3397       break;
3398 
3399     case PP_COUNTER_VALUE:
3400       if (!Record.empty() && Listener)
3401         Listener->ReadCounter(F, Record[0]);
3402       break;
3403 
3404     case FILE_SORTED_DECLS:
3405       F.FileSortedDecls = (const DeclID *)Blob.data();
3406       F.NumFileSortedDecls = Record[0];
3407       break;
3408 
3409     case SOURCE_LOCATION_OFFSETS: {
3410       F.SLocEntryOffsets = (const uint32_t *)Blob.data();
3411       F.LocalNumSLocEntries = Record[0];
3412       SourceLocation::UIntTy SLocSpaceSize = Record[1];
3413       F.SLocEntryOffsetsBase = Record[2] + F.SourceManagerBlockStartOffset;
3414       std::tie(F.SLocEntryBaseID, F.SLocEntryBaseOffset) =
3415           SourceMgr.AllocateLoadedSLocEntries(F.LocalNumSLocEntries,
3416                                               SLocSpaceSize);
3417       if (!F.SLocEntryBaseID) {
3418         Error("ran out of source locations");
3419         break;
3420       }
3421       // Make our entry in the range map. BaseID is negative and growing, so
3422       // we invert it. Because we invert it, though, we need the other end of
3423       // the range.
3424       unsigned RangeStart =
3425           unsigned(-F.SLocEntryBaseID) - F.LocalNumSLocEntries + 1;
3426       GlobalSLocEntryMap.insert(std::make_pair(RangeStart, &F));
3427       F.FirstLoc = SourceLocation::getFromRawEncoding(F.SLocEntryBaseOffset);
3428 
3429       // SLocEntryBaseOffset is lower than MaxLoadedOffset and decreasing.
3430       assert((F.SLocEntryBaseOffset & SourceLocation::MacroIDBit) == 0);
3431       GlobalSLocOffsetMap.insert(
3432           std::make_pair(SourceManager::MaxLoadedOffset - F.SLocEntryBaseOffset
3433                            - SLocSpaceSize,&F));
3434 
3435       // Initialize the remapping table.
3436       // Invalid stays invalid.
3437       F.SLocRemap.insertOrReplace(std::make_pair(0U, 0));
3438       // This module. Base was 2 when being compiled.
3439       F.SLocRemap.insertOrReplace(std::make_pair(
3440           2U, static_cast<SourceLocation::IntTy>(F.SLocEntryBaseOffset - 2)));
3441 
3442       TotalNumSLocEntries += F.LocalNumSLocEntries;
3443       break;
3444     }
3445 
3446     case MODULE_OFFSET_MAP:
3447       F.ModuleOffsetMap = Blob;
3448       break;
3449 
3450     case SOURCE_MANAGER_LINE_TABLE:
3451       if (ParseLineTable(F, Record)) {
3452         Error("malformed SOURCE_MANAGER_LINE_TABLE in AST file");
3453         return Failure;
3454       }
3455       break;
3456 
3457     case SOURCE_LOCATION_PRELOADS: {
3458       // Need to transform from the local view (1-based IDs) to the global view,
3459       // which is based off F.SLocEntryBaseID.
3460       if (!F.PreloadSLocEntries.empty()) {
3461         Error("Multiple SOURCE_LOCATION_PRELOADS records in AST file");
3462         return Failure;
3463       }
3464 
3465       F.PreloadSLocEntries.swap(Record);
3466       break;
3467     }
3468 
3469     case EXT_VECTOR_DECLS:
3470       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3471         ExtVectorDecls.push_back(getGlobalDeclID(F, Record[I]));
3472       break;
3473 
3474     case VTABLE_USES:
3475       if (Record.size() % 3 != 0) {
3476         Error("Invalid VTABLE_USES record");
3477         return Failure;
3478       }
3479 
3480       // Later tables overwrite earlier ones.
3481       // FIXME: Modules will have some trouble with this. This is clearly not
3482       // the right way to do this.
3483       VTableUses.clear();
3484 
3485       for (unsigned Idx = 0, N = Record.size(); Idx != N; /* In loop */) {
3486         VTableUses.push_back(getGlobalDeclID(F, Record[Idx++]));
3487         VTableUses.push_back(
3488           ReadSourceLocation(F, Record, Idx).getRawEncoding());
3489         VTableUses.push_back(Record[Idx++]);
3490       }
3491       break;
3492 
3493     case PENDING_IMPLICIT_INSTANTIATIONS:
3494       if (PendingInstantiations.size() % 2 != 0) {
3495         Error("Invalid existing PendingInstantiations");
3496         return Failure;
3497       }
3498 
3499       if (Record.size() % 2 != 0) {
3500         Error("Invalid PENDING_IMPLICIT_INSTANTIATIONS block");
3501         return Failure;
3502       }
3503 
3504       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3505         PendingInstantiations.push_back(getGlobalDeclID(F, Record[I++]));
3506         PendingInstantiations.push_back(
3507           ReadSourceLocation(F, Record, I).getRawEncoding());
3508       }
3509       break;
3510 
3511     case SEMA_DECL_REFS:
3512       if (Record.size() != 3) {
3513         Error("Invalid SEMA_DECL_REFS block");
3514         return Failure;
3515       }
3516       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3517         SemaDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3518       break;
3519 
3520     case PPD_ENTITIES_OFFSETS: {
3521       F.PreprocessedEntityOffsets = (const PPEntityOffset *)Blob.data();
3522       assert(Blob.size() % sizeof(PPEntityOffset) == 0);
3523       F.NumPreprocessedEntities = Blob.size() / sizeof(PPEntityOffset);
3524 
3525       unsigned LocalBasePreprocessedEntityID = Record[0];
3526 
3527       unsigned StartingID;
3528       if (!PP.getPreprocessingRecord())
3529         PP.createPreprocessingRecord();
3530       if (!PP.getPreprocessingRecord()->getExternalSource())
3531         PP.getPreprocessingRecord()->SetExternalSource(*this);
3532       StartingID
3533         = PP.getPreprocessingRecord()
3534             ->allocateLoadedEntities(F.NumPreprocessedEntities);
3535       F.BasePreprocessedEntityID = StartingID;
3536 
3537       if (F.NumPreprocessedEntities > 0) {
3538         // Introduce the global -> local mapping for preprocessed entities in
3539         // this module.
3540         GlobalPreprocessedEntityMap.insert(std::make_pair(StartingID, &F));
3541 
3542         // Introduce the local -> global mapping for preprocessed entities in
3543         // this module.
3544         F.PreprocessedEntityRemap.insertOrReplace(
3545           std::make_pair(LocalBasePreprocessedEntityID,
3546             F.BasePreprocessedEntityID - LocalBasePreprocessedEntityID));
3547       }
3548 
3549       break;
3550     }
3551 
3552     case PPD_SKIPPED_RANGES: {
3553       F.PreprocessedSkippedRangeOffsets = (const PPSkippedRange*)Blob.data();
3554       assert(Blob.size() % sizeof(PPSkippedRange) == 0);
3555       F.NumPreprocessedSkippedRanges = Blob.size() / sizeof(PPSkippedRange);
3556 
3557       if (!PP.getPreprocessingRecord())
3558         PP.createPreprocessingRecord();
3559       if (!PP.getPreprocessingRecord()->getExternalSource())
3560         PP.getPreprocessingRecord()->SetExternalSource(*this);
3561       F.BasePreprocessedSkippedRangeID = PP.getPreprocessingRecord()
3562           ->allocateSkippedRanges(F.NumPreprocessedSkippedRanges);
3563 
3564       if (F.NumPreprocessedSkippedRanges > 0)
3565         GlobalSkippedRangeMap.insert(
3566             std::make_pair(F.BasePreprocessedSkippedRangeID, &F));
3567       break;
3568     }
3569 
3570     case DECL_UPDATE_OFFSETS:
3571       if (Record.size() % 2 != 0) {
3572         Error("invalid DECL_UPDATE_OFFSETS block in AST file");
3573         return Failure;
3574       }
3575       for (unsigned I = 0, N = Record.size(); I != N; I += 2) {
3576         GlobalDeclID ID = getGlobalDeclID(F, Record[I]);
3577         DeclUpdateOffsets[ID].push_back(std::make_pair(&F, Record[I + 1]));
3578 
3579         // If we've already loaded the decl, perform the updates when we finish
3580         // loading this block.
3581         if (Decl *D = GetExistingDecl(ID))
3582           PendingUpdateRecords.push_back(
3583               PendingUpdateRecord(ID, D, /*JustLoaded=*/false));
3584       }
3585       break;
3586 
3587     case OBJC_CATEGORIES_MAP:
3588       if (F.LocalNumObjCCategoriesInMap != 0) {
3589         Error("duplicate OBJC_CATEGORIES_MAP record in AST file");
3590         return Failure;
3591       }
3592 
3593       F.LocalNumObjCCategoriesInMap = Record[0];
3594       F.ObjCCategoriesMap = (const ObjCCategoriesInfo *)Blob.data();
3595       break;
3596 
3597     case OBJC_CATEGORIES:
3598       F.ObjCCategories.swap(Record);
3599       break;
3600 
3601     case CUDA_SPECIAL_DECL_REFS:
3602       // Later tables overwrite earlier ones.
3603       // FIXME: Modules will have trouble with this.
3604       CUDASpecialDeclRefs.clear();
3605       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3606         CUDASpecialDeclRefs.push_back(getGlobalDeclID(F, Record[I]));
3607       break;
3608 
3609     case HEADER_SEARCH_TABLE:
3610       F.HeaderFileInfoTableData = Blob.data();
3611       F.LocalNumHeaderFileInfos = Record[1];
3612       if (Record[0]) {
3613         F.HeaderFileInfoTable
3614           = HeaderFileInfoLookupTable::Create(
3615                    (const unsigned char *)F.HeaderFileInfoTableData + Record[0],
3616                    (const unsigned char *)F.HeaderFileInfoTableData,
3617                    HeaderFileInfoTrait(*this, F,
3618                                        &PP.getHeaderSearchInfo(),
3619                                        Blob.data() + Record[2]));
3620 
3621         PP.getHeaderSearchInfo().SetExternalSource(this);
3622         if (!PP.getHeaderSearchInfo().getExternalLookup())
3623           PP.getHeaderSearchInfo().SetExternalLookup(this);
3624       }
3625       break;
3626 
3627     case FP_PRAGMA_OPTIONS:
3628       // Later tables overwrite earlier ones.
3629       FPPragmaOptions.swap(Record);
3630       break;
3631 
3632     case OPENCL_EXTENSIONS:
3633       for (unsigned I = 0, E = Record.size(); I != E; ) {
3634         auto Name = ReadString(Record, I);
3635         auto &OptInfo = OpenCLExtensions.OptMap[Name];
3636         OptInfo.Supported = Record[I++] != 0;
3637         OptInfo.Enabled = Record[I++] != 0;
3638         OptInfo.WithPragma = Record[I++] != 0;
3639         OptInfo.Avail = Record[I++];
3640         OptInfo.Core = Record[I++];
3641         OptInfo.Opt = Record[I++];
3642       }
3643       break;
3644 
3645     case TENTATIVE_DEFINITIONS:
3646       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3647         TentativeDefinitions.push_back(getGlobalDeclID(F, Record[I]));
3648       break;
3649 
3650     case KNOWN_NAMESPACES:
3651       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3652         KnownNamespaces.push_back(getGlobalDeclID(F, Record[I]));
3653       break;
3654 
3655     case UNDEFINED_BUT_USED:
3656       if (UndefinedButUsed.size() % 2 != 0) {
3657         Error("Invalid existing UndefinedButUsed");
3658         return Failure;
3659       }
3660 
3661       if (Record.size() % 2 != 0) {
3662         Error("invalid undefined-but-used record");
3663         return Failure;
3664       }
3665       for (unsigned I = 0, N = Record.size(); I != N; /* in loop */) {
3666         UndefinedButUsed.push_back(getGlobalDeclID(F, Record[I++]));
3667         UndefinedButUsed.push_back(
3668             ReadSourceLocation(F, Record, I).getRawEncoding());
3669       }
3670       break;
3671 
3672     case DELETE_EXPRS_TO_ANALYZE:
3673       for (unsigned I = 0, N = Record.size(); I != N;) {
3674         DelayedDeleteExprs.push_back(getGlobalDeclID(F, Record[I++]));
3675         const uint64_t Count = Record[I++];
3676         DelayedDeleteExprs.push_back(Count);
3677         for (uint64_t C = 0; C < Count; ++C) {
3678           DelayedDeleteExprs.push_back(ReadSourceLocation(F, Record, I).getRawEncoding());
3679           bool IsArrayForm = Record[I++] == 1;
3680           DelayedDeleteExprs.push_back(IsArrayForm);
3681         }
3682       }
3683       break;
3684 
3685     case IMPORTED_MODULES:
3686       if (!F.isModule()) {
3687         // If we aren't loading a module (which has its own exports), make
3688         // all of the imported modules visible.
3689         // FIXME: Deal with macros-only imports.
3690         for (unsigned I = 0, N = Record.size(); I != N; /**/) {
3691           unsigned GlobalID = getGlobalSubmoduleID(F, Record[I++]);
3692           SourceLocation Loc = ReadSourceLocation(F, Record, I);
3693           if (GlobalID) {
3694             ImportedModules.push_back(ImportedSubmodule(GlobalID, Loc));
3695             if (DeserializationListener)
3696               DeserializationListener->ModuleImportRead(GlobalID, Loc);
3697           }
3698         }
3699       }
3700       break;
3701 
3702     case MACRO_OFFSET: {
3703       if (F.LocalNumMacros != 0) {
3704         Error("duplicate MACRO_OFFSET record in AST file");
3705         return Failure;
3706       }
3707       F.MacroOffsets = (const uint32_t *)Blob.data();
3708       F.LocalNumMacros = Record[0];
3709       unsigned LocalBaseMacroID = Record[1];
3710       F.MacroOffsetsBase = Record[2] + F.ASTBlockStartOffset;
3711       F.BaseMacroID = getTotalNumMacros();
3712 
3713       if (F.LocalNumMacros > 0) {
3714         // Introduce the global -> local mapping for macros within this module.
3715         GlobalMacroMap.insert(std::make_pair(getTotalNumMacros() + 1, &F));
3716 
3717         // Introduce the local -> global mapping for macros within this module.
3718         F.MacroRemap.insertOrReplace(
3719           std::make_pair(LocalBaseMacroID,
3720                          F.BaseMacroID - LocalBaseMacroID));
3721 
3722         MacrosLoaded.resize(MacrosLoaded.size() + F.LocalNumMacros);
3723       }
3724       break;
3725     }
3726 
3727     case LATE_PARSED_TEMPLATE:
3728       LateParsedTemplates.emplace_back(
3729           std::piecewise_construct, std::forward_as_tuple(&F),
3730           std::forward_as_tuple(Record.begin(), Record.end()));
3731       break;
3732 
3733     case OPTIMIZE_PRAGMA_OPTIONS:
3734       if (Record.size() != 1) {
3735         Error("invalid pragma optimize record");
3736         return Failure;
3737       }
3738       OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]);
3739       break;
3740 
3741     case MSSTRUCT_PRAGMA_OPTIONS:
3742       if (Record.size() != 1) {
3743         Error("invalid pragma ms_struct record");
3744         return Failure;
3745       }
3746       PragmaMSStructState = Record[0];
3747       break;
3748 
3749     case POINTERS_TO_MEMBERS_PRAGMA_OPTIONS:
3750       if (Record.size() != 2) {
3751         Error("invalid pragma ms_struct record");
3752         return Failure;
3753       }
3754       PragmaMSPointersToMembersState = Record[0];
3755       PointersToMembersPragmaLocation = ReadSourceLocation(F, Record[1]);
3756       break;
3757 
3758     case UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES:
3759       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3760         UnusedLocalTypedefNameCandidates.push_back(
3761             getGlobalDeclID(F, Record[I]));
3762       break;
3763 
3764     case CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH:
3765       if (Record.size() != 1) {
3766         Error("invalid cuda pragma options record");
3767         return Failure;
3768       }
3769       ForceCUDAHostDeviceDepth = Record[0];
3770       break;
3771 
3772     case ALIGN_PACK_PRAGMA_OPTIONS: {
3773       if (Record.size() < 3) {
3774         Error("invalid pragma pack record");
3775         return Failure;
3776       }
3777       PragmaAlignPackCurrentValue = ReadAlignPackInfo(Record[0]);
3778       PragmaAlignPackCurrentLocation = ReadSourceLocation(F, Record[1]);
3779       unsigned NumStackEntries = Record[2];
3780       unsigned Idx = 3;
3781       // Reset the stack when importing a new module.
3782       PragmaAlignPackStack.clear();
3783       for (unsigned I = 0; I < NumStackEntries; ++I) {
3784         PragmaAlignPackStackEntry Entry;
3785         Entry.Value = ReadAlignPackInfo(Record[Idx++]);
3786         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3787         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3788         PragmaAlignPackStrings.push_back(ReadString(Record, Idx));
3789         Entry.SlotLabel = PragmaAlignPackStrings.back();
3790         PragmaAlignPackStack.push_back(Entry);
3791       }
3792       break;
3793     }
3794 
3795     case FLOAT_CONTROL_PRAGMA_OPTIONS: {
3796       if (Record.size() < 3) {
3797         Error("invalid pragma pack record");
3798         return Failure;
3799       }
3800       FpPragmaCurrentValue = FPOptionsOverride::getFromOpaqueInt(Record[0]);
3801       FpPragmaCurrentLocation = ReadSourceLocation(F, Record[1]);
3802       unsigned NumStackEntries = Record[2];
3803       unsigned Idx = 3;
3804       // Reset the stack when importing a new module.
3805       FpPragmaStack.clear();
3806       for (unsigned I = 0; I < NumStackEntries; ++I) {
3807         FpPragmaStackEntry Entry;
3808         Entry.Value = FPOptionsOverride::getFromOpaqueInt(Record[Idx++]);
3809         Entry.Location = ReadSourceLocation(F, Record[Idx++]);
3810         Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
3811         FpPragmaStrings.push_back(ReadString(Record, Idx));
3812         Entry.SlotLabel = FpPragmaStrings.back();
3813         FpPragmaStack.push_back(Entry);
3814       }
3815       break;
3816     }
3817 
3818     case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS:
3819       for (unsigned I = 0, N = Record.size(); I != N; ++I)
3820         DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I]));
3821       break;
3822     }
3823   }
3824 }
3825 
3826 void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const {
3827   assert(!F.ModuleOffsetMap.empty() && "no module offset map to read");
3828 
3829   // Additional remapping information.
3830   const unsigned char *Data = (const unsigned char*)F.ModuleOffsetMap.data();
3831   const unsigned char *DataEnd = Data + F.ModuleOffsetMap.size();
3832   F.ModuleOffsetMap = StringRef();
3833 
3834   // If we see this entry before SOURCE_LOCATION_OFFSETS, add placeholders.
3835   if (F.SLocRemap.find(0) == F.SLocRemap.end()) {
3836     F.SLocRemap.insert(std::make_pair(0U, 0));
3837     F.SLocRemap.insert(std::make_pair(2U, 1));
3838   }
3839 
3840   // Continuous range maps we may be updating in our module.
3841   using SLocRemapBuilder =
3842       ContinuousRangeMap<SourceLocation::UIntTy, SourceLocation::IntTy,
3843                          2>::Builder;
3844   using RemapBuilder = ContinuousRangeMap<uint32_t, int, 2>::Builder;
3845   SLocRemapBuilder SLocRemap(F.SLocRemap);
3846   RemapBuilder IdentifierRemap(F.IdentifierRemap);
3847   RemapBuilder MacroRemap(F.MacroRemap);
3848   RemapBuilder PreprocessedEntityRemap(F.PreprocessedEntityRemap);
3849   RemapBuilder SubmoduleRemap(F.SubmoduleRemap);
3850   RemapBuilder SelectorRemap(F.SelectorRemap);
3851   RemapBuilder DeclRemap(F.DeclRemap);
3852   RemapBuilder TypeRemap(F.TypeRemap);
3853 
3854   while (Data < DataEnd) {
3855     // FIXME: Looking up dependency modules by filename is horrible. Let's
3856     // start fixing this with prebuilt, explicit and implicit modules and see
3857     // how it goes...
3858     using namespace llvm::support;
3859     ModuleKind Kind = static_cast<ModuleKind>(
3860       endian::readNext<uint8_t, little, unaligned>(Data));
3861     uint16_t Len = endian::readNext<uint16_t, little, unaligned>(Data);
3862     StringRef Name = StringRef((const char*)Data, Len);
3863     Data += Len;
3864     ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule ||
3865                               Kind == MK_ImplicitModule
3866                           ? ModuleMgr.lookupByModuleName(Name)
3867                           : ModuleMgr.lookupByFileName(Name));
3868     if (!OM) {
3869       std::string Msg =
3870           "SourceLocation remap refers to unknown module, cannot find ";
3871       Msg.append(std::string(Name));
3872       Error(Msg);
3873       return;
3874     }
3875 
3876     SourceLocation::UIntTy SLocOffset =
3877         endian::readNext<uint32_t, little, unaligned>(Data);
3878     uint32_t IdentifierIDOffset =
3879         endian::readNext<uint32_t, little, unaligned>(Data);
3880     uint32_t MacroIDOffset =
3881         endian::readNext<uint32_t, little, unaligned>(Data);
3882     uint32_t PreprocessedEntityIDOffset =
3883         endian::readNext<uint32_t, little, unaligned>(Data);
3884     uint32_t SubmoduleIDOffset =
3885         endian::readNext<uint32_t, little, unaligned>(Data);
3886     uint32_t SelectorIDOffset =
3887         endian::readNext<uint32_t, little, unaligned>(Data);
3888     uint32_t DeclIDOffset =
3889         endian::readNext<uint32_t, little, unaligned>(Data);
3890     uint32_t TypeIndexOffset =
3891         endian::readNext<uint32_t, little, unaligned>(Data);
3892 
3893     auto mapOffset = [&](uint32_t Offset, uint32_t BaseOffset,
3894                          RemapBuilder &Remap) {
3895       constexpr uint32_t None = std::numeric_limits<uint32_t>::max();
3896       if (Offset != None)
3897         Remap.insert(std::make_pair(Offset,
3898                                     static_cast<int>(BaseOffset - Offset)));
3899     };
3900 
3901     constexpr SourceLocation::UIntTy SLocNone =
3902         std::numeric_limits<SourceLocation::UIntTy>::max();
3903     if (SLocOffset != SLocNone)
3904       SLocRemap.insert(std::make_pair(
3905           SLocOffset, static_cast<SourceLocation::IntTy>(
3906                           OM->SLocEntryBaseOffset - SLocOffset)));
3907 
3908     mapOffset(IdentifierIDOffset, OM->BaseIdentifierID, IdentifierRemap);
3909     mapOffset(MacroIDOffset, OM->BaseMacroID, MacroRemap);
3910     mapOffset(PreprocessedEntityIDOffset, OM->BasePreprocessedEntityID,
3911               PreprocessedEntityRemap);
3912     mapOffset(SubmoduleIDOffset, OM->BaseSubmoduleID, SubmoduleRemap);
3913     mapOffset(SelectorIDOffset, OM->BaseSelectorID, SelectorRemap);
3914     mapOffset(DeclIDOffset, OM->BaseDeclID, DeclRemap);
3915     mapOffset(TypeIndexOffset, OM->BaseTypeIndex, TypeRemap);
3916 
3917     // Global -> local mappings.
3918     F.GlobalToLocalDeclIDs[OM] = DeclIDOffset;
3919   }
3920 }
3921 
3922 ASTReader::ASTReadResult
3923 ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F,
3924                                   const ModuleFile *ImportedBy,
3925                                   unsigned ClientLoadCapabilities) {
3926   unsigned Idx = 0;
3927   F.ModuleMapPath = ReadPath(F, Record, Idx);
3928 
3929   // Try to resolve ModuleName in the current header search context and
3930   // verify that it is found in the same module map file as we saved. If the
3931   // top-level AST file is a main file, skip this check because there is no
3932   // usable header search context.
3933   assert(!F.ModuleName.empty() &&
3934          "MODULE_NAME should come before MODULE_MAP_FILE");
3935   if (F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {
3936     // An implicitly-loaded module file should have its module listed in some
3937     // module map file that we've already loaded.
3938     Module *M = PP.getHeaderSearchInfo().lookupModule(F.ModuleName);
3939     auto &Map = PP.getHeaderSearchInfo().getModuleMap();
3940     const FileEntry *ModMap = M ? Map.getModuleMapFileForUniquing(M) : nullptr;
3941     // Don't emit module relocation error if we have -fno-validate-pch
3942     if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
3943               DisableValidationForModuleKind::Module) &&
3944         !ModMap) {
3945       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {
3946         if (auto ASTFE = M ? M->getASTFile() : None) {
3947           // This module was defined by an imported (explicit) module.
3948           Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName
3949                                                << ASTFE->getName();
3950         } else {
3951           // This module was built with a different module map.
3952           Diag(diag::err_imported_module_not_found)
3953               << F.ModuleName << F.FileName
3954               << (ImportedBy ? ImportedBy->FileName : "") << F.ModuleMapPath
3955               << !ImportedBy;
3956           // In case it was imported by a PCH, there's a chance the user is
3957           // just missing to include the search path to the directory containing
3958           // the modulemap.
3959           if (ImportedBy && ImportedBy->Kind == MK_PCH)
3960             Diag(diag::note_imported_by_pch_module_not_found)
3961                 << llvm::sys::path::parent_path(F.ModuleMapPath);
3962         }
3963       }
3964       return OutOfDate;
3965     }
3966 
3967     assert(M && M->Name == F.ModuleName && "found module with different name");
3968 
3969     // Check the primary module map file.
3970     auto StoredModMap = FileMgr.getFile(F.ModuleMapPath);
3971     if (!StoredModMap || *StoredModMap != ModMap) {
3972       assert(ModMap && "found module is missing module map file");
3973       assert((ImportedBy || F.Kind == MK_ImplicitModule) &&
3974              "top-level import should be verified");
3975       bool NotImported = F.Kind == MK_ImplicitModule && !ImportedBy;
3976       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3977         Diag(diag::err_imported_module_modmap_changed)
3978             << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName)
3979             << ModMap->getName() << F.ModuleMapPath << NotImported;
3980       return OutOfDate;
3981     }
3982 
3983     llvm::SmallPtrSet<const FileEntry *, 1> AdditionalStoredMaps;
3984     for (unsigned I = 0, N = Record[Idx++]; I < N; ++I) {
3985       // FIXME: we should use input files rather than storing names.
3986       std::string Filename = ReadPath(F, Record, Idx);
3987       auto SF = FileMgr.getFile(Filename, false, false);
3988       if (!SF) {
3989         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
3990           Error("could not find file '" + Filename +"' referenced by AST file");
3991         return OutOfDate;
3992       }
3993       AdditionalStoredMaps.insert(*SF);
3994     }
3995 
3996     // Check any additional module map files (e.g. module.private.modulemap)
3997     // that are not in the pcm.
3998     if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {
3999       for (const FileEntry *ModMap : *AdditionalModuleMaps) {
4000         // Remove files that match
4001         // Note: SmallPtrSet::erase is really remove
4002         if (!AdditionalStoredMaps.erase(ModMap)) {
4003           if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
4004             Diag(diag::err_module_different_modmap)
4005               << F.ModuleName << /*new*/0 << ModMap->getName();
4006           return OutOfDate;
4007         }
4008       }
4009     }
4010 
4011     // Check any additional module map files that are in the pcm, but not
4012     // found in header search. Cases that match are already removed.
4013     for (const FileEntry *ModMap : AdditionalStoredMaps) {
4014       if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))
4015         Diag(diag::err_module_different_modmap)
4016           << F.ModuleName << /*not new*/1 << ModMap->getName();
4017       return OutOfDate;
4018     }
4019   }
4020 
4021   if (Listener)
4022     Listener->ReadModuleMapFile(F.ModuleMapPath);
4023   return Success;
4024 }
4025 
4026 /// Move the given method to the back of the global list of methods.
4027 static void moveMethodToBackOfGlobalList(Sema &S, ObjCMethodDecl *Method) {
4028   // Find the entry for this selector in the method pool.
4029   Sema::GlobalMethodPool::iterator Known
4030     = S.MethodPool.find(Method->getSelector());
4031   if (Known == S.MethodPool.end())
4032     return;
4033 
4034   // Retrieve the appropriate method list.
4035   ObjCMethodList &Start = Method->isInstanceMethod()? Known->second.first
4036                                                     : Known->second.second;
4037   bool Found = false;
4038   for (ObjCMethodList *List = &Start; List; List = List->getNext()) {
4039     if (!Found) {
4040       if (List->getMethod() == Method) {
4041         Found = true;
4042       } else {
4043         // Keep searching.
4044         continue;
4045       }
4046     }
4047 
4048     if (List->getNext())
4049       List->setMethod(List->getNext()->getMethod());
4050     else
4051       List->setMethod(Method);
4052   }
4053 }
4054 
4055 void ASTReader::makeNamesVisible(const HiddenNames &Names, Module *Owner) {
4056   assert(Owner->NameVisibility != Module::Hidden && "nothing to make visible?");
4057   for (Decl *D : Names) {
4058     bool wasHidden = !D->isUnconditionallyVisible();
4059     D->setVisibleDespiteOwningModule();
4060 
4061     if (wasHidden && SemaObj) {
4062       if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D)) {
4063         moveMethodToBackOfGlobalList(*SemaObj, Method);
4064       }
4065     }
4066   }
4067 }
4068 
4069 void ASTReader::makeModuleVisible(Module *Mod,
4070                                   Module::NameVisibilityKind NameVisibility,
4071                                   SourceLocation ImportLoc) {
4072   llvm::SmallPtrSet<Module *, 4> Visited;
4073   SmallVector<Module *, 4> Stack;
4074   Stack.push_back(Mod);
4075   while (!Stack.empty()) {
4076     Mod = Stack.pop_back_val();
4077 
4078     if (NameVisibility <= Mod->NameVisibility) {
4079       // This module already has this level of visibility (or greater), so
4080       // there is nothing more to do.
4081       continue;
4082     }
4083 
4084     if (Mod->isUnimportable()) {
4085       // Modules that aren't importable cannot be made visible.
4086       continue;
4087     }
4088 
4089     // Update the module's name visibility.
4090     Mod->NameVisibility = NameVisibility;
4091 
4092     // If we've already deserialized any names from this module,
4093     // mark them as visible.
4094     HiddenNamesMapType::iterator Hidden = HiddenNamesMap.find(Mod);
4095     if (Hidden != HiddenNamesMap.end()) {
4096       auto HiddenNames = std::move(*Hidden);
4097       HiddenNamesMap.erase(Hidden);
4098       makeNamesVisible(HiddenNames.second, HiddenNames.first);
4099       assert(HiddenNamesMap.find(Mod) == HiddenNamesMap.end() &&
4100              "making names visible added hidden names");
4101     }
4102 
4103     // Push any exported modules onto the stack to be marked as visible.
4104     SmallVector<Module *, 16> Exports;
4105     Mod->getExportedModules(Exports);
4106     for (SmallVectorImpl<Module *>::iterator
4107            I = Exports.begin(), E = Exports.end(); I != E; ++I) {
4108       Module *Exported = *I;
4109       if (Visited.insert(Exported).second)
4110         Stack.push_back(Exported);
4111     }
4112   }
4113 }
4114 
4115 /// We've merged the definition \p MergedDef into the existing definition
4116 /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made
4117 /// visible.
4118 void ASTReader::mergeDefinitionVisibility(NamedDecl *Def,
4119                                           NamedDecl *MergedDef) {
4120   if (!Def->isUnconditionallyVisible()) {
4121     // If MergedDef is visible or becomes visible, make the definition visible.
4122     if (MergedDef->isUnconditionallyVisible())
4123       Def->setVisibleDespiteOwningModule();
4124     else {
4125       getContext().mergeDefinitionIntoModule(
4126           Def, MergedDef->getImportedOwningModule(),
4127           /*NotifyListeners*/ false);
4128       PendingMergedDefinitionsToDeduplicate.insert(Def);
4129     }
4130   }
4131 }
4132 
4133 bool ASTReader::loadGlobalIndex() {
4134   if (GlobalIndex)
4135     return false;
4136 
4137   if (TriedLoadingGlobalIndex || !UseGlobalIndex ||
4138       !PP.getLangOpts().Modules)
4139     return true;
4140 
4141   // Try to load the global index.
4142   TriedLoadingGlobalIndex = true;
4143   StringRef ModuleCachePath
4144     = getPreprocessor().getHeaderSearchInfo().getModuleCachePath();
4145   std::pair<GlobalModuleIndex *, llvm::Error> Result =
4146       GlobalModuleIndex::readIndex(ModuleCachePath);
4147   if (llvm::Error Err = std::move(Result.second)) {
4148     assert(!Result.first);
4149     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
4150     return true;
4151   }
4152 
4153   GlobalIndex.reset(Result.first);
4154   ModuleMgr.setGlobalIndex(GlobalIndex.get());
4155   return false;
4156 }
4157 
4158 bool ASTReader::isGlobalIndexUnavailable() const {
4159   return PP.getLangOpts().Modules && UseGlobalIndex &&
4160          !hasGlobalIndex() && TriedLoadingGlobalIndex;
4161 }
4162 
4163 static void updateModuleTimestamp(ModuleFile &MF) {
4164   // Overwrite the timestamp file contents so that file's mtime changes.
4165   std::string TimestampFilename = MF.getTimestampFilename();
4166   std::error_code EC;
4167   llvm::raw_fd_ostream OS(TimestampFilename, EC,
4168                           llvm::sys::fs::OF_TextWithCRLF);
4169   if (EC)
4170     return;
4171   OS << "Timestamp file\n";
4172   OS.close();
4173   OS.clear_error(); // Avoid triggering a fatal error.
4174 }
4175 
4176 /// Given a cursor at the start of an AST file, scan ahead and drop the
4177 /// cursor into the start of the given block ID, returning false on success and
4178 /// true on failure.
4179 static bool SkipCursorToBlock(BitstreamCursor &Cursor, unsigned BlockID) {
4180   while (true) {
4181     Expected<llvm::BitstreamEntry> MaybeEntry = Cursor.advance();
4182     if (!MaybeEntry) {
4183       // FIXME this drops errors on the floor.
4184       consumeError(MaybeEntry.takeError());
4185       return true;
4186     }
4187     llvm::BitstreamEntry Entry = MaybeEntry.get();
4188 
4189     switch (Entry.Kind) {
4190     case llvm::BitstreamEntry::Error:
4191     case llvm::BitstreamEntry::EndBlock:
4192       return true;
4193 
4194     case llvm::BitstreamEntry::Record:
4195       // Ignore top-level records.
4196       if (Expected<unsigned> Skipped = Cursor.skipRecord(Entry.ID))
4197         break;
4198       else {
4199         // FIXME this drops errors on the floor.
4200         consumeError(Skipped.takeError());
4201         return true;
4202       }
4203 
4204     case llvm::BitstreamEntry::SubBlock:
4205       if (Entry.ID == BlockID) {
4206         if (llvm::Error Err = Cursor.EnterSubBlock(BlockID)) {
4207           // FIXME this drops the error on the floor.
4208           consumeError(std::move(Err));
4209           return true;
4210         }
4211         // Found it!
4212         return false;
4213       }
4214 
4215       if (llvm::Error Err = Cursor.SkipBlock()) {
4216         // FIXME this drops the error on the floor.
4217         consumeError(std::move(Err));
4218         return true;
4219       }
4220     }
4221   }
4222 }
4223 
4224 ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
4225                                             ModuleKind Type,
4226                                             SourceLocation ImportLoc,
4227                                             unsigned ClientLoadCapabilities,
4228                                             SmallVectorImpl<ImportedSubmodule> *Imported) {
4229   llvm::SaveAndRestore<SourceLocation>
4230     SetCurImportLocRAII(CurrentImportLoc, ImportLoc);
4231   llvm::SaveAndRestore<Optional<ModuleKind>> SetCurModuleKindRAII(
4232       CurrentDeserializingModuleKind, Type);
4233 
4234   // Defer any pending actions until we get to the end of reading the AST file.
4235   Deserializing AnASTFile(this);
4236 
4237   // Bump the generation number.
4238   unsigned PreviousGeneration = 0;
4239   if (ContextObj)
4240     PreviousGeneration = incrementGeneration(*ContextObj);
4241 
4242   unsigned NumModules = ModuleMgr.size();
4243   SmallVector<ImportedModule, 4> Loaded;
4244   if (ASTReadResult ReadResult =
4245           ReadASTCore(FileName, Type, ImportLoc,
4246                       /*ImportedBy=*/nullptr, Loaded, 0, 0, ASTFileSignature(),
4247                       ClientLoadCapabilities)) {
4248     ModuleMgr.removeModules(ModuleMgr.begin() + NumModules,
4249                             PP.getLangOpts().Modules
4250                                 ? &PP.getHeaderSearchInfo().getModuleMap()
4251                                 : nullptr);
4252 
4253     // If we find that any modules are unusable, the global index is going
4254     // to be out-of-date. Just remove it.
4255     GlobalIndex.reset();
4256     ModuleMgr.setGlobalIndex(nullptr);
4257     return ReadResult;
4258   }
4259 
4260   // Here comes stuff that we only do once the entire chain is loaded.
4261 
4262   // Load the AST blocks of all of the modules that we loaded.  We can still
4263   // hit errors parsing the ASTs at this point.
4264   for (ImportedModule &M : Loaded) {
4265     ModuleFile &F = *M.Mod;
4266 
4267     // Read the AST block.
4268     if (ASTReadResult Result = ReadASTBlock(F, ClientLoadCapabilities))
4269       return Failure;
4270 
4271     // The AST block should always have a definition for the main module.
4272     if (F.isModule() && !F.DidReadTopLevelSubmodule) {
4273       Error(diag::err_module_file_missing_top_level_submodule, F.FileName);
4274       return Failure;
4275     }
4276 
4277     // Read the extension blocks.
4278     while (!SkipCursorToBlock(F.Stream, EXTENSION_BLOCK_ID)) {
4279       if (ASTReadResult Result = ReadExtensionBlock(F))
4280         return Failure;
4281     }
4282 
4283     // Once read, set the ModuleFile bit base offset and update the size in
4284     // bits of all files we've seen.
4285     F.GlobalBitOffset = TotalModulesSizeInBits;
4286     TotalModulesSizeInBits += F.SizeInBits;
4287     GlobalBitOffsetsMap.insert(std::make_pair(F.GlobalBitOffset, &F));
4288   }
4289 
4290   // Preload source locations and interesting indentifiers.
4291   for (ImportedModule &M : Loaded) {
4292     ModuleFile &F = *M.Mod;
4293 
4294     // Preload SLocEntries.
4295     for (unsigned I = 0, N = F.PreloadSLocEntries.size(); I != N; ++I) {
4296       int Index = int(F.PreloadSLocEntries[I] - 1) + F.SLocEntryBaseID;
4297       // Load it through the SourceManager and don't call ReadSLocEntry()
4298       // directly because the entry may have already been loaded in which case
4299       // calling ReadSLocEntry() directly would trigger an assertion in
4300       // SourceManager.
4301       SourceMgr.getLoadedSLocEntryByID(Index);
4302     }
4303 
4304     // Map the original source file ID into the ID space of the current
4305     // compilation.
4306     if (F.OriginalSourceFileID.isValid()) {
4307       F.OriginalSourceFileID = FileID::get(
4308           F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4309     }
4310 
4311     // Preload all the pending interesting identifiers by marking them out of
4312     // date.
4313     for (auto Offset : F.PreloadIdentifierOffsets) {
4314       const unsigned char *Data = F.IdentifierTableData + Offset;
4315 
4316       ASTIdentifierLookupTrait Trait(*this, F);
4317       auto KeyDataLen = Trait.ReadKeyDataLength(Data);
4318       auto Key = Trait.ReadKey(Data, KeyDataLen.first);
4319       auto &II = PP.getIdentifierTable().getOwn(Key);
4320       II.setOutOfDate(true);
4321 
4322       // Mark this identifier as being from an AST file so that we can track
4323       // whether we need to serialize it.
4324       markIdentifierFromAST(*this, II);
4325 
4326       // Associate the ID with the identifier so that the writer can reuse it.
4327       auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
4328       SetIdentifierInfo(ID, &II);
4329     }
4330   }
4331 
4332   // Setup the import locations and notify the module manager that we've
4333   // committed to these module files.
4334   for (ImportedModule &M : Loaded) {
4335     ModuleFile &F = *M.Mod;
4336 
4337     ModuleMgr.moduleFileAccepted(&F);
4338 
4339     // Set the import location.
4340     F.DirectImportLoc = ImportLoc;
4341     // FIXME: We assume that locations from PCH / preamble do not need
4342     // any translation.
4343     if (!M.ImportedBy)
4344       F.ImportLoc = M.ImportLoc;
4345     else
4346       F.ImportLoc = TranslateSourceLocation(*M.ImportedBy, M.ImportLoc);
4347   }
4348 
4349   if (!PP.getLangOpts().CPlusPlus ||
4350       (Type != MK_ImplicitModule && Type != MK_ExplicitModule &&
4351        Type != MK_PrebuiltModule)) {
4352     // Mark all of the identifiers in the identifier table as being out of date,
4353     // so that various accessors know to check the loaded modules when the
4354     // identifier is used.
4355     //
4356     // For C++ modules, we don't need information on many identifiers (just
4357     // those that provide macros or are poisoned), so we mark all of
4358     // the interesting ones via PreloadIdentifierOffsets.
4359     for (IdentifierTable::iterator Id = PP.getIdentifierTable().begin(),
4360                                 IdEnd = PP.getIdentifierTable().end();
4361          Id != IdEnd; ++Id)
4362       Id->second->setOutOfDate(true);
4363   }
4364   // Mark selectors as out of date.
4365   for (auto Sel : SelectorGeneration)
4366     SelectorOutOfDate[Sel.first] = true;
4367 
4368   // Resolve any unresolved module exports.
4369   for (unsigned I = 0, N = UnresolvedModuleRefs.size(); I != N; ++I) {
4370     UnresolvedModuleRef &Unresolved = UnresolvedModuleRefs[I];
4371     SubmoduleID GlobalID = getGlobalSubmoduleID(*Unresolved.File,Unresolved.ID);
4372     Module *ResolvedMod = getSubmodule(GlobalID);
4373 
4374     switch (Unresolved.Kind) {
4375     case UnresolvedModuleRef::Conflict:
4376       if (ResolvedMod) {
4377         Module::Conflict Conflict;
4378         Conflict.Other = ResolvedMod;
4379         Conflict.Message = Unresolved.String.str();
4380         Unresolved.Mod->Conflicts.push_back(Conflict);
4381       }
4382       continue;
4383 
4384     case UnresolvedModuleRef::Import:
4385       if (ResolvedMod)
4386         Unresolved.Mod->Imports.insert(ResolvedMod);
4387       continue;
4388 
4389     case UnresolvedModuleRef::Export:
4390       if (ResolvedMod || Unresolved.IsWildcard)
4391         Unresolved.Mod->Exports.push_back(
4392           Module::ExportDecl(ResolvedMod, Unresolved.IsWildcard));
4393       continue;
4394     }
4395   }
4396   UnresolvedModuleRefs.clear();
4397 
4398   if (Imported)
4399     Imported->append(ImportedModules.begin(),
4400                      ImportedModules.end());
4401 
4402   // FIXME: How do we load the 'use'd modules? They may not be submodules.
4403   // Might be unnecessary as use declarations are only used to build the
4404   // module itself.
4405 
4406   if (ContextObj)
4407     InitializeContext();
4408 
4409   if (SemaObj)
4410     UpdateSema();
4411 
4412   if (DeserializationListener)
4413     DeserializationListener->ReaderInitialized(this);
4414 
4415   ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
4416   if (PrimaryModule.OriginalSourceFileID.isValid()) {
4417     // If this AST file is a precompiled preamble, then set the
4418     // preamble file ID of the source manager to the file source file
4419     // from which the preamble was built.
4420     if (Type == MK_Preamble) {
4421       SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
4422     } else if (Type == MK_MainFile) {
4423       SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
4424     }
4425   }
4426 
4427   // For any Objective-C class definitions we have already loaded, make sure
4428   // that we load any additional categories.
4429   if (ContextObj) {
4430     for (unsigned I = 0, N = ObjCClassesLoaded.size(); I != N; ++I) {
4431       loadObjCCategories(ObjCClassesLoaded[I]->getGlobalID(),
4432                          ObjCClassesLoaded[I],
4433                          PreviousGeneration);
4434     }
4435   }
4436 
4437   if (PP.getHeaderSearchInfo()
4438           .getHeaderSearchOpts()
4439           .ModulesValidateOncePerBuildSession) {
4440     // Now we are certain that the module and all modules it depends on are
4441     // up to date.  Create or update timestamp files for modules that are
4442     // located in the module cache (not for PCH files that could be anywhere
4443     // in the filesystem).
4444     for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
4445       ImportedModule &M = Loaded[I];
4446       if (M.Mod->Kind == MK_ImplicitModule) {
4447         updateModuleTimestamp(*M.Mod);
4448       }
4449     }
4450   }
4451 
4452   return Success;
4453 }
4454 
4455 static ASTFileSignature readASTFileSignature(StringRef PCH);
4456 
4457 /// Whether \p Stream doesn't start with the AST/PCH file magic number 'CPCH'.
4458 static llvm::Error doesntStartWithASTFileMagic(BitstreamCursor &Stream) {
4459   // FIXME checking magic headers is done in other places such as
4460   // SerializedDiagnosticReader and GlobalModuleIndex, but error handling isn't
4461   // always done the same. Unify it all with a helper.
4462   if (!Stream.canSkipToPos(4))
4463     return llvm::createStringError(std::errc::illegal_byte_sequence,
4464                                    "file too small to contain AST file magic");
4465   for (unsigned C : {'C', 'P', 'C', 'H'})
4466     if (Expected<llvm::SimpleBitstreamCursor::word_t> Res = Stream.Read(8)) {
4467       if (Res.get() != C)
4468         return llvm::createStringError(
4469             std::errc::illegal_byte_sequence,
4470             "file doesn't start with AST file magic");
4471     } else
4472       return Res.takeError();
4473   return llvm::Error::success();
4474 }
4475 
4476 static unsigned moduleKindForDiagnostic(ModuleKind Kind) {
4477   switch (Kind) {
4478   case MK_PCH:
4479     return 0; // PCH
4480   case MK_ImplicitModule:
4481   case MK_ExplicitModule:
4482   case MK_PrebuiltModule:
4483     return 1; // module
4484   case MK_MainFile:
4485   case MK_Preamble:
4486     return 2; // main source file
4487   }
4488   llvm_unreachable("unknown module kind");
4489 }
4490 
4491 ASTReader::ASTReadResult
4492 ASTReader::ReadASTCore(StringRef FileName,
4493                        ModuleKind Type,
4494                        SourceLocation ImportLoc,
4495                        ModuleFile *ImportedBy,
4496                        SmallVectorImpl<ImportedModule> &Loaded,
4497                        off_t ExpectedSize, time_t ExpectedModTime,
4498                        ASTFileSignature ExpectedSignature,
4499                        unsigned ClientLoadCapabilities) {
4500   ModuleFile *M;
4501   std::string ErrorStr;
4502   ModuleManager::AddModuleResult AddResult
4503     = ModuleMgr.addModule(FileName, Type, ImportLoc, ImportedBy,
4504                           getGeneration(), ExpectedSize, ExpectedModTime,
4505                           ExpectedSignature, readASTFileSignature,
4506                           M, ErrorStr);
4507 
4508   switch (AddResult) {
4509   case ModuleManager::AlreadyLoaded:
4510     Diag(diag::remark_module_import)
4511         << M->ModuleName << M->FileName << (ImportedBy ? true : false)
4512         << (ImportedBy ? StringRef(ImportedBy->ModuleName) : StringRef());
4513     return Success;
4514 
4515   case ModuleManager::NewlyLoaded:
4516     // Load module file below.
4517     break;
4518 
4519   case ModuleManager::Missing:
4520     // The module file was missing; if the client can handle that, return
4521     // it.
4522     if (ClientLoadCapabilities & ARR_Missing)
4523       return Missing;
4524 
4525     // Otherwise, return an error.
4526     Diag(diag::err_ast_file_not_found)
4527         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4528         << ErrorStr;
4529     return Failure;
4530 
4531   case ModuleManager::OutOfDate:
4532     // We couldn't load the module file because it is out-of-date. If the
4533     // client can handle out-of-date, return it.
4534     if (ClientLoadCapabilities & ARR_OutOfDate)
4535       return OutOfDate;
4536 
4537     // Otherwise, return an error.
4538     Diag(diag::err_ast_file_out_of_date)
4539         << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty()
4540         << ErrorStr;
4541     return Failure;
4542   }
4543 
4544   assert(M && "Missing module file");
4545 
4546   bool ShouldFinalizePCM = false;
4547   auto FinalizeOrDropPCM = llvm::make_scope_exit([&]() {
4548     auto &MC = getModuleManager().getModuleCache();
4549     if (ShouldFinalizePCM)
4550       MC.finalizePCM(FileName);
4551     else
4552       MC.tryToDropPCM(FileName);
4553   });
4554   ModuleFile &F = *M;
4555   BitstreamCursor &Stream = F.Stream;
4556   Stream = BitstreamCursor(PCHContainerRdr.ExtractPCH(*F.Buffer));
4557   F.SizeInBits = F.Buffer->getBufferSize() * 8;
4558 
4559   // Sniff for the signature.
4560   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4561     Diag(diag::err_ast_file_invalid)
4562         << moduleKindForDiagnostic(Type) << FileName << std::move(Err);
4563     return Failure;
4564   }
4565 
4566   // This is used for compatibility with older PCH formats.
4567   bool HaveReadControlBlock = false;
4568   while (true) {
4569     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4570     if (!MaybeEntry) {
4571       Error(MaybeEntry.takeError());
4572       return Failure;
4573     }
4574     llvm::BitstreamEntry Entry = MaybeEntry.get();
4575 
4576     switch (Entry.Kind) {
4577     case llvm::BitstreamEntry::Error:
4578     case llvm::BitstreamEntry::Record:
4579     case llvm::BitstreamEntry::EndBlock:
4580       Error("invalid record at top-level of AST file");
4581       return Failure;
4582 
4583     case llvm::BitstreamEntry::SubBlock:
4584       break;
4585     }
4586 
4587     switch (Entry.ID) {
4588     case CONTROL_BLOCK_ID:
4589       HaveReadControlBlock = true;
4590       switch (ReadControlBlock(F, Loaded, ImportedBy, ClientLoadCapabilities)) {
4591       case Success:
4592         // Check that we didn't try to load a non-module AST file as a module.
4593         //
4594         // FIXME: Should we also perform the converse check? Loading a module as
4595         // a PCH file sort of works, but it's a bit wonky.
4596         if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule ||
4597              Type == MK_PrebuiltModule) &&
4598             F.ModuleName.empty()) {
4599           auto Result = (Type == MK_ImplicitModule) ? OutOfDate : Failure;
4600           if (Result != OutOfDate ||
4601               (ClientLoadCapabilities & ARR_OutOfDate) == 0)
4602             Diag(diag::err_module_file_not_module) << FileName;
4603           return Result;
4604         }
4605         break;
4606 
4607       case Failure: return Failure;
4608       case Missing: return Missing;
4609       case OutOfDate: return OutOfDate;
4610       case VersionMismatch: return VersionMismatch;
4611       case ConfigurationMismatch: return ConfigurationMismatch;
4612       case HadErrors: return HadErrors;
4613       }
4614       break;
4615 
4616     case AST_BLOCK_ID:
4617       if (!HaveReadControlBlock) {
4618         if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)
4619           Diag(diag::err_pch_version_too_old);
4620         return VersionMismatch;
4621       }
4622 
4623       // Record that we've loaded this module.
4624       Loaded.push_back(ImportedModule(M, ImportedBy, ImportLoc));
4625       ShouldFinalizePCM = true;
4626       return Success;
4627 
4628     case UNHASHED_CONTROL_BLOCK_ID:
4629       // This block is handled using look-ahead during ReadControlBlock.  We
4630       // shouldn't get here!
4631       Error("malformed block record in AST file");
4632       return Failure;
4633 
4634     default:
4635       if (llvm::Error Err = Stream.SkipBlock()) {
4636         Error(std::move(Err));
4637         return Failure;
4638       }
4639       break;
4640     }
4641   }
4642 
4643   llvm_unreachable("unexpected break; expected return");
4644 }
4645 
4646 ASTReader::ASTReadResult
4647 ASTReader::readUnhashedControlBlock(ModuleFile &F, bool WasImportedBy,
4648                                     unsigned ClientLoadCapabilities) {
4649   const HeaderSearchOptions &HSOpts =
4650       PP.getHeaderSearchInfo().getHeaderSearchOpts();
4651   bool AllowCompatibleConfigurationMismatch =
4652       F.Kind == MK_ExplicitModule || F.Kind == MK_PrebuiltModule;
4653   bool DisableValidation = shouldDisableValidationForFile(F);
4654 
4655   ASTReadResult Result = readUnhashedControlBlockImpl(
4656       &F, F.Data, ClientLoadCapabilities, AllowCompatibleConfigurationMismatch,
4657       Listener.get(),
4658       WasImportedBy ? false : HSOpts.ModulesValidateDiagnosticOptions);
4659 
4660   // If F was directly imported by another module, it's implicitly validated by
4661   // the importing module.
4662   if (DisableValidation || WasImportedBy ||
4663       (AllowConfigurationMismatch && Result == ConfigurationMismatch))
4664     return Success;
4665 
4666   if (Result == Failure) {
4667     Error("malformed block record in AST file");
4668     return Failure;
4669   }
4670 
4671   if (Result == OutOfDate && F.Kind == MK_ImplicitModule) {
4672     // If this module has already been finalized in the ModuleCache, we're stuck
4673     // with it; we can only load a single version of each module.
4674     //
4675     // This can happen when a module is imported in two contexts: in one, as a
4676     // user module; in another, as a system module (due to an import from
4677     // another module marked with the [system] flag).  It usually indicates a
4678     // bug in the module map: this module should also be marked with [system].
4679     //
4680     // If -Wno-system-headers (the default), and the first import is as a
4681     // system module, then validation will fail during the as-user import,
4682     // since -Werror flags won't have been validated.  However, it's reasonable
4683     // to treat this consistently as a system module.
4684     //
4685     // If -Wsystem-headers, the PCM on disk was built with
4686     // -Wno-system-headers, and the first import is as a user module, then
4687     // validation will fail during the as-system import since the PCM on disk
4688     // doesn't guarantee that -Werror was respected.  However, the -Werror
4689     // flags were checked during the initial as-user import.
4690     if (getModuleManager().getModuleCache().isPCMFinal(F.FileName)) {
4691       Diag(diag::warn_module_system_bit_conflict) << F.FileName;
4692       return Success;
4693     }
4694   }
4695 
4696   return Result;
4697 }
4698 
4699 ASTReader::ASTReadResult ASTReader::readUnhashedControlBlockImpl(
4700     ModuleFile *F, llvm::StringRef StreamData, unsigned ClientLoadCapabilities,
4701     bool AllowCompatibleConfigurationMismatch, ASTReaderListener *Listener,
4702     bool ValidateDiagnosticOptions) {
4703   // Initialize a stream.
4704   BitstreamCursor Stream(StreamData);
4705 
4706   // Sniff for the signature.
4707   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
4708     // FIXME this drops the error on the floor.
4709     consumeError(std::move(Err));
4710     return Failure;
4711   }
4712 
4713   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
4714   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
4715     return Failure;
4716 
4717   // Read all of the records in the options block.
4718   RecordData Record;
4719   ASTReadResult Result = Success;
4720   while (true) {
4721     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4722     if (!MaybeEntry) {
4723       // FIXME this drops the error on the floor.
4724       consumeError(MaybeEntry.takeError());
4725       return Failure;
4726     }
4727     llvm::BitstreamEntry Entry = MaybeEntry.get();
4728 
4729     switch (Entry.Kind) {
4730     case llvm::BitstreamEntry::Error:
4731     case llvm::BitstreamEntry::SubBlock:
4732       return Failure;
4733 
4734     case llvm::BitstreamEntry::EndBlock:
4735       return Result;
4736 
4737     case llvm::BitstreamEntry::Record:
4738       // The interesting case.
4739       break;
4740     }
4741 
4742     // Read and process a record.
4743     Record.clear();
4744     Expected<unsigned> MaybeRecordType = Stream.readRecord(Entry.ID, Record);
4745     if (!MaybeRecordType) {
4746       // FIXME this drops the error.
4747       return Failure;
4748     }
4749     switch ((UnhashedControlBlockRecordTypes)MaybeRecordType.get()) {
4750     case SIGNATURE:
4751       if (F)
4752         F->Signature = ASTFileSignature::create(Record.begin(), Record.end());
4753       break;
4754     case AST_BLOCK_HASH:
4755       if (F)
4756         F->ASTBlockHash =
4757             ASTFileSignature::create(Record.begin(), Record.end());
4758       break;
4759     case DIAGNOSTIC_OPTIONS: {
4760       bool Complain = (ClientLoadCapabilities & ARR_OutOfDate) == 0;
4761       if (Listener && ValidateDiagnosticOptions &&
4762           !AllowCompatibleConfigurationMismatch &&
4763           ParseDiagnosticOptions(Record, Complain, *Listener))
4764         Result = OutOfDate; // Don't return early.  Read the signature.
4765       break;
4766     }
4767     case DIAG_PRAGMA_MAPPINGS:
4768       if (!F)
4769         break;
4770       if (F->PragmaDiagMappings.empty())
4771         F->PragmaDiagMappings.swap(Record);
4772       else
4773         F->PragmaDiagMappings.insert(F->PragmaDiagMappings.end(),
4774                                      Record.begin(), Record.end());
4775       break;
4776     }
4777   }
4778 }
4779 
4780 /// Parse a record and blob containing module file extension metadata.
4781 static bool parseModuleFileExtensionMetadata(
4782               const SmallVectorImpl<uint64_t> &Record,
4783               StringRef Blob,
4784               ModuleFileExtensionMetadata &Metadata) {
4785   if (Record.size() < 4) return true;
4786 
4787   Metadata.MajorVersion = Record[0];
4788   Metadata.MinorVersion = Record[1];
4789 
4790   unsigned BlockNameLen = Record[2];
4791   unsigned UserInfoLen = Record[3];
4792 
4793   if (BlockNameLen + UserInfoLen > Blob.size()) return true;
4794 
4795   Metadata.BlockName = std::string(Blob.data(), Blob.data() + BlockNameLen);
4796   Metadata.UserInfo = std::string(Blob.data() + BlockNameLen,
4797                                   Blob.data() + BlockNameLen + UserInfoLen);
4798   return false;
4799 }
4800 
4801 ASTReader::ASTReadResult ASTReader::ReadExtensionBlock(ModuleFile &F) {
4802   BitstreamCursor &Stream = F.Stream;
4803 
4804   RecordData Record;
4805   while (true) {
4806     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
4807     if (!MaybeEntry) {
4808       Error(MaybeEntry.takeError());
4809       return Failure;
4810     }
4811     llvm::BitstreamEntry Entry = MaybeEntry.get();
4812 
4813     switch (Entry.Kind) {
4814     case llvm::BitstreamEntry::SubBlock:
4815       if (llvm::Error Err = Stream.SkipBlock()) {
4816         Error(std::move(Err));
4817         return Failure;
4818       }
4819       continue;
4820 
4821     case llvm::BitstreamEntry::EndBlock:
4822       return Success;
4823 
4824     case llvm::BitstreamEntry::Error:
4825       return HadErrors;
4826 
4827     case llvm::BitstreamEntry::Record:
4828       break;
4829     }
4830 
4831     Record.clear();
4832     StringRef Blob;
4833     Expected<unsigned> MaybeRecCode =
4834         Stream.readRecord(Entry.ID, Record, &Blob);
4835     if (!MaybeRecCode) {
4836       Error(MaybeRecCode.takeError());
4837       return Failure;
4838     }
4839     switch (MaybeRecCode.get()) {
4840     case EXTENSION_METADATA: {
4841       ModuleFileExtensionMetadata Metadata;
4842       if (parseModuleFileExtensionMetadata(Record, Blob, Metadata)) {
4843         Error("malformed EXTENSION_METADATA in AST file");
4844         return Failure;
4845       }
4846 
4847       // Find a module file extension with this block name.
4848       auto Known = ModuleFileExtensions.find(Metadata.BlockName);
4849       if (Known == ModuleFileExtensions.end()) break;
4850 
4851       // Form a reader.
4852       if (auto Reader = Known->second->createExtensionReader(Metadata, *this,
4853                                                              F, Stream)) {
4854         F.ExtensionReaders.push_back(std::move(Reader));
4855       }
4856 
4857       break;
4858     }
4859     }
4860   }
4861 
4862   return Success;
4863 }
4864 
4865 void ASTReader::InitializeContext() {
4866   assert(ContextObj && "no context to initialize");
4867   ASTContext &Context = *ContextObj;
4868 
4869   // If there's a listener, notify them that we "read" the translation unit.
4870   if (DeserializationListener)
4871     DeserializationListener->DeclRead(PREDEF_DECL_TRANSLATION_UNIT_ID,
4872                                       Context.getTranslationUnitDecl());
4873 
4874   // FIXME: Find a better way to deal with collisions between these
4875   // built-in types. Right now, we just ignore the problem.
4876 
4877   // Load the special types.
4878   if (SpecialTypes.size() >= NumSpecialTypeIDs) {
4879     if (unsigned String = SpecialTypes[SPECIAL_TYPE_CF_CONSTANT_STRING]) {
4880       if (!Context.CFConstantStringTypeDecl)
4881         Context.setCFConstantStringType(GetType(String));
4882     }
4883 
4884     if (unsigned File = SpecialTypes[SPECIAL_TYPE_FILE]) {
4885       QualType FileType = GetType(File);
4886       if (FileType.isNull()) {
4887         Error("FILE type is NULL");
4888         return;
4889       }
4890 
4891       if (!Context.FILEDecl) {
4892         if (const TypedefType *Typedef = FileType->getAs<TypedefType>())
4893           Context.setFILEDecl(Typedef->getDecl());
4894         else {
4895           const TagType *Tag = FileType->getAs<TagType>();
4896           if (!Tag) {
4897             Error("Invalid FILE type in AST file");
4898             return;
4899           }
4900           Context.setFILEDecl(Tag->getDecl());
4901         }
4902       }
4903     }
4904 
4905     if (unsigned Jmp_buf = SpecialTypes[SPECIAL_TYPE_JMP_BUF]) {
4906       QualType Jmp_bufType = GetType(Jmp_buf);
4907       if (Jmp_bufType.isNull()) {
4908         Error("jmp_buf type is NULL");
4909         return;
4910       }
4911 
4912       if (!Context.jmp_bufDecl) {
4913         if (const TypedefType *Typedef = Jmp_bufType->getAs<TypedefType>())
4914           Context.setjmp_bufDecl(Typedef->getDecl());
4915         else {
4916           const TagType *Tag = Jmp_bufType->getAs<TagType>();
4917           if (!Tag) {
4918             Error("Invalid jmp_buf type in AST file");
4919             return;
4920           }
4921           Context.setjmp_bufDecl(Tag->getDecl());
4922         }
4923       }
4924     }
4925 
4926     if (unsigned Sigjmp_buf = SpecialTypes[SPECIAL_TYPE_SIGJMP_BUF]) {
4927       QualType Sigjmp_bufType = GetType(Sigjmp_buf);
4928       if (Sigjmp_bufType.isNull()) {
4929         Error("sigjmp_buf type is NULL");
4930         return;
4931       }
4932 
4933       if (!Context.sigjmp_bufDecl) {
4934         if (const TypedefType *Typedef = Sigjmp_bufType->getAs<TypedefType>())
4935           Context.setsigjmp_bufDecl(Typedef->getDecl());
4936         else {
4937           const TagType *Tag = Sigjmp_bufType->getAs<TagType>();
4938           assert(Tag && "Invalid sigjmp_buf type in AST file");
4939           Context.setsigjmp_bufDecl(Tag->getDecl());
4940         }
4941       }
4942     }
4943 
4944     if (unsigned ObjCIdRedef
4945           = SpecialTypes[SPECIAL_TYPE_OBJC_ID_REDEFINITION]) {
4946       if (Context.ObjCIdRedefinitionType.isNull())
4947         Context.ObjCIdRedefinitionType = GetType(ObjCIdRedef);
4948     }
4949 
4950     if (unsigned ObjCClassRedef
4951           = SpecialTypes[SPECIAL_TYPE_OBJC_CLASS_REDEFINITION]) {
4952       if (Context.ObjCClassRedefinitionType.isNull())
4953         Context.ObjCClassRedefinitionType = GetType(ObjCClassRedef);
4954     }
4955 
4956     if (unsigned ObjCSelRedef
4957           = SpecialTypes[SPECIAL_TYPE_OBJC_SEL_REDEFINITION]) {
4958       if (Context.ObjCSelRedefinitionType.isNull())
4959         Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
4960     }
4961 
4962     if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
4963       QualType Ucontext_tType = GetType(Ucontext_t);
4964       if (Ucontext_tType.isNull()) {
4965         Error("ucontext_t type is NULL");
4966         return;
4967       }
4968 
4969       if (!Context.ucontext_tDecl) {
4970         if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
4971           Context.setucontext_tDecl(Typedef->getDecl());
4972         else {
4973           const TagType *Tag = Ucontext_tType->getAs<TagType>();
4974           assert(Tag && "Invalid ucontext_t type in AST file");
4975           Context.setucontext_tDecl(Tag->getDecl());
4976         }
4977       }
4978     }
4979   }
4980 
4981   ReadPragmaDiagnosticMappings(Context.getDiagnostics());
4982 
4983   // If there were any CUDA special declarations, deserialize them.
4984   if (!CUDASpecialDeclRefs.empty()) {
4985     assert(CUDASpecialDeclRefs.size() == 1 && "More decl refs than expected!");
4986     Context.setcudaConfigureCallDecl(
4987                            cast<FunctionDecl>(GetDecl(CUDASpecialDeclRefs[0])));
4988   }
4989 
4990   // Re-export any modules that were imported by a non-module AST file.
4991   // FIXME: This does not make macro-only imports visible again.
4992   for (auto &Import : ImportedModules) {
4993     if (Module *Imported = getSubmodule(Import.ID)) {
4994       makeModuleVisible(Imported, Module::AllVisible,
4995                         /*ImportLoc=*/Import.ImportLoc);
4996       if (Import.ImportLoc.isValid())
4997         PP.makeModuleVisible(Imported, Import.ImportLoc);
4998       // This updates visibility for Preprocessor only. For Sema, which can be
4999       // nullptr here, we do the same later, in UpdateSema().
5000     }
5001   }
5002 }
5003 
5004 void ASTReader::finalizeForWriting() {
5005   // Nothing to do for now.
5006 }
5007 
5008 /// Reads and return the signature record from \p PCH's control block, or
5009 /// else returns 0.
5010 static ASTFileSignature readASTFileSignature(StringRef PCH) {
5011   BitstreamCursor Stream(PCH);
5012   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5013     // FIXME this drops the error on the floor.
5014     consumeError(std::move(Err));
5015     return ASTFileSignature();
5016   }
5017 
5018   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5019   if (SkipCursorToBlock(Stream, UNHASHED_CONTROL_BLOCK_ID))
5020     return ASTFileSignature();
5021 
5022   // Scan for SIGNATURE inside the diagnostic options block.
5023   ASTReader::RecordData Record;
5024   while (true) {
5025     Expected<llvm::BitstreamEntry> MaybeEntry =
5026         Stream.advanceSkippingSubblocks();
5027     if (!MaybeEntry) {
5028       // FIXME this drops the error on the floor.
5029       consumeError(MaybeEntry.takeError());
5030       return ASTFileSignature();
5031     }
5032     llvm::BitstreamEntry Entry = MaybeEntry.get();
5033 
5034     if (Entry.Kind != llvm::BitstreamEntry::Record)
5035       return ASTFileSignature();
5036 
5037     Record.clear();
5038     StringRef Blob;
5039     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5040     if (!MaybeRecord) {
5041       // FIXME this drops the error on the floor.
5042       consumeError(MaybeRecord.takeError());
5043       return ASTFileSignature();
5044     }
5045     if (SIGNATURE == MaybeRecord.get())
5046       return ASTFileSignature::create(Record.begin(),
5047                                       Record.begin() + ASTFileSignature::size);
5048   }
5049 }
5050 
5051 /// Retrieve the name of the original source file name
5052 /// directly from the AST file, without actually loading the AST
5053 /// file.
5054 std::string ASTReader::getOriginalSourceFile(
5055     const std::string &ASTFileName, FileManager &FileMgr,
5056     const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine &Diags) {
5057   // Open the AST file.
5058   auto Buffer = FileMgr.getBufferForFile(ASTFileName);
5059   if (!Buffer) {
5060     Diags.Report(diag::err_fe_unable_to_read_pch_file)
5061         << ASTFileName << Buffer.getError().message();
5062     return std::string();
5063   }
5064 
5065   // Initialize the stream
5066   BitstreamCursor Stream(PCHContainerRdr.ExtractPCH(**Buffer));
5067 
5068   // Sniff for the signature.
5069   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5070     Diags.Report(diag::err_fe_not_a_pch_file) << ASTFileName << std::move(Err);
5071     return std::string();
5072   }
5073 
5074   // Scan for the CONTROL_BLOCK_ID block.
5075   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID)) {
5076     Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5077     return std::string();
5078   }
5079 
5080   // Scan for ORIGINAL_FILE inside the control block.
5081   RecordData Record;
5082   while (true) {
5083     Expected<llvm::BitstreamEntry> MaybeEntry =
5084         Stream.advanceSkippingSubblocks();
5085     if (!MaybeEntry) {
5086       // FIXME this drops errors on the floor.
5087       consumeError(MaybeEntry.takeError());
5088       return std::string();
5089     }
5090     llvm::BitstreamEntry Entry = MaybeEntry.get();
5091 
5092     if (Entry.Kind == llvm::BitstreamEntry::EndBlock)
5093       return std::string();
5094 
5095     if (Entry.Kind != llvm::BitstreamEntry::Record) {
5096       Diags.Report(diag::err_fe_pch_malformed_block) << ASTFileName;
5097       return std::string();
5098     }
5099 
5100     Record.clear();
5101     StringRef Blob;
5102     Expected<unsigned> MaybeRecord = Stream.readRecord(Entry.ID, Record, &Blob);
5103     if (!MaybeRecord) {
5104       // FIXME this drops the errors on the floor.
5105       consumeError(MaybeRecord.takeError());
5106       return std::string();
5107     }
5108     if (ORIGINAL_FILE == MaybeRecord.get())
5109       return Blob.str();
5110   }
5111 }
5112 
5113 namespace {
5114 
5115   class SimplePCHValidator : public ASTReaderListener {
5116     const LangOptions &ExistingLangOpts;
5117     const TargetOptions &ExistingTargetOpts;
5118     const PreprocessorOptions &ExistingPPOpts;
5119     std::string ExistingModuleCachePath;
5120     FileManager &FileMgr;
5121 
5122   public:
5123     SimplePCHValidator(const LangOptions &ExistingLangOpts,
5124                        const TargetOptions &ExistingTargetOpts,
5125                        const PreprocessorOptions &ExistingPPOpts,
5126                        StringRef ExistingModuleCachePath, FileManager &FileMgr)
5127         : ExistingLangOpts(ExistingLangOpts),
5128           ExistingTargetOpts(ExistingTargetOpts),
5129           ExistingPPOpts(ExistingPPOpts),
5130           ExistingModuleCachePath(ExistingModuleCachePath), FileMgr(FileMgr) {}
5131 
5132     bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain,
5133                              bool AllowCompatibleDifferences) override {
5134       return checkLanguageOptions(ExistingLangOpts, LangOpts, nullptr,
5135                                   AllowCompatibleDifferences);
5136     }
5137 
5138     bool ReadTargetOptions(const TargetOptions &TargetOpts, bool Complain,
5139                            bool AllowCompatibleDifferences) override {
5140       return checkTargetOptions(ExistingTargetOpts, TargetOpts, nullptr,
5141                                 AllowCompatibleDifferences);
5142     }
5143 
5144     bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
5145                                  StringRef SpecificModuleCachePath,
5146                                  bool Complain) override {
5147       return checkHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5148                                       ExistingModuleCachePath, nullptr,
5149                                       ExistingLangOpts, ExistingPPOpts);
5150     }
5151 
5152     bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts,
5153                                  bool Complain,
5154                                  std::string &SuggestedPredefines) override {
5155       return checkPreprocessorOptions(ExistingPPOpts, PPOpts, nullptr, FileMgr,
5156                                       SuggestedPredefines, ExistingLangOpts);
5157     }
5158   };
5159 
5160 } // namespace
5161 
5162 bool ASTReader::readASTFileControlBlock(
5163     StringRef Filename, FileManager &FileMgr,
5164     const PCHContainerReader &PCHContainerRdr,
5165     bool FindModuleFileExtensions,
5166     ASTReaderListener &Listener, bool ValidateDiagnosticOptions) {
5167   // Open the AST file.
5168   // FIXME: This allows use of the VFS; we do not allow use of the
5169   // VFS when actually loading a module.
5170   auto Buffer = FileMgr.getBufferForFile(Filename);
5171   if (!Buffer) {
5172     return true;
5173   }
5174 
5175   // Initialize the stream
5176   StringRef Bytes = PCHContainerRdr.ExtractPCH(**Buffer);
5177   BitstreamCursor Stream(Bytes);
5178 
5179   // Sniff for the signature.
5180   if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {
5181     consumeError(std::move(Err)); // FIXME this drops errors on the floor.
5182     return true;
5183   }
5184 
5185   // Scan for the CONTROL_BLOCK_ID block.
5186   if (SkipCursorToBlock(Stream, CONTROL_BLOCK_ID))
5187     return true;
5188 
5189   bool NeedsInputFiles = Listener.needsInputFileVisitation();
5190   bool NeedsSystemInputFiles = Listener.needsSystemInputFileVisitation();
5191   bool NeedsImports = Listener.needsImportVisitation();
5192   BitstreamCursor InputFilesCursor;
5193 
5194   RecordData Record;
5195   std::string ModuleDir;
5196   bool DoneWithControlBlock = false;
5197   while (!DoneWithControlBlock) {
5198     Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5199     if (!MaybeEntry) {
5200       // FIXME this drops the error on the floor.
5201       consumeError(MaybeEntry.takeError());
5202       return true;
5203     }
5204     llvm::BitstreamEntry Entry = MaybeEntry.get();
5205 
5206     switch (Entry.Kind) {
5207     case llvm::BitstreamEntry::SubBlock: {
5208       switch (Entry.ID) {
5209       case OPTIONS_BLOCK_ID: {
5210         std::string IgnoredSuggestedPredefines;
5211         if (ReadOptionsBlock(Stream, ARR_ConfigurationMismatch | ARR_OutOfDate,
5212                              /*AllowCompatibleConfigurationMismatch*/ false,
5213                              Listener, IgnoredSuggestedPredefines) != Success)
5214           return true;
5215         break;
5216       }
5217 
5218       case INPUT_FILES_BLOCK_ID:
5219         InputFilesCursor = Stream;
5220         if (llvm::Error Err = Stream.SkipBlock()) {
5221           // FIXME this drops the error on the floor.
5222           consumeError(std::move(Err));
5223           return true;
5224         }
5225         if (NeedsInputFiles &&
5226             ReadBlockAbbrevs(InputFilesCursor, INPUT_FILES_BLOCK_ID))
5227           return true;
5228         break;
5229 
5230       default:
5231         if (llvm::Error Err = Stream.SkipBlock()) {
5232           // FIXME this drops the error on the floor.
5233           consumeError(std::move(Err));
5234           return true;
5235         }
5236         break;
5237       }
5238 
5239       continue;
5240     }
5241 
5242     case llvm::BitstreamEntry::EndBlock:
5243       DoneWithControlBlock = true;
5244       break;
5245 
5246     case llvm::BitstreamEntry::Error:
5247       return true;
5248 
5249     case llvm::BitstreamEntry::Record:
5250       break;
5251     }
5252 
5253     if (DoneWithControlBlock) break;
5254 
5255     Record.clear();
5256     StringRef Blob;
5257     Expected<unsigned> MaybeRecCode =
5258         Stream.readRecord(Entry.ID, Record, &Blob);
5259     if (!MaybeRecCode) {
5260       // FIXME this drops the error.
5261       return Failure;
5262     }
5263     switch ((ControlRecordTypes)MaybeRecCode.get()) {
5264     case METADATA:
5265       if (Record[0] != VERSION_MAJOR)
5266         return true;
5267       if (Listener.ReadFullVersionInformation(Blob))
5268         return true;
5269       break;
5270     case MODULE_NAME:
5271       Listener.ReadModuleName(Blob);
5272       break;
5273     case MODULE_DIRECTORY:
5274       ModuleDir = std::string(Blob);
5275       break;
5276     case MODULE_MAP_FILE: {
5277       unsigned Idx = 0;
5278       auto Path = ReadString(Record, Idx);
5279       ResolveImportedPath(Path, ModuleDir);
5280       Listener.ReadModuleMapFile(Path);
5281       break;
5282     }
5283     case INPUT_FILE_OFFSETS: {
5284       if (!NeedsInputFiles)
5285         break;
5286 
5287       unsigned NumInputFiles = Record[0];
5288       unsigned NumUserFiles = Record[1];
5289       const llvm::support::unaligned_uint64_t *InputFileOffs =
5290           (const llvm::support::unaligned_uint64_t *)Blob.data();
5291       for (unsigned I = 0; I != NumInputFiles; ++I) {
5292         // Go find this input file.
5293         bool isSystemFile = I >= NumUserFiles;
5294 
5295         if (isSystemFile && !NeedsSystemInputFiles)
5296           break; // the rest are system input files
5297 
5298         BitstreamCursor &Cursor = InputFilesCursor;
5299         SavedStreamPosition SavedPosition(Cursor);
5300         if (llvm::Error Err = Cursor.JumpToBit(InputFileOffs[I])) {
5301           // FIXME this drops errors on the floor.
5302           consumeError(std::move(Err));
5303         }
5304 
5305         Expected<unsigned> MaybeCode = Cursor.ReadCode();
5306         if (!MaybeCode) {
5307           // FIXME this drops errors on the floor.
5308           consumeError(MaybeCode.takeError());
5309         }
5310         unsigned Code = MaybeCode.get();
5311 
5312         RecordData Record;
5313         StringRef Blob;
5314         bool shouldContinue = false;
5315         Expected<unsigned> MaybeRecordType =
5316             Cursor.readRecord(Code, Record, &Blob);
5317         if (!MaybeRecordType) {
5318           // FIXME this drops errors on the floor.
5319           consumeError(MaybeRecordType.takeError());
5320         }
5321         switch ((InputFileRecordTypes)MaybeRecordType.get()) {
5322         case INPUT_FILE_HASH:
5323           break;
5324         case INPUT_FILE:
5325           bool Overridden = static_cast<bool>(Record[3]);
5326           std::string Filename = std::string(Blob);
5327           ResolveImportedPath(Filename, ModuleDir);
5328           shouldContinue = Listener.visitInputFile(
5329               Filename, isSystemFile, Overridden, /*IsExplicitModule*/false);
5330           break;
5331         }
5332         if (!shouldContinue)
5333           break;
5334       }
5335       break;
5336     }
5337 
5338     case IMPORTS: {
5339       if (!NeedsImports)
5340         break;
5341 
5342       unsigned Idx = 0, N = Record.size();
5343       while (Idx < N) {
5344         // Read information about the AST file.
5345         Idx +=
5346             1 + 1 + 1 + 1 +
5347             ASTFileSignature::size; // Kind, ImportLoc, Size, ModTime, Signature
5348         std::string ModuleName = ReadString(Record, Idx);
5349         std::string Filename = ReadString(Record, Idx);
5350         ResolveImportedPath(Filename, ModuleDir);
5351         Listener.visitImport(ModuleName, Filename);
5352       }
5353       break;
5354     }
5355 
5356     default:
5357       // No other validation to perform.
5358       break;
5359     }
5360   }
5361 
5362   // Look for module file extension blocks, if requested.
5363   if (FindModuleFileExtensions) {
5364     BitstreamCursor SavedStream = Stream;
5365     while (!SkipCursorToBlock(Stream, EXTENSION_BLOCK_ID)) {
5366       bool DoneWithExtensionBlock = false;
5367       while (!DoneWithExtensionBlock) {
5368         Expected<llvm::BitstreamEntry> MaybeEntry = Stream.advance();
5369         if (!MaybeEntry) {
5370           // FIXME this drops the error.
5371           return true;
5372         }
5373         llvm::BitstreamEntry Entry = MaybeEntry.get();
5374 
5375         switch (Entry.Kind) {
5376         case llvm::BitstreamEntry::SubBlock:
5377           if (llvm::Error Err = Stream.SkipBlock()) {
5378             // FIXME this drops the error on the floor.
5379             consumeError(std::move(Err));
5380             return true;
5381           }
5382           continue;
5383 
5384         case llvm::BitstreamEntry::EndBlock:
5385           DoneWithExtensionBlock = true;
5386           continue;
5387 
5388         case llvm::BitstreamEntry::Error:
5389           return true;
5390 
5391         case llvm::BitstreamEntry::Record:
5392           break;
5393         }
5394 
5395        Record.clear();
5396        StringRef Blob;
5397        Expected<unsigned> MaybeRecCode =
5398            Stream.readRecord(Entry.ID, Record, &Blob);
5399        if (!MaybeRecCode) {
5400          // FIXME this drops the error.
5401          return true;
5402        }
5403        switch (MaybeRecCode.get()) {
5404        case EXTENSION_METADATA: {
5405          ModuleFileExtensionMetadata Metadata;
5406          if (parseModuleFileExtensionMetadata(Record, Blob, Metadata))
5407            return true;
5408 
5409          Listener.readModuleFileExtension(Metadata);
5410          break;
5411        }
5412        }
5413       }
5414     }
5415     Stream = SavedStream;
5416   }
5417 
5418   // Scan for the UNHASHED_CONTROL_BLOCK_ID block.
5419   if (readUnhashedControlBlockImpl(
5420           nullptr, Bytes, ARR_ConfigurationMismatch | ARR_OutOfDate,
5421           /*AllowCompatibleConfigurationMismatch*/ false, &Listener,
5422           ValidateDiagnosticOptions) != Success)
5423     return true;
5424 
5425   return false;
5426 }
5427 
5428 bool ASTReader::isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
5429                                     const PCHContainerReader &PCHContainerRdr,
5430                                     const LangOptions &LangOpts,
5431                                     const TargetOptions &TargetOpts,
5432                                     const PreprocessorOptions &PPOpts,
5433                                     StringRef ExistingModuleCachePath) {
5434   SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
5435                                ExistingModuleCachePath, FileMgr);
5436   return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
5437                                   /*FindModuleFileExtensions=*/false,
5438                                   validator,
5439                                   /*ValidateDiagnosticOptions=*/true);
5440 }
5441 
5442 ASTReader::ASTReadResult
5443 ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
5444   // Enter the submodule block.
5445   if (llvm::Error Err = F.Stream.EnterSubBlock(SUBMODULE_BLOCK_ID)) {
5446     Error(std::move(Err));
5447     return Failure;
5448   }
5449 
5450   ModuleMap &ModMap = PP.getHeaderSearchInfo().getModuleMap();
5451   bool First = true;
5452   Module *CurrentModule = nullptr;
5453   RecordData Record;
5454   while (true) {
5455     Expected<llvm::BitstreamEntry> MaybeEntry =
5456         F.Stream.advanceSkippingSubblocks();
5457     if (!MaybeEntry) {
5458       Error(MaybeEntry.takeError());
5459       return Failure;
5460     }
5461     llvm::BitstreamEntry Entry = MaybeEntry.get();
5462 
5463     switch (Entry.Kind) {
5464     case llvm::BitstreamEntry::SubBlock: // Handled for us already.
5465     case llvm::BitstreamEntry::Error:
5466       Error("malformed block record in AST file");
5467       return Failure;
5468     case llvm::BitstreamEntry::EndBlock:
5469       return Success;
5470     case llvm::BitstreamEntry::Record:
5471       // The interesting case.
5472       break;
5473     }
5474 
5475     // Read a record.
5476     StringRef Blob;
5477     Record.clear();
5478     Expected<unsigned> MaybeKind = F.Stream.readRecord(Entry.ID, Record, &Blob);
5479     if (!MaybeKind) {
5480       Error(MaybeKind.takeError());
5481       return Failure;
5482     }
5483     unsigned Kind = MaybeKind.get();
5484 
5485     if ((Kind == SUBMODULE_METADATA) != First) {
5486       Error("submodule metadata record should be at beginning of block");
5487       return Failure;
5488     }
5489     First = false;
5490 
5491     // Submodule information is only valid if we have a current module.
5492     // FIXME: Should we error on these cases?
5493     if (!CurrentModule && Kind != SUBMODULE_METADATA &&
5494         Kind != SUBMODULE_DEFINITION)
5495       continue;
5496 
5497     switch (Kind) {
5498     default:  // Default behavior: ignore.
5499       break;
5500 
5501     case SUBMODULE_DEFINITION: {
5502       if (Record.size() < 12) {
5503         Error("malformed module definition");
5504         return Failure;
5505       }
5506 
5507       StringRef Name = Blob;
5508       unsigned Idx = 0;
5509       SubmoduleID GlobalID = getGlobalSubmoduleID(F, Record[Idx++]);
5510       SubmoduleID Parent = getGlobalSubmoduleID(F, Record[Idx++]);
5511       Module::ModuleKind Kind = (Module::ModuleKind)Record[Idx++];
5512       bool IsFramework = Record[Idx++];
5513       bool IsExplicit = Record[Idx++];
5514       bool IsSystem = Record[Idx++];
5515       bool IsExternC = Record[Idx++];
5516       bool InferSubmodules = Record[Idx++];
5517       bool InferExplicitSubmodules = Record[Idx++];
5518       bool InferExportWildcard = Record[Idx++];
5519       bool ConfigMacrosExhaustive = Record[Idx++];
5520       bool ModuleMapIsPrivate = Record[Idx++];
5521 
5522       Module *ParentModule = nullptr;
5523       if (Parent)
5524         ParentModule = getSubmodule(Parent);
5525 
5526       // Retrieve this (sub)module from the module map, creating it if
5527       // necessary.
5528       CurrentModule =
5529           ModMap.findOrCreateModule(Name, ParentModule, IsFramework, IsExplicit)
5530               .first;
5531 
5532       // FIXME: set the definition loc for CurrentModule, or call
5533       // ModMap.setInferredModuleAllowedBy()
5534 
5535       SubmoduleID GlobalIndex = GlobalID - NUM_PREDEF_SUBMODULE_IDS;
5536       if (GlobalIndex >= SubmodulesLoaded.size() ||
5537           SubmodulesLoaded[GlobalIndex]) {
5538         Error("too many submodules");
5539         return Failure;
5540       }
5541 
5542       if (!ParentModule) {
5543         if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
5544           // Don't emit module relocation error if we have -fno-validate-pch
5545           if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation &
5546                     DisableValidationForModuleKind::Module) &&
5547               CurFile != F.File) {
5548             Error(diag::err_module_file_conflict,
5549                   CurrentModule->getTopLevelModuleName(), CurFile->getName(),
5550                   F.File->getName());
5551             return Failure;
5552           }
5553         }
5554 
5555         F.DidReadTopLevelSubmodule = true;
5556         CurrentModule->setASTFile(F.File);
5557         CurrentModule->PresumedModuleMapFile = F.ModuleMapPath;
5558       }
5559 
5560       CurrentModule->Kind = Kind;
5561       CurrentModule->Signature = F.Signature;
5562       CurrentModule->IsFromModuleFile = true;
5563       CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
5564       CurrentModule->IsExternC = IsExternC;
5565       CurrentModule->InferSubmodules = InferSubmodules;
5566       CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
5567       CurrentModule->InferExportWildcard = InferExportWildcard;
5568       CurrentModule->ConfigMacrosExhaustive = ConfigMacrosExhaustive;
5569       CurrentModule->ModuleMapIsPrivate = ModuleMapIsPrivate;
5570       if (DeserializationListener)
5571         DeserializationListener->ModuleRead(GlobalID, CurrentModule);
5572 
5573       SubmodulesLoaded[GlobalIndex] = CurrentModule;
5574 
5575       // Clear out data that will be replaced by what is in the module file.
5576       CurrentModule->LinkLibraries.clear();
5577       CurrentModule->ConfigMacros.clear();
5578       CurrentModule->UnresolvedConflicts.clear();
5579       CurrentModule->Conflicts.clear();
5580 
5581       // The module is available unless it's missing a requirement; relevant
5582       // requirements will be (re-)added by SUBMODULE_REQUIRES records.
5583       // Missing headers that were present when the module was built do not
5584       // make it unavailable -- if we got this far, this must be an explicitly
5585       // imported module file.
5586       CurrentModule->Requirements.clear();
5587       CurrentModule->MissingHeaders.clear();
5588       CurrentModule->IsUnimportable =
5589           ParentModule && ParentModule->IsUnimportable;
5590       CurrentModule->IsAvailable = !CurrentModule->IsUnimportable;
5591       break;
5592     }
5593 
5594     case SUBMODULE_UMBRELLA_HEADER: {
5595       // FIXME: This doesn't work for framework modules as `Filename` is the
5596       //        name as written in the module file and does not include
5597       //        `Headers/`, so this path will never exist.
5598       std::string Filename = std::string(Blob);
5599       ResolveImportedPath(F, Filename);
5600       if (auto Umbrella = PP.getFileManager().getFile(Filename)) {
5601         if (!CurrentModule->getUmbrellaHeader()) {
5602           // FIXME: NameAsWritten
5603           ModMap.setUmbrellaHeader(CurrentModule, *Umbrella, Blob, "");
5604         }
5605         // Note that it's too late at this point to return out of date if the
5606         // name from the PCM doesn't match up with the one in the module map,
5607         // but also quite unlikely since we will have already checked the
5608         // modification time and size of the module map file itself.
5609       }
5610       break;
5611     }
5612 
5613     case SUBMODULE_HEADER:
5614     case SUBMODULE_EXCLUDED_HEADER:
5615     case SUBMODULE_PRIVATE_HEADER:
5616       // We lazily associate headers with their modules via the HeaderInfo table.
5617       // FIXME: Re-evaluate this section; maybe only store InputFile IDs instead
5618       // of complete filenames or remove it entirely.
5619       break;
5620 
5621     case SUBMODULE_TEXTUAL_HEADER:
5622     case SUBMODULE_PRIVATE_TEXTUAL_HEADER:
5623       // FIXME: Textual headers are not marked in the HeaderInfo table. Load
5624       // them here.
5625       break;
5626 
5627     case SUBMODULE_TOPHEADER:
5628       CurrentModule->addTopHeaderFilename(Blob);
5629       break;
5630 
5631     case SUBMODULE_UMBRELLA_DIR: {
5632       // See comments in SUBMODULE_UMBRELLA_HEADER
5633       std::string Dirname = std::string(Blob);
5634       ResolveImportedPath(F, Dirname);
5635       if (auto Umbrella = PP.getFileManager().getDirectory(Dirname)) {
5636         if (!CurrentModule->getUmbrellaDir()) {
5637           // FIXME: NameAsWritten
5638           ModMap.setUmbrellaDir(CurrentModule, *Umbrella, Blob, "");
5639         }
5640       }
5641       break;
5642     }
5643 
5644     case SUBMODULE_METADATA: {
5645       F.BaseSubmoduleID = getTotalNumSubmodules();
5646       F.LocalNumSubmodules = Record[0];
5647       unsigned LocalBaseSubmoduleID = Record[1];
5648       if (F.LocalNumSubmodules > 0) {
5649         // Introduce the global -> local mapping for submodules within this
5650         // module.
5651         GlobalSubmoduleMap.insert(std::make_pair(getTotalNumSubmodules()+1,&F));
5652 
5653         // Introduce the local -> global mapping for submodules within this
5654         // module.
5655         F.SubmoduleRemap.insertOrReplace(
5656           std::make_pair(LocalBaseSubmoduleID,
5657                          F.BaseSubmoduleID - LocalBaseSubmoduleID));
5658 
5659         SubmodulesLoaded.resize(SubmodulesLoaded.size() + F.LocalNumSubmodules);
5660       }
5661       break;
5662     }
5663 
5664     case SUBMODULE_IMPORTS:
5665       for (unsigned Idx = 0; Idx != Record.size(); ++Idx) {
5666         UnresolvedModuleRef Unresolved;
5667         Unresolved.File = &F;
5668         Unresolved.Mod = CurrentModule;
5669         Unresolved.ID = Record[Idx];
5670         Unresolved.Kind = UnresolvedModuleRef::Import;
5671         Unresolved.IsWildcard = false;
5672         UnresolvedModuleRefs.push_back(Unresolved);
5673       }
5674       break;
5675 
5676     case SUBMODULE_EXPORTS:
5677       for (unsigned Idx = 0; Idx + 1 < Record.size(); Idx += 2) {
5678         UnresolvedModuleRef Unresolved;
5679         Unresolved.File = &F;
5680         Unresolved.Mod = CurrentModule;
5681         Unresolved.ID = Record[Idx];
5682         Unresolved.Kind = UnresolvedModuleRef::Export;
5683         Unresolved.IsWildcard = Record[Idx + 1];
5684         UnresolvedModuleRefs.push_back(Unresolved);
5685       }
5686 
5687       // Once we've loaded the set of exports, there's no reason to keep
5688       // the parsed, unresolved exports around.
5689       CurrentModule->UnresolvedExports.clear();
5690       break;
5691 
5692     case SUBMODULE_REQUIRES:
5693       CurrentModule->addRequirement(Blob, Record[0], PP.getLangOpts(),
5694                                     PP.getTargetInfo());
5695       break;
5696 
5697     case SUBMODULE_LINK_LIBRARY:
5698       ModMap.resolveLinkAsDependencies(CurrentModule);
5699       CurrentModule->LinkLibraries.push_back(
5700           Module::LinkLibrary(std::string(Blob), Record[0]));
5701       break;
5702 
5703     case SUBMODULE_CONFIG_MACRO:
5704       CurrentModule->ConfigMacros.push_back(Blob.str());
5705       break;
5706 
5707     case SUBMODULE_CONFLICT: {
5708       UnresolvedModuleRef Unresolved;
5709       Unresolved.File = &F;
5710       Unresolved.Mod = CurrentModule;
5711       Unresolved.ID = Record[0];
5712       Unresolved.Kind = UnresolvedModuleRef::Conflict;
5713       Unresolved.IsWildcard = false;
5714       Unresolved.String = Blob;
5715       UnresolvedModuleRefs.push_back(Unresolved);
5716       break;
5717     }
5718 
5719     case SUBMODULE_INITIALIZERS: {
5720       if (!ContextObj)
5721         break;
5722       SmallVector<uint32_t, 16> Inits;
5723       for (auto &ID : Record)
5724         Inits.push_back(getGlobalDeclID(F, ID));
5725       ContextObj->addLazyModuleInitializers(CurrentModule, Inits);
5726       break;
5727     }
5728 
5729     case SUBMODULE_EXPORT_AS:
5730       CurrentModule->ExportAsModule = Blob.str();
5731       ModMap.addLinkAsDependency(CurrentModule);
5732       break;
5733     }
5734   }
5735 }
5736 
5737 /// Parse the record that corresponds to a LangOptions data
5738 /// structure.
5739 ///
5740 /// This routine parses the language options from the AST file and then gives
5741 /// them to the AST listener if one is set.
5742 ///
5743 /// \returns true if the listener deems the file unacceptable, false otherwise.
5744 bool ASTReader::ParseLanguageOptions(const RecordData &Record,
5745                                      bool Complain,
5746                                      ASTReaderListener &Listener,
5747                                      bool AllowCompatibleDifferences) {
5748   LangOptions LangOpts;
5749   unsigned Idx = 0;
5750 #define LANGOPT(Name, Bits, Default, Description) \
5751   LangOpts.Name = Record[Idx++];
5752 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
5753   LangOpts.set##Name(static_cast<LangOptions::Type>(Record[Idx++]));
5754 #include "clang/Basic/LangOptions.def"
5755 #define SANITIZER(NAME, ID)                                                    \
5756   LangOpts.Sanitize.set(SanitizerKind::ID, Record[Idx++]);
5757 #include "clang/Basic/Sanitizers.def"
5758 
5759   for (unsigned N = Record[Idx++]; N; --N)
5760     LangOpts.ModuleFeatures.push_back(ReadString(Record, Idx));
5761 
5762   ObjCRuntime::Kind runtimeKind = (ObjCRuntime::Kind) Record[Idx++];
5763   VersionTuple runtimeVersion = ReadVersionTuple(Record, Idx);
5764   LangOpts.ObjCRuntime = ObjCRuntime(runtimeKind, runtimeVersion);
5765 
5766   LangOpts.CurrentModule = ReadString(Record, Idx);
5767 
5768   // Comment options.
5769   for (unsigned N = Record[Idx++]; N; --N) {
5770     LangOpts.CommentOpts.BlockCommandNames.push_back(
5771       ReadString(Record, Idx));
5772   }
5773   LangOpts.CommentOpts.ParseAllComments = Record[Idx++];
5774 
5775   // OpenMP offloading options.
5776   for (unsigned N = Record[Idx++]; N; --N) {
5777     LangOpts.OMPTargetTriples.push_back(llvm::Triple(ReadString(Record, Idx)));
5778   }
5779 
5780   LangOpts.OMPHostIRFile = ReadString(Record, Idx);
5781 
5782   return Listener.ReadLanguageOptions(LangOpts, Complain,
5783                                       AllowCompatibleDifferences);
5784 }
5785 
5786 bool ASTReader::ParseTargetOptions(const RecordData &Record, bool Complain,
5787                                    ASTReaderListener &Listener,
5788                                    bool AllowCompatibleDifferences) {
5789   unsigned Idx = 0;
5790   TargetOptions TargetOpts;
5791   TargetOpts.Triple = ReadString(Record, Idx);
5792   TargetOpts.CPU = ReadString(Record, Idx);
5793   TargetOpts.TuneCPU = ReadString(Record, Idx);
5794   TargetOpts.ABI = ReadString(Record, Idx);
5795   for (unsigned N = Record[Idx++]; N; --N) {
5796     TargetOpts.FeaturesAsWritten.push_back(ReadString(Record, Idx));
5797   }
5798   for (unsigned N = Record[Idx++]; N; --N) {
5799     TargetOpts.Features.push_back(ReadString(Record, Idx));
5800   }
5801 
5802   return Listener.ReadTargetOptions(TargetOpts, Complain,
5803                                     AllowCompatibleDifferences);
5804 }
5805 
5806 bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
5807                                        ASTReaderListener &Listener) {
5808   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
5809   unsigned Idx = 0;
5810 #define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
5811 #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
5812   DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
5813 #include "clang/Basic/DiagnosticOptions.def"
5814 
5815   for (unsigned N = Record[Idx++]; N; --N)
5816     DiagOpts->Warnings.push_back(ReadString(Record, Idx));
5817   for (unsigned N = Record[Idx++]; N; --N)
5818     DiagOpts->Remarks.push_back(ReadString(Record, Idx));
5819 
5820   return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
5821 }
5822 
5823 bool ASTReader::ParseFileSystemOptions(const RecordData &Record, bool Complain,
5824                                        ASTReaderListener &Listener) {
5825   FileSystemOptions FSOpts;
5826   unsigned Idx = 0;
5827   FSOpts.WorkingDir = ReadString(Record, Idx);
5828   return Listener.ReadFileSystemOptions(FSOpts, Complain);
5829 }
5830 
5831 bool ASTReader::ParseHeaderSearchOptions(const RecordData &Record,
5832                                          bool Complain,
5833                                          ASTReaderListener &Listener) {
5834   HeaderSearchOptions HSOpts;
5835   unsigned Idx = 0;
5836   HSOpts.Sysroot = ReadString(Record, Idx);
5837 
5838   // Include entries.
5839   for (unsigned N = Record[Idx++]; N; --N) {
5840     std::string Path = ReadString(Record, Idx);
5841     frontend::IncludeDirGroup Group
5842       = static_cast<frontend::IncludeDirGroup>(Record[Idx++]);
5843     bool IsFramework = Record[Idx++];
5844     bool IgnoreSysRoot = Record[Idx++];
5845     HSOpts.UserEntries.emplace_back(std::move(Path), Group, IsFramework,
5846                                     IgnoreSysRoot);
5847   }
5848 
5849   // System header prefixes.
5850   for (unsigned N = Record[Idx++]; N; --N) {
5851     std::string Prefix = ReadString(Record, Idx);
5852     bool IsSystemHeader = Record[Idx++];
5853     HSOpts.SystemHeaderPrefixes.emplace_back(std::move(Prefix), IsSystemHeader);
5854   }
5855 
5856   HSOpts.ResourceDir = ReadString(Record, Idx);
5857   HSOpts.ModuleCachePath = ReadString(Record, Idx);
5858   HSOpts.ModuleUserBuildPath = ReadString(Record, Idx);
5859   HSOpts.DisableModuleHash = Record[Idx++];
5860   HSOpts.ImplicitModuleMaps = Record[Idx++];
5861   HSOpts.ModuleMapFileHomeIsCwd = Record[Idx++];
5862   HSOpts.EnablePrebuiltImplicitModules = Record[Idx++];
5863   HSOpts.UseBuiltinIncludes = Record[Idx++];
5864   HSOpts.UseStandardSystemIncludes = Record[Idx++];
5865   HSOpts.UseStandardCXXIncludes = Record[Idx++];
5866   HSOpts.UseLibcxx = Record[Idx++];
5867   std::string SpecificModuleCachePath = ReadString(Record, Idx);
5868 
5869   return Listener.ReadHeaderSearchOptions(HSOpts, SpecificModuleCachePath,
5870                                           Complain);
5871 }
5872 
5873 bool ASTReader::ParsePreprocessorOptions(const RecordData &Record,
5874                                          bool Complain,
5875                                          ASTReaderListener &Listener,
5876                                          std::string &SuggestedPredefines) {
5877   PreprocessorOptions PPOpts;
5878   unsigned Idx = 0;
5879 
5880   // Macro definitions/undefs
5881   for (unsigned N = Record[Idx++]; N; --N) {
5882     std::string Macro = ReadString(Record, Idx);
5883     bool IsUndef = Record[Idx++];
5884     PPOpts.Macros.push_back(std::make_pair(Macro, IsUndef));
5885   }
5886 
5887   // Includes
5888   for (unsigned N = Record[Idx++]; N; --N) {
5889     PPOpts.Includes.push_back(ReadString(Record, Idx));
5890   }
5891 
5892   // Macro Includes
5893   for (unsigned N = Record[Idx++]; N; --N) {
5894     PPOpts.MacroIncludes.push_back(ReadString(Record, Idx));
5895   }
5896 
5897   PPOpts.UsePredefines = Record[Idx++];
5898   PPOpts.DetailedRecord = Record[Idx++];
5899   PPOpts.ImplicitPCHInclude = ReadString(Record, Idx);
5900   PPOpts.ObjCXXARCStandardLibrary =
5901     static_cast<ObjCXXARCStandardLibraryKind>(Record[Idx++]);
5902   SuggestedPredefines.clear();
5903   return Listener.ReadPreprocessorOptions(PPOpts, Complain,
5904                                           SuggestedPredefines);
5905 }
5906 
5907 std::pair<ModuleFile *, unsigned>
5908 ASTReader::getModulePreprocessedEntity(unsigned GlobalIndex) {
5909   GlobalPreprocessedEntityMapType::iterator
5910   I = GlobalPreprocessedEntityMap.find(GlobalIndex);
5911   assert(I != GlobalPreprocessedEntityMap.end() &&
5912          "Corrupted global preprocessed entity map");
5913   ModuleFile *M = I->second;
5914   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedEntityID;
5915   return std::make_pair(M, LocalIndex);
5916 }
5917 
5918 llvm::iterator_range<PreprocessingRecord::iterator>
5919 ASTReader::getModulePreprocessedEntities(ModuleFile &Mod) const {
5920   if (PreprocessingRecord *PPRec = PP.getPreprocessingRecord())
5921     return PPRec->getIteratorsForLoadedRange(Mod.BasePreprocessedEntityID,
5922                                              Mod.NumPreprocessedEntities);
5923 
5924   return llvm::make_range(PreprocessingRecord::iterator(),
5925                           PreprocessingRecord::iterator());
5926 }
5927 
5928 bool ASTReader::canRecoverFromOutOfDate(StringRef ModuleFileName,
5929                                         unsigned int ClientLoadCapabilities) {
5930   return ClientLoadCapabilities & ARR_OutOfDate &&
5931          !getModuleManager().getModuleCache().isPCMFinal(ModuleFileName);
5932 }
5933 
5934 llvm::iterator_range<ASTReader::ModuleDeclIterator>
5935 ASTReader::getModuleFileLevelDecls(ModuleFile &Mod) {
5936   return llvm::make_range(
5937       ModuleDeclIterator(this, &Mod, Mod.FileSortedDecls),
5938       ModuleDeclIterator(this, &Mod,
5939                          Mod.FileSortedDecls + Mod.NumFileSortedDecls));
5940 }
5941 
5942 SourceRange ASTReader::ReadSkippedRange(unsigned GlobalIndex) {
5943   auto I = GlobalSkippedRangeMap.find(GlobalIndex);
5944   assert(I != GlobalSkippedRangeMap.end() &&
5945     "Corrupted global skipped range map");
5946   ModuleFile *M = I->second;
5947   unsigned LocalIndex = GlobalIndex - M->BasePreprocessedSkippedRangeID;
5948   assert(LocalIndex < M->NumPreprocessedSkippedRanges);
5949   PPSkippedRange RawRange = M->PreprocessedSkippedRangeOffsets[LocalIndex];
5950   SourceRange Range(TranslateSourceLocation(*M, RawRange.getBegin()),
5951                     TranslateSourceLocation(*M, RawRange.getEnd()));
5952   assert(Range.isValid());
5953   return Range;
5954 }
5955 
5956 PreprocessedEntity *ASTReader::ReadPreprocessedEntity(unsigned Index) {
5957   PreprocessedEntityID PPID = Index+1;
5958   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
5959   ModuleFile &M = *PPInfo.first;
5960   unsigned LocalIndex = PPInfo.second;
5961   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
5962 
5963   if (!PP.getPreprocessingRecord()) {
5964     Error("no preprocessing record");
5965     return nullptr;
5966   }
5967 
5968   SavedStreamPosition SavedPosition(M.PreprocessorDetailCursor);
5969   if (llvm::Error Err = M.PreprocessorDetailCursor.JumpToBit(
5970           M.MacroOffsetsBase + PPOffs.BitOffset)) {
5971     Error(std::move(Err));
5972     return nullptr;
5973   }
5974 
5975   Expected<llvm::BitstreamEntry> MaybeEntry =
5976       M.PreprocessorDetailCursor.advance(BitstreamCursor::AF_DontPopBlockAtEnd);
5977   if (!MaybeEntry) {
5978     Error(MaybeEntry.takeError());
5979     return nullptr;
5980   }
5981   llvm::BitstreamEntry Entry = MaybeEntry.get();
5982 
5983   if (Entry.Kind != llvm::BitstreamEntry::Record)
5984     return nullptr;
5985 
5986   // Read the record.
5987   SourceRange Range(TranslateSourceLocation(M, PPOffs.getBegin()),
5988                     TranslateSourceLocation(M, PPOffs.getEnd()));
5989   PreprocessingRecord &PPRec = *PP.getPreprocessingRecord();
5990   StringRef Blob;
5991   RecordData Record;
5992   Expected<unsigned> MaybeRecType =
5993       M.PreprocessorDetailCursor.readRecord(Entry.ID, Record, &Blob);
5994   if (!MaybeRecType) {
5995     Error(MaybeRecType.takeError());
5996     return nullptr;
5997   }
5998   switch ((PreprocessorDetailRecordTypes)MaybeRecType.get()) {
5999   case PPD_MACRO_EXPANSION: {
6000     bool isBuiltin = Record[0];
6001     IdentifierInfo *Name = nullptr;
6002     MacroDefinitionRecord *Def = nullptr;
6003     if (isBuiltin)
6004       Name = getLocalIdentifier(M, Record[1]);
6005     else {
6006       PreprocessedEntityID GlobalID =
6007           getGlobalPreprocessedEntityID(M, Record[1]);
6008       Def = cast<MacroDefinitionRecord>(
6009           PPRec.getLoadedPreprocessedEntity(GlobalID - 1));
6010     }
6011 
6012     MacroExpansion *ME;
6013     if (isBuiltin)
6014       ME = new (PPRec) MacroExpansion(Name, Range);
6015     else
6016       ME = new (PPRec) MacroExpansion(Def, Range);
6017 
6018     return ME;
6019   }
6020 
6021   case PPD_MACRO_DEFINITION: {
6022     // Decode the identifier info and then check again; if the macro is
6023     // still defined and associated with the identifier,
6024     IdentifierInfo *II = getLocalIdentifier(M, Record[0]);
6025     MacroDefinitionRecord *MD = new (PPRec) MacroDefinitionRecord(II, Range);
6026 
6027     if (DeserializationListener)
6028       DeserializationListener->MacroDefinitionRead(PPID, MD);
6029 
6030     return MD;
6031   }
6032 
6033   case PPD_INCLUSION_DIRECTIVE: {
6034     const char *FullFileNameStart = Blob.data() + Record[0];
6035     StringRef FullFileName(FullFileNameStart, Blob.size() - Record[0]);
6036     const FileEntry *File = nullptr;
6037     if (!FullFileName.empty())
6038       if (auto FE = PP.getFileManager().getFile(FullFileName))
6039         File = *FE;
6040 
6041     // FIXME: Stable encoding
6042     InclusionDirective::InclusionKind Kind
6043       = static_cast<InclusionDirective::InclusionKind>(Record[2]);
6044     InclusionDirective *ID
6045       = new (PPRec) InclusionDirective(PPRec, Kind,
6046                                        StringRef(Blob.data(), Record[0]),
6047                                        Record[1], Record[3],
6048                                        File,
6049                                        Range);
6050     return ID;
6051   }
6052   }
6053 
6054   llvm_unreachable("Invalid PreprocessorDetailRecordTypes");
6055 }
6056 
6057 /// Find the next module that contains entities and return the ID
6058 /// of the first entry.
6059 ///
6060 /// \param SLocMapI points at a chunk of a module that contains no
6061 /// preprocessed entities or the entities it contains are not the ones we are
6062 /// looking for.
6063 PreprocessedEntityID ASTReader::findNextPreprocessedEntity(
6064                        GlobalSLocOffsetMapType::const_iterator SLocMapI) const {
6065   ++SLocMapI;
6066   for (GlobalSLocOffsetMapType::const_iterator
6067          EndI = GlobalSLocOffsetMap.end(); SLocMapI != EndI; ++SLocMapI) {
6068     ModuleFile &M = *SLocMapI->second;
6069     if (M.NumPreprocessedEntities)
6070       return M.BasePreprocessedEntityID;
6071   }
6072 
6073   return getTotalNumPreprocessedEntities();
6074 }
6075 
6076 namespace {
6077 
6078 struct PPEntityComp {
6079   const ASTReader &Reader;
6080   ModuleFile &M;
6081 
6082   PPEntityComp(const ASTReader &Reader, ModuleFile &M) : Reader(Reader), M(M) {}
6083 
6084   bool operator()(const PPEntityOffset &L, const PPEntityOffset &R) const {
6085     SourceLocation LHS = getLoc(L);
6086     SourceLocation RHS = getLoc(R);
6087     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6088   }
6089 
6090   bool operator()(const PPEntityOffset &L, SourceLocation RHS) const {
6091     SourceLocation LHS = getLoc(L);
6092     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6093   }
6094 
6095   bool operator()(SourceLocation LHS, const PPEntityOffset &R) const {
6096     SourceLocation RHS = getLoc(R);
6097     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
6098   }
6099 
6100   SourceLocation getLoc(const PPEntityOffset &PPE) const {
6101     return Reader.TranslateSourceLocation(M, PPE.getBegin());
6102   }
6103 };
6104 
6105 } // namespace
6106 
6107 PreprocessedEntityID ASTReader::findPreprocessedEntity(SourceLocation Loc,
6108                                                        bool EndsAfter) const {
6109   if (SourceMgr.isLocalSourceLocation(Loc))
6110     return getTotalNumPreprocessedEntities();
6111 
6112   GlobalSLocOffsetMapType::const_iterator SLocMapI = GlobalSLocOffsetMap.find(
6113       SourceManager::MaxLoadedOffset - Loc.getOffset() - 1);
6114   assert(SLocMapI != GlobalSLocOffsetMap.end() &&
6115          "Corrupted global sloc offset map");
6116 
6117   if (SLocMapI->second->NumPreprocessedEntities == 0)
6118     return findNextPreprocessedEntity(SLocMapI);
6119 
6120   ModuleFile &M = *SLocMapI->second;
6121 
6122   using pp_iterator = const PPEntityOffset *;
6123 
6124   pp_iterator pp_begin = M.PreprocessedEntityOffsets;
6125   pp_iterator pp_end = pp_begin + M.NumPreprocessedEntities;
6126 
6127   size_t Count = M.NumPreprocessedEntities;
6128   size_t Half;
6129   pp_iterator First = pp_begin;
6130   pp_iterator PPI;
6131 
6132   if (EndsAfter) {
6133     PPI = std::upper_bound(pp_begin, pp_end, Loc,
6134                            PPEntityComp(*this, M));
6135   } else {
6136     // Do a binary search manually instead of using std::lower_bound because
6137     // The end locations of entities may be unordered (when a macro expansion
6138     // is inside another macro argument), but for this case it is not important
6139     // whether we get the first macro expansion or its containing macro.
6140     while (Count > 0) {
6141       Half = Count / 2;
6142       PPI = First;
6143       std::advance(PPI, Half);
6144       if (SourceMgr.isBeforeInTranslationUnit(
6145               TranslateSourceLocation(M, PPI->getEnd()), Loc)) {
6146         First = PPI;
6147         ++First;
6148         Count = Count - Half - 1;
6149       } else
6150         Count = Half;
6151     }
6152   }
6153 
6154   if (PPI == pp_end)
6155     return findNextPreprocessedEntity(SLocMapI);
6156 
6157   return M.BasePreprocessedEntityID + (PPI - pp_begin);
6158 }
6159 
6160 /// Returns a pair of [Begin, End) indices of preallocated
6161 /// preprocessed entities that \arg Range encompasses.
6162 std::pair<unsigned, unsigned>
6163     ASTReader::findPreprocessedEntitiesInRange(SourceRange Range) {
6164   if (Range.isInvalid())
6165     return std::make_pair(0,0);
6166   assert(!SourceMgr.isBeforeInTranslationUnit(Range.getEnd(),Range.getBegin()));
6167 
6168   PreprocessedEntityID BeginID =
6169       findPreprocessedEntity(Range.getBegin(), false);
6170   PreprocessedEntityID EndID = findPreprocessedEntity(Range.getEnd(), true);
6171   return std::make_pair(BeginID, EndID);
6172 }
6173 
6174 /// Optionally returns true or false if the preallocated preprocessed
6175 /// entity with index \arg Index came from file \arg FID.
6176 Optional<bool> ASTReader::isPreprocessedEntityInFileID(unsigned Index,
6177                                                              FileID FID) {
6178   if (FID.isInvalid())
6179     return false;
6180 
6181   std::pair<ModuleFile *, unsigned> PPInfo = getModulePreprocessedEntity(Index);
6182   ModuleFile &M = *PPInfo.first;
6183   unsigned LocalIndex = PPInfo.second;
6184   const PPEntityOffset &PPOffs = M.PreprocessedEntityOffsets[LocalIndex];
6185 
6186   SourceLocation Loc = TranslateSourceLocation(M, PPOffs.getBegin());
6187   if (Loc.isInvalid())
6188     return false;
6189 
6190   if (SourceMgr.isInFileID(SourceMgr.getFileLoc(Loc), FID))
6191     return true;
6192   else
6193     return false;
6194 }
6195 
6196 namespace {
6197 
6198   /// Visitor used to search for information about a header file.
6199   class HeaderFileInfoVisitor {
6200     const FileEntry *FE;
6201     Optional<HeaderFileInfo> HFI;
6202 
6203   public:
6204     explicit HeaderFileInfoVisitor(const FileEntry *FE) : FE(FE) {}
6205 
6206     bool operator()(ModuleFile &M) {
6207       HeaderFileInfoLookupTable *Table
6208         = static_cast<HeaderFileInfoLookupTable *>(M.HeaderFileInfoTable);
6209       if (!Table)
6210         return false;
6211 
6212       // Look in the on-disk hash table for an entry for this file name.
6213       HeaderFileInfoLookupTable::iterator Pos = Table->find(FE);
6214       if (Pos == Table->end())
6215         return false;
6216 
6217       HFI = *Pos;
6218       return true;
6219     }
6220 
6221     Optional<HeaderFileInfo> getHeaderFileInfo() const { return HFI; }
6222   };
6223 
6224 } // namespace
6225 
6226 HeaderFileInfo ASTReader::GetHeaderFileInfo(const FileEntry *FE) {
6227   HeaderFileInfoVisitor Visitor(FE);
6228   ModuleMgr.visit(Visitor);
6229   if (Optional<HeaderFileInfo> HFI = Visitor.getHeaderFileInfo())
6230     return *HFI;
6231 
6232   return HeaderFileInfo();
6233 }
6234 
6235 void ASTReader::ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag) {
6236   using DiagState = DiagnosticsEngine::DiagState;
6237   SmallVector<DiagState *, 32> DiagStates;
6238 
6239   for (ModuleFile &F : ModuleMgr) {
6240     unsigned Idx = 0;
6241     auto &Record = F.PragmaDiagMappings;
6242     if (Record.empty())
6243       continue;
6244 
6245     DiagStates.clear();
6246 
6247     auto ReadDiagState =
6248         [&](const DiagState &BasedOn, SourceLocation Loc,
6249             bool IncludeNonPragmaStates) -> DiagnosticsEngine::DiagState * {
6250       unsigned BackrefID = Record[Idx++];
6251       if (BackrefID != 0)
6252         return DiagStates[BackrefID - 1];
6253 
6254       // A new DiagState was created here.
6255       Diag.DiagStates.push_back(BasedOn);
6256       DiagState *NewState = &Diag.DiagStates.back();
6257       DiagStates.push_back(NewState);
6258       unsigned Size = Record[Idx++];
6259       assert(Idx + Size * 2 <= Record.size() &&
6260              "Invalid data, not enough diag/map pairs");
6261       while (Size--) {
6262         unsigned DiagID = Record[Idx++];
6263         DiagnosticMapping NewMapping =
6264             DiagnosticMapping::deserialize(Record[Idx++]);
6265         if (!NewMapping.isPragma() && !IncludeNonPragmaStates)
6266           continue;
6267 
6268         DiagnosticMapping &Mapping = NewState->getOrAddMapping(DiagID);
6269 
6270         // If this mapping was specified as a warning but the severity was
6271         // upgraded due to diagnostic settings, simulate the current diagnostic
6272         // settings (and use a warning).
6273         if (NewMapping.wasUpgradedFromWarning() && !Mapping.isErrorOrFatal()) {
6274           NewMapping.setSeverity(diag::Severity::Warning);
6275           NewMapping.setUpgradedFromWarning(false);
6276         }
6277 
6278         Mapping = NewMapping;
6279       }
6280       return NewState;
6281     };
6282 
6283     // Read the first state.
6284     DiagState *FirstState;
6285     if (F.Kind == MK_ImplicitModule) {
6286       // Implicitly-built modules are reused with different diagnostic
6287       // settings.  Use the initial diagnostic state from Diag to simulate this
6288       // compilation's diagnostic settings.
6289       FirstState = Diag.DiagStatesByLoc.FirstDiagState;
6290       DiagStates.push_back(FirstState);
6291 
6292       // Skip the initial diagnostic state from the serialized module.
6293       assert(Record[1] == 0 &&
6294              "Invalid data, unexpected backref in initial state");
6295       Idx = 3 + Record[2] * 2;
6296       assert(Idx < Record.size() &&
6297              "Invalid data, not enough state change pairs in initial state");
6298     } else if (F.isModule()) {
6299       // For an explicit module, preserve the flags from the module build
6300       // command line (-w, -Weverything, -Werror, ...) along with any explicit
6301       // -Wblah flags.
6302       unsigned Flags = Record[Idx++];
6303       DiagState Initial;
6304       Initial.SuppressSystemWarnings = Flags & 1; Flags >>= 1;
6305       Initial.ErrorsAsFatal = Flags & 1; Flags >>= 1;
6306       Initial.WarningsAsErrors = Flags & 1; Flags >>= 1;
6307       Initial.EnableAllWarnings = Flags & 1; Flags >>= 1;
6308       Initial.IgnoreAllWarnings = Flags & 1; Flags >>= 1;
6309       Initial.ExtBehavior = (diag::Severity)Flags;
6310       FirstState = ReadDiagState(Initial, SourceLocation(), true);
6311 
6312       assert(F.OriginalSourceFileID.isValid());
6313 
6314       // Set up the root buffer of the module to start with the initial
6315       // diagnostic state of the module itself, to cover files that contain no
6316       // explicit transitions (for which we did not serialize anything).
6317       Diag.DiagStatesByLoc.Files[F.OriginalSourceFileID]
6318           .StateTransitions.push_back({FirstState, 0});
6319     } else {
6320       // For prefix ASTs, start with whatever the user configured on the
6321       // command line.
6322       Idx++; // Skip flags.
6323       FirstState = ReadDiagState(*Diag.DiagStatesByLoc.CurDiagState,
6324                                  SourceLocation(), false);
6325     }
6326 
6327     // Read the state transitions.
6328     unsigned NumLocations = Record[Idx++];
6329     while (NumLocations--) {
6330       assert(Idx < Record.size() &&
6331              "Invalid data, missing pragma diagnostic states");
6332       SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
6333       auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
6334       assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
6335       assert(IDAndOffset.second == 0 && "not a start location for a FileID");
6336       unsigned Transitions = Record[Idx++];
6337 
6338       // Note that we don't need to set up Parent/ParentOffset here, because
6339       // we won't be changing the diagnostic state within imported FileIDs
6340       // (other than perhaps appending to the main source file, which has no
6341       // parent).
6342       auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
6343       F.StateTransitions.reserve(F.StateTransitions.size() + Transitions);
6344       for (unsigned I = 0; I != Transitions; ++I) {
6345         unsigned Offset = Record[Idx++];
6346         auto *State =
6347             ReadDiagState(*FirstState, Loc.getLocWithOffset(Offset), false);
6348         F.StateTransitions.push_back({State, Offset});
6349       }
6350     }
6351 
6352     // Read the final state.
6353     assert(Idx < Record.size() &&
6354            "Invalid data, missing final pragma diagnostic state");
6355     SourceLocation CurStateLoc =
6356         ReadSourceLocation(F, F.PragmaDiagMappings[Idx++]);
6357     auto *CurState = ReadDiagState(*FirstState, CurStateLoc, false);
6358 
6359     if (!F.isModule()) {
6360       Diag.DiagStatesByLoc.CurDiagState = CurState;
6361       Diag.DiagStatesByLoc.CurDiagStateLoc = CurStateLoc;
6362 
6363       // Preserve the property that the imaginary root file describes the
6364       // current state.
6365       FileID NullFile;
6366       auto &T = Diag.DiagStatesByLoc.Files[NullFile].StateTransitions;
6367       if (T.empty())
6368         T.push_back({CurState, 0});
6369       else
6370         T[0].State = CurState;
6371     }
6372 
6373     // Don't try to read these mappings again.
6374     Record.clear();
6375   }
6376 }
6377 
6378 /// Get the correct cursor and offset for loading a type.
6379 ASTReader::RecordLocation ASTReader::TypeCursorForIndex(unsigned Index) {
6380   GlobalTypeMapType::iterator I = GlobalTypeMap.find(Index);
6381   assert(I != GlobalTypeMap.end() && "Corrupted global type map");
6382   ModuleFile *M = I->second;
6383   return RecordLocation(
6384       M, M->TypeOffsets[Index - M->BaseTypeIndex].getBitOffset() +
6385              M->DeclsBlockStartOffset);
6386 }
6387 
6388 static llvm::Optional<Type::TypeClass> getTypeClassForCode(TypeCode code) {
6389   switch (code) {
6390 #define TYPE_BIT_CODE(CLASS_ID, CODE_ID, CODE_VALUE) \
6391   case TYPE_##CODE_ID: return Type::CLASS_ID;
6392 #include "clang/Serialization/TypeBitCodes.def"
6393   default: return llvm::None;
6394   }
6395 }
6396 
6397 /// Read and return the type with the given index..
6398 ///
6399 /// The index is the type ID, shifted and minus the number of predefs. This
6400 /// routine actually reads the record corresponding to the type at the given
6401 /// location. It is a helper routine for GetType, which deals with reading type
6402 /// IDs.
6403 QualType ASTReader::readTypeRecord(unsigned Index) {
6404   assert(ContextObj && "reading type with no AST context");
6405   ASTContext &Context = *ContextObj;
6406   RecordLocation Loc = TypeCursorForIndex(Index);
6407   BitstreamCursor &DeclsCursor = Loc.F->DeclsCursor;
6408 
6409   // Keep track of where we are in the stream, then jump back there
6410   // after reading this type.
6411   SavedStreamPosition SavedPosition(DeclsCursor);
6412 
6413   ReadingKindTracker ReadingKind(Read_Type, *this);
6414 
6415   // Note that we are loading a type record.
6416   Deserializing AType(this);
6417 
6418   if (llvm::Error Err = DeclsCursor.JumpToBit(Loc.Offset)) {
6419     Error(std::move(Err));
6420     return QualType();
6421   }
6422   Expected<unsigned> RawCode = DeclsCursor.ReadCode();
6423   if (!RawCode) {
6424     Error(RawCode.takeError());
6425     return QualType();
6426   }
6427 
6428   ASTRecordReader Record(*this, *Loc.F);
6429   Expected<unsigned> Code = Record.readRecord(DeclsCursor, RawCode.get());
6430   if (!Code) {
6431     Error(Code.takeError());
6432     return QualType();
6433   }
6434   if (Code.get() == TYPE_EXT_QUAL) {
6435     QualType baseType = Record.readQualType();
6436     Qualifiers quals = Record.readQualifiers();
6437     return Context.getQualifiedType(baseType, quals);
6438   }
6439 
6440   auto maybeClass = getTypeClassForCode((TypeCode) Code.get());
6441   if (!maybeClass) {
6442     Error("Unexpected code for type");
6443     return QualType();
6444   }
6445 
6446   serialization::AbstractTypeReader<ASTRecordReader> TypeReader(Record);
6447   return TypeReader.read(*maybeClass);
6448 }
6449 
6450 namespace clang {
6451 
6452 class TypeLocReader : public TypeLocVisitor<TypeLocReader> {
6453   ASTRecordReader &Reader;
6454 
6455   SourceLocation readSourceLocation() {
6456     return Reader.readSourceLocation();
6457   }
6458 
6459   TypeSourceInfo *GetTypeSourceInfo() {
6460     return Reader.readTypeSourceInfo();
6461   }
6462 
6463   NestedNameSpecifierLoc ReadNestedNameSpecifierLoc() {
6464     return Reader.readNestedNameSpecifierLoc();
6465   }
6466 
6467   Attr *ReadAttr() {
6468     return Reader.readAttr();
6469   }
6470 
6471 public:
6472   TypeLocReader(ASTRecordReader &Reader) : Reader(Reader) {}
6473 
6474   // We want compile-time assurance that we've enumerated all of
6475   // these, so unfortunately we have to declare them first, then
6476   // define them out-of-line.
6477 #define ABSTRACT_TYPELOC(CLASS, PARENT)
6478 #define TYPELOC(CLASS, PARENT) \
6479   void Visit##CLASS##TypeLoc(CLASS##TypeLoc TyLoc);
6480 #include "clang/AST/TypeLocNodes.def"
6481 
6482   void VisitFunctionTypeLoc(FunctionTypeLoc);
6483   void VisitArrayTypeLoc(ArrayTypeLoc);
6484 };
6485 
6486 } // namespace clang
6487 
6488 void TypeLocReader::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
6489   // nothing to do
6490 }
6491 
6492 void TypeLocReader::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
6493   TL.setBuiltinLoc(readSourceLocation());
6494   if (TL.needsExtraLocalData()) {
6495     TL.setWrittenTypeSpec(static_cast<DeclSpec::TST>(Reader.readInt()));
6496     TL.setWrittenSignSpec(static_cast<TypeSpecifierSign>(Reader.readInt()));
6497     TL.setWrittenWidthSpec(static_cast<TypeSpecifierWidth>(Reader.readInt()));
6498     TL.setModeAttr(Reader.readInt());
6499   }
6500 }
6501 
6502 void TypeLocReader::VisitComplexTypeLoc(ComplexTypeLoc TL) {
6503   TL.setNameLoc(readSourceLocation());
6504 }
6505 
6506 void TypeLocReader::VisitPointerTypeLoc(PointerTypeLoc TL) {
6507   TL.setStarLoc(readSourceLocation());
6508 }
6509 
6510 void TypeLocReader::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
6511   // nothing to do
6512 }
6513 
6514 void TypeLocReader::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
6515   // nothing to do
6516 }
6517 
6518 void TypeLocReader::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
6519   TL.setExpansionLoc(readSourceLocation());
6520 }
6521 
6522 void TypeLocReader::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
6523   TL.setCaretLoc(readSourceLocation());
6524 }
6525 
6526 void TypeLocReader::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
6527   TL.setAmpLoc(readSourceLocation());
6528 }
6529 
6530 void TypeLocReader::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
6531   TL.setAmpAmpLoc(readSourceLocation());
6532 }
6533 
6534 void TypeLocReader::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
6535   TL.setStarLoc(readSourceLocation());
6536   TL.setClassTInfo(GetTypeSourceInfo());
6537 }
6538 
6539 void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
6540   TL.setLBracketLoc(readSourceLocation());
6541   TL.setRBracketLoc(readSourceLocation());
6542   if (Reader.readBool())
6543     TL.setSizeExpr(Reader.readExpr());
6544   else
6545     TL.setSizeExpr(nullptr);
6546 }
6547 
6548 void TypeLocReader::VisitConstantArrayTypeLoc(ConstantArrayTypeLoc TL) {
6549   VisitArrayTypeLoc(TL);
6550 }
6551 
6552 void TypeLocReader::VisitIncompleteArrayTypeLoc(IncompleteArrayTypeLoc TL) {
6553   VisitArrayTypeLoc(TL);
6554 }
6555 
6556 void TypeLocReader::VisitVariableArrayTypeLoc(VariableArrayTypeLoc TL) {
6557   VisitArrayTypeLoc(TL);
6558 }
6559 
6560 void TypeLocReader::VisitDependentSizedArrayTypeLoc(
6561                                             DependentSizedArrayTypeLoc TL) {
6562   VisitArrayTypeLoc(TL);
6563 }
6564 
6565 void TypeLocReader::VisitDependentAddressSpaceTypeLoc(
6566     DependentAddressSpaceTypeLoc TL) {
6567 
6568     TL.setAttrNameLoc(readSourceLocation());
6569     TL.setAttrOperandParensRange(Reader.readSourceRange());
6570     TL.setAttrExprOperand(Reader.readExpr());
6571 }
6572 
6573 void TypeLocReader::VisitDependentSizedExtVectorTypeLoc(
6574                                         DependentSizedExtVectorTypeLoc TL) {
6575   TL.setNameLoc(readSourceLocation());
6576 }
6577 
6578 void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
6579   TL.setNameLoc(readSourceLocation());
6580 }
6581 
6582 void TypeLocReader::VisitDependentVectorTypeLoc(
6583     DependentVectorTypeLoc TL) {
6584   TL.setNameLoc(readSourceLocation());
6585 }
6586 
6587 void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
6588   TL.setNameLoc(readSourceLocation());
6589 }
6590 
6591 void TypeLocReader::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
6592   TL.setAttrNameLoc(readSourceLocation());
6593   TL.setAttrOperandParensRange(Reader.readSourceRange());
6594   TL.setAttrRowOperand(Reader.readExpr());
6595   TL.setAttrColumnOperand(Reader.readExpr());
6596 }
6597 
6598 void TypeLocReader::VisitDependentSizedMatrixTypeLoc(
6599     DependentSizedMatrixTypeLoc TL) {
6600   TL.setAttrNameLoc(readSourceLocation());
6601   TL.setAttrOperandParensRange(Reader.readSourceRange());
6602   TL.setAttrRowOperand(Reader.readExpr());
6603   TL.setAttrColumnOperand(Reader.readExpr());
6604 }
6605 
6606 void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
6607   TL.setLocalRangeBegin(readSourceLocation());
6608   TL.setLParenLoc(readSourceLocation());
6609   TL.setRParenLoc(readSourceLocation());
6610   TL.setExceptionSpecRange(Reader.readSourceRange());
6611   TL.setLocalRangeEnd(readSourceLocation());
6612   for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
6613     TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
6614   }
6615 }
6616 
6617 void TypeLocReader::VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc TL) {
6618   VisitFunctionTypeLoc(TL);
6619 }
6620 
6621 void TypeLocReader::VisitFunctionNoProtoTypeLoc(FunctionNoProtoTypeLoc TL) {
6622   VisitFunctionTypeLoc(TL);
6623 }
6624 
6625 void TypeLocReader::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
6626   TL.setNameLoc(readSourceLocation());
6627 }
6628 
6629 void TypeLocReader::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
6630   TL.setNameLoc(readSourceLocation());
6631 }
6632 
6633 void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
6634   TL.setTypeofLoc(readSourceLocation());
6635   TL.setLParenLoc(readSourceLocation());
6636   TL.setRParenLoc(readSourceLocation());
6637 }
6638 
6639 void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
6640   TL.setTypeofLoc(readSourceLocation());
6641   TL.setLParenLoc(readSourceLocation());
6642   TL.setRParenLoc(readSourceLocation());
6643   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6644 }
6645 
6646 void TypeLocReader::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
6647   TL.setNameLoc(readSourceLocation());
6648 }
6649 
6650 void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
6651   TL.setKWLoc(readSourceLocation());
6652   TL.setLParenLoc(readSourceLocation());
6653   TL.setRParenLoc(readSourceLocation());
6654   TL.setUnderlyingTInfo(GetTypeSourceInfo());
6655 }
6656 
6657 void TypeLocReader::VisitAutoTypeLoc(AutoTypeLoc TL) {
6658   TL.setNameLoc(readSourceLocation());
6659   if (Reader.readBool()) {
6660     TL.setNestedNameSpecifierLoc(ReadNestedNameSpecifierLoc());
6661     TL.setTemplateKWLoc(readSourceLocation());
6662     TL.setConceptNameLoc(readSourceLocation());
6663     TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
6664     TL.setLAngleLoc(readSourceLocation());
6665     TL.setRAngleLoc(readSourceLocation());
6666     for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6667       TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
6668                               TL.getTypePtr()->getArg(i).getKind()));
6669   }
6670 }
6671 
6672 void TypeLocReader::VisitDeducedTemplateSpecializationTypeLoc(
6673     DeducedTemplateSpecializationTypeLoc TL) {
6674   TL.setTemplateNameLoc(readSourceLocation());
6675 }
6676 
6677 void TypeLocReader::VisitRecordTypeLoc(RecordTypeLoc TL) {
6678   TL.setNameLoc(readSourceLocation());
6679 }
6680 
6681 void TypeLocReader::VisitEnumTypeLoc(EnumTypeLoc TL) {
6682   TL.setNameLoc(readSourceLocation());
6683 }
6684 
6685 void TypeLocReader::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
6686   TL.setAttr(ReadAttr());
6687 }
6688 
6689 void TypeLocReader::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
6690   TL.setNameLoc(readSourceLocation());
6691 }
6692 
6693 void TypeLocReader::VisitSubstTemplateTypeParmTypeLoc(
6694                                             SubstTemplateTypeParmTypeLoc TL) {
6695   TL.setNameLoc(readSourceLocation());
6696 }
6697 
6698 void TypeLocReader::VisitSubstTemplateTypeParmPackTypeLoc(
6699                                           SubstTemplateTypeParmPackTypeLoc TL) {
6700   TL.setNameLoc(readSourceLocation());
6701 }
6702 
6703 void TypeLocReader::VisitTemplateSpecializationTypeLoc(
6704                                            TemplateSpecializationTypeLoc TL) {
6705   TL.setTemplateKeywordLoc(readSourceLocation());
6706   TL.setTemplateNameLoc(readSourceLocation());
6707   TL.setLAngleLoc(readSourceLocation());
6708   TL.setRAngleLoc(readSourceLocation());
6709   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
6710     TL.setArgLocInfo(
6711         i,
6712         Reader.readTemplateArgumentLocInfo(
6713           TL.getTypePtr()->getArg(i).getKind()));
6714 }
6715 
6716 void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
6717   TL.setLParenLoc(readSourceLocation());
6718   TL.setRParenLoc(readSourceLocation());
6719 }
6720 
6721 void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
6722   TL.setElaboratedKeywordLoc(readSourceLocation());
6723   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6724 }
6725 
6726 void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
6727   TL.setNameLoc(readSourceLocation());
6728 }
6729 
6730 void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
6731   TL.setElaboratedKeywordLoc(readSourceLocation());
6732   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6733   TL.setNameLoc(readSourceLocation());
6734 }
6735 
6736 void TypeLocReader::VisitDependentTemplateSpecializationTypeLoc(
6737        DependentTemplateSpecializationTypeLoc TL) {
6738   TL.setElaboratedKeywordLoc(readSourceLocation());
6739   TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
6740   TL.setTemplateKeywordLoc(readSourceLocation());
6741   TL.setTemplateNameLoc(readSourceLocation());
6742   TL.setLAngleLoc(readSourceLocation());
6743   TL.setRAngleLoc(readSourceLocation());
6744   for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
6745     TL.setArgLocInfo(
6746         I,
6747         Reader.readTemplateArgumentLocInfo(
6748             TL.getTypePtr()->getArg(I).getKind()));
6749 }
6750 
6751 void TypeLocReader::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
6752   TL.setEllipsisLoc(readSourceLocation());
6753 }
6754 
6755 void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
6756   TL.setNameLoc(readSourceLocation());
6757 }
6758 
6759 void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
6760   if (TL.getNumProtocols()) {
6761     TL.setProtocolLAngleLoc(readSourceLocation());
6762     TL.setProtocolRAngleLoc(readSourceLocation());
6763   }
6764   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6765     TL.setProtocolLoc(i, readSourceLocation());
6766 }
6767 
6768 void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
6769   TL.setHasBaseTypeAsWritten(Reader.readBool());
6770   TL.setTypeArgsLAngleLoc(readSourceLocation());
6771   TL.setTypeArgsRAngleLoc(readSourceLocation());
6772   for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
6773     TL.setTypeArgTInfo(i, GetTypeSourceInfo());
6774   TL.setProtocolLAngleLoc(readSourceLocation());
6775   TL.setProtocolRAngleLoc(readSourceLocation());
6776   for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
6777     TL.setProtocolLoc(i, readSourceLocation());
6778 }
6779 
6780 void TypeLocReader::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
6781   TL.setStarLoc(readSourceLocation());
6782 }
6783 
6784 void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
6785   TL.setKWLoc(readSourceLocation());
6786   TL.setLParenLoc(readSourceLocation());
6787   TL.setRParenLoc(readSourceLocation());
6788 }
6789 
6790 void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
6791   TL.setKWLoc(readSourceLocation());
6792 }
6793 
6794 void TypeLocReader::VisitExtIntTypeLoc(clang::ExtIntTypeLoc TL) {
6795   TL.setNameLoc(readSourceLocation());
6796 }
6797 void TypeLocReader::VisitDependentExtIntTypeLoc(
6798     clang::DependentExtIntTypeLoc TL) {
6799   TL.setNameLoc(readSourceLocation());
6800 }
6801 
6802 
6803 void ASTRecordReader::readTypeLoc(TypeLoc TL) {
6804   TypeLocReader TLR(*this);
6805   for (; !TL.isNull(); TL = TL.getNextTypeLoc())
6806     TLR.Visit(TL);
6807 }
6808 
6809 TypeSourceInfo *ASTRecordReader::readTypeSourceInfo() {
6810   QualType InfoTy = readType();
6811   if (InfoTy.isNull())
6812     return nullptr;
6813 
6814   TypeSourceInfo *TInfo = getContext().CreateTypeSourceInfo(InfoTy);
6815   readTypeLoc(TInfo->getTypeLoc());
6816   return TInfo;
6817 }
6818 
6819 QualType ASTReader::GetType(TypeID ID) {
6820   assert(ContextObj && "reading type with no AST context");
6821   ASTContext &Context = *ContextObj;
6822 
6823   unsigned FastQuals = ID & Qualifiers::FastMask;
6824   unsigned Index = ID >> Qualifiers::FastWidth;
6825 
6826   if (Index < NUM_PREDEF_TYPE_IDS) {
6827     QualType T;
6828     switch ((PredefinedTypeIDs)Index) {
6829     case PREDEF_TYPE_NULL_ID:
6830       return QualType();
6831     case PREDEF_TYPE_VOID_ID:
6832       T = Context.VoidTy;
6833       break;
6834     case PREDEF_TYPE_BOOL_ID:
6835       T = Context.BoolTy;
6836       break;
6837     case PREDEF_TYPE_CHAR_U_ID:
6838     case PREDEF_TYPE_CHAR_S_ID:
6839       // FIXME: Check that the signedness of CharTy is correct!
6840       T = Context.CharTy;
6841       break;
6842     case PREDEF_TYPE_UCHAR_ID:
6843       T = Context.UnsignedCharTy;
6844       break;
6845     case PREDEF_TYPE_USHORT_ID:
6846       T = Context.UnsignedShortTy;
6847       break;
6848     case PREDEF_TYPE_UINT_ID:
6849       T = Context.UnsignedIntTy;
6850       break;
6851     case PREDEF_TYPE_ULONG_ID:
6852       T = Context.UnsignedLongTy;
6853       break;
6854     case PREDEF_TYPE_ULONGLONG_ID:
6855       T = Context.UnsignedLongLongTy;
6856       break;
6857     case PREDEF_TYPE_UINT128_ID:
6858       T = Context.UnsignedInt128Ty;
6859       break;
6860     case PREDEF_TYPE_SCHAR_ID:
6861       T = Context.SignedCharTy;
6862       break;
6863     case PREDEF_TYPE_WCHAR_ID:
6864       T = Context.WCharTy;
6865       break;
6866     case PREDEF_TYPE_SHORT_ID:
6867       T = Context.ShortTy;
6868       break;
6869     case PREDEF_TYPE_INT_ID:
6870       T = Context.IntTy;
6871       break;
6872     case PREDEF_TYPE_LONG_ID:
6873       T = Context.LongTy;
6874       break;
6875     case PREDEF_TYPE_LONGLONG_ID:
6876       T = Context.LongLongTy;
6877       break;
6878     case PREDEF_TYPE_INT128_ID:
6879       T = Context.Int128Ty;
6880       break;
6881     case PREDEF_TYPE_BFLOAT16_ID:
6882       T = Context.BFloat16Ty;
6883       break;
6884     case PREDEF_TYPE_HALF_ID:
6885       T = Context.HalfTy;
6886       break;
6887     case PREDEF_TYPE_FLOAT_ID:
6888       T = Context.FloatTy;
6889       break;
6890     case PREDEF_TYPE_DOUBLE_ID:
6891       T = Context.DoubleTy;
6892       break;
6893     case PREDEF_TYPE_LONGDOUBLE_ID:
6894       T = Context.LongDoubleTy;
6895       break;
6896     case PREDEF_TYPE_SHORT_ACCUM_ID:
6897       T = Context.ShortAccumTy;
6898       break;
6899     case PREDEF_TYPE_ACCUM_ID:
6900       T = Context.AccumTy;
6901       break;
6902     case PREDEF_TYPE_LONG_ACCUM_ID:
6903       T = Context.LongAccumTy;
6904       break;
6905     case PREDEF_TYPE_USHORT_ACCUM_ID:
6906       T = Context.UnsignedShortAccumTy;
6907       break;
6908     case PREDEF_TYPE_UACCUM_ID:
6909       T = Context.UnsignedAccumTy;
6910       break;
6911     case PREDEF_TYPE_ULONG_ACCUM_ID:
6912       T = Context.UnsignedLongAccumTy;
6913       break;
6914     case PREDEF_TYPE_SHORT_FRACT_ID:
6915       T = Context.ShortFractTy;
6916       break;
6917     case PREDEF_TYPE_FRACT_ID:
6918       T = Context.FractTy;
6919       break;
6920     case PREDEF_TYPE_LONG_FRACT_ID:
6921       T = Context.LongFractTy;
6922       break;
6923     case PREDEF_TYPE_USHORT_FRACT_ID:
6924       T = Context.UnsignedShortFractTy;
6925       break;
6926     case PREDEF_TYPE_UFRACT_ID:
6927       T = Context.UnsignedFractTy;
6928       break;
6929     case PREDEF_TYPE_ULONG_FRACT_ID:
6930       T = Context.UnsignedLongFractTy;
6931       break;
6932     case PREDEF_TYPE_SAT_SHORT_ACCUM_ID:
6933       T = Context.SatShortAccumTy;
6934       break;
6935     case PREDEF_TYPE_SAT_ACCUM_ID:
6936       T = Context.SatAccumTy;
6937       break;
6938     case PREDEF_TYPE_SAT_LONG_ACCUM_ID:
6939       T = Context.SatLongAccumTy;
6940       break;
6941     case PREDEF_TYPE_SAT_USHORT_ACCUM_ID:
6942       T = Context.SatUnsignedShortAccumTy;
6943       break;
6944     case PREDEF_TYPE_SAT_UACCUM_ID:
6945       T = Context.SatUnsignedAccumTy;
6946       break;
6947     case PREDEF_TYPE_SAT_ULONG_ACCUM_ID:
6948       T = Context.SatUnsignedLongAccumTy;
6949       break;
6950     case PREDEF_TYPE_SAT_SHORT_FRACT_ID:
6951       T = Context.SatShortFractTy;
6952       break;
6953     case PREDEF_TYPE_SAT_FRACT_ID:
6954       T = Context.SatFractTy;
6955       break;
6956     case PREDEF_TYPE_SAT_LONG_FRACT_ID:
6957       T = Context.SatLongFractTy;
6958       break;
6959     case PREDEF_TYPE_SAT_USHORT_FRACT_ID:
6960       T = Context.SatUnsignedShortFractTy;
6961       break;
6962     case PREDEF_TYPE_SAT_UFRACT_ID:
6963       T = Context.SatUnsignedFractTy;
6964       break;
6965     case PREDEF_TYPE_SAT_ULONG_FRACT_ID:
6966       T = Context.SatUnsignedLongFractTy;
6967       break;
6968     case PREDEF_TYPE_FLOAT16_ID:
6969       T = Context.Float16Ty;
6970       break;
6971     case PREDEF_TYPE_FLOAT128_ID:
6972       T = Context.Float128Ty;
6973       break;
6974     case PREDEF_TYPE_OVERLOAD_ID:
6975       T = Context.OverloadTy;
6976       break;
6977     case PREDEF_TYPE_BOUND_MEMBER:
6978       T = Context.BoundMemberTy;
6979       break;
6980     case PREDEF_TYPE_PSEUDO_OBJECT:
6981       T = Context.PseudoObjectTy;
6982       break;
6983     case PREDEF_TYPE_DEPENDENT_ID:
6984       T = Context.DependentTy;
6985       break;
6986     case PREDEF_TYPE_UNKNOWN_ANY:
6987       T = Context.UnknownAnyTy;
6988       break;
6989     case PREDEF_TYPE_NULLPTR_ID:
6990       T = Context.NullPtrTy;
6991       break;
6992     case PREDEF_TYPE_CHAR8_ID:
6993       T = Context.Char8Ty;
6994       break;
6995     case PREDEF_TYPE_CHAR16_ID:
6996       T = Context.Char16Ty;
6997       break;
6998     case PREDEF_TYPE_CHAR32_ID:
6999       T = Context.Char32Ty;
7000       break;
7001     case PREDEF_TYPE_OBJC_ID:
7002       T = Context.ObjCBuiltinIdTy;
7003       break;
7004     case PREDEF_TYPE_OBJC_CLASS:
7005       T = Context.ObjCBuiltinClassTy;
7006       break;
7007     case PREDEF_TYPE_OBJC_SEL:
7008       T = Context.ObjCBuiltinSelTy;
7009       break;
7010 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
7011     case PREDEF_TYPE_##Id##_ID: \
7012       T = Context.SingletonId; \
7013       break;
7014 #include "clang/Basic/OpenCLImageTypes.def"
7015 #define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
7016     case PREDEF_TYPE_##Id##_ID: \
7017       T = Context.Id##Ty; \
7018       break;
7019 #include "clang/Basic/OpenCLExtensionTypes.def"
7020     case PREDEF_TYPE_SAMPLER_ID:
7021       T = Context.OCLSamplerTy;
7022       break;
7023     case PREDEF_TYPE_EVENT_ID:
7024       T = Context.OCLEventTy;
7025       break;
7026     case PREDEF_TYPE_CLK_EVENT_ID:
7027       T = Context.OCLClkEventTy;
7028       break;
7029     case PREDEF_TYPE_QUEUE_ID:
7030       T = Context.OCLQueueTy;
7031       break;
7032     case PREDEF_TYPE_RESERVE_ID_ID:
7033       T = Context.OCLReserveIDTy;
7034       break;
7035     case PREDEF_TYPE_AUTO_DEDUCT:
7036       T = Context.getAutoDeductType();
7037       break;
7038     case PREDEF_TYPE_AUTO_RREF_DEDUCT:
7039       T = Context.getAutoRRefDeductType();
7040       break;
7041     case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
7042       T = Context.ARCUnbridgedCastTy;
7043       break;
7044     case PREDEF_TYPE_BUILTIN_FN:
7045       T = Context.BuiltinFnTy;
7046       break;
7047     case PREDEF_TYPE_INCOMPLETE_MATRIX_IDX:
7048       T = Context.IncompleteMatrixIdxTy;
7049       break;
7050     case PREDEF_TYPE_OMP_ARRAY_SECTION:
7051       T = Context.OMPArraySectionTy;
7052       break;
7053     case PREDEF_TYPE_OMP_ARRAY_SHAPING:
7054       T = Context.OMPArraySectionTy;
7055       break;
7056     case PREDEF_TYPE_OMP_ITERATOR:
7057       T = Context.OMPIteratorTy;
7058       break;
7059 #define SVE_TYPE(Name, Id, SingletonId) \
7060     case PREDEF_TYPE_##Id##_ID: \
7061       T = Context.SingletonId; \
7062       break;
7063 #include "clang/Basic/AArch64SVEACLETypes.def"
7064 #define PPC_VECTOR_TYPE(Name, Id, Size) \
7065     case PREDEF_TYPE_##Id##_ID: \
7066       T = Context.Id##Ty; \
7067       break;
7068 #include "clang/Basic/PPCTypes.def"
7069 #define RVV_TYPE(Name, Id, SingletonId) \
7070     case PREDEF_TYPE_##Id##_ID: \
7071       T = Context.SingletonId; \
7072       break;
7073 #include "clang/Basic/RISCVVTypes.def"
7074     }
7075 
7076     assert(!T.isNull() && "Unknown predefined type");
7077     return T.withFastQualifiers(FastQuals);
7078   }
7079 
7080   Index -= NUM_PREDEF_TYPE_IDS;
7081   assert(Index < TypesLoaded.size() && "Type index out-of-range");
7082   if (TypesLoaded[Index].isNull()) {
7083     TypesLoaded[Index] = readTypeRecord(Index);
7084     if (TypesLoaded[Index].isNull())
7085       return QualType();
7086 
7087     TypesLoaded[Index]->setFromAST();
7088     if (DeserializationListener)
7089       DeserializationListener->TypeRead(TypeIdx::fromTypeID(ID),
7090                                         TypesLoaded[Index]);
7091   }
7092 
7093   return TypesLoaded[Index].withFastQualifiers(FastQuals);
7094 }
7095 
7096 QualType ASTReader::getLocalType(ModuleFile &F, unsigned LocalID) {
7097   return GetType(getGlobalTypeID(F, LocalID));
7098 }
7099 
7100 serialization::TypeID
7101 ASTReader::getGlobalTypeID(ModuleFile &F, unsigned LocalID) const {
7102   unsigned FastQuals = LocalID & Qualifiers::FastMask;
7103   unsigned LocalIndex = LocalID >> Qualifiers::FastWidth;
7104 
7105   if (LocalIndex < NUM_PREDEF_TYPE_IDS)
7106     return LocalID;
7107 
7108   if (!F.ModuleOffsetMap.empty())
7109     ReadModuleOffsetMap(F);
7110 
7111   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7112     = F.TypeRemap.find(LocalIndex - NUM_PREDEF_TYPE_IDS);
7113   assert(I != F.TypeRemap.end() && "Invalid index into type index remap");
7114 
7115   unsigned GlobalIndex = LocalIndex + I->second;
7116   return (GlobalIndex << Qualifiers::FastWidth) | FastQuals;
7117 }
7118 
7119 TemplateArgumentLocInfo
7120 ASTRecordReader::readTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
7121   switch (Kind) {
7122   case TemplateArgument::Expression:
7123     return readExpr();
7124   case TemplateArgument::Type:
7125     return readTypeSourceInfo();
7126   case TemplateArgument::Template: {
7127     NestedNameSpecifierLoc QualifierLoc =
7128       readNestedNameSpecifierLoc();
7129     SourceLocation TemplateNameLoc = readSourceLocation();
7130     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7131                                    TemplateNameLoc, SourceLocation());
7132   }
7133   case TemplateArgument::TemplateExpansion: {
7134     NestedNameSpecifierLoc QualifierLoc = readNestedNameSpecifierLoc();
7135     SourceLocation TemplateNameLoc = readSourceLocation();
7136     SourceLocation EllipsisLoc = readSourceLocation();
7137     return TemplateArgumentLocInfo(getASTContext(), QualifierLoc,
7138                                    TemplateNameLoc, EllipsisLoc);
7139   }
7140   case TemplateArgument::Null:
7141   case TemplateArgument::Integral:
7142   case TemplateArgument::Declaration:
7143   case TemplateArgument::NullPtr:
7144   case TemplateArgument::Pack:
7145     // FIXME: Is this right?
7146     return TemplateArgumentLocInfo();
7147   }
7148   llvm_unreachable("unexpected template argument loc");
7149 }
7150 
7151 TemplateArgumentLoc ASTRecordReader::readTemplateArgumentLoc() {
7152   TemplateArgument Arg = readTemplateArgument();
7153 
7154   if (Arg.getKind() == TemplateArgument::Expression) {
7155     if (readBool()) // bool InfoHasSameExpr.
7156       return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo(Arg.getAsExpr()));
7157   }
7158   return TemplateArgumentLoc(Arg, readTemplateArgumentLocInfo(Arg.getKind()));
7159 }
7160 
7161 const ASTTemplateArgumentListInfo *
7162 ASTRecordReader::readASTTemplateArgumentListInfo() {
7163   SourceLocation LAngleLoc = readSourceLocation();
7164   SourceLocation RAngleLoc = readSourceLocation();
7165   unsigned NumArgsAsWritten = readInt();
7166   TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
7167   for (unsigned i = 0; i != NumArgsAsWritten; ++i)
7168     TemplArgsInfo.addArgument(readTemplateArgumentLoc());
7169   return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
7170 }
7171 
7172 Decl *ASTReader::GetExternalDecl(uint32_t ID) {
7173   return GetDecl(ID);
7174 }
7175 
7176 void ASTReader::CompleteRedeclChain(const Decl *D) {
7177   if (NumCurrentElementsDeserializing) {
7178     // We arrange to not care about the complete redeclaration chain while we're
7179     // deserializing. Just remember that the AST has marked this one as complete
7180     // but that it's not actually complete yet, so we know we still need to
7181     // complete it later.
7182     PendingIncompleteDeclChains.push_back(const_cast<Decl*>(D));
7183     return;
7184   }
7185 
7186   if (!D->getDeclContext()) {
7187     assert(isa<TranslationUnitDecl>(D) && "Not a TU?");
7188     return;
7189   }
7190 
7191   const DeclContext *DC = D->getDeclContext()->getRedeclContext();
7192 
7193   // If this is a named declaration, complete it by looking it up
7194   // within its context.
7195   //
7196   // FIXME: Merging a function definition should merge
7197   // all mergeable entities within it.
7198   if (isa<TranslationUnitDecl>(DC) || isa<NamespaceDecl>(DC) ||
7199       isa<CXXRecordDecl>(DC) || isa<EnumDecl>(DC)) {
7200     if (DeclarationName Name = cast<NamedDecl>(D)->getDeclName()) {
7201       if (!getContext().getLangOpts().CPlusPlus &&
7202           isa<TranslationUnitDecl>(DC)) {
7203         // Outside of C++, we don't have a lookup table for the TU, so update
7204         // the identifier instead. (For C++ modules, we don't store decls
7205         // in the serialized identifier table, so we do the lookup in the TU.)
7206         auto *II = Name.getAsIdentifierInfo();
7207         assert(II && "non-identifier name in C?");
7208         if (II->isOutOfDate())
7209           updateOutOfDateIdentifier(*II);
7210       } else
7211         DC->lookup(Name);
7212     } else if (needsAnonymousDeclarationNumber(cast<NamedDecl>(D))) {
7213       // Find all declarations of this kind from the relevant context.
7214       for (auto *DCDecl : cast<Decl>(D->getLexicalDeclContext())->redecls()) {
7215         auto *DC = cast<DeclContext>(DCDecl);
7216         SmallVector<Decl*, 8> Decls;
7217         FindExternalLexicalDecls(
7218             DC, [&](Decl::Kind K) { return K == D->getKind(); }, Decls);
7219       }
7220     }
7221   }
7222 
7223   if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(D))
7224     CTSD->getSpecializedTemplate()->LoadLazySpecializations();
7225   if (auto *VTSD = dyn_cast<VarTemplateSpecializationDecl>(D))
7226     VTSD->getSpecializedTemplate()->LoadLazySpecializations();
7227   if (auto *FD = dyn_cast<FunctionDecl>(D)) {
7228     if (auto *Template = FD->getPrimaryTemplate())
7229       Template->LoadLazySpecializations();
7230   }
7231 }
7232 
7233 CXXCtorInitializer **
7234 ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) {
7235   RecordLocation Loc = getLocalBitOffset(Offset);
7236   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7237   SavedStreamPosition SavedPosition(Cursor);
7238   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7239     Error(std::move(Err));
7240     return nullptr;
7241   }
7242   ReadingKindTracker ReadingKind(Read_Decl, *this);
7243 
7244   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7245   if (!MaybeCode) {
7246     Error(MaybeCode.takeError());
7247     return nullptr;
7248   }
7249   unsigned Code = MaybeCode.get();
7250 
7251   ASTRecordReader Record(*this, *Loc.F);
7252   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7253   if (!MaybeRecCode) {
7254     Error(MaybeRecCode.takeError());
7255     return nullptr;
7256   }
7257   if (MaybeRecCode.get() != DECL_CXX_CTOR_INITIALIZERS) {
7258     Error("malformed AST file: missing C++ ctor initializers");
7259     return nullptr;
7260   }
7261 
7262   return Record.readCXXCtorInitializers();
7263 }
7264 
7265 CXXBaseSpecifier *ASTReader::GetExternalCXXBaseSpecifiers(uint64_t Offset) {
7266   assert(ContextObj && "reading base specifiers with no AST context");
7267   ASTContext &Context = *ContextObj;
7268 
7269   RecordLocation Loc = getLocalBitOffset(Offset);
7270   BitstreamCursor &Cursor = Loc.F->DeclsCursor;
7271   SavedStreamPosition SavedPosition(Cursor);
7272   if (llvm::Error Err = Cursor.JumpToBit(Loc.Offset)) {
7273     Error(std::move(Err));
7274     return nullptr;
7275   }
7276   ReadingKindTracker ReadingKind(Read_Decl, *this);
7277 
7278   Expected<unsigned> MaybeCode = Cursor.ReadCode();
7279   if (!MaybeCode) {
7280     Error(MaybeCode.takeError());
7281     return nullptr;
7282   }
7283   unsigned Code = MaybeCode.get();
7284 
7285   ASTRecordReader Record(*this, *Loc.F);
7286   Expected<unsigned> MaybeRecCode = Record.readRecord(Cursor, Code);
7287   if (!MaybeRecCode) {
7288     Error(MaybeCode.takeError());
7289     return nullptr;
7290   }
7291   unsigned RecCode = MaybeRecCode.get();
7292 
7293   if (RecCode != DECL_CXX_BASE_SPECIFIERS) {
7294     Error("malformed AST file: missing C++ base specifiers");
7295     return nullptr;
7296   }
7297 
7298   unsigned NumBases = Record.readInt();
7299   void *Mem = Context.Allocate(sizeof(CXXBaseSpecifier) * NumBases);
7300   CXXBaseSpecifier *Bases = new (Mem) CXXBaseSpecifier [NumBases];
7301   for (unsigned I = 0; I != NumBases; ++I)
7302     Bases[I] = Record.readCXXBaseSpecifier();
7303   return Bases;
7304 }
7305 
7306 serialization::DeclID
7307 ASTReader::getGlobalDeclID(ModuleFile &F, LocalDeclID LocalID) const {
7308   if (LocalID < NUM_PREDEF_DECL_IDS)
7309     return LocalID;
7310 
7311   if (!F.ModuleOffsetMap.empty())
7312     ReadModuleOffsetMap(F);
7313 
7314   ContinuousRangeMap<uint32_t, int, 2>::iterator I
7315     = F.DeclRemap.find(LocalID - NUM_PREDEF_DECL_IDS);
7316   assert(I != F.DeclRemap.end() && "Invalid index into decl index remap");
7317 
7318   return LocalID + I->second;
7319 }
7320 
7321 bool ASTReader::isDeclIDFromModule(serialization::GlobalDeclID ID,
7322                                    ModuleFile &M) const {
7323   // Predefined decls aren't from any module.
7324   if (ID < NUM_PREDEF_DECL_IDS)
7325     return false;
7326 
7327   return ID - NUM_PREDEF_DECL_IDS >= M.BaseDeclID &&
7328          ID - NUM_PREDEF_DECL_IDS < M.BaseDeclID + M.LocalNumDecls;
7329 }
7330 
7331 ModuleFile *ASTReader::getOwningModuleFile(const Decl *D) {
7332   if (!D->isFromASTFile())
7333     return nullptr;
7334   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(D->getGlobalID());
7335   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7336   return I->second;
7337 }
7338 
7339 SourceLocation ASTReader::getSourceLocationForDeclID(GlobalDeclID ID) {
7340   if (ID < NUM_PREDEF_DECL_IDS)
7341     return SourceLocation();
7342 
7343   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7344 
7345   if (Index > DeclsLoaded.size()) {
7346     Error("declaration ID out-of-range for AST file");
7347     return SourceLocation();
7348   }
7349 
7350   if (Decl *D = DeclsLoaded[Index])
7351     return D->getLocation();
7352 
7353   SourceLocation Loc;
7354   DeclCursorForID(ID, Loc);
7355   return Loc;
7356 }
7357 
7358 static Decl *getPredefinedDecl(ASTContext &Context, PredefinedDeclIDs ID) {
7359   switch (ID) {
7360   case PREDEF_DECL_NULL_ID:
7361     return nullptr;
7362 
7363   case PREDEF_DECL_TRANSLATION_UNIT_ID:
7364     return Context.getTranslationUnitDecl();
7365 
7366   case PREDEF_DECL_OBJC_ID_ID:
7367     return Context.getObjCIdDecl();
7368 
7369   case PREDEF_DECL_OBJC_SEL_ID:
7370     return Context.getObjCSelDecl();
7371 
7372   case PREDEF_DECL_OBJC_CLASS_ID:
7373     return Context.getObjCClassDecl();
7374 
7375   case PREDEF_DECL_OBJC_PROTOCOL_ID:
7376     return Context.getObjCProtocolDecl();
7377 
7378   case PREDEF_DECL_INT_128_ID:
7379     return Context.getInt128Decl();
7380 
7381   case PREDEF_DECL_UNSIGNED_INT_128_ID:
7382     return Context.getUInt128Decl();
7383 
7384   case PREDEF_DECL_OBJC_INSTANCETYPE_ID:
7385     return Context.getObjCInstanceTypeDecl();
7386 
7387   case PREDEF_DECL_BUILTIN_VA_LIST_ID:
7388     return Context.getBuiltinVaListDecl();
7389 
7390   case PREDEF_DECL_VA_LIST_TAG:
7391     return Context.getVaListTagDecl();
7392 
7393   case PREDEF_DECL_BUILTIN_MS_VA_LIST_ID:
7394     return Context.getBuiltinMSVaListDecl();
7395 
7396   case PREDEF_DECL_BUILTIN_MS_GUID_ID:
7397     return Context.getMSGuidTagDecl();
7398 
7399   case PREDEF_DECL_EXTERN_C_CONTEXT_ID:
7400     return Context.getExternCContextDecl();
7401 
7402   case PREDEF_DECL_MAKE_INTEGER_SEQ_ID:
7403     return Context.getMakeIntegerSeqDecl();
7404 
7405   case PREDEF_DECL_CF_CONSTANT_STRING_ID:
7406     return Context.getCFConstantStringDecl();
7407 
7408   case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:
7409     return Context.getCFConstantStringTagDecl();
7410 
7411   case PREDEF_DECL_TYPE_PACK_ELEMENT_ID:
7412     return Context.getTypePackElementDecl();
7413   }
7414   llvm_unreachable("PredefinedDeclIDs unknown enum value");
7415 }
7416 
7417 Decl *ASTReader::GetExistingDecl(DeclID ID) {
7418   assert(ContextObj && "reading decl with no AST context");
7419   if (ID < NUM_PREDEF_DECL_IDS) {
7420     Decl *D = getPredefinedDecl(*ContextObj, (PredefinedDeclIDs)ID);
7421     if (D) {
7422       // Track that we have merged the declaration with ID \p ID into the
7423       // pre-existing predefined declaration \p D.
7424       auto &Merged = KeyDecls[D->getCanonicalDecl()];
7425       if (Merged.empty())
7426         Merged.push_back(ID);
7427     }
7428     return D;
7429   }
7430 
7431   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7432 
7433   if (Index >= DeclsLoaded.size()) {
7434     assert(0 && "declaration ID out-of-range for AST file");
7435     Error("declaration ID out-of-range for AST file");
7436     return nullptr;
7437   }
7438 
7439   return DeclsLoaded[Index];
7440 }
7441 
7442 Decl *ASTReader::GetDecl(DeclID ID) {
7443   if (ID < NUM_PREDEF_DECL_IDS)
7444     return GetExistingDecl(ID);
7445 
7446   unsigned Index = ID - NUM_PREDEF_DECL_IDS;
7447 
7448   if (Index >= DeclsLoaded.size()) {
7449     assert(0 && "declaration ID out-of-range for AST file");
7450     Error("declaration ID out-of-range for AST file");
7451     return nullptr;
7452   }
7453 
7454   if (!DeclsLoaded[Index]) {
7455     ReadDeclRecord(ID);
7456     if (DeserializationListener)
7457       DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
7458   }
7459 
7460   return DeclsLoaded[Index];
7461 }
7462 
7463 DeclID ASTReader::mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
7464                                                   DeclID GlobalID) {
7465   if (GlobalID < NUM_PREDEF_DECL_IDS)
7466     return GlobalID;
7467 
7468   GlobalDeclMapType::const_iterator I = GlobalDeclMap.find(GlobalID);
7469   assert(I != GlobalDeclMap.end() && "Corrupted global declaration map");
7470   ModuleFile *Owner = I->second;
7471 
7472   llvm::DenseMap<ModuleFile *, serialization::DeclID>::iterator Pos
7473     = M.GlobalToLocalDeclIDs.find(Owner);
7474   if (Pos == M.GlobalToLocalDeclIDs.end())
7475     return 0;
7476 
7477   return GlobalID - Owner->BaseDeclID + Pos->second;
7478 }
7479 
7480 serialization::DeclID ASTReader::ReadDeclID(ModuleFile &F,
7481                                             const RecordData &Record,
7482                                             unsigned &Idx) {
7483   if (Idx >= Record.size()) {
7484     Error("Corrupted AST file");
7485     return 0;
7486   }
7487 
7488   return getGlobalDeclID(F, Record[Idx++]);
7489 }
7490 
7491 /// Resolve the offset of a statement into a statement.
7492 ///
7493 /// This operation will read a new statement from the external
7494 /// source each time it is called, and is meant to be used via a
7495 /// LazyOffsetPtr (which is used by Decls for the body of functions, etc).
7496 Stmt *ASTReader::GetExternalDeclStmt(uint64_t Offset) {
7497   // Switch case IDs are per Decl.
7498   ClearSwitchCaseIDs();
7499 
7500   // Offset here is a global offset across the entire chain.
7501   RecordLocation Loc = getLocalBitOffset(Offset);
7502   if (llvm::Error Err = Loc.F->DeclsCursor.JumpToBit(Loc.Offset)) {
7503     Error(std::move(Err));
7504     return nullptr;
7505   }
7506   assert(NumCurrentElementsDeserializing == 0 &&
7507          "should not be called while already deserializing");
7508   Deserializing D(this);
7509   return ReadStmtFromStream(*Loc.F);
7510 }
7511 
7512 void ASTReader::FindExternalLexicalDecls(
7513     const DeclContext *DC, llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
7514     SmallVectorImpl<Decl *> &Decls) {
7515   bool PredefsVisited[NUM_PREDEF_DECL_IDS] = {};
7516 
7517   auto Visit = [&] (ModuleFile *M, LexicalContents LexicalDecls) {
7518     assert(LexicalDecls.size() % 2 == 0 && "expected an even number of entries");
7519     for (int I = 0, N = LexicalDecls.size(); I != N; I += 2) {
7520       auto K = (Decl::Kind)+LexicalDecls[I];
7521       if (!IsKindWeWant(K))
7522         continue;
7523 
7524       auto ID = (serialization::DeclID)+LexicalDecls[I + 1];
7525 
7526       // Don't add predefined declarations to the lexical context more
7527       // than once.
7528       if (ID < NUM_PREDEF_DECL_IDS) {
7529         if (PredefsVisited[ID])
7530           continue;
7531 
7532         PredefsVisited[ID] = true;
7533       }
7534 
7535       if (Decl *D = GetLocalDecl(*M, ID)) {
7536         assert(D->getKind() == K && "wrong kind for lexical decl");
7537         if (!DC->isDeclInLexicalTraversal(D))
7538           Decls.push_back(D);
7539       }
7540     }
7541   };
7542 
7543   if (isa<TranslationUnitDecl>(DC)) {
7544     for (auto Lexical : TULexicalDecls)
7545       Visit(Lexical.first, Lexical.second);
7546   } else {
7547     auto I = LexicalDecls.find(DC);
7548     if (I != LexicalDecls.end())
7549       Visit(I->second.first, I->second.second);
7550   }
7551 
7552   ++NumLexicalDeclContextsRead;
7553 }
7554 
7555 namespace {
7556 
7557 class DeclIDComp {
7558   ASTReader &Reader;
7559   ModuleFile &Mod;
7560 
7561 public:
7562   DeclIDComp(ASTReader &Reader, ModuleFile &M) : Reader(Reader), Mod(M) {}
7563 
7564   bool operator()(LocalDeclID L, LocalDeclID R) const {
7565     SourceLocation LHS = getLocation(L);
7566     SourceLocation RHS = getLocation(R);
7567     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7568   }
7569 
7570   bool operator()(SourceLocation LHS, LocalDeclID R) const {
7571     SourceLocation RHS = getLocation(R);
7572     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7573   }
7574 
7575   bool operator()(LocalDeclID L, SourceLocation RHS) const {
7576     SourceLocation LHS = getLocation(L);
7577     return Reader.getSourceManager().isBeforeInTranslationUnit(LHS, RHS);
7578   }
7579 
7580   SourceLocation getLocation(LocalDeclID ID) const {
7581     return Reader.getSourceManager().getFileLoc(
7582             Reader.getSourceLocationForDeclID(Reader.getGlobalDeclID(Mod, ID)));
7583   }
7584 };
7585 
7586 } // namespace
7587 
7588 void ASTReader::FindFileRegionDecls(FileID File,
7589                                     unsigned Offset, unsigned Length,
7590                                     SmallVectorImpl<Decl *> &Decls) {
7591   SourceManager &SM = getSourceManager();
7592 
7593   llvm::DenseMap<FileID, FileDeclsInfo>::iterator I = FileDeclIDs.find(File);
7594   if (I == FileDeclIDs.end())
7595     return;
7596 
7597   FileDeclsInfo &DInfo = I->second;
7598   if (DInfo.Decls.empty())
7599     return;
7600 
7601   SourceLocation
7602     BeginLoc = SM.getLocForStartOfFile(File).getLocWithOffset(Offset);
7603   SourceLocation EndLoc = BeginLoc.getLocWithOffset(Length);
7604 
7605   DeclIDComp DIDComp(*this, *DInfo.Mod);
7606   ArrayRef<serialization::LocalDeclID>::iterator BeginIt =
7607       llvm::lower_bound(DInfo.Decls, BeginLoc, DIDComp);
7608   if (BeginIt != DInfo.Decls.begin())
7609     --BeginIt;
7610 
7611   // If we are pointing at a top-level decl inside an objc container, we need
7612   // to backtrack until we find it otherwise we will fail to report that the
7613   // region overlaps with an objc container.
7614   while (BeginIt != DInfo.Decls.begin() &&
7615          GetDecl(getGlobalDeclID(*DInfo.Mod, *BeginIt))
7616              ->isTopLevelDeclInObjCContainer())
7617     --BeginIt;
7618 
7619   ArrayRef<serialization::LocalDeclID>::iterator EndIt =
7620       llvm::upper_bound(DInfo.Decls, EndLoc, DIDComp);
7621   if (EndIt != DInfo.Decls.end())
7622     ++EndIt;
7623 
7624   for (ArrayRef<serialization::LocalDeclID>::iterator
7625          DIt = BeginIt; DIt != EndIt; ++DIt)
7626     Decls.push_back(GetDecl(getGlobalDeclID(*DInfo.Mod, *DIt)));
7627 }
7628 
7629 bool
7630 ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC,
7631                                           DeclarationName Name) {
7632   assert(DC->hasExternalVisibleStorage() && DC == DC->getPrimaryContext() &&
7633          "DeclContext has no visible decls in storage");
7634   if (!Name)
7635     return false;
7636 
7637   auto It = Lookups.find(DC);
7638   if (It == Lookups.end())
7639     return false;
7640 
7641   Deserializing LookupResults(this);
7642 
7643   // Load the list of declarations.
7644   SmallVector<NamedDecl *, 64> Decls;
7645   llvm::SmallPtrSet<NamedDecl *, 8> Found;
7646   for (DeclID ID : It->second.Table.find(Name)) {
7647     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7648     if (ND->getDeclName() == Name && Found.insert(ND).second)
7649       Decls.push_back(ND);
7650   }
7651 
7652   ++NumVisibleDeclContextsRead;
7653   SetExternalVisibleDeclsForName(DC, Name, Decls);
7654   return !Decls.empty();
7655 }
7656 
7657 void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
7658   if (!DC->hasExternalVisibleStorage())
7659     return;
7660 
7661   auto It = Lookups.find(DC);
7662   assert(It != Lookups.end() &&
7663          "have external visible storage but no lookup tables");
7664 
7665   DeclsMap Decls;
7666 
7667   for (DeclID ID : It->second.Table.findAll()) {
7668     NamedDecl *ND = cast<NamedDecl>(GetDecl(ID));
7669     Decls[ND->getDeclName()].push_back(ND);
7670   }
7671 
7672   ++NumVisibleDeclContextsRead;
7673 
7674   for (DeclsMap::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {
7675     SetExternalVisibleDeclsForName(DC, I->first, I->second);
7676   }
7677   const_cast<DeclContext *>(DC)->setHasExternalVisibleStorage(false);
7678 }
7679 
7680 const serialization::reader::DeclContextLookupTable *
7681 ASTReader::getLoadedLookupTables(DeclContext *Primary) const {
7682   auto I = Lookups.find(Primary);
7683   return I == Lookups.end() ? nullptr : &I->second;
7684 }
7685 
7686 /// Under non-PCH compilation the consumer receives the objc methods
7687 /// before receiving the implementation, and codegen depends on this.
7688 /// We simulate this by deserializing and passing to consumer the methods of the
7689 /// implementation before passing the deserialized implementation decl.
7690 static void PassObjCImplDeclToConsumer(ObjCImplDecl *ImplD,
7691                                        ASTConsumer *Consumer) {
7692   assert(ImplD && Consumer);
7693 
7694   for (auto *I : ImplD->methods())
7695     Consumer->HandleInterestingDecl(DeclGroupRef(I));
7696 
7697   Consumer->HandleInterestingDecl(DeclGroupRef(ImplD));
7698 }
7699 
7700 void ASTReader::PassInterestingDeclToConsumer(Decl *D) {
7701   if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
7702     PassObjCImplDeclToConsumer(ImplD, Consumer);
7703   else
7704     Consumer->HandleInterestingDecl(DeclGroupRef(D));
7705 }
7706 
7707 void ASTReader::StartTranslationUnit(ASTConsumer *Consumer) {
7708   this->Consumer = Consumer;
7709 
7710   if (Consumer)
7711     PassInterestingDeclsToConsumer();
7712 
7713   if (DeserializationListener)
7714     DeserializationListener->ReaderInitialized(this);
7715 }
7716 
7717 void ASTReader::PrintStats() {
7718   std::fprintf(stderr, "*** AST File Statistics:\n");
7719 
7720   unsigned NumTypesLoaded
7721     = TypesLoaded.size() - std::count(TypesLoaded.begin(), TypesLoaded.end(),
7722                                       QualType());
7723   unsigned NumDeclsLoaded
7724     = DeclsLoaded.size() - std::count(DeclsLoaded.begin(), DeclsLoaded.end(),
7725                                       (Decl *)nullptr);
7726   unsigned NumIdentifiersLoaded
7727     = IdentifiersLoaded.size() - std::count(IdentifiersLoaded.begin(),
7728                                             IdentifiersLoaded.end(),
7729                                             (IdentifierInfo *)nullptr);
7730   unsigned NumMacrosLoaded
7731     = MacrosLoaded.size() - std::count(MacrosLoaded.begin(),
7732                                        MacrosLoaded.end(),
7733                                        (MacroInfo *)nullptr);
7734   unsigned NumSelectorsLoaded
7735     = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(),
7736                                           SelectorsLoaded.end(),
7737                                           Selector());
7738 
7739   if (unsigned TotalNumSLocEntries = getTotalNumSLocs())
7740     std::fprintf(stderr, "  %u/%u source location entries read (%f%%)\n",
7741                  NumSLocEntriesRead, TotalNumSLocEntries,
7742                  ((float)NumSLocEntriesRead/TotalNumSLocEntries * 100));
7743   if (!TypesLoaded.empty())
7744     std::fprintf(stderr, "  %u/%u types read (%f%%)\n",
7745                  NumTypesLoaded, (unsigned)TypesLoaded.size(),
7746                  ((float)NumTypesLoaded/TypesLoaded.size() * 100));
7747   if (!DeclsLoaded.empty())
7748     std::fprintf(stderr, "  %u/%u declarations read (%f%%)\n",
7749                  NumDeclsLoaded, (unsigned)DeclsLoaded.size(),
7750                  ((float)NumDeclsLoaded/DeclsLoaded.size() * 100));
7751   if (!IdentifiersLoaded.empty())
7752     std::fprintf(stderr, "  %u/%u identifiers read (%f%%)\n",
7753                  NumIdentifiersLoaded, (unsigned)IdentifiersLoaded.size(),
7754                  ((float)NumIdentifiersLoaded/IdentifiersLoaded.size() * 100));
7755   if (!MacrosLoaded.empty())
7756     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7757                  NumMacrosLoaded, (unsigned)MacrosLoaded.size(),
7758                  ((float)NumMacrosLoaded/MacrosLoaded.size() * 100));
7759   if (!SelectorsLoaded.empty())
7760     std::fprintf(stderr, "  %u/%u selectors read (%f%%)\n",
7761                  NumSelectorsLoaded, (unsigned)SelectorsLoaded.size(),
7762                  ((float)NumSelectorsLoaded/SelectorsLoaded.size() * 100));
7763   if (TotalNumStatements)
7764     std::fprintf(stderr, "  %u/%u statements read (%f%%)\n",
7765                  NumStatementsRead, TotalNumStatements,
7766                  ((float)NumStatementsRead/TotalNumStatements * 100));
7767   if (TotalNumMacros)
7768     std::fprintf(stderr, "  %u/%u macros read (%f%%)\n",
7769                  NumMacrosRead, TotalNumMacros,
7770                  ((float)NumMacrosRead/TotalNumMacros * 100));
7771   if (TotalLexicalDeclContexts)
7772     std::fprintf(stderr, "  %u/%u lexical declcontexts read (%f%%)\n",
7773                  NumLexicalDeclContextsRead, TotalLexicalDeclContexts,
7774                  ((float)NumLexicalDeclContextsRead/TotalLexicalDeclContexts
7775                   * 100));
7776   if (TotalVisibleDeclContexts)
7777     std::fprintf(stderr, "  %u/%u visible declcontexts read (%f%%)\n",
7778                  NumVisibleDeclContextsRead, TotalVisibleDeclContexts,
7779                  ((float)NumVisibleDeclContextsRead/TotalVisibleDeclContexts
7780                   * 100));
7781   if (TotalNumMethodPoolEntries)
7782     std::fprintf(stderr, "  %u/%u method pool entries read (%f%%)\n",
7783                  NumMethodPoolEntriesRead, TotalNumMethodPoolEntries,
7784                  ((float)NumMethodPoolEntriesRead/TotalNumMethodPoolEntries
7785                   * 100));
7786   if (NumMethodPoolLookups)
7787     std::fprintf(stderr, "  %u/%u method pool lookups succeeded (%f%%)\n",
7788                  NumMethodPoolHits, NumMethodPoolLookups,
7789                  ((float)NumMethodPoolHits/NumMethodPoolLookups * 100.0));
7790   if (NumMethodPoolTableLookups)
7791     std::fprintf(stderr, "  %u/%u method pool table lookups succeeded (%f%%)\n",
7792                  NumMethodPoolTableHits, NumMethodPoolTableLookups,
7793                  ((float)NumMethodPoolTableHits/NumMethodPoolTableLookups
7794                   * 100.0));
7795   if (NumIdentifierLookupHits)
7796     std::fprintf(stderr,
7797                  "  %u / %u identifier table lookups succeeded (%f%%)\n",
7798                  NumIdentifierLookupHits, NumIdentifierLookups,
7799                  (double)NumIdentifierLookupHits*100.0/NumIdentifierLookups);
7800 
7801   if (GlobalIndex) {
7802     std::fprintf(stderr, "\n");
7803     GlobalIndex->printStats();
7804   }
7805 
7806   std::fprintf(stderr, "\n");
7807   dump();
7808   std::fprintf(stderr, "\n");
7809 }
7810 
7811 template<typename Key, typename ModuleFile, unsigned InitialCapacity>
7812 LLVM_DUMP_METHOD static void
7813 dumpModuleIDMap(StringRef Name,
7814                 const ContinuousRangeMap<Key, ModuleFile *,
7815                                          InitialCapacity> &Map) {
7816   if (Map.begin() == Map.end())
7817     return;
7818 
7819   using MapType = ContinuousRangeMap<Key, ModuleFile *, InitialCapacity>;
7820 
7821   llvm::errs() << Name << ":\n";
7822   for (typename MapType::const_iterator I = Map.begin(), IEnd = Map.end();
7823        I != IEnd; ++I) {
7824     llvm::errs() << "  " << I->first << " -> " << I->second->FileName
7825       << "\n";
7826   }
7827 }
7828 
7829 LLVM_DUMP_METHOD void ASTReader::dump() {
7830   llvm::errs() << "*** PCH/ModuleFile Remappings:\n";
7831   dumpModuleIDMap("Global bit offset map", GlobalBitOffsetsMap);
7832   dumpModuleIDMap("Global source location entry map", GlobalSLocEntryMap);
7833   dumpModuleIDMap("Global type map", GlobalTypeMap);
7834   dumpModuleIDMap("Global declaration map", GlobalDeclMap);
7835   dumpModuleIDMap("Global identifier map", GlobalIdentifierMap);
7836   dumpModuleIDMap("Global macro map", GlobalMacroMap);
7837   dumpModuleIDMap("Global submodule map", GlobalSubmoduleMap);
7838   dumpModuleIDMap("Global selector map", GlobalSelectorMap);
7839   dumpModuleIDMap("Global preprocessed entity map",
7840                   GlobalPreprocessedEntityMap);
7841 
7842   llvm::errs() << "\n*** PCH/Modules Loaded:";
7843   for (ModuleFile &M : ModuleMgr)
7844     M.dump();
7845 }
7846 
7847 /// Return the amount of memory used by memory buffers, breaking down
7848 /// by heap-backed versus mmap'ed memory.
7849 void ASTReader::getMemoryBufferSizes(MemoryBufferSizes &sizes) const {
7850   for (ModuleFile &I : ModuleMgr) {
7851     if (llvm::MemoryBuffer *buf = I.Buffer) {
7852       size_t bytes = buf->getBufferSize();
7853       switch (buf->getBufferKind()) {
7854         case llvm::MemoryBuffer::MemoryBuffer_Malloc:
7855           sizes.malloc_bytes += bytes;
7856           break;
7857         case llvm::MemoryBuffer::MemoryBuffer_MMap:
7858           sizes.mmap_bytes += bytes;
7859           break;
7860       }
7861     }
7862   }
7863 }
7864 
7865 void ASTReader::InitializeSema(Sema &S) {
7866   SemaObj = &S;
7867   S.addExternalSource(this);
7868 
7869   // Makes sure any declarations that were deserialized "too early"
7870   // still get added to the identifier's declaration chains.
7871   for (uint64_t ID : PreloadedDeclIDs) {
7872     NamedDecl *D = cast<NamedDecl>(GetDecl(ID));
7873     pushExternalDeclIntoScope(D, D->getDeclName());
7874   }
7875   PreloadedDeclIDs.clear();
7876 
7877   // FIXME: What happens if these are changed by a module import?
7878   if (!FPPragmaOptions.empty()) {
7879     assert(FPPragmaOptions.size() == 1 && "Wrong number of FP_PRAGMA_OPTIONS");
7880     FPOptionsOverride NewOverrides =
7881         FPOptionsOverride::getFromOpaqueInt(FPPragmaOptions[0]);
7882     SemaObj->CurFPFeatures =
7883         NewOverrides.applyOverrides(SemaObj->getLangOpts());
7884   }
7885 
7886   SemaObj->OpenCLFeatures = OpenCLExtensions;
7887 
7888   UpdateSema();
7889 }
7890 
7891 void ASTReader::UpdateSema() {
7892   assert(SemaObj && "no Sema to update");
7893 
7894   // Load the offsets of the declarations that Sema references.
7895   // They will be lazily deserialized when needed.
7896   if (!SemaDeclRefs.empty()) {
7897     assert(SemaDeclRefs.size() % 3 == 0);
7898     for (unsigned I = 0; I != SemaDeclRefs.size(); I += 3) {
7899       if (!SemaObj->StdNamespace)
7900         SemaObj->StdNamespace = SemaDeclRefs[I];
7901       if (!SemaObj->StdBadAlloc)
7902         SemaObj->StdBadAlloc = SemaDeclRefs[I+1];
7903       if (!SemaObj->StdAlignValT)
7904         SemaObj->StdAlignValT = SemaDeclRefs[I+2];
7905     }
7906     SemaDeclRefs.clear();
7907   }
7908 
7909   // Update the state of pragmas. Use the same API as if we had encountered the
7910   // pragma in the source.
7911   if(OptimizeOffPragmaLocation.isValid())
7912     SemaObj->ActOnPragmaOptimize(/* On = */ false, OptimizeOffPragmaLocation);
7913   if (PragmaMSStructState != -1)
7914     SemaObj->ActOnPragmaMSStruct((PragmaMSStructKind)PragmaMSStructState);
7915   if (PointersToMembersPragmaLocation.isValid()) {
7916     SemaObj->ActOnPragmaMSPointersToMembers(
7917         (LangOptions::PragmaMSPointersToMembersKind)
7918             PragmaMSPointersToMembersState,
7919         PointersToMembersPragmaLocation);
7920   }
7921   SemaObj->ForceCUDAHostDeviceDepth = ForceCUDAHostDeviceDepth;
7922 
7923   if (PragmaAlignPackCurrentValue) {
7924     // The bottom of the stack might have a default value. It must be adjusted
7925     // to the current value to ensure that the packing state is preserved after
7926     // popping entries that were included/imported from a PCH/module.
7927     bool DropFirst = false;
7928     if (!PragmaAlignPackStack.empty() &&
7929         PragmaAlignPackStack.front().Location.isInvalid()) {
7930       assert(PragmaAlignPackStack.front().Value ==
7931                  SemaObj->AlignPackStack.DefaultValue &&
7932              "Expected a default alignment value");
7933       SemaObj->AlignPackStack.Stack.emplace_back(
7934           PragmaAlignPackStack.front().SlotLabel,
7935           SemaObj->AlignPackStack.CurrentValue,
7936           SemaObj->AlignPackStack.CurrentPragmaLocation,
7937           PragmaAlignPackStack.front().PushLocation);
7938       DropFirst = true;
7939     }
7940     for (const auto &Entry : llvm::makeArrayRef(PragmaAlignPackStack)
7941                                  .drop_front(DropFirst ? 1 : 0)) {
7942       SemaObj->AlignPackStack.Stack.emplace_back(
7943           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7944     }
7945     if (PragmaAlignPackCurrentLocation.isInvalid()) {
7946       assert(*PragmaAlignPackCurrentValue ==
7947                  SemaObj->AlignPackStack.DefaultValue &&
7948              "Expected a default align and pack value");
7949       // Keep the current values.
7950     } else {
7951       SemaObj->AlignPackStack.CurrentValue = *PragmaAlignPackCurrentValue;
7952       SemaObj->AlignPackStack.CurrentPragmaLocation =
7953           PragmaAlignPackCurrentLocation;
7954     }
7955   }
7956   if (FpPragmaCurrentValue) {
7957     // The bottom of the stack might have a default value. It must be adjusted
7958     // to the current value to ensure that fp-pragma state is preserved after
7959     // popping entries that were included/imported from a PCH/module.
7960     bool DropFirst = false;
7961     if (!FpPragmaStack.empty() && FpPragmaStack.front().Location.isInvalid()) {
7962       assert(FpPragmaStack.front().Value ==
7963                  SemaObj->FpPragmaStack.DefaultValue &&
7964              "Expected a default pragma float_control value");
7965       SemaObj->FpPragmaStack.Stack.emplace_back(
7966           FpPragmaStack.front().SlotLabel, SemaObj->FpPragmaStack.CurrentValue,
7967           SemaObj->FpPragmaStack.CurrentPragmaLocation,
7968           FpPragmaStack.front().PushLocation);
7969       DropFirst = true;
7970     }
7971     for (const auto &Entry :
7972          llvm::makeArrayRef(FpPragmaStack).drop_front(DropFirst ? 1 : 0))
7973       SemaObj->FpPragmaStack.Stack.emplace_back(
7974           Entry.SlotLabel, Entry.Value, Entry.Location, Entry.PushLocation);
7975     if (FpPragmaCurrentLocation.isInvalid()) {
7976       assert(*FpPragmaCurrentValue == SemaObj->FpPragmaStack.DefaultValue &&
7977              "Expected a default pragma float_control value");
7978       // Keep the current values.
7979     } else {
7980       SemaObj->FpPragmaStack.CurrentValue = *FpPragmaCurrentValue;
7981       SemaObj->FpPragmaStack.CurrentPragmaLocation = FpPragmaCurrentLocation;
7982     }
7983   }
7984 
7985   // For non-modular AST files, restore visiblity of modules.
7986   for (auto &Import : ImportedModules) {
7987     if (Import.ImportLoc.isInvalid())
7988       continue;
7989     if (Module *Imported = getSubmodule(Import.ID)) {
7990       SemaObj->makeModuleVisible(Imported, Import.ImportLoc);
7991     }
7992   }
7993 }
7994 
7995 IdentifierInfo *ASTReader::get(StringRef Name) {
7996   // Note that we are loading an identifier.
7997   Deserializing AnIdentifier(this);
7998 
7999   IdentifierLookupVisitor Visitor(Name, /*PriorGeneration=*/0,
8000                                   NumIdentifierLookups,
8001                                   NumIdentifierLookupHits);
8002 
8003   // We don't need to do identifier table lookups in C++ modules (we preload
8004   // all interesting declarations, and don't need to use the scope for name
8005   // lookups). Perform the lookup in PCH files, though, since we don't build
8006   // a complete initial identifier table if we're carrying on from a PCH.
8007   if (PP.getLangOpts().CPlusPlus) {
8008     for (auto F : ModuleMgr.pch_modules())
8009       if (Visitor(*F))
8010         break;
8011   } else {
8012     // If there is a global index, look there first to determine which modules
8013     // provably do not have any results for this identifier.
8014     GlobalModuleIndex::HitSet Hits;
8015     GlobalModuleIndex::HitSet *HitsPtr = nullptr;
8016     if (!loadGlobalIndex()) {
8017       if (GlobalIndex->lookupIdentifier(Name, Hits)) {
8018         HitsPtr = &Hits;
8019       }
8020     }
8021 
8022     ModuleMgr.visit(Visitor, HitsPtr);
8023   }
8024 
8025   IdentifierInfo *II = Visitor.getIdentifierInfo();
8026   markIdentifierUpToDate(II);
8027   return II;
8028 }
8029 
8030 namespace clang {
8031 
8032   /// An identifier-lookup iterator that enumerates all of the
8033   /// identifiers stored within a set of AST files.
8034   class ASTIdentifierIterator : public IdentifierIterator {
8035     /// The AST reader whose identifiers are being enumerated.
8036     const ASTReader &Reader;
8037 
8038     /// The current index into the chain of AST files stored in
8039     /// the AST reader.
8040     unsigned Index;
8041 
8042     /// The current position within the identifier lookup table
8043     /// of the current AST file.
8044     ASTIdentifierLookupTable::key_iterator Current;
8045 
8046     /// The end position within the identifier lookup table of
8047     /// the current AST file.
8048     ASTIdentifierLookupTable::key_iterator End;
8049 
8050     /// Whether to skip any modules in the ASTReader.
8051     bool SkipModules;
8052 
8053   public:
8054     explicit ASTIdentifierIterator(const ASTReader &Reader,
8055                                    bool SkipModules = false);
8056 
8057     StringRef Next() override;
8058   };
8059 
8060 } // namespace clang
8061 
8062 ASTIdentifierIterator::ASTIdentifierIterator(const ASTReader &Reader,
8063                                              bool SkipModules)
8064     : Reader(Reader), Index(Reader.ModuleMgr.size()), SkipModules(SkipModules) {
8065 }
8066 
8067 StringRef ASTIdentifierIterator::Next() {
8068   while (Current == End) {
8069     // If we have exhausted all of our AST files, we're done.
8070     if (Index == 0)
8071       return StringRef();
8072 
8073     --Index;
8074     ModuleFile &F = Reader.ModuleMgr[Index];
8075     if (SkipModules && F.isModule())
8076       continue;
8077 
8078     ASTIdentifierLookupTable *IdTable =
8079         (ASTIdentifierLookupTable *)F.IdentifierLookupTable;
8080     Current = IdTable->key_begin();
8081     End = IdTable->key_end();
8082   }
8083 
8084   // We have any identifiers remaining in the current AST file; return
8085   // the next one.
8086   StringRef Result = *Current;
8087   ++Current;
8088   return Result;
8089 }
8090 
8091 namespace {
8092 
8093 /// A utility for appending two IdentifierIterators.
8094 class ChainedIdentifierIterator : public IdentifierIterator {
8095   std::unique_ptr<IdentifierIterator> Current;
8096   std::unique_ptr<IdentifierIterator> Queued;
8097 
8098 public:
8099   ChainedIdentifierIterator(std::unique_ptr<IdentifierIterator> First,
8100                             std::unique_ptr<IdentifierIterator> Second)
8101       : Current(std::move(First)), Queued(std::move(Second)) {}
8102 
8103   StringRef Next() override {
8104     if (!Current)
8105       return StringRef();
8106 
8107     StringRef result = Current->Next();
8108     if (!result.empty())
8109       return result;
8110 
8111     // Try the queued iterator, which may itself be empty.
8112     Current.reset();
8113     std::swap(Current, Queued);
8114     return Next();
8115   }
8116 };
8117 
8118 } // namespace
8119 
8120 IdentifierIterator *ASTReader::getIdentifiers() {
8121   if (!loadGlobalIndex()) {
8122     std::unique_ptr<IdentifierIterator> ReaderIter(
8123         new ASTIdentifierIterator(*this, /*SkipModules=*/true));
8124     std::unique_ptr<IdentifierIterator> ModulesIter(
8125         GlobalIndex->createIdentifierIterator());
8126     return new ChainedIdentifierIterator(std::move(ReaderIter),
8127                                          std::move(ModulesIter));
8128   }
8129 
8130   return new ASTIdentifierIterator(*this);
8131 }
8132 
8133 namespace clang {
8134 namespace serialization {
8135 
8136   class ReadMethodPoolVisitor {
8137     ASTReader &Reader;
8138     Selector Sel;
8139     unsigned PriorGeneration;
8140     unsigned InstanceBits = 0;
8141     unsigned FactoryBits = 0;
8142     bool InstanceHasMoreThanOneDecl = false;
8143     bool FactoryHasMoreThanOneDecl = false;
8144     SmallVector<ObjCMethodDecl *, 4> InstanceMethods;
8145     SmallVector<ObjCMethodDecl *, 4> FactoryMethods;
8146 
8147   public:
8148     ReadMethodPoolVisitor(ASTReader &Reader, Selector Sel,
8149                           unsigned PriorGeneration)
8150         : Reader(Reader), Sel(Sel), PriorGeneration(PriorGeneration) {}
8151 
8152     bool operator()(ModuleFile &M) {
8153       if (!M.SelectorLookupTable)
8154         return false;
8155 
8156       // If we've already searched this module file, skip it now.
8157       if (M.Generation <= PriorGeneration)
8158         return true;
8159 
8160       ++Reader.NumMethodPoolTableLookups;
8161       ASTSelectorLookupTable *PoolTable
8162         = (ASTSelectorLookupTable*)M.SelectorLookupTable;
8163       ASTSelectorLookupTable::iterator Pos = PoolTable->find(Sel);
8164       if (Pos == PoolTable->end())
8165         return false;
8166 
8167       ++Reader.NumMethodPoolTableHits;
8168       ++Reader.NumSelectorsRead;
8169       // FIXME: Not quite happy with the statistics here. We probably should
8170       // disable this tracking when called via LoadSelector.
8171       // Also, should entries without methods count as misses?
8172       ++Reader.NumMethodPoolEntriesRead;
8173       ASTSelectorLookupTrait::data_type Data = *Pos;
8174       if (Reader.DeserializationListener)
8175         Reader.DeserializationListener->SelectorRead(Data.ID, Sel);
8176 
8177       InstanceMethods.append(Data.Instance.begin(), Data.Instance.end());
8178       FactoryMethods.append(Data.Factory.begin(), Data.Factory.end());
8179       InstanceBits = Data.InstanceBits;
8180       FactoryBits = Data.FactoryBits;
8181       InstanceHasMoreThanOneDecl = Data.InstanceHasMoreThanOneDecl;
8182       FactoryHasMoreThanOneDecl = Data.FactoryHasMoreThanOneDecl;
8183       return true;
8184     }
8185 
8186     /// Retrieve the instance methods found by this visitor.
8187     ArrayRef<ObjCMethodDecl *> getInstanceMethods() const {
8188       return InstanceMethods;
8189     }
8190 
8191     /// Retrieve the instance methods found by this visitor.
8192     ArrayRef<ObjCMethodDecl *> getFactoryMethods() const {
8193       return FactoryMethods;
8194     }
8195 
8196     unsigned getInstanceBits() const { return InstanceBits; }
8197     unsigned getFactoryBits() const { return FactoryBits; }
8198 
8199     bool instanceHasMoreThanOneDecl() const {
8200       return InstanceHasMoreThanOneDecl;
8201     }
8202 
8203     bool factoryHasMoreThanOneDecl() const { return FactoryHasMoreThanOneDecl; }
8204   };
8205 
8206 } // namespace serialization
8207 } // namespace clang
8208 
8209 /// Add the given set of methods to the method list.
8210 static void addMethodsToPool(Sema &S, ArrayRef<ObjCMethodDecl *> Methods,
8211                              ObjCMethodList &List) {
8212   for (unsigned I = 0, N = Methods.size(); I != N; ++I) {
8213     S.addMethodToGlobalList(&List, Methods[I]);
8214   }
8215 }
8216 
8217 void ASTReader::ReadMethodPool(Selector Sel) {
8218   // Get the selector generation and update it to the current generation.
8219   unsigned &Generation = SelectorGeneration[Sel];
8220   unsigned PriorGeneration = Generation;
8221   Generation = getGeneration();
8222   SelectorOutOfDate[Sel] = false;
8223 
8224   // Search for methods defined with this selector.
8225   ++NumMethodPoolLookups;
8226   ReadMethodPoolVisitor Visitor(*this, Sel, PriorGeneration);
8227   ModuleMgr.visit(Visitor);
8228 
8229   if (Visitor.getInstanceMethods().empty() &&
8230       Visitor.getFactoryMethods().empty())
8231     return;
8232 
8233   ++NumMethodPoolHits;
8234 
8235   if (!getSema())
8236     return;
8237 
8238   Sema &S = *getSema();
8239   Sema::GlobalMethodPool::iterator Pos
8240     = S.MethodPool.insert(std::make_pair(Sel, Sema::GlobalMethods())).first;
8241 
8242   Pos->second.first.setBits(Visitor.getInstanceBits());
8243   Pos->second.first.setHasMoreThanOneDecl(Visitor.instanceHasMoreThanOneDecl());
8244   Pos->second.second.setBits(Visitor.getFactoryBits());
8245   Pos->second.second.setHasMoreThanOneDecl(Visitor.factoryHasMoreThanOneDecl());
8246 
8247   // Add methods to the global pool *after* setting hasMoreThanOneDecl, since
8248   // when building a module we keep every method individually and may need to
8249   // update hasMoreThanOneDecl as we add the methods.
8250   addMethodsToPool(S, Visitor.getInstanceMethods(), Pos->second.first);
8251   addMethodsToPool(S, Visitor.getFactoryMethods(), Pos->second.second);
8252 }
8253 
8254 void ASTReader::updateOutOfDateSelector(Selector Sel) {
8255   if (SelectorOutOfDate[Sel])
8256     ReadMethodPool(Sel);
8257 }
8258 
8259 void ASTReader::ReadKnownNamespaces(
8260                           SmallVectorImpl<NamespaceDecl *> &Namespaces) {
8261   Namespaces.clear();
8262 
8263   for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
8264     if (NamespaceDecl *Namespace
8265                 = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
8266       Namespaces.push_back(Namespace);
8267   }
8268 }
8269 
8270 void ASTReader::ReadUndefinedButUsed(
8271     llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) {
8272   for (unsigned Idx = 0, N = UndefinedButUsed.size(); Idx != N;) {
8273     NamedDecl *D = cast<NamedDecl>(GetDecl(UndefinedButUsed[Idx++]));
8274     SourceLocation Loc =
8275         SourceLocation::getFromRawEncoding(UndefinedButUsed[Idx++]);
8276     Undefined.insert(std::make_pair(D, Loc));
8277   }
8278 }
8279 
8280 void ASTReader::ReadMismatchingDeleteExpressions(llvm::MapVector<
8281     FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
8282                                                      Exprs) {
8283   for (unsigned Idx = 0, N = DelayedDeleteExprs.size(); Idx != N;) {
8284     FieldDecl *FD = cast<FieldDecl>(GetDecl(DelayedDeleteExprs[Idx++]));
8285     uint64_t Count = DelayedDeleteExprs[Idx++];
8286     for (uint64_t C = 0; C < Count; ++C) {
8287       SourceLocation DeleteLoc =
8288           SourceLocation::getFromRawEncoding(DelayedDeleteExprs[Idx++]);
8289       const bool IsArrayForm = DelayedDeleteExprs[Idx++];
8290       Exprs[FD].push_back(std::make_pair(DeleteLoc, IsArrayForm));
8291     }
8292   }
8293 }
8294 
8295 void ASTReader::ReadTentativeDefinitions(
8296                   SmallVectorImpl<VarDecl *> &TentativeDefs) {
8297   for (unsigned I = 0, N = TentativeDefinitions.size(); I != N; ++I) {
8298     VarDecl *Var = dyn_cast_or_null<VarDecl>(GetDecl(TentativeDefinitions[I]));
8299     if (Var)
8300       TentativeDefs.push_back(Var);
8301   }
8302   TentativeDefinitions.clear();
8303 }
8304 
8305 void ASTReader::ReadUnusedFileScopedDecls(
8306                                SmallVectorImpl<const DeclaratorDecl *> &Decls) {
8307   for (unsigned I = 0, N = UnusedFileScopedDecls.size(); I != N; ++I) {
8308     DeclaratorDecl *D
8309       = dyn_cast_or_null<DeclaratorDecl>(GetDecl(UnusedFileScopedDecls[I]));
8310     if (D)
8311       Decls.push_back(D);
8312   }
8313   UnusedFileScopedDecls.clear();
8314 }
8315 
8316 void ASTReader::ReadDelegatingConstructors(
8317                                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {
8318   for (unsigned I = 0, N = DelegatingCtorDecls.size(); I != N; ++I) {
8319     CXXConstructorDecl *D
8320       = dyn_cast_or_null<CXXConstructorDecl>(GetDecl(DelegatingCtorDecls[I]));
8321     if (D)
8322       Decls.push_back(D);
8323   }
8324   DelegatingCtorDecls.clear();
8325 }
8326 
8327 void ASTReader::ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {
8328   for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I) {
8329     TypedefNameDecl *D
8330       = dyn_cast_or_null<TypedefNameDecl>(GetDecl(ExtVectorDecls[I]));
8331     if (D)
8332       Decls.push_back(D);
8333   }
8334   ExtVectorDecls.clear();
8335 }
8336 
8337 void ASTReader::ReadUnusedLocalTypedefNameCandidates(
8338     llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {
8339   for (unsigned I = 0, N = UnusedLocalTypedefNameCandidates.size(); I != N;
8340        ++I) {
8341     TypedefNameDecl *D = dyn_cast_or_null<TypedefNameDecl>(
8342         GetDecl(UnusedLocalTypedefNameCandidates[I]));
8343     if (D)
8344       Decls.insert(D);
8345   }
8346   UnusedLocalTypedefNameCandidates.clear();
8347 }
8348 
8349 void ASTReader::ReadDeclsToCheckForDeferredDiags(
8350     llvm::SmallSetVector<Decl *, 4> &Decls) {
8351   for (auto I : DeclsToCheckForDeferredDiags) {
8352     auto *D = dyn_cast_or_null<Decl>(GetDecl(I));
8353     if (D)
8354       Decls.insert(D);
8355   }
8356   DeclsToCheckForDeferredDiags.clear();
8357 }
8358 
8359 void ASTReader::ReadReferencedSelectors(
8360        SmallVectorImpl<std::pair<Selector, SourceLocation>> &Sels) {
8361   if (ReferencedSelectorsData.empty())
8362     return;
8363 
8364   // If there are @selector references added them to its pool. This is for
8365   // implementation of -Wselector.
8366   unsigned int DataSize = ReferencedSelectorsData.size()-1;
8367   unsigned I = 0;
8368   while (I < DataSize) {
8369     Selector Sel = DecodeSelector(ReferencedSelectorsData[I++]);
8370     SourceLocation SelLoc
8371       = SourceLocation::getFromRawEncoding(ReferencedSelectorsData[I++]);
8372     Sels.push_back(std::make_pair(Sel, SelLoc));
8373   }
8374   ReferencedSelectorsData.clear();
8375 }
8376 
8377 void ASTReader::ReadWeakUndeclaredIdentifiers(
8378        SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo>> &WeakIDs) {
8379   if (WeakUndeclaredIdentifiers.empty())
8380     return;
8381 
8382   for (unsigned I = 0, N = WeakUndeclaredIdentifiers.size(); I < N; /*none*/) {
8383     IdentifierInfo *WeakId
8384       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8385     IdentifierInfo *AliasId
8386       = DecodeIdentifierInfo(WeakUndeclaredIdentifiers[I++]);
8387     SourceLocation Loc
8388       = SourceLocation::getFromRawEncoding(WeakUndeclaredIdentifiers[I++]);
8389     bool Used = WeakUndeclaredIdentifiers[I++];
8390     WeakInfo WI(AliasId, Loc);
8391     WI.setUsed(Used);
8392     WeakIDs.push_back(std::make_pair(WeakId, WI));
8393   }
8394   WeakUndeclaredIdentifiers.clear();
8395 }
8396 
8397 void ASTReader::ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {
8398   for (unsigned Idx = 0, N = VTableUses.size(); Idx < N; /* In loop */) {
8399     ExternalVTableUse VT;
8400     VT.Record = dyn_cast_or_null<CXXRecordDecl>(GetDecl(VTableUses[Idx++]));
8401     VT.Location = SourceLocation::getFromRawEncoding(VTableUses[Idx++]);
8402     VT.DefinitionRequired = VTableUses[Idx++];
8403     VTables.push_back(VT);
8404   }
8405 
8406   VTableUses.clear();
8407 }
8408 
8409 void ASTReader::ReadPendingInstantiations(
8410        SmallVectorImpl<std::pair<ValueDecl *, SourceLocation>> &Pending) {
8411   for (unsigned Idx = 0, N = PendingInstantiations.size(); Idx < N;) {
8412     ValueDecl *D = cast<ValueDecl>(GetDecl(PendingInstantiations[Idx++]));
8413     SourceLocation Loc
8414       = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]);
8415 
8416     Pending.push_back(std::make_pair(D, Loc));
8417   }
8418   PendingInstantiations.clear();
8419 }
8420 
8421 void ASTReader::ReadLateParsedTemplates(
8422     llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
8423         &LPTMap) {
8424   for (auto &LPT : LateParsedTemplates) {
8425     ModuleFile *FMod = LPT.first;
8426     RecordDataImpl &LateParsed = LPT.second;
8427     for (unsigned Idx = 0, N = LateParsed.size(); Idx < N;
8428          /* In loop */) {
8429       FunctionDecl *FD =
8430           cast<FunctionDecl>(GetLocalDecl(*FMod, LateParsed[Idx++]));
8431 
8432       auto LT = std::make_unique<LateParsedTemplate>();
8433       LT->D = GetLocalDecl(*FMod, LateParsed[Idx++]);
8434 
8435       ModuleFile *F = getOwningModuleFile(LT->D);
8436       assert(F && "No module");
8437 
8438       unsigned TokN = LateParsed[Idx++];
8439       LT->Toks.reserve(TokN);
8440       for (unsigned T = 0; T < TokN; ++T)
8441         LT->Toks.push_back(ReadToken(*F, LateParsed, Idx));
8442 
8443       LPTMap.insert(std::make_pair(FD, std::move(LT)));
8444     }
8445   }
8446 }
8447 
8448 void ASTReader::LoadSelector(Selector Sel) {
8449   // It would be complicated to avoid reading the methods anyway. So don't.
8450   ReadMethodPool(Sel);
8451 }
8452 
8453 void ASTReader::SetIdentifierInfo(IdentifierID ID, IdentifierInfo *II) {
8454   assert(ID && "Non-zero identifier ID required");
8455   assert(ID <= IdentifiersLoaded.size() && "identifier ID out of range");
8456   IdentifiersLoaded[ID - 1] = II;
8457   if (DeserializationListener)
8458     DeserializationListener->IdentifierRead(ID, II);
8459 }
8460 
8461 /// Set the globally-visible declarations associated with the given
8462 /// identifier.
8463 ///
8464 /// If the AST reader is currently in a state where the given declaration IDs
8465 /// cannot safely be resolved, they are queued until it is safe to resolve
8466 /// them.
8467 ///
8468 /// \param II an IdentifierInfo that refers to one or more globally-visible
8469 /// declarations.
8470 ///
8471 /// \param DeclIDs the set of declaration IDs with the name @p II that are
8472 /// visible at global scope.
8473 ///
8474 /// \param Decls if non-null, this vector will be populated with the set of
8475 /// deserialized declarations. These declarations will not be pushed into
8476 /// scope.
8477 void
8478 ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II,
8479                               const SmallVectorImpl<uint32_t> &DeclIDs,
8480                                    SmallVectorImpl<Decl *> *Decls) {
8481   if (NumCurrentElementsDeserializing && !Decls) {
8482     PendingIdentifierInfos[II].append(DeclIDs.begin(), DeclIDs.end());
8483     return;
8484   }
8485 
8486   for (unsigned I = 0, N = DeclIDs.size(); I != N; ++I) {
8487     if (!SemaObj) {
8488       // Queue this declaration so that it will be added to the
8489       // translation unit scope and identifier's declaration chain
8490       // once a Sema object is known.
8491       PreloadedDeclIDs.push_back(DeclIDs[I]);
8492       continue;
8493     }
8494 
8495     NamedDecl *D = cast<NamedDecl>(GetDecl(DeclIDs[I]));
8496 
8497     // If we're simply supposed to record the declarations, do so now.
8498     if (Decls) {
8499       Decls->push_back(D);
8500       continue;
8501     }
8502 
8503     // Introduce this declaration into the translation-unit scope
8504     // and add it to the declaration chain for this identifier, so
8505     // that (unqualified) name lookup will find it.
8506     pushExternalDeclIntoScope(D, II);
8507   }
8508 }
8509 
8510 IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
8511   if (ID == 0)
8512     return nullptr;
8513 
8514   if (IdentifiersLoaded.empty()) {
8515     Error("no identifier table in AST file");
8516     return nullptr;
8517   }
8518 
8519   ID -= 1;
8520   if (!IdentifiersLoaded[ID]) {
8521     GlobalIdentifierMapType::iterator I = GlobalIdentifierMap.find(ID + 1);
8522     assert(I != GlobalIdentifierMap.end() && "Corrupted global identifier map");
8523     ModuleFile *M = I->second;
8524     unsigned Index = ID - M->BaseIdentifierID;
8525     const unsigned char *Data =
8526         M->IdentifierTableData + M->IdentifierOffsets[Index];
8527 
8528     ASTIdentifierLookupTrait Trait(*this, *M);
8529     auto KeyDataLen = Trait.ReadKeyDataLength(Data);
8530     auto Key = Trait.ReadKey(Data, KeyDataLen.first);
8531     auto &II = PP.getIdentifierTable().get(Key);
8532     IdentifiersLoaded[ID] = &II;
8533     markIdentifierFromAST(*this,  II);
8534     if (DeserializationListener)
8535       DeserializationListener->IdentifierRead(ID + 1, &II);
8536   }
8537 
8538   return IdentifiersLoaded[ID];
8539 }
8540 
8541 IdentifierInfo *ASTReader::getLocalIdentifier(ModuleFile &M, unsigned LocalID) {
8542   return DecodeIdentifierInfo(getGlobalIdentifierID(M, LocalID));
8543 }
8544 
8545 IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) {
8546   if (LocalID < NUM_PREDEF_IDENT_IDS)
8547     return LocalID;
8548 
8549   if (!M.ModuleOffsetMap.empty())
8550     ReadModuleOffsetMap(M);
8551 
8552   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8553     = M.IdentifierRemap.find(LocalID - NUM_PREDEF_IDENT_IDS);
8554   assert(I != M.IdentifierRemap.end()
8555          && "Invalid index into identifier index remap");
8556 
8557   return LocalID + I->second;
8558 }
8559 
8560 MacroInfo *ASTReader::getMacro(MacroID ID) {
8561   if (ID == 0)
8562     return nullptr;
8563 
8564   if (MacrosLoaded.empty()) {
8565     Error("no macro table in AST file");
8566     return nullptr;
8567   }
8568 
8569   ID -= NUM_PREDEF_MACRO_IDS;
8570   if (!MacrosLoaded[ID]) {
8571     GlobalMacroMapType::iterator I
8572       = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
8573     assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
8574     ModuleFile *M = I->second;
8575     unsigned Index = ID - M->BaseMacroID;
8576     MacrosLoaded[ID] =
8577         ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
8578 
8579     if (DeserializationListener)
8580       DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
8581                                          MacrosLoaded[ID]);
8582   }
8583 
8584   return MacrosLoaded[ID];
8585 }
8586 
8587 MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
8588   if (LocalID < NUM_PREDEF_MACRO_IDS)
8589     return LocalID;
8590 
8591   if (!M.ModuleOffsetMap.empty())
8592     ReadModuleOffsetMap(M);
8593 
8594   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8595     = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
8596   assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
8597 
8598   return LocalID + I->second;
8599 }
8600 
8601 serialization::SubmoduleID
8602 ASTReader::getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID) {
8603   if (LocalID < NUM_PREDEF_SUBMODULE_IDS)
8604     return LocalID;
8605 
8606   if (!M.ModuleOffsetMap.empty())
8607     ReadModuleOffsetMap(M);
8608 
8609   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8610     = M.SubmoduleRemap.find(LocalID - NUM_PREDEF_SUBMODULE_IDS);
8611   assert(I != M.SubmoduleRemap.end()
8612          && "Invalid index into submodule index remap");
8613 
8614   return LocalID + I->second;
8615 }
8616 
8617 Module *ASTReader::getSubmodule(SubmoduleID GlobalID) {
8618   if (GlobalID < NUM_PREDEF_SUBMODULE_IDS) {
8619     assert(GlobalID == 0 && "Unhandled global submodule ID");
8620     return nullptr;
8621   }
8622 
8623   if (GlobalID > SubmodulesLoaded.size()) {
8624     Error("submodule ID out of range in AST file");
8625     return nullptr;
8626   }
8627 
8628   return SubmodulesLoaded[GlobalID - NUM_PREDEF_SUBMODULE_IDS];
8629 }
8630 
8631 Module *ASTReader::getModule(unsigned ID) {
8632   return getSubmodule(ID);
8633 }
8634 
8635 ModuleFile *ASTReader::getLocalModuleFile(ModuleFile &F, unsigned ID) {
8636   if (ID & 1) {
8637     // It's a module, look it up by submodule ID.
8638     auto I = GlobalSubmoduleMap.find(getGlobalSubmoduleID(F, ID >> 1));
8639     return I == GlobalSubmoduleMap.end() ? nullptr : I->second;
8640   } else {
8641     // It's a prefix (preamble, PCH, ...). Look it up by index.
8642     unsigned IndexFromEnd = ID >> 1;
8643     assert(IndexFromEnd && "got reference to unknown module file");
8644     return getModuleManager().pch_modules().end()[-IndexFromEnd];
8645   }
8646 }
8647 
8648 unsigned ASTReader::getModuleFileID(ModuleFile *F) {
8649   if (!F)
8650     return 1;
8651 
8652   // For a file representing a module, use the submodule ID of the top-level
8653   // module as the file ID. For any other kind of file, the number of such
8654   // files loaded beforehand will be the same on reload.
8655   // FIXME: Is this true even if we have an explicit module file and a PCH?
8656   if (F->isModule())
8657     return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
8658 
8659   auto PCHModules = getModuleManager().pch_modules();
8660   auto I = llvm::find(PCHModules, F);
8661   assert(I != PCHModules.end() && "emitting reference to unknown file");
8662   return (I - PCHModules.end()) << 1;
8663 }
8664 
8665 llvm::Optional<ASTSourceDescriptor>
8666 ASTReader::getSourceDescriptor(unsigned ID) {
8667   if (Module *M = getSubmodule(ID))
8668     return ASTSourceDescriptor(*M);
8669 
8670   // If there is only a single PCH, return it instead.
8671   // Chained PCH are not supported.
8672   const auto &PCHChain = ModuleMgr.pch_modules();
8673   if (std::distance(std::begin(PCHChain), std::end(PCHChain))) {
8674     ModuleFile &MF = ModuleMgr.getPrimaryModule();
8675     StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName);
8676     StringRef FileName = llvm::sys::path::filename(MF.FileName);
8677     return ASTSourceDescriptor(ModuleName, MF.OriginalDir, FileName,
8678                                MF.Signature);
8679   }
8680   return None;
8681 }
8682 
8683 ExternalASTSource::ExtKind ASTReader::hasExternalDefinitions(const Decl *FD) {
8684   auto I = DefinitionSource.find(FD);
8685   if (I == DefinitionSource.end())
8686     return EK_ReplyHazy;
8687   return I->second ? EK_Never : EK_Always;
8688 }
8689 
8690 Selector ASTReader::getLocalSelector(ModuleFile &M, unsigned LocalID) {
8691   return DecodeSelector(getGlobalSelectorID(M, LocalID));
8692 }
8693 
8694 Selector ASTReader::DecodeSelector(serialization::SelectorID ID) {
8695   if (ID == 0)
8696     return Selector();
8697 
8698   if (ID > SelectorsLoaded.size()) {
8699     Error("selector ID out of range in AST file");
8700     return Selector();
8701   }
8702 
8703   if (SelectorsLoaded[ID - 1].getAsOpaquePtr() == nullptr) {
8704     // Load this selector from the selector table.
8705     GlobalSelectorMapType::iterator I = GlobalSelectorMap.find(ID);
8706     assert(I != GlobalSelectorMap.end() && "Corrupted global selector map");
8707     ModuleFile &M = *I->second;
8708     ASTSelectorLookupTrait Trait(*this, M);
8709     unsigned Idx = ID - M.BaseSelectorID - NUM_PREDEF_SELECTOR_IDS;
8710     SelectorsLoaded[ID - 1] =
8711       Trait.ReadKey(M.SelectorLookupTableData + M.SelectorOffsets[Idx], 0);
8712     if (DeserializationListener)
8713       DeserializationListener->SelectorRead(ID, SelectorsLoaded[ID - 1]);
8714   }
8715 
8716   return SelectorsLoaded[ID - 1];
8717 }
8718 
8719 Selector ASTReader::GetExternalSelector(serialization::SelectorID ID) {
8720   return DecodeSelector(ID);
8721 }
8722 
8723 uint32_t ASTReader::GetNumExternalSelectors() {
8724   // ID 0 (the null selector) is considered an external selector.
8725   return getTotalNumSelectors() + 1;
8726 }
8727 
8728 serialization::SelectorID
8729 ASTReader::getGlobalSelectorID(ModuleFile &M, unsigned LocalID) const {
8730   if (LocalID < NUM_PREDEF_SELECTOR_IDS)
8731     return LocalID;
8732 
8733   if (!M.ModuleOffsetMap.empty())
8734     ReadModuleOffsetMap(M);
8735 
8736   ContinuousRangeMap<uint32_t, int, 2>::iterator I
8737     = M.SelectorRemap.find(LocalID - NUM_PREDEF_SELECTOR_IDS);
8738   assert(I != M.SelectorRemap.end()
8739          && "Invalid index into selector index remap");
8740 
8741   return LocalID + I->second;
8742 }
8743 
8744 DeclarationNameLoc
8745 ASTRecordReader::readDeclarationNameLoc(DeclarationName Name) {
8746   switch (Name.getNameKind()) {
8747   case DeclarationName::CXXConstructorName:
8748   case DeclarationName::CXXDestructorName:
8749   case DeclarationName::CXXConversionFunctionName:
8750     return DeclarationNameLoc::makeNamedTypeLoc(readTypeSourceInfo());
8751 
8752   case DeclarationName::CXXOperatorName:
8753     return DeclarationNameLoc::makeCXXOperatorNameLoc(readSourceRange());
8754 
8755   case DeclarationName::CXXLiteralOperatorName:
8756     return DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(
8757         readSourceLocation());
8758 
8759   case DeclarationName::Identifier:
8760   case DeclarationName::ObjCZeroArgSelector:
8761   case DeclarationName::ObjCOneArgSelector:
8762   case DeclarationName::ObjCMultiArgSelector:
8763   case DeclarationName::CXXUsingDirective:
8764   case DeclarationName::CXXDeductionGuideName:
8765     break;
8766   }
8767   return DeclarationNameLoc();
8768 }
8769 
8770 DeclarationNameInfo ASTRecordReader::readDeclarationNameInfo() {
8771   DeclarationNameInfo NameInfo;
8772   NameInfo.setName(readDeclarationName());
8773   NameInfo.setLoc(readSourceLocation());
8774   NameInfo.setInfo(readDeclarationNameLoc(NameInfo.getName()));
8775   return NameInfo;
8776 }
8777 
8778 void ASTRecordReader::readQualifierInfo(QualifierInfo &Info) {
8779   Info.QualifierLoc = readNestedNameSpecifierLoc();
8780   unsigned NumTPLists = readInt();
8781   Info.NumTemplParamLists = NumTPLists;
8782   if (NumTPLists) {
8783     Info.TemplParamLists =
8784         new (getContext()) TemplateParameterList *[NumTPLists];
8785     for (unsigned i = 0; i != NumTPLists; ++i)
8786       Info.TemplParamLists[i] = readTemplateParameterList();
8787   }
8788 }
8789 
8790 TemplateParameterList *
8791 ASTRecordReader::readTemplateParameterList() {
8792   SourceLocation TemplateLoc = readSourceLocation();
8793   SourceLocation LAngleLoc = readSourceLocation();
8794   SourceLocation RAngleLoc = readSourceLocation();
8795 
8796   unsigned NumParams = readInt();
8797   SmallVector<NamedDecl *, 16> Params;
8798   Params.reserve(NumParams);
8799   while (NumParams--)
8800     Params.push_back(readDeclAs<NamedDecl>());
8801 
8802   bool HasRequiresClause = readBool();
8803   Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
8804 
8805   TemplateParameterList *TemplateParams = TemplateParameterList::Create(
8806       getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
8807   return TemplateParams;
8808 }
8809 
8810 void ASTRecordReader::readTemplateArgumentList(
8811                         SmallVectorImpl<TemplateArgument> &TemplArgs,
8812                         bool Canonicalize) {
8813   unsigned NumTemplateArgs = readInt();
8814   TemplArgs.reserve(NumTemplateArgs);
8815   while (NumTemplateArgs--)
8816     TemplArgs.push_back(readTemplateArgument(Canonicalize));
8817 }
8818 
8819 /// Read a UnresolvedSet structure.
8820 void ASTRecordReader::readUnresolvedSet(LazyASTUnresolvedSet &Set) {
8821   unsigned NumDecls = readInt();
8822   Set.reserve(getContext(), NumDecls);
8823   while (NumDecls--) {
8824     DeclID ID = readDeclID();
8825     AccessSpecifier AS = (AccessSpecifier) readInt();
8826     Set.addLazyDecl(getContext(), ID, AS);
8827   }
8828 }
8829 
8830 CXXBaseSpecifier
8831 ASTRecordReader::readCXXBaseSpecifier() {
8832   bool isVirtual = readBool();
8833   bool isBaseOfClass = readBool();
8834   AccessSpecifier AS = static_cast<AccessSpecifier>(readInt());
8835   bool inheritConstructors = readBool();
8836   TypeSourceInfo *TInfo = readTypeSourceInfo();
8837   SourceRange Range = readSourceRange();
8838   SourceLocation EllipsisLoc = readSourceLocation();
8839   CXXBaseSpecifier Result(Range, isVirtual, isBaseOfClass, AS, TInfo,
8840                           EllipsisLoc);
8841   Result.setInheritConstructors(inheritConstructors);
8842   return Result;
8843 }
8844 
8845 CXXCtorInitializer **
8846 ASTRecordReader::readCXXCtorInitializers() {
8847   ASTContext &Context = getContext();
8848   unsigned NumInitializers = readInt();
8849   assert(NumInitializers && "wrote ctor initializers but have no inits");
8850   auto **CtorInitializers = new (Context) CXXCtorInitializer*[NumInitializers];
8851   for (unsigned i = 0; i != NumInitializers; ++i) {
8852     TypeSourceInfo *TInfo = nullptr;
8853     bool IsBaseVirtual = false;
8854     FieldDecl *Member = nullptr;
8855     IndirectFieldDecl *IndirectMember = nullptr;
8856 
8857     CtorInitializerType Type = (CtorInitializerType) readInt();
8858     switch (Type) {
8859     case CTOR_INITIALIZER_BASE:
8860       TInfo = readTypeSourceInfo();
8861       IsBaseVirtual = readBool();
8862       break;
8863 
8864     case CTOR_INITIALIZER_DELEGATING:
8865       TInfo = readTypeSourceInfo();
8866       break;
8867 
8868      case CTOR_INITIALIZER_MEMBER:
8869       Member = readDeclAs<FieldDecl>();
8870       break;
8871 
8872      case CTOR_INITIALIZER_INDIRECT_MEMBER:
8873       IndirectMember = readDeclAs<IndirectFieldDecl>();
8874       break;
8875     }
8876 
8877     SourceLocation MemberOrEllipsisLoc = readSourceLocation();
8878     Expr *Init = readExpr();
8879     SourceLocation LParenLoc = readSourceLocation();
8880     SourceLocation RParenLoc = readSourceLocation();
8881 
8882     CXXCtorInitializer *BOMInit;
8883     if (Type == CTOR_INITIALIZER_BASE)
8884       BOMInit = new (Context)
8885           CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
8886                              RParenLoc, MemberOrEllipsisLoc);
8887     else if (Type == CTOR_INITIALIZER_DELEGATING)
8888       BOMInit = new (Context)
8889           CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
8890     else if (Member)
8891       BOMInit = new (Context)
8892           CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
8893                              Init, RParenLoc);
8894     else
8895       BOMInit = new (Context)
8896           CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
8897                              LParenLoc, Init, RParenLoc);
8898 
8899     if (/*IsWritten*/readBool()) {
8900       unsigned SourceOrder = readInt();
8901       BOMInit->setSourceOrder(SourceOrder);
8902     }
8903 
8904     CtorInitializers[i] = BOMInit;
8905   }
8906 
8907   return CtorInitializers;
8908 }
8909 
8910 NestedNameSpecifierLoc
8911 ASTRecordReader::readNestedNameSpecifierLoc() {
8912   ASTContext &Context = getContext();
8913   unsigned N = readInt();
8914   NestedNameSpecifierLocBuilder Builder;
8915   for (unsigned I = 0; I != N; ++I) {
8916     auto Kind = readNestedNameSpecifierKind();
8917     switch (Kind) {
8918     case NestedNameSpecifier::Identifier: {
8919       IdentifierInfo *II = readIdentifier();
8920       SourceRange Range = readSourceRange();
8921       Builder.Extend(Context, II, Range.getBegin(), Range.getEnd());
8922       break;
8923     }
8924 
8925     case NestedNameSpecifier::Namespace: {
8926       NamespaceDecl *NS = readDeclAs<NamespaceDecl>();
8927       SourceRange Range = readSourceRange();
8928       Builder.Extend(Context, NS, Range.getBegin(), Range.getEnd());
8929       break;
8930     }
8931 
8932     case NestedNameSpecifier::NamespaceAlias: {
8933       NamespaceAliasDecl *Alias = readDeclAs<NamespaceAliasDecl>();
8934       SourceRange Range = readSourceRange();
8935       Builder.Extend(Context, Alias, Range.getBegin(), Range.getEnd());
8936       break;
8937     }
8938 
8939     case NestedNameSpecifier::TypeSpec:
8940     case NestedNameSpecifier::TypeSpecWithTemplate: {
8941       bool Template = readBool();
8942       TypeSourceInfo *T = readTypeSourceInfo();
8943       if (!T)
8944         return NestedNameSpecifierLoc();
8945       SourceLocation ColonColonLoc = readSourceLocation();
8946 
8947       // FIXME: 'template' keyword location not saved anywhere, so we fake it.
8948       Builder.Extend(Context,
8949                      Template? T->getTypeLoc().getBeginLoc() : SourceLocation(),
8950                      T->getTypeLoc(), ColonColonLoc);
8951       break;
8952     }
8953 
8954     case NestedNameSpecifier::Global: {
8955       SourceLocation ColonColonLoc = readSourceLocation();
8956       Builder.MakeGlobal(Context, ColonColonLoc);
8957       break;
8958     }
8959 
8960     case NestedNameSpecifier::Super: {
8961       CXXRecordDecl *RD = readDeclAs<CXXRecordDecl>();
8962       SourceRange Range = readSourceRange();
8963       Builder.MakeSuper(Context, RD, Range.getBegin(), Range.getEnd());
8964       break;
8965     }
8966     }
8967   }
8968 
8969   return Builder.getWithLocInContext(Context);
8970 }
8971 
8972 SourceRange
8973 ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
8974                            unsigned &Idx) {
8975   SourceLocation beg = ReadSourceLocation(F, Record, Idx);
8976   SourceLocation end = ReadSourceLocation(F, Record, Idx);
8977   return SourceRange(beg, end);
8978 }
8979 
8980 /// Read a floating-point value
8981 llvm::APFloat ASTRecordReader::readAPFloat(const llvm::fltSemantics &Sem) {
8982   return llvm::APFloat(Sem, readAPInt());
8983 }
8984 
8985 // Read a string
8986 std::string ASTReader::ReadString(const RecordData &Record, unsigned &Idx) {
8987   unsigned Len = Record[Idx++];
8988   std::string Result(Record.data() + Idx, Record.data() + Idx + Len);
8989   Idx += Len;
8990   return Result;
8991 }
8992 
8993 std::string ASTReader::ReadPath(ModuleFile &F, const RecordData &Record,
8994                                 unsigned &Idx) {
8995   std::string Filename = ReadString(Record, Idx);
8996   ResolveImportedPath(F, Filename);
8997   return Filename;
8998 }
8999 
9000 std::string ASTReader::ReadPath(StringRef BaseDirectory,
9001                                 const RecordData &Record, unsigned &Idx) {
9002   std::string Filename = ReadString(Record, Idx);
9003   if (!BaseDirectory.empty())
9004     ResolveImportedPath(Filename, BaseDirectory);
9005   return Filename;
9006 }
9007 
9008 VersionTuple ASTReader::ReadVersionTuple(const RecordData &Record,
9009                                          unsigned &Idx) {
9010   unsigned Major = Record[Idx++];
9011   unsigned Minor = Record[Idx++];
9012   unsigned Subminor = Record[Idx++];
9013   if (Minor == 0)
9014     return VersionTuple(Major);
9015   if (Subminor == 0)
9016     return VersionTuple(Major, Minor - 1);
9017   return VersionTuple(Major, Minor - 1, Subminor - 1);
9018 }
9019 
9020 CXXTemporary *ASTReader::ReadCXXTemporary(ModuleFile &F,
9021                                           const RecordData &Record,
9022                                           unsigned &Idx) {
9023   CXXDestructorDecl *Decl = ReadDeclAs<CXXDestructorDecl>(F, Record, Idx);
9024   return CXXTemporary::Create(getContext(), Decl);
9025 }
9026 
9027 DiagnosticBuilder ASTReader::Diag(unsigned DiagID) const {
9028   return Diag(CurrentImportLoc, DiagID);
9029 }
9030 
9031 DiagnosticBuilder ASTReader::Diag(SourceLocation Loc, unsigned DiagID) const {
9032   return Diags.Report(Loc, DiagID);
9033 }
9034 
9035 /// Retrieve the identifier table associated with the
9036 /// preprocessor.
9037 IdentifierTable &ASTReader::getIdentifierTable() {
9038   return PP.getIdentifierTable();
9039 }
9040 
9041 /// Record that the given ID maps to the given switch-case
9042 /// statement.
9043 void ASTReader::RecordSwitchCaseID(SwitchCase *SC, unsigned ID) {
9044   assert((*CurrSwitchCaseStmts)[ID] == nullptr &&
9045          "Already have a SwitchCase with this ID");
9046   (*CurrSwitchCaseStmts)[ID] = SC;
9047 }
9048 
9049 /// Retrieve the switch-case statement with the given ID.
9050 SwitchCase *ASTReader::getSwitchCaseWithID(unsigned ID) {
9051   assert((*CurrSwitchCaseStmts)[ID] != nullptr && "No SwitchCase with this ID");
9052   return (*CurrSwitchCaseStmts)[ID];
9053 }
9054 
9055 void ASTReader::ClearSwitchCaseIDs() {
9056   CurrSwitchCaseStmts->clear();
9057 }
9058 
9059 void ASTReader::ReadComments() {
9060   ASTContext &Context = getContext();
9061   std::vector<RawComment *> Comments;
9062   for (SmallVectorImpl<std::pair<BitstreamCursor,
9063                                  serialization::ModuleFile *>>::iterator
9064        I = CommentsCursors.begin(),
9065        E = CommentsCursors.end();
9066        I != E; ++I) {
9067     Comments.clear();
9068     BitstreamCursor &Cursor = I->first;
9069     serialization::ModuleFile &F = *I->second;
9070     SavedStreamPosition SavedPosition(Cursor);
9071 
9072     RecordData Record;
9073     while (true) {
9074       Expected<llvm::BitstreamEntry> MaybeEntry =
9075           Cursor.advanceSkippingSubblocks(
9076               BitstreamCursor::AF_DontPopBlockAtEnd);
9077       if (!MaybeEntry) {
9078         Error(MaybeEntry.takeError());
9079         return;
9080       }
9081       llvm::BitstreamEntry Entry = MaybeEntry.get();
9082 
9083       switch (Entry.Kind) {
9084       case llvm::BitstreamEntry::SubBlock: // Handled for us already.
9085       case llvm::BitstreamEntry::Error:
9086         Error("malformed block record in AST file");
9087         return;
9088       case llvm::BitstreamEntry::EndBlock:
9089         goto NextCursor;
9090       case llvm::BitstreamEntry::Record:
9091         // The interesting case.
9092         break;
9093       }
9094 
9095       // Read a record.
9096       Record.clear();
9097       Expected<unsigned> MaybeComment = Cursor.readRecord(Entry.ID, Record);
9098       if (!MaybeComment) {
9099         Error(MaybeComment.takeError());
9100         return;
9101       }
9102       switch ((CommentRecordTypes)MaybeComment.get()) {
9103       case COMMENTS_RAW_COMMENT: {
9104         unsigned Idx = 0;
9105         SourceRange SR = ReadSourceRange(F, Record, Idx);
9106         RawComment::CommentKind Kind =
9107             (RawComment::CommentKind) Record[Idx++];
9108         bool IsTrailingComment = Record[Idx++];
9109         bool IsAlmostTrailingComment = Record[Idx++];
9110         Comments.push_back(new (Context) RawComment(
9111             SR, Kind, IsTrailingComment, IsAlmostTrailingComment));
9112         break;
9113       }
9114       }
9115     }
9116   NextCursor:
9117     llvm::DenseMap<FileID, std::map<unsigned, RawComment *>>
9118         FileToOffsetToComment;
9119     for (RawComment *C : Comments) {
9120       SourceLocation CommentLoc = C->getBeginLoc();
9121       if (CommentLoc.isValid()) {
9122         std::pair<FileID, unsigned> Loc =
9123             SourceMgr.getDecomposedLoc(CommentLoc);
9124         if (Loc.first.isValid())
9125           Context.Comments.OrderedComments[Loc.first].emplace(Loc.second, C);
9126       }
9127     }
9128   }
9129 }
9130 
9131 void ASTReader::visitInputFiles(serialization::ModuleFile &MF,
9132                                 bool IncludeSystem, bool Complain,
9133                     llvm::function_ref<void(const serialization::InputFile &IF,
9134                                             bool isSystem)> Visitor) {
9135   unsigned NumUserInputs = MF.NumUserInputFiles;
9136   unsigned NumInputs = MF.InputFilesLoaded.size();
9137   assert(NumUserInputs <= NumInputs);
9138   unsigned N = IncludeSystem ? NumInputs : NumUserInputs;
9139   for (unsigned I = 0; I < N; ++I) {
9140     bool IsSystem = I >= NumUserInputs;
9141     InputFile IF = getInputFile(MF, I+1, Complain);
9142     Visitor(IF, IsSystem);
9143   }
9144 }
9145 
9146 void ASTReader::visitTopLevelModuleMaps(
9147     serialization::ModuleFile &MF,
9148     llvm::function_ref<void(const FileEntry *FE)> Visitor) {
9149   unsigned NumInputs = MF.InputFilesLoaded.size();
9150   for (unsigned I = 0; I < NumInputs; ++I) {
9151     InputFileInfo IFI = readInputFileInfo(MF, I + 1);
9152     if (IFI.TopLevelModuleMap)
9153       // FIXME: This unnecessarily re-reads the InputFileInfo.
9154       if (auto FE = getInputFile(MF, I + 1).getFile())
9155         Visitor(FE);
9156   }
9157 }
9158 
9159 std::string ASTReader::getOwningModuleNameForDiagnostic(const Decl *D) {
9160   // If we know the owning module, use it.
9161   if (Module *M = D->getImportedOwningModule())
9162     return M->getFullModuleName();
9163 
9164   // Otherwise, use the name of the top-level module the decl is within.
9165   if (ModuleFile *M = getOwningModuleFile(D))
9166     return M->ModuleName;
9167 
9168   // Not from a module.
9169   return {};
9170 }
9171 
9172 void ASTReader::finishPendingActions() {
9173   while (!PendingIdentifierInfos.empty() || !PendingFunctionTypes.empty() ||
9174          !PendingIncompleteDeclChains.empty() || !PendingDeclChains.empty() ||
9175          !PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
9176          !PendingUpdateRecords.empty()) {
9177     // If any identifiers with corresponding top-level declarations have
9178     // been loaded, load those declarations now.
9179     using TopLevelDeclsMap =
9180         llvm::DenseMap<IdentifierInfo *, SmallVector<Decl *, 2>>;
9181     TopLevelDeclsMap TopLevelDecls;
9182 
9183     while (!PendingIdentifierInfos.empty()) {
9184       IdentifierInfo *II = PendingIdentifierInfos.back().first;
9185       SmallVector<uint32_t, 4> DeclIDs =
9186           std::move(PendingIdentifierInfos.back().second);
9187       PendingIdentifierInfos.pop_back();
9188 
9189       SetGloballyVisibleDecls(II, DeclIDs, &TopLevelDecls[II]);
9190     }
9191 
9192     // Load each function type that we deferred loading because it was a
9193     // deduced type that might refer to a local type declared within itself.
9194     for (unsigned I = 0; I != PendingFunctionTypes.size(); ++I) {
9195       auto *FD = PendingFunctionTypes[I].first;
9196       FD->setType(GetType(PendingFunctionTypes[I].second));
9197 
9198       // If we gave a function a deduced return type, remember that we need to
9199       // propagate that along the redeclaration chain.
9200       auto *DT = FD->getReturnType()->getContainedDeducedType();
9201       if (DT && DT->isDeduced())
9202         PendingDeducedTypeUpdates.insert(
9203             {FD->getCanonicalDecl(), FD->getReturnType()});
9204     }
9205     PendingFunctionTypes.clear();
9206 
9207     // For each decl chain that we wanted to complete while deserializing, mark
9208     // it as "still needs to be completed".
9209     for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
9210       markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
9211     }
9212     PendingIncompleteDeclChains.clear();
9213 
9214     // Load pending declaration chains.
9215     for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
9216       loadPendingDeclChain(PendingDeclChains[I].first,
9217                            PendingDeclChains[I].second);
9218     PendingDeclChains.clear();
9219 
9220     // Make the most recent of the top-level declarations visible.
9221     for (TopLevelDeclsMap::iterator TLD = TopLevelDecls.begin(),
9222            TLDEnd = TopLevelDecls.end(); TLD != TLDEnd; ++TLD) {
9223       IdentifierInfo *II = TLD->first;
9224       for (unsigned I = 0, N = TLD->second.size(); I != N; ++I) {
9225         pushExternalDeclIntoScope(cast<NamedDecl>(TLD->second[I]), II);
9226       }
9227     }
9228 
9229     // Load any pending macro definitions.
9230     for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) {
9231       IdentifierInfo *II = PendingMacroIDs.begin()[I].first;
9232       SmallVector<PendingMacroInfo, 2> GlobalIDs;
9233       GlobalIDs.swap(PendingMacroIDs.begin()[I].second);
9234       // Initialize the macro history from chained-PCHs ahead of module imports.
9235       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9236            ++IDIdx) {
9237         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9238         if (!Info.M->isModule())
9239           resolvePendingMacro(II, Info);
9240       }
9241       // Handle module imports.
9242       for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs;
9243            ++IDIdx) {
9244         const PendingMacroInfo &Info = GlobalIDs[IDIdx];
9245         if (Info.M->isModule())
9246           resolvePendingMacro(II, Info);
9247       }
9248     }
9249     PendingMacroIDs.clear();
9250 
9251     // Wire up the DeclContexts for Decls that we delayed setting until
9252     // recursive loading is completed.
9253     while (!PendingDeclContextInfos.empty()) {
9254       PendingDeclContextInfo Info = PendingDeclContextInfos.front();
9255       PendingDeclContextInfos.pop_front();
9256       DeclContext *SemaDC = cast<DeclContext>(GetDecl(Info.SemaDC));
9257       DeclContext *LexicalDC = cast<DeclContext>(GetDecl(Info.LexicalDC));
9258       Info.D->setDeclContextsImpl(SemaDC, LexicalDC, getContext());
9259     }
9260 
9261     // Perform any pending declaration updates.
9262     while (!PendingUpdateRecords.empty()) {
9263       auto Update = PendingUpdateRecords.pop_back_val();
9264       ReadingKindTracker ReadingKind(Read_Decl, *this);
9265       loadDeclUpdateRecords(Update);
9266     }
9267   }
9268 
9269   // At this point, all update records for loaded decls are in place, so any
9270   // fake class definitions should have become real.
9271   assert(PendingFakeDefinitionData.empty() &&
9272          "faked up a class definition but never saw the real one");
9273 
9274   // If we deserialized any C++ or Objective-C class definitions, any
9275   // Objective-C protocol definitions, or any redeclarable templates, make sure
9276   // that all redeclarations point to the definitions. Note that this can only
9277   // happen now, after the redeclaration chains have been fully wired.
9278   for (Decl *D : PendingDefinitions) {
9279     if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
9280       if (const TagType *TagT = dyn_cast<TagType>(TD->getTypeForDecl())) {
9281         // Make sure that the TagType points at the definition.
9282         const_cast<TagType*>(TagT)->decl = TD;
9283       }
9284 
9285       if (auto RD = dyn_cast<CXXRecordDecl>(D)) {
9286         for (auto *R = getMostRecentExistingDecl(RD); R;
9287              R = R->getPreviousDecl()) {
9288           assert((R == D) ==
9289                      cast<CXXRecordDecl>(R)->isThisDeclarationADefinition() &&
9290                  "declaration thinks it's the definition but it isn't");
9291           cast<CXXRecordDecl>(R)->DefinitionData = RD->DefinitionData;
9292         }
9293       }
9294 
9295       continue;
9296     }
9297 
9298     if (auto ID = dyn_cast<ObjCInterfaceDecl>(D)) {
9299       // Make sure that the ObjCInterfaceType points at the definition.
9300       const_cast<ObjCInterfaceType *>(cast<ObjCInterfaceType>(ID->TypeForDecl))
9301         ->Decl = ID;
9302 
9303       for (auto *R = getMostRecentExistingDecl(ID); R; R = R->getPreviousDecl())
9304         cast<ObjCInterfaceDecl>(R)->Data = ID->Data;
9305 
9306       continue;
9307     }
9308 
9309     if (auto PD = dyn_cast<ObjCProtocolDecl>(D)) {
9310       for (auto *R = getMostRecentExistingDecl(PD); R; R = R->getPreviousDecl())
9311         cast<ObjCProtocolDecl>(R)->Data = PD->Data;
9312 
9313       continue;
9314     }
9315 
9316     auto RTD = cast<RedeclarableTemplateDecl>(D)->getCanonicalDecl();
9317     for (auto *R = getMostRecentExistingDecl(RTD); R; R = R->getPreviousDecl())
9318       cast<RedeclarableTemplateDecl>(R)->Common = RTD->Common;
9319   }
9320   PendingDefinitions.clear();
9321 
9322   // Load the bodies of any functions or methods we've encountered. We do
9323   // this now (delayed) so that we can be sure that the declaration chains
9324   // have been fully wired up (hasBody relies on this).
9325   // FIXME: We shouldn't require complete redeclaration chains here.
9326   for (PendingBodiesMap::iterator PB = PendingBodies.begin(),
9327                                PBEnd = PendingBodies.end();
9328        PB != PBEnd; ++PB) {
9329     if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PB->first)) {
9330       // For a function defined inline within a class template, force the
9331       // canonical definition to be the one inside the canonical definition of
9332       // the template. This ensures that we instantiate from a correct view
9333       // of the template.
9334       //
9335       // Sadly we can't do this more generally: we can't be sure that all
9336       // copies of an arbitrary class definition will have the same members
9337       // defined (eg, some member functions may not be instantiated, and some
9338       // special members may or may not have been implicitly defined).
9339       if (auto *RD = dyn_cast<CXXRecordDecl>(FD->getLexicalParent()))
9340         if (RD->isDependentContext() && !RD->isThisDeclarationADefinition())
9341           continue;
9342 
9343       // FIXME: Check for =delete/=default?
9344       // FIXME: Complain about ODR violations here?
9345       const FunctionDecl *Defn = nullptr;
9346       if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) {
9347         FD->setLazyBody(PB->second);
9348       } else {
9349         auto *NonConstDefn = const_cast<FunctionDecl*>(Defn);
9350         mergeDefinitionVisibility(NonConstDefn, FD);
9351 
9352         if (!FD->isLateTemplateParsed() &&
9353             !NonConstDefn->isLateTemplateParsed() &&
9354             FD->getODRHash() != NonConstDefn->getODRHash()) {
9355           if (!isa<CXXMethodDecl>(FD)) {
9356             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9357           } else if (FD->getLexicalParent()->isFileContext() &&
9358                      NonConstDefn->getLexicalParent()->isFileContext()) {
9359             // Only diagnose out-of-line method definitions.  If they are
9360             // in class definitions, then an error will be generated when
9361             // processing the class bodies.
9362             PendingFunctionOdrMergeFailures[FD].push_back(NonConstDefn);
9363           }
9364         }
9365       }
9366       continue;
9367     }
9368 
9369     ObjCMethodDecl *MD = cast<ObjCMethodDecl>(PB->first);
9370     if (!getContext().getLangOpts().Modules || !MD->hasBody())
9371       MD->setLazyBody(PB->second);
9372   }
9373   PendingBodies.clear();
9374 
9375   // Do some cleanup.
9376   for (auto *ND : PendingMergedDefinitionsToDeduplicate)
9377     getContext().deduplicateMergedDefinitonsFor(ND);
9378   PendingMergedDefinitionsToDeduplicate.clear();
9379 }
9380 
9381 void ASTReader::diagnoseOdrViolations() {
9382   if (PendingOdrMergeFailures.empty() && PendingOdrMergeChecks.empty() &&
9383       PendingFunctionOdrMergeFailures.empty() &&
9384       PendingEnumOdrMergeFailures.empty())
9385     return;
9386 
9387   // Trigger the import of the full definition of each class that had any
9388   // odr-merging problems, so we can produce better diagnostics for them.
9389   // These updates may in turn find and diagnose some ODR failures, so take
9390   // ownership of the set first.
9391   auto OdrMergeFailures = std::move(PendingOdrMergeFailures);
9392   PendingOdrMergeFailures.clear();
9393   for (auto &Merge : OdrMergeFailures) {
9394     Merge.first->buildLookup();
9395     Merge.first->decls_begin();
9396     Merge.first->bases_begin();
9397     Merge.first->vbases_begin();
9398     for (auto &RecordPair : Merge.second) {
9399       auto *RD = RecordPair.first;
9400       RD->decls_begin();
9401       RD->bases_begin();
9402       RD->vbases_begin();
9403     }
9404   }
9405 
9406   // Trigger the import of functions.
9407   auto FunctionOdrMergeFailures = std::move(PendingFunctionOdrMergeFailures);
9408   PendingFunctionOdrMergeFailures.clear();
9409   for (auto &Merge : FunctionOdrMergeFailures) {
9410     Merge.first->buildLookup();
9411     Merge.first->decls_begin();
9412     Merge.first->getBody();
9413     for (auto &FD : Merge.second) {
9414       FD->buildLookup();
9415       FD->decls_begin();
9416       FD->getBody();
9417     }
9418   }
9419 
9420   // Trigger the import of enums.
9421   auto EnumOdrMergeFailures = std::move(PendingEnumOdrMergeFailures);
9422   PendingEnumOdrMergeFailures.clear();
9423   for (auto &Merge : EnumOdrMergeFailures) {
9424     Merge.first->decls_begin();
9425     for (auto &Enum : Merge.second) {
9426       Enum->decls_begin();
9427     }
9428   }
9429 
9430   // For each declaration from a merged context, check that the canonical
9431   // definition of that context also contains a declaration of the same
9432   // entity.
9433   //
9434   // Caution: this loop does things that might invalidate iterators into
9435   // PendingOdrMergeChecks. Don't turn this into a range-based for loop!
9436   while (!PendingOdrMergeChecks.empty()) {
9437     NamedDecl *D = PendingOdrMergeChecks.pop_back_val();
9438 
9439     // FIXME: Skip over implicit declarations for now. This matters for things
9440     // like implicitly-declared special member functions. This isn't entirely
9441     // correct; we can end up with multiple unmerged declarations of the same
9442     // implicit entity.
9443     if (D->isImplicit())
9444       continue;
9445 
9446     DeclContext *CanonDef = D->getDeclContext();
9447 
9448     bool Found = false;
9449     const Decl *DCanon = D->getCanonicalDecl();
9450 
9451     for (auto RI : D->redecls()) {
9452       if (RI->getLexicalDeclContext() == CanonDef) {
9453         Found = true;
9454         break;
9455       }
9456     }
9457     if (Found)
9458       continue;
9459 
9460     // Quick check failed, time to do the slow thing. Note, we can't just
9461     // look up the name of D in CanonDef here, because the member that is
9462     // in CanonDef might not be found by name lookup (it might have been
9463     // replaced by a more recent declaration in the lookup table), and we
9464     // can't necessarily find it in the redeclaration chain because it might
9465     // be merely mergeable, not redeclarable.
9466     llvm::SmallVector<const NamedDecl*, 4> Candidates;
9467     for (auto *CanonMember : CanonDef->decls()) {
9468       if (CanonMember->getCanonicalDecl() == DCanon) {
9469         // This can happen if the declaration is merely mergeable and not
9470         // actually redeclarable (we looked for redeclarations earlier).
9471         //
9472         // FIXME: We should be able to detect this more efficiently, without
9473         // pulling in all of the members of CanonDef.
9474         Found = true;
9475         break;
9476       }
9477       if (auto *ND = dyn_cast<NamedDecl>(CanonMember))
9478         if (ND->getDeclName() == D->getDeclName())
9479           Candidates.push_back(ND);
9480     }
9481 
9482     if (!Found) {
9483       // The AST doesn't like TagDecls becoming invalid after they've been
9484       // completed. We only really need to mark FieldDecls as invalid here.
9485       if (!isa<TagDecl>(D))
9486         D->setInvalidDecl();
9487 
9488       // Ensure we don't accidentally recursively enter deserialization while
9489       // we're producing our diagnostic.
9490       Deserializing RecursionGuard(this);
9491 
9492       std::string CanonDefModule =
9493           getOwningModuleNameForDiagnostic(cast<Decl>(CanonDef));
9494       Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl)
9495         << D << getOwningModuleNameForDiagnostic(D)
9496         << CanonDef << CanonDefModule.empty() << CanonDefModule;
9497 
9498       if (Candidates.empty())
9499         Diag(cast<Decl>(CanonDef)->getLocation(),
9500              diag::note_module_odr_violation_no_possible_decls) << D;
9501       else {
9502         for (unsigned I = 0, N = Candidates.size(); I != N; ++I)
9503           Diag(Candidates[I]->getLocation(),
9504                diag::note_module_odr_violation_possible_decl)
9505             << Candidates[I];
9506       }
9507 
9508       DiagnosedOdrMergeFailures.insert(CanonDef);
9509     }
9510   }
9511 
9512   if (OdrMergeFailures.empty() && FunctionOdrMergeFailures.empty() &&
9513       EnumOdrMergeFailures.empty())
9514     return;
9515 
9516   // Ensure we don't accidentally recursively enter deserialization while
9517   // we're producing our diagnostics.
9518   Deserializing RecursionGuard(this);
9519 
9520   // Common code for hashing helpers.
9521   ODRHash Hash;
9522   auto ComputeQualTypeODRHash = [&Hash](QualType Ty) {
9523     Hash.clear();
9524     Hash.AddQualType(Ty);
9525     return Hash.CalculateHash();
9526   };
9527 
9528   auto ComputeODRHash = [&Hash](const Stmt *S) {
9529     assert(S);
9530     Hash.clear();
9531     Hash.AddStmt(S);
9532     return Hash.CalculateHash();
9533   };
9534 
9535   auto ComputeSubDeclODRHash = [&Hash](const Decl *D) {
9536     assert(D);
9537     Hash.clear();
9538     Hash.AddSubDecl(D);
9539     return Hash.CalculateHash();
9540   };
9541 
9542   auto ComputeTemplateArgumentODRHash = [&Hash](const TemplateArgument &TA) {
9543     Hash.clear();
9544     Hash.AddTemplateArgument(TA);
9545     return Hash.CalculateHash();
9546   };
9547 
9548   auto ComputeTemplateParameterListODRHash =
9549       [&Hash](const TemplateParameterList *TPL) {
9550         assert(TPL);
9551         Hash.clear();
9552         Hash.AddTemplateParameterList(TPL);
9553         return Hash.CalculateHash();
9554       };
9555 
9556   // Used with err_module_odr_violation_mismatch_decl and
9557   // note_module_odr_violation_mismatch_decl
9558   // This list should be the same Decl's as in ODRHash::isDeclToBeProcessed
9559   enum ODRMismatchDecl {
9560     EndOfClass,
9561     PublicSpecifer,
9562     PrivateSpecifer,
9563     ProtectedSpecifer,
9564     StaticAssert,
9565     Field,
9566     CXXMethod,
9567     TypeAlias,
9568     TypeDef,
9569     Var,
9570     Friend,
9571     FunctionTemplate,
9572     Other
9573   };
9574 
9575   // Used with err_module_odr_violation_mismatch_decl_diff and
9576   // note_module_odr_violation_mismatch_decl_diff
9577   enum ODRMismatchDeclDifference {
9578     StaticAssertCondition,
9579     StaticAssertMessage,
9580     StaticAssertOnlyMessage,
9581     FieldName,
9582     FieldTypeName,
9583     FieldSingleBitField,
9584     FieldDifferentWidthBitField,
9585     FieldSingleMutable,
9586     FieldSingleInitializer,
9587     FieldDifferentInitializers,
9588     MethodName,
9589     MethodDeleted,
9590     MethodDefaulted,
9591     MethodVirtual,
9592     MethodStatic,
9593     MethodVolatile,
9594     MethodConst,
9595     MethodInline,
9596     MethodNumberParameters,
9597     MethodParameterType,
9598     MethodParameterName,
9599     MethodParameterSingleDefaultArgument,
9600     MethodParameterDifferentDefaultArgument,
9601     MethodNoTemplateArguments,
9602     MethodDifferentNumberTemplateArguments,
9603     MethodDifferentTemplateArgument,
9604     MethodSingleBody,
9605     MethodDifferentBody,
9606     TypedefName,
9607     TypedefType,
9608     VarName,
9609     VarType,
9610     VarSingleInitializer,
9611     VarDifferentInitializer,
9612     VarConstexpr,
9613     FriendTypeFunction,
9614     FriendType,
9615     FriendFunction,
9616     FunctionTemplateDifferentNumberParameters,
9617     FunctionTemplateParameterDifferentKind,
9618     FunctionTemplateParameterName,
9619     FunctionTemplateParameterSingleDefaultArgument,
9620     FunctionTemplateParameterDifferentDefaultArgument,
9621     FunctionTemplateParameterDifferentType,
9622     FunctionTemplatePackParameter,
9623   };
9624 
9625   // These lambdas have the common portions of the ODR diagnostics.  This
9626   // has the same return as Diag(), so addition parameters can be passed
9627   // in with operator<<
9628   auto ODRDiagDeclError = [this](NamedDecl *FirstRecord, StringRef FirstModule,
9629                                  SourceLocation Loc, SourceRange Range,
9630                                  ODRMismatchDeclDifference DiffType) {
9631     return Diag(Loc, diag::err_module_odr_violation_mismatch_decl_diff)
9632            << FirstRecord << FirstModule.empty() << FirstModule << Range
9633            << DiffType;
9634   };
9635   auto ODRDiagDeclNote = [this](StringRef SecondModule, SourceLocation Loc,
9636                                 SourceRange Range, ODRMismatchDeclDifference DiffType) {
9637     return Diag(Loc, diag::note_module_odr_violation_mismatch_decl_diff)
9638            << SecondModule << Range << DiffType;
9639   };
9640 
9641   auto ODRDiagField = [this, &ODRDiagDeclError, &ODRDiagDeclNote,
9642                        &ComputeQualTypeODRHash, &ComputeODRHash](
9643                           NamedDecl *FirstRecord, StringRef FirstModule,
9644                           StringRef SecondModule, FieldDecl *FirstField,
9645                           FieldDecl *SecondField) {
9646     IdentifierInfo *FirstII = FirstField->getIdentifier();
9647     IdentifierInfo *SecondII = SecondField->getIdentifier();
9648     if (FirstII->getName() != SecondII->getName()) {
9649       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9650                        FirstField->getSourceRange(), FieldName)
9651           << FirstII;
9652       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9653                       SecondField->getSourceRange(), FieldName)
9654           << SecondII;
9655 
9656       return true;
9657     }
9658 
9659     assert(getContext().hasSameType(FirstField->getType(),
9660                                     SecondField->getType()));
9661 
9662     QualType FirstType = FirstField->getType();
9663     QualType SecondType = SecondField->getType();
9664     if (ComputeQualTypeODRHash(FirstType) !=
9665         ComputeQualTypeODRHash(SecondType)) {
9666       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9667                        FirstField->getSourceRange(), FieldTypeName)
9668           << FirstII << FirstType;
9669       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9670                       SecondField->getSourceRange(), FieldTypeName)
9671           << SecondII << SecondType;
9672 
9673       return true;
9674     }
9675 
9676     const bool IsFirstBitField = FirstField->isBitField();
9677     const bool IsSecondBitField = SecondField->isBitField();
9678     if (IsFirstBitField != IsSecondBitField) {
9679       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9680                        FirstField->getSourceRange(), FieldSingleBitField)
9681           << FirstII << IsFirstBitField;
9682       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9683                       SecondField->getSourceRange(), FieldSingleBitField)
9684           << SecondII << IsSecondBitField;
9685       return true;
9686     }
9687 
9688     if (IsFirstBitField && IsSecondBitField) {
9689       unsigned FirstBitWidthHash =
9690           ComputeODRHash(FirstField->getBitWidth());
9691       unsigned SecondBitWidthHash =
9692           ComputeODRHash(SecondField->getBitWidth());
9693       if (FirstBitWidthHash != SecondBitWidthHash) {
9694         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9695                          FirstField->getSourceRange(),
9696                          FieldDifferentWidthBitField)
9697             << FirstII << FirstField->getBitWidth()->getSourceRange();
9698         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9699                         SecondField->getSourceRange(),
9700                         FieldDifferentWidthBitField)
9701             << SecondII << SecondField->getBitWidth()->getSourceRange();
9702         return true;
9703       }
9704     }
9705 
9706     if (!PP.getLangOpts().CPlusPlus)
9707       return false;
9708 
9709     const bool IsFirstMutable = FirstField->isMutable();
9710     const bool IsSecondMutable = SecondField->isMutable();
9711     if (IsFirstMutable != IsSecondMutable) {
9712       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9713                        FirstField->getSourceRange(), FieldSingleMutable)
9714           << FirstII << IsFirstMutable;
9715       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9716                       SecondField->getSourceRange(), FieldSingleMutable)
9717           << SecondII << IsSecondMutable;
9718       return true;
9719     }
9720 
9721     const Expr *FirstInitializer = FirstField->getInClassInitializer();
9722     const Expr *SecondInitializer = SecondField->getInClassInitializer();
9723     if ((!FirstInitializer && SecondInitializer) ||
9724         (FirstInitializer && !SecondInitializer)) {
9725       ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9726                        FirstField->getSourceRange(), FieldSingleInitializer)
9727           << FirstII << (FirstInitializer != nullptr);
9728       ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9729                       SecondField->getSourceRange(), FieldSingleInitializer)
9730           << SecondII << (SecondInitializer != nullptr);
9731       return true;
9732     }
9733 
9734     if (FirstInitializer && SecondInitializer) {
9735       unsigned FirstInitHash = ComputeODRHash(FirstInitializer);
9736       unsigned SecondInitHash = ComputeODRHash(SecondInitializer);
9737       if (FirstInitHash != SecondInitHash) {
9738         ODRDiagDeclError(FirstRecord, FirstModule, FirstField->getLocation(),
9739                          FirstField->getSourceRange(),
9740                          FieldDifferentInitializers)
9741             << FirstII << FirstInitializer->getSourceRange();
9742         ODRDiagDeclNote(SecondModule, SecondField->getLocation(),
9743                         SecondField->getSourceRange(),
9744                         FieldDifferentInitializers)
9745             << SecondII << SecondInitializer->getSourceRange();
9746         return true;
9747       }
9748     }
9749 
9750     return false;
9751   };
9752 
9753   auto ODRDiagTypeDefOrAlias =
9754       [&ODRDiagDeclError, &ODRDiagDeclNote, &ComputeQualTypeODRHash](
9755           NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule,
9756           TypedefNameDecl *FirstTD, TypedefNameDecl *SecondTD,
9757           bool IsTypeAlias) {
9758         auto FirstName = FirstTD->getDeclName();
9759         auto SecondName = SecondTD->getDeclName();
9760         if (FirstName != SecondName) {
9761           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9762                            FirstTD->getSourceRange(), TypedefName)
9763               << IsTypeAlias << FirstName;
9764           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9765                           SecondTD->getSourceRange(), TypedefName)
9766               << IsTypeAlias << SecondName;
9767           return true;
9768         }
9769 
9770         QualType FirstType = FirstTD->getUnderlyingType();
9771         QualType SecondType = SecondTD->getUnderlyingType();
9772         if (ComputeQualTypeODRHash(FirstType) !=
9773             ComputeQualTypeODRHash(SecondType)) {
9774           ODRDiagDeclError(FirstRecord, FirstModule, FirstTD->getLocation(),
9775                            FirstTD->getSourceRange(), TypedefType)
9776               << IsTypeAlias << FirstName << FirstType;
9777           ODRDiagDeclNote(SecondModule, SecondTD->getLocation(),
9778                           SecondTD->getSourceRange(), TypedefType)
9779               << IsTypeAlias << SecondName << SecondType;
9780           return true;
9781         }
9782 
9783         return false;
9784   };
9785 
9786   auto ODRDiagVar = [&ODRDiagDeclError, &ODRDiagDeclNote,
9787                      &ComputeQualTypeODRHash, &ComputeODRHash,
9788                      this](NamedDecl *FirstRecord, StringRef FirstModule,
9789                            StringRef SecondModule, VarDecl *FirstVD,
9790                            VarDecl *SecondVD) {
9791     auto FirstName = FirstVD->getDeclName();
9792     auto SecondName = SecondVD->getDeclName();
9793     if (FirstName != SecondName) {
9794       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9795                        FirstVD->getSourceRange(), VarName)
9796           << FirstName;
9797       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9798                       SecondVD->getSourceRange(), VarName)
9799           << SecondName;
9800       return true;
9801     }
9802 
9803     QualType FirstType = FirstVD->getType();
9804     QualType SecondType = SecondVD->getType();
9805     if (ComputeQualTypeODRHash(FirstType) !=
9806         ComputeQualTypeODRHash(SecondType)) {
9807       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9808                        FirstVD->getSourceRange(), VarType)
9809           << FirstName << FirstType;
9810       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9811                       SecondVD->getSourceRange(), VarType)
9812           << SecondName << SecondType;
9813       return true;
9814     }
9815 
9816     if (!PP.getLangOpts().CPlusPlus)
9817       return false;
9818 
9819     const Expr *FirstInit = FirstVD->getInit();
9820     const Expr *SecondInit = SecondVD->getInit();
9821     if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
9822       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9823                        FirstVD->getSourceRange(), VarSingleInitializer)
9824           << FirstName << (FirstInit == nullptr)
9825           << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
9826       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9827                       SecondVD->getSourceRange(), VarSingleInitializer)
9828           << SecondName << (SecondInit == nullptr)
9829           << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
9830       return true;
9831     }
9832 
9833     if (FirstInit && SecondInit &&
9834         ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
9835       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9836                        FirstVD->getSourceRange(), VarDifferentInitializer)
9837           << FirstName << FirstInit->getSourceRange();
9838       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9839                       SecondVD->getSourceRange(), VarDifferentInitializer)
9840           << SecondName << SecondInit->getSourceRange();
9841       return true;
9842     }
9843 
9844     const bool FirstIsConstexpr = FirstVD->isConstexpr();
9845     const bool SecondIsConstexpr = SecondVD->isConstexpr();
9846     if (FirstIsConstexpr != SecondIsConstexpr) {
9847       ODRDiagDeclError(FirstRecord, FirstModule, FirstVD->getLocation(),
9848                        FirstVD->getSourceRange(), VarConstexpr)
9849           << FirstName << FirstIsConstexpr;
9850       ODRDiagDeclNote(SecondModule, SecondVD->getLocation(),
9851                       SecondVD->getSourceRange(), VarConstexpr)
9852           << SecondName << SecondIsConstexpr;
9853       return true;
9854     }
9855     return false;
9856   };
9857 
9858   auto DifferenceSelector = [](Decl *D) {
9859     assert(D && "valid Decl required");
9860     switch (D->getKind()) {
9861     default:
9862       return Other;
9863     case Decl::AccessSpec:
9864       switch (D->getAccess()) {
9865       case AS_public:
9866         return PublicSpecifer;
9867       case AS_private:
9868         return PrivateSpecifer;
9869       case AS_protected:
9870         return ProtectedSpecifer;
9871       case AS_none:
9872         break;
9873       }
9874       llvm_unreachable("Invalid access specifier");
9875     case Decl::StaticAssert:
9876       return StaticAssert;
9877     case Decl::Field:
9878       return Field;
9879     case Decl::CXXMethod:
9880     case Decl::CXXConstructor:
9881     case Decl::CXXDestructor:
9882       return CXXMethod;
9883     case Decl::TypeAlias:
9884       return TypeAlias;
9885     case Decl::Typedef:
9886       return TypeDef;
9887     case Decl::Var:
9888       return Var;
9889     case Decl::Friend:
9890       return Friend;
9891     case Decl::FunctionTemplate:
9892       return FunctionTemplate;
9893     }
9894   };
9895 
9896   using DeclHashes = llvm::SmallVector<std::pair<Decl *, unsigned>, 4>;
9897   auto PopulateHashes = [&ComputeSubDeclODRHash](DeclHashes &Hashes,
9898                                                  RecordDecl *Record,
9899                                                  const DeclContext *DC) {
9900     for (auto *D : Record->decls()) {
9901       if (!ODRHash::isDeclToBeProcessed(D, DC))
9902         continue;
9903       Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
9904     }
9905   };
9906 
9907   struct DiffResult {
9908     Decl *FirstDecl = nullptr, *SecondDecl = nullptr;
9909     ODRMismatchDecl FirstDiffType = Other, SecondDiffType = Other;
9910   };
9911 
9912   // If there is a diagnoseable difference, FirstDiffType and
9913   // SecondDiffType will not be Other and FirstDecl and SecondDecl will be
9914   // filled in if not EndOfClass.
9915   auto FindTypeDiffs = [&DifferenceSelector](DeclHashes &FirstHashes,
9916                                              DeclHashes &SecondHashes) {
9917     DiffResult DR;
9918     auto FirstIt = FirstHashes.begin();
9919     auto SecondIt = SecondHashes.begin();
9920     while (FirstIt != FirstHashes.end() || SecondIt != SecondHashes.end()) {
9921       if (FirstIt != FirstHashes.end() && SecondIt != SecondHashes.end() &&
9922           FirstIt->second == SecondIt->second) {
9923         ++FirstIt;
9924         ++SecondIt;
9925         continue;
9926       }
9927 
9928       DR.FirstDecl = FirstIt == FirstHashes.end() ? nullptr : FirstIt->first;
9929       DR.SecondDecl =
9930           SecondIt == SecondHashes.end() ? nullptr : SecondIt->first;
9931 
9932       DR.FirstDiffType =
9933           DR.FirstDecl ? DifferenceSelector(DR.FirstDecl) : EndOfClass;
9934       DR.SecondDiffType =
9935           DR.SecondDecl ? DifferenceSelector(DR.SecondDecl) : EndOfClass;
9936       return DR;
9937     }
9938     return DR;
9939   };
9940 
9941   // Use this to diagnose that an unexpected Decl was encountered
9942   // or no difference was detected. This causes a generic error
9943   // message to be emitted.
9944   auto DiagnoseODRUnexpected = [this](DiffResult &DR, NamedDecl *FirstRecord,
9945                                       StringRef FirstModule,
9946                                       NamedDecl *SecondRecord,
9947                                       StringRef SecondModule) {
9948     Diag(FirstRecord->getLocation(),
9949          diag::err_module_odr_violation_different_definitions)
9950         << FirstRecord << FirstModule.empty() << FirstModule;
9951 
9952     if (DR.FirstDecl) {
9953       Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference)
9954           << FirstRecord << DR.FirstDecl->getSourceRange();
9955     }
9956 
9957     Diag(SecondRecord->getLocation(),
9958          diag::note_module_odr_violation_different_definitions)
9959         << SecondModule;
9960 
9961     if (DR.SecondDecl) {
9962       Diag(DR.SecondDecl->getLocation(), diag::note_second_module_difference)
9963           << DR.SecondDecl->getSourceRange();
9964     }
9965   };
9966 
9967   auto DiagnoseODRMismatch =
9968       [this](DiffResult &DR, NamedDecl *FirstRecord, StringRef FirstModule,
9969              NamedDecl *SecondRecord, StringRef SecondModule) {
9970         SourceLocation FirstLoc;
9971         SourceRange FirstRange;
9972         auto *FirstTag = dyn_cast<TagDecl>(FirstRecord);
9973         if (DR.FirstDiffType == EndOfClass && FirstTag) {
9974           FirstLoc = FirstTag->getBraceRange().getEnd();
9975         } else {
9976           FirstLoc = DR.FirstDecl->getLocation();
9977           FirstRange = DR.FirstDecl->getSourceRange();
9978         }
9979         Diag(FirstLoc, diag::err_module_odr_violation_mismatch_decl)
9980             << FirstRecord << FirstModule.empty() << FirstModule << FirstRange
9981             << DR.FirstDiffType;
9982 
9983         SourceLocation SecondLoc;
9984         SourceRange SecondRange;
9985         auto *SecondTag = dyn_cast<TagDecl>(SecondRecord);
9986         if (DR.SecondDiffType == EndOfClass && SecondTag) {
9987           SecondLoc = SecondTag->getBraceRange().getEnd();
9988         } else {
9989           SecondLoc = DR.SecondDecl->getLocation();
9990           SecondRange = DR.SecondDecl->getSourceRange();
9991         }
9992         Diag(SecondLoc, diag::note_module_odr_violation_mismatch_decl)
9993             << SecondModule << SecondRange << DR.SecondDiffType;
9994       };
9995 
9996   // Issue any pending ODR-failure diagnostics.
9997   for (auto &Merge : OdrMergeFailures) {
9998     // If we've already pointed out a specific problem with this class, don't
9999     // bother issuing a general "something's different" diagnostic.
10000     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
10001       continue;
10002 
10003     bool Diagnosed = false;
10004     CXXRecordDecl *FirstRecord = Merge.first;
10005     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstRecord);
10006     for (auto &RecordPair : Merge.second) {
10007       CXXRecordDecl *SecondRecord = RecordPair.first;
10008       // Multiple different declarations got merged together; tell the user
10009       // where they came from.
10010       if (FirstRecord == SecondRecord)
10011         continue;
10012 
10013       std::string SecondModule = getOwningModuleNameForDiagnostic(SecondRecord);
10014 
10015       auto *FirstDD = FirstRecord->DefinitionData;
10016       auto *SecondDD = RecordPair.second;
10017 
10018       assert(FirstDD && SecondDD && "Definitions without DefinitionData");
10019 
10020       // Diagnostics from DefinitionData are emitted here.
10021       if (FirstDD != SecondDD) {
10022         enum ODRDefinitionDataDifference {
10023           NumBases,
10024           NumVBases,
10025           BaseType,
10026           BaseVirtual,
10027           BaseAccess,
10028         };
10029         auto ODRDiagBaseError = [FirstRecord, &FirstModule,
10030                                  this](SourceLocation Loc, SourceRange Range,
10031                                        ODRDefinitionDataDifference DiffType) {
10032           return Diag(Loc, diag::err_module_odr_violation_definition_data)
10033                  << FirstRecord << FirstModule.empty() << FirstModule << Range
10034                  << DiffType;
10035         };
10036         auto ODRDiagBaseNote = [&SecondModule,
10037                                 this](SourceLocation Loc, SourceRange Range,
10038                                       ODRDefinitionDataDifference DiffType) {
10039           return Diag(Loc, diag::note_module_odr_violation_definition_data)
10040                  << SecondModule << Range << DiffType;
10041         };
10042 
10043         unsigned FirstNumBases = FirstDD->NumBases;
10044         unsigned FirstNumVBases = FirstDD->NumVBases;
10045         unsigned SecondNumBases = SecondDD->NumBases;
10046         unsigned SecondNumVBases = SecondDD->NumVBases;
10047 
10048         auto GetSourceRange = [](struct CXXRecordDecl::DefinitionData *DD) {
10049           unsigned NumBases = DD->NumBases;
10050           if (NumBases == 0) return SourceRange();
10051           auto bases = DD->bases();
10052           return SourceRange(bases[0].getBeginLoc(),
10053                              bases[NumBases - 1].getEndLoc());
10054         };
10055 
10056         if (FirstNumBases != SecondNumBases) {
10057           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10058                            NumBases)
10059               << FirstNumBases;
10060           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10061                           NumBases)
10062               << SecondNumBases;
10063           Diagnosed = true;
10064           break;
10065         }
10066 
10067         if (FirstNumVBases != SecondNumVBases) {
10068           ODRDiagBaseError(FirstRecord->getLocation(), GetSourceRange(FirstDD),
10069                            NumVBases)
10070               << FirstNumVBases;
10071           ODRDiagBaseNote(SecondRecord->getLocation(), GetSourceRange(SecondDD),
10072                           NumVBases)
10073               << SecondNumVBases;
10074           Diagnosed = true;
10075           break;
10076         }
10077 
10078         auto FirstBases = FirstDD->bases();
10079         auto SecondBases = SecondDD->bases();
10080         unsigned i = 0;
10081         for (i = 0; i < FirstNumBases; ++i) {
10082           auto FirstBase = FirstBases[i];
10083           auto SecondBase = SecondBases[i];
10084           if (ComputeQualTypeODRHash(FirstBase.getType()) !=
10085               ComputeQualTypeODRHash(SecondBase.getType())) {
10086             ODRDiagBaseError(FirstRecord->getLocation(),
10087                              FirstBase.getSourceRange(), BaseType)
10088                 << (i + 1) << FirstBase.getType();
10089             ODRDiagBaseNote(SecondRecord->getLocation(),
10090                             SecondBase.getSourceRange(), BaseType)
10091                 << (i + 1) << SecondBase.getType();
10092             break;
10093           }
10094 
10095           if (FirstBase.isVirtual() != SecondBase.isVirtual()) {
10096             ODRDiagBaseError(FirstRecord->getLocation(),
10097                              FirstBase.getSourceRange(), BaseVirtual)
10098                 << (i + 1) << FirstBase.isVirtual() << FirstBase.getType();
10099             ODRDiagBaseNote(SecondRecord->getLocation(),
10100                             SecondBase.getSourceRange(), BaseVirtual)
10101                 << (i + 1) << SecondBase.isVirtual() << SecondBase.getType();
10102             break;
10103           }
10104 
10105           if (FirstBase.getAccessSpecifierAsWritten() !=
10106               SecondBase.getAccessSpecifierAsWritten()) {
10107             ODRDiagBaseError(FirstRecord->getLocation(),
10108                              FirstBase.getSourceRange(), BaseAccess)
10109                 << (i + 1) << FirstBase.getType()
10110                 << (int)FirstBase.getAccessSpecifierAsWritten();
10111             ODRDiagBaseNote(SecondRecord->getLocation(),
10112                             SecondBase.getSourceRange(), BaseAccess)
10113                 << (i + 1) << SecondBase.getType()
10114                 << (int)SecondBase.getAccessSpecifierAsWritten();
10115             break;
10116           }
10117         }
10118 
10119         if (i != FirstNumBases) {
10120           Diagnosed = true;
10121           break;
10122         }
10123       }
10124 
10125       const ClassTemplateDecl *FirstTemplate =
10126           FirstRecord->getDescribedClassTemplate();
10127       const ClassTemplateDecl *SecondTemplate =
10128           SecondRecord->getDescribedClassTemplate();
10129 
10130       assert(!FirstTemplate == !SecondTemplate &&
10131              "Both pointers should be null or non-null");
10132 
10133       enum ODRTemplateDifference {
10134         ParamEmptyName,
10135         ParamName,
10136         ParamSingleDefaultArgument,
10137         ParamDifferentDefaultArgument,
10138       };
10139 
10140       if (FirstTemplate && SecondTemplate) {
10141         DeclHashes FirstTemplateHashes;
10142         DeclHashes SecondTemplateHashes;
10143 
10144         auto PopulateTemplateParameterHashs =
10145             [&ComputeSubDeclODRHash](DeclHashes &Hashes,
10146                                      const ClassTemplateDecl *TD) {
10147               for (auto *D : TD->getTemplateParameters()->asArray()) {
10148                 Hashes.emplace_back(D, ComputeSubDeclODRHash(D));
10149               }
10150             };
10151 
10152         PopulateTemplateParameterHashs(FirstTemplateHashes, FirstTemplate);
10153         PopulateTemplateParameterHashs(SecondTemplateHashes, SecondTemplate);
10154 
10155         assert(FirstTemplateHashes.size() == SecondTemplateHashes.size() &&
10156                "Number of template parameters should be equal.");
10157 
10158         auto FirstIt = FirstTemplateHashes.begin();
10159         auto FirstEnd = FirstTemplateHashes.end();
10160         auto SecondIt = SecondTemplateHashes.begin();
10161         for (; FirstIt != FirstEnd; ++FirstIt, ++SecondIt) {
10162           if (FirstIt->second == SecondIt->second)
10163             continue;
10164 
10165           auto ODRDiagTemplateError = [FirstRecord, &FirstModule, this](
10166                                           SourceLocation Loc, SourceRange Range,
10167                                           ODRTemplateDifference DiffType) {
10168             return Diag(Loc, diag::err_module_odr_violation_template_parameter)
10169                    << FirstRecord << FirstModule.empty() << FirstModule << Range
10170                    << DiffType;
10171           };
10172           auto ODRDiagTemplateNote = [&SecondModule, this](
10173                                          SourceLocation Loc, SourceRange Range,
10174                                          ODRTemplateDifference DiffType) {
10175             return Diag(Loc, diag::note_module_odr_violation_template_parameter)
10176                    << SecondModule << Range << DiffType;
10177           };
10178 
10179           const NamedDecl* FirstDecl = cast<NamedDecl>(FirstIt->first);
10180           const NamedDecl* SecondDecl = cast<NamedDecl>(SecondIt->first);
10181 
10182           assert(FirstDecl->getKind() == SecondDecl->getKind() &&
10183                  "Parameter Decl's should be the same kind.");
10184 
10185           DeclarationName FirstName = FirstDecl->getDeclName();
10186           DeclarationName SecondName = SecondDecl->getDeclName();
10187 
10188           if (FirstName != SecondName) {
10189             const bool FirstNameEmpty =
10190                 FirstName.isIdentifier() && !FirstName.getAsIdentifierInfo();
10191             const bool SecondNameEmpty =
10192                 SecondName.isIdentifier() && !SecondName.getAsIdentifierInfo();
10193             assert((!FirstNameEmpty || !SecondNameEmpty) &&
10194                    "Both template parameters cannot be unnamed.");
10195             ODRDiagTemplateError(FirstDecl->getLocation(),
10196                                  FirstDecl->getSourceRange(),
10197                                  FirstNameEmpty ? ParamEmptyName : ParamName)
10198                 << FirstName;
10199             ODRDiagTemplateNote(SecondDecl->getLocation(),
10200                                 SecondDecl->getSourceRange(),
10201                                 SecondNameEmpty ? ParamEmptyName : ParamName)
10202                 << SecondName;
10203             break;
10204           }
10205 
10206           switch (FirstDecl->getKind()) {
10207           default:
10208             llvm_unreachable("Invalid template parameter type.");
10209           case Decl::TemplateTypeParm: {
10210             const auto *FirstParam = cast<TemplateTypeParmDecl>(FirstDecl);
10211             const auto *SecondParam = cast<TemplateTypeParmDecl>(SecondDecl);
10212             const bool HasFirstDefaultArgument =
10213                 FirstParam->hasDefaultArgument() &&
10214                 !FirstParam->defaultArgumentWasInherited();
10215             const bool HasSecondDefaultArgument =
10216                 SecondParam->hasDefaultArgument() &&
10217                 !SecondParam->defaultArgumentWasInherited();
10218 
10219             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10220               ODRDiagTemplateError(FirstDecl->getLocation(),
10221                                    FirstDecl->getSourceRange(),
10222                                    ParamSingleDefaultArgument)
10223                   << HasFirstDefaultArgument;
10224               ODRDiagTemplateNote(SecondDecl->getLocation(),
10225                                   SecondDecl->getSourceRange(),
10226                                   ParamSingleDefaultArgument)
10227                   << HasSecondDefaultArgument;
10228               break;
10229             }
10230 
10231             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10232                    "Expecting default arguments.");
10233 
10234             ODRDiagTemplateError(FirstDecl->getLocation(),
10235                                  FirstDecl->getSourceRange(),
10236                                  ParamDifferentDefaultArgument);
10237             ODRDiagTemplateNote(SecondDecl->getLocation(),
10238                                 SecondDecl->getSourceRange(),
10239                                 ParamDifferentDefaultArgument);
10240 
10241             break;
10242           }
10243           case Decl::NonTypeTemplateParm: {
10244             const auto *FirstParam = cast<NonTypeTemplateParmDecl>(FirstDecl);
10245             const auto *SecondParam = cast<NonTypeTemplateParmDecl>(SecondDecl);
10246             const bool HasFirstDefaultArgument =
10247                 FirstParam->hasDefaultArgument() &&
10248                 !FirstParam->defaultArgumentWasInherited();
10249             const bool HasSecondDefaultArgument =
10250                 SecondParam->hasDefaultArgument() &&
10251                 !SecondParam->defaultArgumentWasInherited();
10252 
10253             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10254               ODRDiagTemplateError(FirstDecl->getLocation(),
10255                                    FirstDecl->getSourceRange(),
10256                                    ParamSingleDefaultArgument)
10257                   << HasFirstDefaultArgument;
10258               ODRDiagTemplateNote(SecondDecl->getLocation(),
10259                                   SecondDecl->getSourceRange(),
10260                                   ParamSingleDefaultArgument)
10261                   << HasSecondDefaultArgument;
10262               break;
10263             }
10264 
10265             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10266                    "Expecting default arguments.");
10267 
10268             ODRDiagTemplateError(FirstDecl->getLocation(),
10269                                  FirstDecl->getSourceRange(),
10270                                  ParamDifferentDefaultArgument);
10271             ODRDiagTemplateNote(SecondDecl->getLocation(),
10272                                 SecondDecl->getSourceRange(),
10273                                 ParamDifferentDefaultArgument);
10274 
10275             break;
10276           }
10277           case Decl::TemplateTemplateParm: {
10278             const auto *FirstParam = cast<TemplateTemplateParmDecl>(FirstDecl);
10279             const auto *SecondParam =
10280                 cast<TemplateTemplateParmDecl>(SecondDecl);
10281             const bool HasFirstDefaultArgument =
10282                 FirstParam->hasDefaultArgument() &&
10283                 !FirstParam->defaultArgumentWasInherited();
10284             const bool HasSecondDefaultArgument =
10285                 SecondParam->hasDefaultArgument() &&
10286                 !SecondParam->defaultArgumentWasInherited();
10287 
10288             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10289               ODRDiagTemplateError(FirstDecl->getLocation(),
10290                                    FirstDecl->getSourceRange(),
10291                                    ParamSingleDefaultArgument)
10292                   << HasFirstDefaultArgument;
10293               ODRDiagTemplateNote(SecondDecl->getLocation(),
10294                                   SecondDecl->getSourceRange(),
10295                                   ParamSingleDefaultArgument)
10296                   << HasSecondDefaultArgument;
10297               break;
10298             }
10299 
10300             assert(HasFirstDefaultArgument && HasSecondDefaultArgument &&
10301                    "Expecting default arguments.");
10302 
10303             ODRDiagTemplateError(FirstDecl->getLocation(),
10304                                  FirstDecl->getSourceRange(),
10305                                  ParamDifferentDefaultArgument);
10306             ODRDiagTemplateNote(SecondDecl->getLocation(),
10307                                 SecondDecl->getSourceRange(),
10308                                 ParamDifferentDefaultArgument);
10309 
10310             break;
10311           }
10312           }
10313 
10314           break;
10315         }
10316 
10317         if (FirstIt != FirstEnd) {
10318           Diagnosed = true;
10319           break;
10320         }
10321       }
10322 
10323       DeclHashes FirstHashes;
10324       DeclHashes SecondHashes;
10325       const DeclContext *DC = FirstRecord;
10326       PopulateHashes(FirstHashes, FirstRecord, DC);
10327       PopulateHashes(SecondHashes, SecondRecord, DC);
10328 
10329       auto DR = FindTypeDiffs(FirstHashes, SecondHashes);
10330       ODRMismatchDecl FirstDiffType = DR.FirstDiffType;
10331       ODRMismatchDecl SecondDiffType = DR.SecondDiffType;
10332       Decl *FirstDecl = DR.FirstDecl;
10333       Decl *SecondDecl = DR.SecondDecl;
10334 
10335       if (FirstDiffType == Other || SecondDiffType == Other) {
10336         DiagnoseODRUnexpected(DR, FirstRecord, FirstModule, SecondRecord,
10337                               SecondModule);
10338         Diagnosed = true;
10339         break;
10340       }
10341 
10342       if (FirstDiffType != SecondDiffType) {
10343         DiagnoseODRMismatch(DR, FirstRecord, FirstModule, SecondRecord,
10344                             SecondModule);
10345         Diagnosed = true;
10346         break;
10347       }
10348 
10349       assert(FirstDiffType == SecondDiffType);
10350 
10351       switch (FirstDiffType) {
10352       case Other:
10353       case EndOfClass:
10354       case PublicSpecifer:
10355       case PrivateSpecifer:
10356       case ProtectedSpecifer:
10357         llvm_unreachable("Invalid diff type");
10358 
10359       case StaticAssert: {
10360         StaticAssertDecl *FirstSA = cast<StaticAssertDecl>(FirstDecl);
10361         StaticAssertDecl *SecondSA = cast<StaticAssertDecl>(SecondDecl);
10362 
10363         Expr *FirstExpr = FirstSA->getAssertExpr();
10364         Expr *SecondExpr = SecondSA->getAssertExpr();
10365         unsigned FirstODRHash = ComputeODRHash(FirstExpr);
10366         unsigned SecondODRHash = ComputeODRHash(SecondExpr);
10367         if (FirstODRHash != SecondODRHash) {
10368           ODRDiagDeclError(FirstRecord, FirstModule, FirstExpr->getBeginLoc(),
10369                            FirstExpr->getSourceRange(), StaticAssertCondition);
10370           ODRDiagDeclNote(SecondModule, SecondExpr->getBeginLoc(),
10371                           SecondExpr->getSourceRange(), StaticAssertCondition);
10372           Diagnosed = true;
10373           break;
10374         }
10375 
10376         StringLiteral *FirstStr = FirstSA->getMessage();
10377         StringLiteral *SecondStr = SecondSA->getMessage();
10378         assert((FirstStr || SecondStr) && "Both messages cannot be empty");
10379         if ((FirstStr && !SecondStr) || (!FirstStr && SecondStr)) {
10380           SourceLocation FirstLoc, SecondLoc;
10381           SourceRange FirstRange, SecondRange;
10382           if (FirstStr) {
10383             FirstLoc = FirstStr->getBeginLoc();
10384             FirstRange = FirstStr->getSourceRange();
10385           } else {
10386             FirstLoc = FirstSA->getBeginLoc();
10387             FirstRange = FirstSA->getSourceRange();
10388           }
10389           if (SecondStr) {
10390             SecondLoc = SecondStr->getBeginLoc();
10391             SecondRange = SecondStr->getSourceRange();
10392           } else {
10393             SecondLoc = SecondSA->getBeginLoc();
10394             SecondRange = SecondSA->getSourceRange();
10395           }
10396           ODRDiagDeclError(FirstRecord, FirstModule, FirstLoc, FirstRange,
10397                            StaticAssertOnlyMessage)
10398               << (FirstStr == nullptr);
10399           ODRDiagDeclNote(SecondModule, SecondLoc, SecondRange,
10400                           StaticAssertOnlyMessage)
10401               << (SecondStr == nullptr);
10402           Diagnosed = true;
10403           break;
10404         }
10405 
10406         if (FirstStr && SecondStr &&
10407             FirstStr->getString() != SecondStr->getString()) {
10408           ODRDiagDeclError(FirstRecord, FirstModule, FirstStr->getBeginLoc(),
10409                            FirstStr->getSourceRange(), StaticAssertMessage);
10410           ODRDiagDeclNote(SecondModule, SecondStr->getBeginLoc(),
10411                           SecondStr->getSourceRange(), StaticAssertMessage);
10412           Diagnosed = true;
10413           break;
10414         }
10415         break;
10416       }
10417       case Field: {
10418         Diagnosed = ODRDiagField(FirstRecord, FirstModule, SecondModule,
10419                                  cast<FieldDecl>(FirstDecl),
10420                                  cast<FieldDecl>(SecondDecl));
10421         break;
10422       }
10423       case CXXMethod: {
10424         enum {
10425           DiagMethod,
10426           DiagConstructor,
10427           DiagDestructor,
10428         } FirstMethodType,
10429             SecondMethodType;
10430         auto GetMethodTypeForDiagnostics = [](const CXXMethodDecl* D) {
10431           if (isa<CXXConstructorDecl>(D)) return DiagConstructor;
10432           if (isa<CXXDestructorDecl>(D)) return DiagDestructor;
10433           return DiagMethod;
10434         };
10435         const CXXMethodDecl *FirstMethod = cast<CXXMethodDecl>(FirstDecl);
10436         const CXXMethodDecl *SecondMethod = cast<CXXMethodDecl>(SecondDecl);
10437         FirstMethodType = GetMethodTypeForDiagnostics(FirstMethod);
10438         SecondMethodType = GetMethodTypeForDiagnostics(SecondMethod);
10439         auto FirstName = FirstMethod->getDeclName();
10440         auto SecondName = SecondMethod->getDeclName();
10441         if (FirstMethodType != SecondMethodType || FirstName != SecondName) {
10442           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10443                            FirstMethod->getSourceRange(), MethodName)
10444               << FirstMethodType << FirstName;
10445           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10446                           SecondMethod->getSourceRange(), MethodName)
10447               << SecondMethodType << SecondName;
10448 
10449           Diagnosed = true;
10450           break;
10451         }
10452 
10453         const bool FirstDeleted = FirstMethod->isDeletedAsWritten();
10454         const bool SecondDeleted = SecondMethod->isDeletedAsWritten();
10455         if (FirstDeleted != SecondDeleted) {
10456           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10457                            FirstMethod->getSourceRange(), MethodDeleted)
10458               << FirstMethodType << FirstName << FirstDeleted;
10459 
10460           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10461                           SecondMethod->getSourceRange(), MethodDeleted)
10462               << SecondMethodType << SecondName << SecondDeleted;
10463           Diagnosed = true;
10464           break;
10465         }
10466 
10467         const bool FirstDefaulted = FirstMethod->isExplicitlyDefaulted();
10468         const bool SecondDefaulted = SecondMethod->isExplicitlyDefaulted();
10469         if (FirstDefaulted != SecondDefaulted) {
10470           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10471                            FirstMethod->getSourceRange(), MethodDefaulted)
10472               << FirstMethodType << FirstName << FirstDefaulted;
10473 
10474           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10475                           SecondMethod->getSourceRange(), MethodDefaulted)
10476               << SecondMethodType << SecondName << SecondDefaulted;
10477           Diagnosed = true;
10478           break;
10479         }
10480 
10481         const bool FirstVirtual = FirstMethod->isVirtualAsWritten();
10482         const bool SecondVirtual = SecondMethod->isVirtualAsWritten();
10483         const bool FirstPure = FirstMethod->isPure();
10484         const bool SecondPure = SecondMethod->isPure();
10485         if ((FirstVirtual || SecondVirtual) &&
10486             (FirstVirtual != SecondVirtual || FirstPure != SecondPure)) {
10487           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10488                            FirstMethod->getSourceRange(), MethodVirtual)
10489               << FirstMethodType << FirstName << FirstPure << FirstVirtual;
10490           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10491                           SecondMethod->getSourceRange(), MethodVirtual)
10492               << SecondMethodType << SecondName << SecondPure << SecondVirtual;
10493           Diagnosed = true;
10494           break;
10495         }
10496 
10497         // CXXMethodDecl::isStatic uses the canonical Decl.  With Decl merging,
10498         // FirstDecl is the canonical Decl of SecondDecl, so the storage
10499         // class needs to be checked instead.
10500         const auto FirstStorage = FirstMethod->getStorageClass();
10501         const auto SecondStorage = SecondMethod->getStorageClass();
10502         const bool FirstStatic = FirstStorage == SC_Static;
10503         const bool SecondStatic = SecondStorage == SC_Static;
10504         if (FirstStatic != SecondStatic) {
10505           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10506                            FirstMethod->getSourceRange(), MethodStatic)
10507               << FirstMethodType << FirstName << FirstStatic;
10508           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10509                           SecondMethod->getSourceRange(), MethodStatic)
10510               << SecondMethodType << SecondName << SecondStatic;
10511           Diagnosed = true;
10512           break;
10513         }
10514 
10515         const bool FirstVolatile = FirstMethod->isVolatile();
10516         const bool SecondVolatile = SecondMethod->isVolatile();
10517         if (FirstVolatile != SecondVolatile) {
10518           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10519                            FirstMethod->getSourceRange(), MethodVolatile)
10520               << FirstMethodType << FirstName << FirstVolatile;
10521           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10522                           SecondMethod->getSourceRange(), MethodVolatile)
10523               << SecondMethodType << SecondName << SecondVolatile;
10524           Diagnosed = true;
10525           break;
10526         }
10527 
10528         const bool FirstConst = FirstMethod->isConst();
10529         const bool SecondConst = SecondMethod->isConst();
10530         if (FirstConst != SecondConst) {
10531           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10532                            FirstMethod->getSourceRange(), MethodConst)
10533               << FirstMethodType << FirstName << FirstConst;
10534           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10535                           SecondMethod->getSourceRange(), MethodConst)
10536               << SecondMethodType << SecondName << SecondConst;
10537           Diagnosed = true;
10538           break;
10539         }
10540 
10541         const bool FirstInline = FirstMethod->isInlineSpecified();
10542         const bool SecondInline = SecondMethod->isInlineSpecified();
10543         if (FirstInline != SecondInline) {
10544           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10545                            FirstMethod->getSourceRange(), MethodInline)
10546               << FirstMethodType << FirstName << FirstInline;
10547           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10548                           SecondMethod->getSourceRange(), MethodInline)
10549               << SecondMethodType << SecondName << SecondInline;
10550           Diagnosed = true;
10551           break;
10552         }
10553 
10554         const unsigned FirstNumParameters = FirstMethod->param_size();
10555         const unsigned SecondNumParameters = SecondMethod->param_size();
10556         if (FirstNumParameters != SecondNumParameters) {
10557           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10558                            FirstMethod->getSourceRange(),
10559                            MethodNumberParameters)
10560               << FirstMethodType << FirstName << FirstNumParameters;
10561           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10562                           SecondMethod->getSourceRange(),
10563                           MethodNumberParameters)
10564               << SecondMethodType << SecondName << SecondNumParameters;
10565           Diagnosed = true;
10566           break;
10567         }
10568 
10569         // Need this status boolean to know when break out of the switch.
10570         bool ParameterMismatch = false;
10571         for (unsigned I = 0; I < FirstNumParameters; ++I) {
10572           const ParmVarDecl *FirstParam = FirstMethod->getParamDecl(I);
10573           const ParmVarDecl *SecondParam = SecondMethod->getParamDecl(I);
10574 
10575           QualType FirstParamType = FirstParam->getType();
10576           QualType SecondParamType = SecondParam->getType();
10577           if (FirstParamType != SecondParamType &&
10578               ComputeQualTypeODRHash(FirstParamType) !=
10579                   ComputeQualTypeODRHash(SecondParamType)) {
10580             if (const DecayedType *ParamDecayedType =
10581                     FirstParamType->getAs<DecayedType>()) {
10582               ODRDiagDeclError(
10583                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10584                   FirstMethod->getSourceRange(), MethodParameterType)
10585                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10586                   << true << ParamDecayedType->getOriginalType();
10587             } else {
10588               ODRDiagDeclError(
10589                   FirstRecord, FirstModule, FirstMethod->getLocation(),
10590                   FirstMethod->getSourceRange(), MethodParameterType)
10591                   << FirstMethodType << FirstName << (I + 1) << FirstParamType
10592                   << false;
10593             }
10594 
10595             if (const DecayedType *ParamDecayedType =
10596                     SecondParamType->getAs<DecayedType>()) {
10597               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10598                               SecondMethod->getSourceRange(),
10599                               MethodParameterType)
10600                   << SecondMethodType << SecondName << (I + 1)
10601                   << SecondParamType << true
10602                   << ParamDecayedType->getOriginalType();
10603             } else {
10604               ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10605                               SecondMethod->getSourceRange(),
10606                               MethodParameterType)
10607                   << SecondMethodType << SecondName << (I + 1)
10608                   << SecondParamType << false;
10609             }
10610             ParameterMismatch = true;
10611             break;
10612           }
10613 
10614           DeclarationName FirstParamName = FirstParam->getDeclName();
10615           DeclarationName SecondParamName = SecondParam->getDeclName();
10616           if (FirstParamName != SecondParamName) {
10617             ODRDiagDeclError(FirstRecord, FirstModule,
10618                              FirstMethod->getLocation(),
10619                              FirstMethod->getSourceRange(), MethodParameterName)
10620                 << FirstMethodType << FirstName << (I + 1) << FirstParamName;
10621             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10622                             SecondMethod->getSourceRange(), MethodParameterName)
10623                 << SecondMethodType << SecondName << (I + 1) << SecondParamName;
10624             ParameterMismatch = true;
10625             break;
10626           }
10627 
10628           const Expr *FirstInit = FirstParam->getInit();
10629           const Expr *SecondInit = SecondParam->getInit();
10630           if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
10631             ODRDiagDeclError(FirstRecord, FirstModule,
10632                              FirstMethod->getLocation(),
10633                              FirstMethod->getSourceRange(),
10634                              MethodParameterSingleDefaultArgument)
10635                 << FirstMethodType << FirstName << (I + 1)
10636                 << (FirstInit == nullptr)
10637                 << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
10638             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10639                             SecondMethod->getSourceRange(),
10640                             MethodParameterSingleDefaultArgument)
10641                 << SecondMethodType << SecondName << (I + 1)
10642                 << (SecondInit == nullptr)
10643                 << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
10644             ParameterMismatch = true;
10645             break;
10646           }
10647 
10648           if (FirstInit && SecondInit &&
10649               ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
10650             ODRDiagDeclError(FirstRecord, FirstModule,
10651                              FirstMethod->getLocation(),
10652                              FirstMethod->getSourceRange(),
10653                              MethodParameterDifferentDefaultArgument)
10654                 << FirstMethodType << FirstName << (I + 1)
10655                 << FirstInit->getSourceRange();
10656             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10657                             SecondMethod->getSourceRange(),
10658                             MethodParameterDifferentDefaultArgument)
10659                 << SecondMethodType << SecondName << (I + 1)
10660                 << SecondInit->getSourceRange();
10661             ParameterMismatch = true;
10662             break;
10663 
10664           }
10665         }
10666 
10667         if (ParameterMismatch) {
10668           Diagnosed = true;
10669           break;
10670         }
10671 
10672         const auto *FirstTemplateArgs =
10673             FirstMethod->getTemplateSpecializationArgs();
10674         const auto *SecondTemplateArgs =
10675             SecondMethod->getTemplateSpecializationArgs();
10676 
10677         if ((FirstTemplateArgs && !SecondTemplateArgs) ||
10678             (!FirstTemplateArgs && SecondTemplateArgs)) {
10679           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10680                            FirstMethod->getSourceRange(),
10681                            MethodNoTemplateArguments)
10682               << FirstMethodType << FirstName << (FirstTemplateArgs != nullptr);
10683           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10684                           SecondMethod->getSourceRange(),
10685                           MethodNoTemplateArguments)
10686               << SecondMethodType << SecondName
10687               << (SecondTemplateArgs != nullptr);
10688 
10689           Diagnosed = true;
10690           break;
10691         }
10692 
10693         if (FirstTemplateArgs && SecondTemplateArgs) {
10694           // Remove pack expansions from argument list.
10695           auto ExpandTemplateArgumentList =
10696               [](const TemplateArgumentList *TAL) {
10697                 llvm::SmallVector<const TemplateArgument *, 8> ExpandedList;
10698                 for (const TemplateArgument &TA : TAL->asArray()) {
10699                   if (TA.getKind() != TemplateArgument::Pack) {
10700                     ExpandedList.push_back(&TA);
10701                     continue;
10702                   }
10703                   for (const TemplateArgument &PackTA : TA.getPackAsArray()) {
10704                     ExpandedList.push_back(&PackTA);
10705                   }
10706                 }
10707                 return ExpandedList;
10708               };
10709           llvm::SmallVector<const TemplateArgument *, 8> FirstExpandedList =
10710               ExpandTemplateArgumentList(FirstTemplateArgs);
10711           llvm::SmallVector<const TemplateArgument *, 8> SecondExpandedList =
10712               ExpandTemplateArgumentList(SecondTemplateArgs);
10713 
10714           if (FirstExpandedList.size() != SecondExpandedList.size()) {
10715             ODRDiagDeclError(FirstRecord, FirstModule,
10716                              FirstMethod->getLocation(),
10717                              FirstMethod->getSourceRange(),
10718                              MethodDifferentNumberTemplateArguments)
10719                 << FirstMethodType << FirstName
10720                 << (unsigned)FirstExpandedList.size();
10721             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10722                             SecondMethod->getSourceRange(),
10723                             MethodDifferentNumberTemplateArguments)
10724                 << SecondMethodType << SecondName
10725                 << (unsigned)SecondExpandedList.size();
10726 
10727             Diagnosed = true;
10728             break;
10729           }
10730 
10731           bool TemplateArgumentMismatch = false;
10732           for (unsigned i = 0, e = FirstExpandedList.size(); i != e; ++i) {
10733             const TemplateArgument &FirstTA = *FirstExpandedList[i],
10734                                    &SecondTA = *SecondExpandedList[i];
10735             if (ComputeTemplateArgumentODRHash(FirstTA) ==
10736                 ComputeTemplateArgumentODRHash(SecondTA)) {
10737               continue;
10738             }
10739 
10740             ODRDiagDeclError(
10741                 FirstRecord, FirstModule, FirstMethod->getLocation(),
10742                 FirstMethod->getSourceRange(), MethodDifferentTemplateArgument)
10743                 << FirstMethodType << FirstName << FirstTA << i + 1;
10744             ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10745                             SecondMethod->getSourceRange(),
10746                             MethodDifferentTemplateArgument)
10747                 << SecondMethodType << SecondName << SecondTA << i + 1;
10748 
10749             TemplateArgumentMismatch = true;
10750             break;
10751           }
10752 
10753           if (TemplateArgumentMismatch) {
10754             Diagnosed = true;
10755             break;
10756           }
10757         }
10758 
10759         // Compute the hash of the method as if it has no body.
10760         auto ComputeCXXMethodODRHash = [&Hash](const CXXMethodDecl *D) {
10761           Hash.clear();
10762           Hash.AddFunctionDecl(D, true /*SkipBody*/);
10763           return Hash.CalculateHash();
10764         };
10765 
10766         // Compare the hash generated to the hash stored.  A difference means
10767         // that a body was present in the original source.  Due to merging,
10768         // the stardard way of detecting a body will not work.
10769         const bool HasFirstBody =
10770             ComputeCXXMethodODRHash(FirstMethod) != FirstMethod->getODRHash();
10771         const bool HasSecondBody =
10772             ComputeCXXMethodODRHash(SecondMethod) != SecondMethod->getODRHash();
10773 
10774         if (HasFirstBody != HasSecondBody) {
10775           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10776                            FirstMethod->getSourceRange(), MethodSingleBody)
10777               << FirstMethodType << FirstName << HasFirstBody;
10778           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10779                           SecondMethod->getSourceRange(), MethodSingleBody)
10780               << SecondMethodType << SecondName << HasSecondBody;
10781           Diagnosed = true;
10782           break;
10783         }
10784 
10785         if (HasFirstBody && HasSecondBody) {
10786           ODRDiagDeclError(FirstRecord, FirstModule, FirstMethod->getLocation(),
10787                            FirstMethod->getSourceRange(), MethodDifferentBody)
10788               << FirstMethodType << FirstName;
10789           ODRDiagDeclNote(SecondModule, SecondMethod->getLocation(),
10790                           SecondMethod->getSourceRange(), MethodDifferentBody)
10791               << SecondMethodType << SecondName;
10792           Diagnosed = true;
10793           break;
10794         }
10795 
10796         break;
10797       }
10798       case TypeAlias:
10799       case TypeDef: {
10800         Diagnosed = ODRDiagTypeDefOrAlias(
10801             FirstRecord, FirstModule, SecondModule,
10802             cast<TypedefNameDecl>(FirstDecl), cast<TypedefNameDecl>(SecondDecl),
10803             FirstDiffType == TypeAlias);
10804         break;
10805       }
10806       case Var: {
10807         Diagnosed =
10808             ODRDiagVar(FirstRecord, FirstModule, SecondModule,
10809                        cast<VarDecl>(FirstDecl), cast<VarDecl>(SecondDecl));
10810         break;
10811       }
10812       case Friend: {
10813         FriendDecl *FirstFriend = cast<FriendDecl>(FirstDecl);
10814         FriendDecl *SecondFriend = cast<FriendDecl>(SecondDecl);
10815 
10816         NamedDecl *FirstND = FirstFriend->getFriendDecl();
10817         NamedDecl *SecondND = SecondFriend->getFriendDecl();
10818 
10819         TypeSourceInfo *FirstTSI = FirstFriend->getFriendType();
10820         TypeSourceInfo *SecondTSI = SecondFriend->getFriendType();
10821 
10822         if (FirstND && SecondND) {
10823           ODRDiagDeclError(FirstRecord, FirstModule,
10824                            FirstFriend->getFriendLoc(),
10825                            FirstFriend->getSourceRange(), FriendFunction)
10826               << FirstND;
10827           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10828                           SecondFriend->getSourceRange(), FriendFunction)
10829               << SecondND;
10830 
10831           Diagnosed = true;
10832           break;
10833         }
10834 
10835         if (FirstTSI && SecondTSI) {
10836           QualType FirstFriendType = FirstTSI->getType();
10837           QualType SecondFriendType = SecondTSI->getType();
10838           assert(ComputeQualTypeODRHash(FirstFriendType) !=
10839                  ComputeQualTypeODRHash(SecondFriendType));
10840           ODRDiagDeclError(FirstRecord, FirstModule,
10841                            FirstFriend->getFriendLoc(),
10842                            FirstFriend->getSourceRange(), FriendType)
10843               << FirstFriendType;
10844           ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10845                           SecondFriend->getSourceRange(), FriendType)
10846               << SecondFriendType;
10847           Diagnosed = true;
10848           break;
10849         }
10850 
10851         ODRDiagDeclError(FirstRecord, FirstModule, FirstFriend->getFriendLoc(),
10852                          FirstFriend->getSourceRange(), FriendTypeFunction)
10853             << (FirstTSI == nullptr);
10854         ODRDiagDeclNote(SecondModule, SecondFriend->getFriendLoc(),
10855                         SecondFriend->getSourceRange(), FriendTypeFunction)
10856             << (SecondTSI == nullptr);
10857 
10858         Diagnosed = true;
10859         break;
10860       }
10861       case FunctionTemplate: {
10862         FunctionTemplateDecl *FirstTemplate =
10863             cast<FunctionTemplateDecl>(FirstDecl);
10864         FunctionTemplateDecl *SecondTemplate =
10865             cast<FunctionTemplateDecl>(SecondDecl);
10866 
10867         TemplateParameterList *FirstTPL =
10868             FirstTemplate->getTemplateParameters();
10869         TemplateParameterList *SecondTPL =
10870             SecondTemplate->getTemplateParameters();
10871 
10872         if (FirstTPL->size() != SecondTPL->size()) {
10873           ODRDiagDeclError(FirstRecord, FirstModule,
10874                            FirstTemplate->getLocation(),
10875                            FirstTemplate->getSourceRange(),
10876                            FunctionTemplateDifferentNumberParameters)
10877               << FirstTemplate << FirstTPL->size();
10878           ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10879                           SecondTemplate->getSourceRange(),
10880                           FunctionTemplateDifferentNumberParameters)
10881               << SecondTemplate << SecondTPL->size();
10882 
10883           Diagnosed = true;
10884           break;
10885         }
10886 
10887         bool ParameterMismatch = false;
10888         for (unsigned i = 0, e = FirstTPL->size(); i != e; ++i) {
10889           NamedDecl *FirstParam = FirstTPL->getParam(i);
10890           NamedDecl *SecondParam = SecondTPL->getParam(i);
10891 
10892           if (FirstParam->getKind() != SecondParam->getKind()) {
10893             enum {
10894               TemplateTypeParameter,
10895               NonTypeTemplateParameter,
10896               TemplateTemplateParameter,
10897             };
10898             auto GetParamType = [](NamedDecl *D) {
10899               switch (D->getKind()) {
10900                 default:
10901                   llvm_unreachable("Unexpected template parameter type");
10902                 case Decl::TemplateTypeParm:
10903                   return TemplateTypeParameter;
10904                 case Decl::NonTypeTemplateParm:
10905                   return NonTypeTemplateParameter;
10906                 case Decl::TemplateTemplateParm:
10907                   return TemplateTemplateParameter;
10908               }
10909             };
10910 
10911             ODRDiagDeclError(FirstRecord, FirstModule,
10912                              FirstTemplate->getLocation(),
10913                              FirstTemplate->getSourceRange(),
10914                              FunctionTemplateParameterDifferentKind)
10915                 << FirstTemplate << (i + 1) << GetParamType(FirstParam);
10916             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10917                             SecondTemplate->getSourceRange(),
10918                             FunctionTemplateParameterDifferentKind)
10919                 << SecondTemplate << (i + 1) << GetParamType(SecondParam);
10920 
10921             ParameterMismatch = true;
10922             break;
10923           }
10924 
10925           if (FirstParam->getName() != SecondParam->getName()) {
10926             ODRDiagDeclError(
10927                 FirstRecord, FirstModule, FirstTemplate->getLocation(),
10928                 FirstTemplate->getSourceRange(), FunctionTemplateParameterName)
10929                 << FirstTemplate << (i + 1) << (bool)FirstParam->getIdentifier()
10930                 << FirstParam;
10931             ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10932                             SecondTemplate->getSourceRange(),
10933                             FunctionTemplateParameterName)
10934                 << SecondTemplate << (i + 1)
10935                 << (bool)SecondParam->getIdentifier() << SecondParam;
10936             ParameterMismatch = true;
10937             break;
10938           }
10939 
10940           if (isa<TemplateTypeParmDecl>(FirstParam) &&
10941               isa<TemplateTypeParmDecl>(SecondParam)) {
10942             TemplateTypeParmDecl *FirstTTPD =
10943                 cast<TemplateTypeParmDecl>(FirstParam);
10944             TemplateTypeParmDecl *SecondTTPD =
10945                 cast<TemplateTypeParmDecl>(SecondParam);
10946             bool HasFirstDefaultArgument =
10947                 FirstTTPD->hasDefaultArgument() &&
10948                 !FirstTTPD->defaultArgumentWasInherited();
10949             bool HasSecondDefaultArgument =
10950                 SecondTTPD->hasDefaultArgument() &&
10951                 !SecondTTPD->defaultArgumentWasInherited();
10952             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
10953               ODRDiagDeclError(FirstRecord, FirstModule,
10954                                FirstTemplate->getLocation(),
10955                                FirstTemplate->getSourceRange(),
10956                                FunctionTemplateParameterSingleDefaultArgument)
10957                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
10958               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10959                               SecondTemplate->getSourceRange(),
10960                               FunctionTemplateParameterSingleDefaultArgument)
10961                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
10962               ParameterMismatch = true;
10963               break;
10964             }
10965 
10966             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
10967               QualType FirstType = FirstTTPD->getDefaultArgument();
10968               QualType SecondType = SecondTTPD->getDefaultArgument();
10969               if (ComputeQualTypeODRHash(FirstType) !=
10970                   ComputeQualTypeODRHash(SecondType)) {
10971                 ODRDiagDeclError(
10972                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
10973                     FirstTemplate->getSourceRange(),
10974                     FunctionTemplateParameterDifferentDefaultArgument)
10975                     << FirstTemplate << (i + 1) << FirstType;
10976                 ODRDiagDeclNote(
10977                     SecondModule, SecondTemplate->getLocation(),
10978                     SecondTemplate->getSourceRange(),
10979                     FunctionTemplateParameterDifferentDefaultArgument)
10980                     << SecondTemplate << (i + 1) << SecondType;
10981                 ParameterMismatch = true;
10982                 break;
10983               }
10984             }
10985 
10986             if (FirstTTPD->isParameterPack() !=
10987                 SecondTTPD->isParameterPack()) {
10988               ODRDiagDeclError(FirstRecord, FirstModule,
10989                                FirstTemplate->getLocation(),
10990                                FirstTemplate->getSourceRange(),
10991                                FunctionTemplatePackParameter)
10992                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
10993               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
10994                               SecondTemplate->getSourceRange(),
10995                               FunctionTemplatePackParameter)
10996                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
10997               ParameterMismatch = true;
10998               break;
10999             }
11000           }
11001 
11002           if (isa<TemplateTemplateParmDecl>(FirstParam) &&
11003               isa<TemplateTemplateParmDecl>(SecondParam)) {
11004             TemplateTemplateParmDecl *FirstTTPD =
11005                 cast<TemplateTemplateParmDecl>(FirstParam);
11006             TemplateTemplateParmDecl *SecondTTPD =
11007                 cast<TemplateTemplateParmDecl>(SecondParam);
11008 
11009             TemplateParameterList *FirstTPL =
11010                 FirstTTPD->getTemplateParameters();
11011             TemplateParameterList *SecondTPL =
11012                 SecondTTPD->getTemplateParameters();
11013 
11014             if (ComputeTemplateParameterListODRHash(FirstTPL) !=
11015                 ComputeTemplateParameterListODRHash(SecondTPL)) {
11016               ODRDiagDeclError(FirstRecord, FirstModule,
11017                                FirstTemplate->getLocation(),
11018                                FirstTemplate->getSourceRange(),
11019                                FunctionTemplateParameterDifferentType)
11020                   << FirstTemplate << (i + 1);
11021               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11022                               SecondTemplate->getSourceRange(),
11023                               FunctionTemplateParameterDifferentType)
11024                   << SecondTemplate << (i + 1);
11025               ParameterMismatch = true;
11026               break;
11027             }
11028 
11029             bool HasFirstDefaultArgument =
11030                 FirstTTPD->hasDefaultArgument() &&
11031                 !FirstTTPD->defaultArgumentWasInherited();
11032             bool HasSecondDefaultArgument =
11033                 SecondTTPD->hasDefaultArgument() &&
11034                 !SecondTTPD->defaultArgumentWasInherited();
11035             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11036               ODRDiagDeclError(FirstRecord, FirstModule,
11037                                FirstTemplate->getLocation(),
11038                                FirstTemplate->getSourceRange(),
11039                                FunctionTemplateParameterSingleDefaultArgument)
11040                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11041               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11042                               SecondTemplate->getSourceRange(),
11043                               FunctionTemplateParameterSingleDefaultArgument)
11044                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11045               ParameterMismatch = true;
11046               break;
11047             }
11048 
11049             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11050               TemplateArgument FirstTA =
11051                   FirstTTPD->getDefaultArgument().getArgument();
11052               TemplateArgument SecondTA =
11053                   SecondTTPD->getDefaultArgument().getArgument();
11054               if (ComputeTemplateArgumentODRHash(FirstTA) !=
11055                   ComputeTemplateArgumentODRHash(SecondTA)) {
11056                 ODRDiagDeclError(
11057                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11058                     FirstTemplate->getSourceRange(),
11059                     FunctionTemplateParameterDifferentDefaultArgument)
11060                     << FirstTemplate << (i + 1) << FirstTA;
11061                 ODRDiagDeclNote(
11062                     SecondModule, SecondTemplate->getLocation(),
11063                     SecondTemplate->getSourceRange(),
11064                     FunctionTemplateParameterDifferentDefaultArgument)
11065                     << SecondTemplate << (i + 1) << SecondTA;
11066                 ParameterMismatch = true;
11067                 break;
11068               }
11069             }
11070 
11071             if (FirstTTPD->isParameterPack() !=
11072                 SecondTTPD->isParameterPack()) {
11073               ODRDiagDeclError(FirstRecord, FirstModule,
11074                                FirstTemplate->getLocation(),
11075                                FirstTemplate->getSourceRange(),
11076                                FunctionTemplatePackParameter)
11077                   << FirstTemplate << (i + 1) << FirstTTPD->isParameterPack();
11078               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11079                               SecondTemplate->getSourceRange(),
11080                               FunctionTemplatePackParameter)
11081                   << SecondTemplate << (i + 1) << SecondTTPD->isParameterPack();
11082               ParameterMismatch = true;
11083               break;
11084             }
11085           }
11086 
11087           if (isa<NonTypeTemplateParmDecl>(FirstParam) &&
11088               isa<NonTypeTemplateParmDecl>(SecondParam)) {
11089             NonTypeTemplateParmDecl *FirstNTTPD =
11090                 cast<NonTypeTemplateParmDecl>(FirstParam);
11091             NonTypeTemplateParmDecl *SecondNTTPD =
11092                 cast<NonTypeTemplateParmDecl>(SecondParam);
11093 
11094             QualType FirstType = FirstNTTPD->getType();
11095             QualType SecondType = SecondNTTPD->getType();
11096             if (ComputeQualTypeODRHash(FirstType) !=
11097                 ComputeQualTypeODRHash(SecondType)) {
11098               ODRDiagDeclError(FirstRecord, FirstModule,
11099                                FirstTemplate->getLocation(),
11100                                FirstTemplate->getSourceRange(),
11101                                FunctionTemplateParameterDifferentType)
11102                   << FirstTemplate << (i + 1);
11103               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11104                               SecondTemplate->getSourceRange(),
11105                               FunctionTemplateParameterDifferentType)
11106                   << SecondTemplate << (i + 1);
11107               ParameterMismatch = true;
11108               break;
11109             }
11110 
11111             bool HasFirstDefaultArgument =
11112                 FirstNTTPD->hasDefaultArgument() &&
11113                 !FirstNTTPD->defaultArgumentWasInherited();
11114             bool HasSecondDefaultArgument =
11115                 SecondNTTPD->hasDefaultArgument() &&
11116                 !SecondNTTPD->defaultArgumentWasInherited();
11117             if (HasFirstDefaultArgument != HasSecondDefaultArgument) {
11118               ODRDiagDeclError(FirstRecord, FirstModule,
11119                                FirstTemplate->getLocation(),
11120                                FirstTemplate->getSourceRange(),
11121                                FunctionTemplateParameterSingleDefaultArgument)
11122                   << FirstTemplate << (i + 1) << HasFirstDefaultArgument;
11123               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11124                               SecondTemplate->getSourceRange(),
11125                               FunctionTemplateParameterSingleDefaultArgument)
11126                   << SecondTemplate << (i + 1) << HasSecondDefaultArgument;
11127               ParameterMismatch = true;
11128               break;
11129             }
11130 
11131             if (HasFirstDefaultArgument && HasSecondDefaultArgument) {
11132               Expr *FirstDefaultArgument = FirstNTTPD->getDefaultArgument();
11133               Expr *SecondDefaultArgument = SecondNTTPD->getDefaultArgument();
11134               if (ComputeODRHash(FirstDefaultArgument) !=
11135                   ComputeODRHash(SecondDefaultArgument)) {
11136                 ODRDiagDeclError(
11137                     FirstRecord, FirstModule, FirstTemplate->getLocation(),
11138                     FirstTemplate->getSourceRange(),
11139                     FunctionTemplateParameterDifferentDefaultArgument)
11140                     << FirstTemplate << (i + 1) << FirstDefaultArgument;
11141                 ODRDiagDeclNote(
11142                     SecondModule, SecondTemplate->getLocation(),
11143                     SecondTemplate->getSourceRange(),
11144                     FunctionTemplateParameterDifferentDefaultArgument)
11145                     << SecondTemplate << (i + 1) << SecondDefaultArgument;
11146                 ParameterMismatch = true;
11147                 break;
11148               }
11149             }
11150 
11151             if (FirstNTTPD->isParameterPack() !=
11152                 SecondNTTPD->isParameterPack()) {
11153               ODRDiagDeclError(FirstRecord, FirstModule,
11154                                FirstTemplate->getLocation(),
11155                                FirstTemplate->getSourceRange(),
11156                                FunctionTemplatePackParameter)
11157                   << FirstTemplate << (i + 1) << FirstNTTPD->isParameterPack();
11158               ODRDiagDeclNote(SecondModule, SecondTemplate->getLocation(),
11159                               SecondTemplate->getSourceRange(),
11160                               FunctionTemplatePackParameter)
11161                   << SecondTemplate << (i + 1)
11162                   << SecondNTTPD->isParameterPack();
11163               ParameterMismatch = true;
11164               break;
11165             }
11166           }
11167         }
11168 
11169         if (ParameterMismatch) {
11170           Diagnosed = true;
11171           break;
11172         }
11173 
11174         break;
11175       }
11176       }
11177 
11178       if (Diagnosed)
11179         continue;
11180 
11181       Diag(FirstDecl->getLocation(),
11182            diag::err_module_odr_violation_mismatch_decl_unknown)
11183           << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType
11184           << FirstDecl->getSourceRange();
11185       Diag(SecondDecl->getLocation(),
11186            diag::note_module_odr_violation_mismatch_decl_unknown)
11187           << SecondModule << FirstDiffType << SecondDecl->getSourceRange();
11188       Diagnosed = true;
11189     }
11190 
11191     if (!Diagnosed) {
11192       // All definitions are updates to the same declaration. This happens if a
11193       // module instantiates the declaration of a class template specialization
11194       // and two or more other modules instantiate its definition.
11195       //
11196       // FIXME: Indicate which modules had instantiations of this definition.
11197       // FIXME: How can this even happen?
11198       Diag(Merge.first->getLocation(),
11199            diag::err_module_odr_violation_different_instantiations)
11200         << Merge.first;
11201     }
11202   }
11203 
11204   // Issue ODR failures diagnostics for functions.
11205   for (auto &Merge : FunctionOdrMergeFailures) {
11206     enum ODRFunctionDifference {
11207       ReturnType,
11208       ParameterName,
11209       ParameterType,
11210       ParameterSingleDefaultArgument,
11211       ParameterDifferentDefaultArgument,
11212       FunctionBody,
11213     };
11214 
11215     FunctionDecl *FirstFunction = Merge.first;
11216     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstFunction);
11217 
11218     bool Diagnosed = false;
11219     for (auto &SecondFunction : Merge.second) {
11220 
11221       if (FirstFunction == SecondFunction)
11222         continue;
11223 
11224       std::string SecondModule =
11225           getOwningModuleNameForDiagnostic(SecondFunction);
11226 
11227       auto ODRDiagError = [FirstFunction, &FirstModule,
11228                            this](SourceLocation Loc, SourceRange Range,
11229                                  ODRFunctionDifference DiffType) {
11230         return Diag(Loc, diag::err_module_odr_violation_function)
11231                << FirstFunction << FirstModule.empty() << FirstModule << Range
11232                << DiffType;
11233       };
11234       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11235                                                SourceRange Range,
11236                                                ODRFunctionDifference DiffType) {
11237         return Diag(Loc, diag::note_module_odr_violation_function)
11238                << SecondModule << Range << DiffType;
11239       };
11240 
11241       if (ComputeQualTypeODRHash(FirstFunction->getReturnType()) !=
11242           ComputeQualTypeODRHash(SecondFunction->getReturnType())) {
11243         ODRDiagError(FirstFunction->getReturnTypeSourceRange().getBegin(),
11244                      FirstFunction->getReturnTypeSourceRange(), ReturnType)
11245             << FirstFunction->getReturnType();
11246         ODRDiagNote(SecondFunction->getReturnTypeSourceRange().getBegin(),
11247                     SecondFunction->getReturnTypeSourceRange(), ReturnType)
11248             << SecondFunction->getReturnType();
11249         Diagnosed = true;
11250         break;
11251       }
11252 
11253       assert(FirstFunction->param_size() == SecondFunction->param_size() &&
11254              "Merged functions with different number of parameters");
11255 
11256       auto ParamSize = FirstFunction->param_size();
11257       bool ParameterMismatch = false;
11258       for (unsigned I = 0; I < ParamSize; ++I) {
11259         auto *FirstParam = FirstFunction->getParamDecl(I);
11260         auto *SecondParam = SecondFunction->getParamDecl(I);
11261 
11262         assert(getContext().hasSameType(FirstParam->getType(),
11263                                       SecondParam->getType()) &&
11264                "Merged function has different parameter types.");
11265 
11266         if (FirstParam->getDeclName() != SecondParam->getDeclName()) {
11267           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11268                        ParameterName)
11269               << I + 1 << FirstParam->getDeclName();
11270           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11271                       ParameterName)
11272               << I + 1 << SecondParam->getDeclName();
11273           ParameterMismatch = true;
11274           break;
11275         };
11276 
11277         QualType FirstParamType = FirstParam->getType();
11278         QualType SecondParamType = SecondParam->getType();
11279         if (FirstParamType != SecondParamType &&
11280             ComputeQualTypeODRHash(FirstParamType) !=
11281                 ComputeQualTypeODRHash(SecondParamType)) {
11282           if (const DecayedType *ParamDecayedType =
11283                   FirstParamType->getAs<DecayedType>()) {
11284             ODRDiagError(FirstParam->getLocation(),
11285                          FirstParam->getSourceRange(), ParameterType)
11286                 << (I + 1) << FirstParamType << true
11287                 << ParamDecayedType->getOriginalType();
11288           } else {
11289             ODRDiagError(FirstParam->getLocation(),
11290                          FirstParam->getSourceRange(), ParameterType)
11291                 << (I + 1) << FirstParamType << false;
11292           }
11293 
11294           if (const DecayedType *ParamDecayedType =
11295                   SecondParamType->getAs<DecayedType>()) {
11296             ODRDiagNote(SecondParam->getLocation(),
11297                         SecondParam->getSourceRange(), ParameterType)
11298                 << (I + 1) << SecondParamType << true
11299                 << ParamDecayedType->getOriginalType();
11300           } else {
11301             ODRDiagNote(SecondParam->getLocation(),
11302                         SecondParam->getSourceRange(), ParameterType)
11303                 << (I + 1) << SecondParamType << false;
11304           }
11305           ParameterMismatch = true;
11306           break;
11307         }
11308 
11309         const Expr *FirstInit = FirstParam->getInit();
11310         const Expr *SecondInit = SecondParam->getInit();
11311         if ((FirstInit == nullptr) != (SecondInit == nullptr)) {
11312           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11313                        ParameterSingleDefaultArgument)
11314               << (I + 1) << (FirstInit == nullptr)
11315               << (FirstInit ? FirstInit->getSourceRange() : SourceRange());
11316           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11317                       ParameterSingleDefaultArgument)
11318               << (I + 1) << (SecondInit == nullptr)
11319               << (SecondInit ? SecondInit->getSourceRange() : SourceRange());
11320           ParameterMismatch = true;
11321           break;
11322         }
11323 
11324         if (FirstInit && SecondInit &&
11325             ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11326           ODRDiagError(FirstParam->getLocation(), FirstParam->getSourceRange(),
11327                        ParameterDifferentDefaultArgument)
11328               << (I + 1) << FirstInit->getSourceRange();
11329           ODRDiagNote(SecondParam->getLocation(), SecondParam->getSourceRange(),
11330                       ParameterDifferentDefaultArgument)
11331               << (I + 1) << SecondInit->getSourceRange();
11332           ParameterMismatch = true;
11333           break;
11334         }
11335 
11336         assert(ComputeSubDeclODRHash(FirstParam) ==
11337                    ComputeSubDeclODRHash(SecondParam) &&
11338                "Undiagnosed parameter difference.");
11339       }
11340 
11341       if (ParameterMismatch) {
11342         Diagnosed = true;
11343         break;
11344       }
11345 
11346       // If no error has been generated before now, assume the problem is in
11347       // the body and generate a message.
11348       ODRDiagError(FirstFunction->getLocation(),
11349                    FirstFunction->getSourceRange(), FunctionBody);
11350       ODRDiagNote(SecondFunction->getLocation(),
11351                   SecondFunction->getSourceRange(), FunctionBody);
11352       Diagnosed = true;
11353       break;
11354     }
11355     (void)Diagnosed;
11356     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11357   }
11358 
11359   // Issue ODR failures diagnostics for enums.
11360   for (auto &Merge : EnumOdrMergeFailures) {
11361     enum ODREnumDifference {
11362       SingleScopedEnum,
11363       EnumTagKeywordMismatch,
11364       SingleSpecifiedType,
11365       DifferentSpecifiedTypes,
11366       DifferentNumberEnumConstants,
11367       EnumConstantName,
11368       EnumConstantSingleInitilizer,
11369       EnumConstantDifferentInitilizer,
11370     };
11371 
11372     // If we've already pointed out a specific problem with this enum, don't
11373     // bother issuing a general "something's different" diagnostic.
11374     if (!DiagnosedOdrMergeFailures.insert(Merge.first).second)
11375       continue;
11376 
11377     EnumDecl *FirstEnum = Merge.first;
11378     std::string FirstModule = getOwningModuleNameForDiagnostic(FirstEnum);
11379 
11380     using DeclHashes =
11381         llvm::SmallVector<std::pair<EnumConstantDecl *, unsigned>, 4>;
11382     auto PopulateHashes = [&ComputeSubDeclODRHash, FirstEnum](
11383                               DeclHashes &Hashes, EnumDecl *Enum) {
11384       for (auto *D : Enum->decls()) {
11385         // Due to decl merging, the first EnumDecl is the parent of
11386         // Decls in both records.
11387         if (!ODRHash::isDeclToBeProcessed(D, FirstEnum))
11388           continue;
11389         assert(isa<EnumConstantDecl>(D) && "Unexpected Decl kind");
11390         Hashes.emplace_back(cast<EnumConstantDecl>(D),
11391                             ComputeSubDeclODRHash(D));
11392       }
11393     };
11394     DeclHashes FirstHashes;
11395     PopulateHashes(FirstHashes, FirstEnum);
11396     bool Diagnosed = false;
11397     for (auto &SecondEnum : Merge.second) {
11398 
11399       if (FirstEnum == SecondEnum)
11400         continue;
11401 
11402       std::string SecondModule =
11403           getOwningModuleNameForDiagnostic(SecondEnum);
11404 
11405       auto ODRDiagError = [FirstEnum, &FirstModule,
11406                            this](SourceLocation Loc, SourceRange Range,
11407                                  ODREnumDifference DiffType) {
11408         return Diag(Loc, diag::err_module_odr_violation_enum)
11409                << FirstEnum << FirstModule.empty() << FirstModule << Range
11410                << DiffType;
11411       };
11412       auto ODRDiagNote = [&SecondModule, this](SourceLocation Loc,
11413                                                SourceRange Range,
11414                                                ODREnumDifference DiffType) {
11415         return Diag(Loc, diag::note_module_odr_violation_enum)
11416                << SecondModule << Range << DiffType;
11417       };
11418 
11419       if (FirstEnum->isScoped() != SecondEnum->isScoped()) {
11420         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11421                      SingleScopedEnum)
11422             << FirstEnum->isScoped();
11423         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11424                     SingleScopedEnum)
11425             << SecondEnum->isScoped();
11426         Diagnosed = true;
11427         continue;
11428       }
11429 
11430       if (FirstEnum->isScoped() && SecondEnum->isScoped()) {
11431         if (FirstEnum->isScopedUsingClassTag() !=
11432             SecondEnum->isScopedUsingClassTag()) {
11433           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11434                        EnumTagKeywordMismatch)
11435               << FirstEnum->isScopedUsingClassTag();
11436           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11437                       EnumTagKeywordMismatch)
11438               << SecondEnum->isScopedUsingClassTag();
11439           Diagnosed = true;
11440           continue;
11441         }
11442       }
11443 
11444       QualType FirstUnderlyingType =
11445           FirstEnum->getIntegerTypeSourceInfo()
11446               ? FirstEnum->getIntegerTypeSourceInfo()->getType()
11447               : QualType();
11448       QualType SecondUnderlyingType =
11449           SecondEnum->getIntegerTypeSourceInfo()
11450               ? SecondEnum->getIntegerTypeSourceInfo()->getType()
11451               : QualType();
11452       if (FirstUnderlyingType.isNull() != SecondUnderlyingType.isNull()) {
11453           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11454                        SingleSpecifiedType)
11455               << !FirstUnderlyingType.isNull();
11456           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11457                       SingleSpecifiedType)
11458               << !SecondUnderlyingType.isNull();
11459           Diagnosed = true;
11460           continue;
11461       }
11462 
11463       if (!FirstUnderlyingType.isNull() && !SecondUnderlyingType.isNull()) {
11464         if (ComputeQualTypeODRHash(FirstUnderlyingType) !=
11465             ComputeQualTypeODRHash(SecondUnderlyingType)) {
11466           ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11467                        DifferentSpecifiedTypes)
11468               << FirstUnderlyingType;
11469           ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11470                       DifferentSpecifiedTypes)
11471               << SecondUnderlyingType;
11472           Diagnosed = true;
11473           continue;
11474         }
11475       }
11476 
11477       DeclHashes SecondHashes;
11478       PopulateHashes(SecondHashes, SecondEnum);
11479 
11480       if (FirstHashes.size() != SecondHashes.size()) {
11481         ODRDiagError(FirstEnum->getLocation(), FirstEnum->getSourceRange(),
11482                      DifferentNumberEnumConstants)
11483             << (int)FirstHashes.size();
11484         ODRDiagNote(SecondEnum->getLocation(), SecondEnum->getSourceRange(),
11485                     DifferentNumberEnumConstants)
11486             << (int)SecondHashes.size();
11487         Diagnosed = true;
11488         continue;
11489       }
11490 
11491       for (unsigned I = 0; I < FirstHashes.size(); ++I) {
11492         if (FirstHashes[I].second == SecondHashes[I].second)
11493           continue;
11494         const EnumConstantDecl *FirstEnumConstant = FirstHashes[I].first;
11495         const EnumConstantDecl *SecondEnumConstant = SecondHashes[I].first;
11496 
11497         if (FirstEnumConstant->getDeclName() !=
11498             SecondEnumConstant->getDeclName()) {
11499 
11500           ODRDiagError(FirstEnumConstant->getLocation(),
11501                        FirstEnumConstant->getSourceRange(), EnumConstantName)
11502               << I + 1 << FirstEnumConstant;
11503           ODRDiagNote(SecondEnumConstant->getLocation(),
11504                       SecondEnumConstant->getSourceRange(), EnumConstantName)
11505               << I + 1 << SecondEnumConstant;
11506           Diagnosed = true;
11507           break;
11508         }
11509 
11510         const Expr *FirstInit = FirstEnumConstant->getInitExpr();
11511         const Expr *SecondInit = SecondEnumConstant->getInitExpr();
11512         if (!FirstInit && !SecondInit)
11513           continue;
11514 
11515         if (!FirstInit || !SecondInit) {
11516           ODRDiagError(FirstEnumConstant->getLocation(),
11517                        FirstEnumConstant->getSourceRange(),
11518                        EnumConstantSingleInitilizer)
11519               << I + 1 << FirstEnumConstant << (FirstInit != nullptr);
11520           ODRDiagNote(SecondEnumConstant->getLocation(),
11521                       SecondEnumConstant->getSourceRange(),
11522                       EnumConstantSingleInitilizer)
11523               << I + 1 << SecondEnumConstant << (SecondInit != nullptr);
11524           Diagnosed = true;
11525           break;
11526         }
11527 
11528         if (ComputeODRHash(FirstInit) != ComputeODRHash(SecondInit)) {
11529           ODRDiagError(FirstEnumConstant->getLocation(),
11530                        FirstEnumConstant->getSourceRange(),
11531                        EnumConstantDifferentInitilizer)
11532               << I + 1 << FirstEnumConstant;
11533           ODRDiagNote(SecondEnumConstant->getLocation(),
11534                       SecondEnumConstant->getSourceRange(),
11535                       EnumConstantDifferentInitilizer)
11536               << I + 1 << SecondEnumConstant;
11537           Diagnosed = true;
11538           break;
11539         }
11540       }
11541     }
11542 
11543     (void)Diagnosed;
11544     assert(Diagnosed && "Unable to emit ODR diagnostic.");
11545   }
11546 }
11547 
11548 void ASTReader::StartedDeserializing() {
11549   if (++NumCurrentElementsDeserializing == 1 && ReadTimer.get())
11550     ReadTimer->startTimer();
11551 }
11552 
11553 void ASTReader::FinishedDeserializing() {
11554   assert(NumCurrentElementsDeserializing &&
11555          "FinishedDeserializing not paired with StartedDeserializing");
11556   if (NumCurrentElementsDeserializing == 1) {
11557     // We decrease NumCurrentElementsDeserializing only after pending actions
11558     // are finished, to avoid recursively re-calling finishPendingActions().
11559     finishPendingActions();
11560   }
11561   --NumCurrentElementsDeserializing;
11562 
11563   if (NumCurrentElementsDeserializing == 0) {
11564     // Propagate exception specification and deduced type updates along
11565     // redeclaration chains.
11566     //
11567     // We do this now rather than in finishPendingActions because we want to
11568     // be able to walk the complete redeclaration chains of the updated decls.
11569     while (!PendingExceptionSpecUpdates.empty() ||
11570            !PendingDeducedTypeUpdates.empty()) {
11571       auto ESUpdates = std::move(PendingExceptionSpecUpdates);
11572       PendingExceptionSpecUpdates.clear();
11573       for (auto Update : ESUpdates) {
11574         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11575         auto *FPT = Update.second->getType()->castAs<FunctionProtoType>();
11576         auto ESI = FPT->getExtProtoInfo().ExceptionSpec;
11577         if (auto *Listener = getContext().getASTMutationListener())
11578           Listener->ResolvedExceptionSpec(cast<FunctionDecl>(Update.second));
11579         for (auto *Redecl : Update.second->redecls())
11580           getContext().adjustExceptionSpec(cast<FunctionDecl>(Redecl), ESI);
11581       }
11582 
11583       auto DTUpdates = std::move(PendingDeducedTypeUpdates);
11584       PendingDeducedTypeUpdates.clear();
11585       for (auto Update : DTUpdates) {
11586         ProcessingUpdatesRAIIObj ProcessingUpdates(*this);
11587         // FIXME: If the return type is already deduced, check that it matches.
11588         getContext().adjustDeducedFunctionResultType(Update.first,
11589                                                      Update.second);
11590       }
11591     }
11592 
11593     if (ReadTimer)
11594       ReadTimer->stopTimer();
11595 
11596     diagnoseOdrViolations();
11597 
11598     // We are not in recursive loading, so it's safe to pass the "interesting"
11599     // decls to the consumer.
11600     if (Consumer)
11601       PassInterestingDeclsToConsumer();
11602   }
11603 }
11604 
11605 void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
11606   if (IdentifierInfo *II = Name.getAsIdentifierInfo()) {
11607     // Remove any fake results before adding any real ones.
11608     auto It = PendingFakeLookupResults.find(II);
11609     if (It != PendingFakeLookupResults.end()) {
11610       for (auto *ND : It->second)
11611         SemaObj->IdResolver.RemoveDecl(ND);
11612       // FIXME: this works around module+PCH performance issue.
11613       // Rather than erase the result from the map, which is O(n), just clear
11614       // the vector of NamedDecls.
11615       It->second.clear();
11616     }
11617   }
11618 
11619   if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
11620     SemaObj->TUScope->AddDecl(D);
11621   } else if (SemaObj->TUScope) {
11622     // Adding the decl to IdResolver may have failed because it was already in
11623     // (even though it was not added in scope). If it is already in, make sure
11624     // it gets in the scope as well.
11625     if (std::find(SemaObj->IdResolver.begin(Name),
11626                   SemaObj->IdResolver.end(), D) != SemaObj->IdResolver.end())
11627       SemaObj->TUScope->AddDecl(D);
11628   }
11629 }
11630 
11631 ASTReader::ASTReader(Preprocessor &PP, InMemoryModuleCache &ModuleCache,
11632                      ASTContext *Context,
11633                      const PCHContainerReader &PCHContainerRdr,
11634                      ArrayRef<std::shared_ptr<ModuleFileExtension>> Extensions,
11635                      StringRef isysroot,
11636                      DisableValidationForModuleKind DisableValidationKind,
11637                      bool AllowASTWithCompilerErrors,
11638                      bool AllowConfigurationMismatch, bool ValidateSystemInputs,
11639                      bool ValidateASTInputFilesContent, bool UseGlobalIndex,
11640                      std::unique_ptr<llvm::Timer> ReadTimer)
11641     : Listener(bool(DisableValidationKind &DisableValidationForModuleKind::PCH)
11642                    ? cast<ASTReaderListener>(new SimpleASTReaderListener(PP))
11643                    : cast<ASTReaderListener>(new PCHValidator(PP, *this))),
11644       SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()),
11645       PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP),
11646       ContextObj(Context), ModuleMgr(PP.getFileManager(), ModuleCache,
11647                                      PCHContainerRdr, PP.getHeaderSearchInfo()),
11648       DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot),
11649       DisableValidationKind(DisableValidationKind),
11650       AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
11651       AllowConfigurationMismatch(AllowConfigurationMismatch),
11652       ValidateSystemInputs(ValidateSystemInputs),
11653       ValidateASTInputFilesContent(ValidateASTInputFilesContent),
11654       UseGlobalIndex(UseGlobalIndex), CurrSwitchCaseStmts(&SwitchCaseStmts) {
11655   SourceMgr.setExternalSLocEntrySource(this);
11656 
11657   for (const auto &Ext : Extensions) {
11658     auto BlockName = Ext->getExtensionMetadata().BlockName;
11659     auto Known = ModuleFileExtensions.find(BlockName);
11660     if (Known != ModuleFileExtensions.end()) {
11661       Diags.Report(diag::warn_duplicate_module_file_extension)
11662         << BlockName;
11663       continue;
11664     }
11665 
11666     ModuleFileExtensions.insert({BlockName, Ext});
11667   }
11668 }
11669 
11670 ASTReader::~ASTReader() {
11671   if (OwnsDeserializationListener)
11672     delete DeserializationListener;
11673 }
11674 
11675 IdentifierResolver &ASTReader::getIdResolver() {
11676   return SemaObj ? SemaObj->IdResolver : DummyIdResolver;
11677 }
11678 
11679 Expected<unsigned> ASTRecordReader::readRecord(llvm::BitstreamCursor &Cursor,
11680                                                unsigned AbbrevID) {
11681   Idx = 0;
11682   Record.clear();
11683   return Cursor.readRecord(AbbrevID, Record);
11684 }
11685 //===----------------------------------------------------------------------===//
11686 //// OMPClauseReader implementation
11687 ////===----------------------------------------------------------------------===//
11688 
11689 // This has to be in namespace clang because it's friended by all
11690 // of the OMP clauses.
11691 namespace clang {
11692 
11693 class OMPClauseReader : public OMPClauseVisitor<OMPClauseReader> {
11694   ASTRecordReader &Record;
11695   ASTContext &Context;
11696 
11697 public:
11698   OMPClauseReader(ASTRecordReader &Record)
11699       : Record(Record), Context(Record.getContext()) {}
11700 #define GEN_CLANG_CLAUSE_CLASS
11701 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(Class *C);
11702 #include "llvm/Frontend/OpenMP/OMP.inc"
11703   OMPClause *readClause();
11704   void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C);
11705   void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C);
11706 };
11707 
11708 } // end namespace clang
11709 
11710 OMPClause *ASTRecordReader::readOMPClause() {
11711   return OMPClauseReader(*this).readClause();
11712 }
11713 
11714 OMPClause *OMPClauseReader::readClause() {
11715   OMPClause *C = nullptr;
11716   switch (llvm::omp::Clause(Record.readInt())) {
11717   case llvm::omp::OMPC_if:
11718     C = new (Context) OMPIfClause();
11719     break;
11720   case llvm::omp::OMPC_final:
11721     C = new (Context) OMPFinalClause();
11722     break;
11723   case llvm::omp::OMPC_num_threads:
11724     C = new (Context) OMPNumThreadsClause();
11725     break;
11726   case llvm::omp::OMPC_safelen:
11727     C = new (Context) OMPSafelenClause();
11728     break;
11729   case llvm::omp::OMPC_simdlen:
11730     C = new (Context) OMPSimdlenClause();
11731     break;
11732   case llvm::omp::OMPC_sizes: {
11733     unsigned NumSizes = Record.readInt();
11734     C = OMPSizesClause::CreateEmpty(Context, NumSizes);
11735     break;
11736   }
11737   case llvm::omp::OMPC_full:
11738     C = OMPFullClause::CreateEmpty(Context);
11739     break;
11740   case llvm::omp::OMPC_partial:
11741     C = OMPPartialClause::CreateEmpty(Context);
11742     break;
11743   case llvm::omp::OMPC_allocator:
11744     C = new (Context) OMPAllocatorClause();
11745     break;
11746   case llvm::omp::OMPC_collapse:
11747     C = new (Context) OMPCollapseClause();
11748     break;
11749   case llvm::omp::OMPC_default:
11750     C = new (Context) OMPDefaultClause();
11751     break;
11752   case llvm::omp::OMPC_proc_bind:
11753     C = new (Context) OMPProcBindClause();
11754     break;
11755   case llvm::omp::OMPC_schedule:
11756     C = new (Context) OMPScheduleClause();
11757     break;
11758   case llvm::omp::OMPC_ordered:
11759     C = OMPOrderedClause::CreateEmpty(Context, Record.readInt());
11760     break;
11761   case llvm::omp::OMPC_nowait:
11762     C = new (Context) OMPNowaitClause();
11763     break;
11764   case llvm::omp::OMPC_untied:
11765     C = new (Context) OMPUntiedClause();
11766     break;
11767   case llvm::omp::OMPC_mergeable:
11768     C = new (Context) OMPMergeableClause();
11769     break;
11770   case llvm::omp::OMPC_read:
11771     C = new (Context) OMPReadClause();
11772     break;
11773   case llvm::omp::OMPC_write:
11774     C = new (Context) OMPWriteClause();
11775     break;
11776   case llvm::omp::OMPC_update:
11777     C = OMPUpdateClause::CreateEmpty(Context, Record.readInt());
11778     break;
11779   case llvm::omp::OMPC_capture:
11780     C = new (Context) OMPCaptureClause();
11781     break;
11782   case llvm::omp::OMPC_seq_cst:
11783     C = new (Context) OMPSeqCstClause();
11784     break;
11785   case llvm::omp::OMPC_acq_rel:
11786     C = new (Context) OMPAcqRelClause();
11787     break;
11788   case llvm::omp::OMPC_acquire:
11789     C = new (Context) OMPAcquireClause();
11790     break;
11791   case llvm::omp::OMPC_release:
11792     C = new (Context) OMPReleaseClause();
11793     break;
11794   case llvm::omp::OMPC_relaxed:
11795     C = new (Context) OMPRelaxedClause();
11796     break;
11797   case llvm::omp::OMPC_threads:
11798     C = new (Context) OMPThreadsClause();
11799     break;
11800   case llvm::omp::OMPC_simd:
11801     C = new (Context) OMPSIMDClause();
11802     break;
11803   case llvm::omp::OMPC_nogroup:
11804     C = new (Context) OMPNogroupClause();
11805     break;
11806   case llvm::omp::OMPC_unified_address:
11807     C = new (Context) OMPUnifiedAddressClause();
11808     break;
11809   case llvm::omp::OMPC_unified_shared_memory:
11810     C = new (Context) OMPUnifiedSharedMemoryClause();
11811     break;
11812   case llvm::omp::OMPC_reverse_offload:
11813     C = new (Context) OMPReverseOffloadClause();
11814     break;
11815   case llvm::omp::OMPC_dynamic_allocators:
11816     C = new (Context) OMPDynamicAllocatorsClause();
11817     break;
11818   case llvm::omp::OMPC_atomic_default_mem_order:
11819     C = new (Context) OMPAtomicDefaultMemOrderClause();
11820     break;
11821  case llvm::omp::OMPC_private:
11822     C = OMPPrivateClause::CreateEmpty(Context, Record.readInt());
11823     break;
11824   case llvm::omp::OMPC_firstprivate:
11825     C = OMPFirstprivateClause::CreateEmpty(Context, Record.readInt());
11826     break;
11827   case llvm::omp::OMPC_lastprivate:
11828     C = OMPLastprivateClause::CreateEmpty(Context, Record.readInt());
11829     break;
11830   case llvm::omp::OMPC_shared:
11831     C = OMPSharedClause::CreateEmpty(Context, Record.readInt());
11832     break;
11833   case llvm::omp::OMPC_reduction: {
11834     unsigned N = Record.readInt();
11835     auto Modifier = Record.readEnum<OpenMPReductionClauseModifier>();
11836     C = OMPReductionClause::CreateEmpty(Context, N, Modifier);
11837     break;
11838   }
11839   case llvm::omp::OMPC_task_reduction:
11840     C = OMPTaskReductionClause::CreateEmpty(Context, Record.readInt());
11841     break;
11842   case llvm::omp::OMPC_in_reduction:
11843     C = OMPInReductionClause::CreateEmpty(Context, Record.readInt());
11844     break;
11845   case llvm::omp::OMPC_linear:
11846     C = OMPLinearClause::CreateEmpty(Context, Record.readInt());
11847     break;
11848   case llvm::omp::OMPC_aligned:
11849     C = OMPAlignedClause::CreateEmpty(Context, Record.readInt());
11850     break;
11851   case llvm::omp::OMPC_copyin:
11852     C = OMPCopyinClause::CreateEmpty(Context, Record.readInt());
11853     break;
11854   case llvm::omp::OMPC_copyprivate:
11855     C = OMPCopyprivateClause::CreateEmpty(Context, Record.readInt());
11856     break;
11857   case llvm::omp::OMPC_flush:
11858     C = OMPFlushClause::CreateEmpty(Context, Record.readInt());
11859     break;
11860   case llvm::omp::OMPC_depobj:
11861     C = OMPDepobjClause::CreateEmpty(Context);
11862     break;
11863   case llvm::omp::OMPC_depend: {
11864     unsigned NumVars = Record.readInt();
11865     unsigned NumLoops = Record.readInt();
11866     C = OMPDependClause::CreateEmpty(Context, NumVars, NumLoops);
11867     break;
11868   }
11869   case llvm::omp::OMPC_device:
11870     C = new (Context) OMPDeviceClause();
11871     break;
11872   case llvm::omp::OMPC_map: {
11873     OMPMappableExprListSizeTy Sizes;
11874     Sizes.NumVars = Record.readInt();
11875     Sizes.NumUniqueDeclarations = Record.readInt();
11876     Sizes.NumComponentLists = Record.readInt();
11877     Sizes.NumComponents = Record.readInt();
11878     C = OMPMapClause::CreateEmpty(Context, Sizes);
11879     break;
11880   }
11881   case llvm::omp::OMPC_num_teams:
11882     C = new (Context) OMPNumTeamsClause();
11883     break;
11884   case llvm::omp::OMPC_thread_limit:
11885     C = new (Context) OMPThreadLimitClause();
11886     break;
11887   case llvm::omp::OMPC_priority:
11888     C = new (Context) OMPPriorityClause();
11889     break;
11890   case llvm::omp::OMPC_grainsize:
11891     C = new (Context) OMPGrainsizeClause();
11892     break;
11893   case llvm::omp::OMPC_num_tasks:
11894     C = new (Context) OMPNumTasksClause();
11895     break;
11896   case llvm::omp::OMPC_hint:
11897     C = new (Context) OMPHintClause();
11898     break;
11899   case llvm::omp::OMPC_dist_schedule:
11900     C = new (Context) OMPDistScheduleClause();
11901     break;
11902   case llvm::omp::OMPC_defaultmap:
11903     C = new (Context) OMPDefaultmapClause();
11904     break;
11905   case llvm::omp::OMPC_to: {
11906     OMPMappableExprListSizeTy Sizes;
11907     Sizes.NumVars = Record.readInt();
11908     Sizes.NumUniqueDeclarations = Record.readInt();
11909     Sizes.NumComponentLists = Record.readInt();
11910     Sizes.NumComponents = Record.readInt();
11911     C = OMPToClause::CreateEmpty(Context, Sizes);
11912     break;
11913   }
11914   case llvm::omp::OMPC_from: {
11915     OMPMappableExprListSizeTy Sizes;
11916     Sizes.NumVars = Record.readInt();
11917     Sizes.NumUniqueDeclarations = Record.readInt();
11918     Sizes.NumComponentLists = Record.readInt();
11919     Sizes.NumComponents = Record.readInt();
11920     C = OMPFromClause::CreateEmpty(Context, Sizes);
11921     break;
11922   }
11923   case llvm::omp::OMPC_use_device_ptr: {
11924     OMPMappableExprListSizeTy Sizes;
11925     Sizes.NumVars = Record.readInt();
11926     Sizes.NumUniqueDeclarations = Record.readInt();
11927     Sizes.NumComponentLists = Record.readInt();
11928     Sizes.NumComponents = Record.readInt();
11929     C = OMPUseDevicePtrClause::CreateEmpty(Context, Sizes);
11930     break;
11931   }
11932   case llvm::omp::OMPC_use_device_addr: {
11933     OMPMappableExprListSizeTy Sizes;
11934     Sizes.NumVars = Record.readInt();
11935     Sizes.NumUniqueDeclarations = Record.readInt();
11936     Sizes.NumComponentLists = Record.readInt();
11937     Sizes.NumComponents = Record.readInt();
11938     C = OMPUseDeviceAddrClause::CreateEmpty(Context, Sizes);
11939     break;
11940   }
11941   case llvm::omp::OMPC_is_device_ptr: {
11942     OMPMappableExprListSizeTy Sizes;
11943     Sizes.NumVars = Record.readInt();
11944     Sizes.NumUniqueDeclarations = Record.readInt();
11945     Sizes.NumComponentLists = Record.readInt();
11946     Sizes.NumComponents = Record.readInt();
11947     C = OMPIsDevicePtrClause::CreateEmpty(Context, Sizes);
11948     break;
11949   }
11950   case llvm::omp::OMPC_allocate:
11951     C = OMPAllocateClause::CreateEmpty(Context, Record.readInt());
11952     break;
11953   case llvm::omp::OMPC_nontemporal:
11954     C = OMPNontemporalClause::CreateEmpty(Context, Record.readInt());
11955     break;
11956   case llvm::omp::OMPC_inclusive:
11957     C = OMPInclusiveClause::CreateEmpty(Context, Record.readInt());
11958     break;
11959   case llvm::omp::OMPC_exclusive:
11960     C = OMPExclusiveClause::CreateEmpty(Context, Record.readInt());
11961     break;
11962   case llvm::omp::OMPC_order:
11963     C = new (Context) OMPOrderClause();
11964     break;
11965   case llvm::omp::OMPC_init:
11966     C = OMPInitClause::CreateEmpty(Context, Record.readInt());
11967     break;
11968   case llvm::omp::OMPC_use:
11969     C = new (Context) OMPUseClause();
11970     break;
11971   case llvm::omp::OMPC_destroy:
11972     C = new (Context) OMPDestroyClause();
11973     break;
11974   case llvm::omp::OMPC_novariants:
11975     C = new (Context) OMPNovariantsClause();
11976     break;
11977   case llvm::omp::OMPC_nocontext:
11978     C = new (Context) OMPNocontextClause();
11979     break;
11980   case llvm::omp::OMPC_detach:
11981     C = new (Context) OMPDetachClause();
11982     break;
11983   case llvm::omp::OMPC_uses_allocators:
11984     C = OMPUsesAllocatorsClause::CreateEmpty(Context, Record.readInt());
11985     break;
11986   case llvm::omp::OMPC_affinity:
11987     C = OMPAffinityClause::CreateEmpty(Context, Record.readInt());
11988     break;
11989   case llvm::omp::OMPC_filter:
11990     C = new (Context) OMPFilterClause();
11991     break;
11992 #define OMP_CLAUSE_NO_CLASS(Enum, Str)                                         \
11993   case llvm::omp::Enum:                                                        \
11994     break;
11995 #include "llvm/Frontend/OpenMP/OMPKinds.def"
11996   default:
11997     break;
11998   }
11999   assert(C && "Unknown OMPClause type");
12000 
12001   Visit(C);
12002   C->setLocStart(Record.readSourceLocation());
12003   C->setLocEnd(Record.readSourceLocation());
12004 
12005   return C;
12006 }
12007 
12008 void OMPClauseReader::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
12009   C->setPreInitStmt(Record.readSubStmt(),
12010                     static_cast<OpenMPDirectiveKind>(Record.readInt()));
12011 }
12012 
12013 void OMPClauseReader::VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C) {
12014   VisitOMPClauseWithPreInit(C);
12015   C->setPostUpdateExpr(Record.readSubExpr());
12016 }
12017 
12018 void OMPClauseReader::VisitOMPIfClause(OMPIfClause *C) {
12019   VisitOMPClauseWithPreInit(C);
12020   C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record.readInt()));
12021   C->setNameModifierLoc(Record.readSourceLocation());
12022   C->setColonLoc(Record.readSourceLocation());
12023   C->setCondition(Record.readSubExpr());
12024   C->setLParenLoc(Record.readSourceLocation());
12025 }
12026 
12027 void OMPClauseReader::VisitOMPFinalClause(OMPFinalClause *C) {
12028   VisitOMPClauseWithPreInit(C);
12029   C->setCondition(Record.readSubExpr());
12030   C->setLParenLoc(Record.readSourceLocation());
12031 }
12032 
12033 void OMPClauseReader::VisitOMPNumThreadsClause(OMPNumThreadsClause *C) {
12034   VisitOMPClauseWithPreInit(C);
12035   C->setNumThreads(Record.readSubExpr());
12036   C->setLParenLoc(Record.readSourceLocation());
12037 }
12038 
12039 void OMPClauseReader::VisitOMPSafelenClause(OMPSafelenClause *C) {
12040   C->setSafelen(Record.readSubExpr());
12041   C->setLParenLoc(Record.readSourceLocation());
12042 }
12043 
12044 void OMPClauseReader::VisitOMPSimdlenClause(OMPSimdlenClause *C) {
12045   C->setSimdlen(Record.readSubExpr());
12046   C->setLParenLoc(Record.readSourceLocation());
12047 }
12048 
12049 void OMPClauseReader::VisitOMPSizesClause(OMPSizesClause *C) {
12050   for (Expr *&E : C->getSizesRefs())
12051     E = Record.readSubExpr();
12052   C->setLParenLoc(Record.readSourceLocation());
12053 }
12054 
12055 void OMPClauseReader::VisitOMPFullClause(OMPFullClause *C) {}
12056 
12057 void OMPClauseReader::VisitOMPPartialClause(OMPPartialClause *C) {
12058   C->setFactor(Record.readSubExpr());
12059   C->setLParenLoc(Record.readSourceLocation());
12060 }
12061 
12062 void OMPClauseReader::VisitOMPAllocatorClause(OMPAllocatorClause *C) {
12063   C->setAllocator(Record.readExpr());
12064   C->setLParenLoc(Record.readSourceLocation());
12065 }
12066 
12067 void OMPClauseReader::VisitOMPCollapseClause(OMPCollapseClause *C) {
12068   C->setNumForLoops(Record.readSubExpr());
12069   C->setLParenLoc(Record.readSourceLocation());
12070 }
12071 
12072 void OMPClauseReader::VisitOMPDefaultClause(OMPDefaultClause *C) {
12073   C->setDefaultKind(static_cast<llvm::omp::DefaultKind>(Record.readInt()));
12074   C->setLParenLoc(Record.readSourceLocation());
12075   C->setDefaultKindKwLoc(Record.readSourceLocation());
12076 }
12077 
12078 void OMPClauseReader::VisitOMPProcBindClause(OMPProcBindClause *C) {
12079   C->setProcBindKind(static_cast<llvm::omp::ProcBindKind>(Record.readInt()));
12080   C->setLParenLoc(Record.readSourceLocation());
12081   C->setProcBindKindKwLoc(Record.readSourceLocation());
12082 }
12083 
12084 void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {
12085   VisitOMPClauseWithPreInit(C);
12086   C->setScheduleKind(
12087        static_cast<OpenMPScheduleClauseKind>(Record.readInt()));
12088   C->setFirstScheduleModifier(
12089       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12090   C->setSecondScheduleModifier(
12091       static_cast<OpenMPScheduleClauseModifier>(Record.readInt()));
12092   C->setChunkSize(Record.readSubExpr());
12093   C->setLParenLoc(Record.readSourceLocation());
12094   C->setFirstScheduleModifierLoc(Record.readSourceLocation());
12095   C->setSecondScheduleModifierLoc(Record.readSourceLocation());
12096   C->setScheduleKindLoc(Record.readSourceLocation());
12097   C->setCommaLoc(Record.readSourceLocation());
12098 }
12099 
12100 void OMPClauseReader::VisitOMPOrderedClause(OMPOrderedClause *C) {
12101   C->setNumForLoops(Record.readSubExpr());
12102   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12103     C->setLoopNumIterations(I, Record.readSubExpr());
12104   for (unsigned I = 0, E = C->NumberOfLoops; I < E; ++I)
12105     C->setLoopCounter(I, Record.readSubExpr());
12106   C->setLParenLoc(Record.readSourceLocation());
12107 }
12108 
12109 void OMPClauseReader::VisitOMPDetachClause(OMPDetachClause *C) {
12110   C->setEventHandler(Record.readSubExpr());
12111   C->setLParenLoc(Record.readSourceLocation());
12112 }
12113 
12114 void OMPClauseReader::VisitOMPNowaitClause(OMPNowaitClause *) {}
12115 
12116 void OMPClauseReader::VisitOMPUntiedClause(OMPUntiedClause *) {}
12117 
12118 void OMPClauseReader::VisitOMPMergeableClause(OMPMergeableClause *) {}
12119 
12120 void OMPClauseReader::VisitOMPReadClause(OMPReadClause *) {}
12121 
12122 void OMPClauseReader::VisitOMPWriteClause(OMPWriteClause *) {}
12123 
12124 void OMPClauseReader::VisitOMPUpdateClause(OMPUpdateClause *C) {
12125   if (C->isExtended()) {
12126     C->setLParenLoc(Record.readSourceLocation());
12127     C->setArgumentLoc(Record.readSourceLocation());
12128     C->setDependencyKind(Record.readEnum<OpenMPDependClauseKind>());
12129   }
12130 }
12131 
12132 void OMPClauseReader::VisitOMPCaptureClause(OMPCaptureClause *) {}
12133 
12134 void OMPClauseReader::VisitOMPSeqCstClause(OMPSeqCstClause *) {}
12135 
12136 void OMPClauseReader::VisitOMPAcqRelClause(OMPAcqRelClause *) {}
12137 
12138 void OMPClauseReader::VisitOMPAcquireClause(OMPAcquireClause *) {}
12139 
12140 void OMPClauseReader::VisitOMPReleaseClause(OMPReleaseClause *) {}
12141 
12142 void OMPClauseReader::VisitOMPRelaxedClause(OMPRelaxedClause *) {}
12143 
12144 void OMPClauseReader::VisitOMPThreadsClause(OMPThreadsClause *) {}
12145 
12146 void OMPClauseReader::VisitOMPSIMDClause(OMPSIMDClause *) {}
12147 
12148 void OMPClauseReader::VisitOMPNogroupClause(OMPNogroupClause *) {}
12149 
12150 void OMPClauseReader::VisitOMPInitClause(OMPInitClause *C) {
12151   unsigned NumVars = C->varlist_size();
12152   SmallVector<Expr *, 16> Vars;
12153   Vars.reserve(NumVars);
12154   for (unsigned I = 0; I != NumVars; ++I)
12155     Vars.push_back(Record.readSubExpr());
12156   C->setVarRefs(Vars);
12157   C->setIsTarget(Record.readBool());
12158   C->setIsTargetSync(Record.readBool());
12159   C->setLParenLoc(Record.readSourceLocation());
12160   C->setVarLoc(Record.readSourceLocation());
12161 }
12162 
12163 void OMPClauseReader::VisitOMPUseClause(OMPUseClause *C) {
12164   C->setInteropVar(Record.readSubExpr());
12165   C->setLParenLoc(Record.readSourceLocation());
12166   C->setVarLoc(Record.readSourceLocation());
12167 }
12168 
12169 void OMPClauseReader::VisitOMPDestroyClause(OMPDestroyClause *C) {
12170   C->setInteropVar(Record.readSubExpr());
12171   C->setLParenLoc(Record.readSourceLocation());
12172   C->setVarLoc(Record.readSourceLocation());
12173 }
12174 
12175 void OMPClauseReader::VisitOMPNovariantsClause(OMPNovariantsClause *C) {
12176   VisitOMPClauseWithPreInit(C);
12177   C->setCondition(Record.readSubExpr());
12178   C->setLParenLoc(Record.readSourceLocation());
12179 }
12180 
12181 void OMPClauseReader::VisitOMPNocontextClause(OMPNocontextClause *C) {
12182   VisitOMPClauseWithPreInit(C);
12183   C->setCondition(Record.readSubExpr());
12184   C->setLParenLoc(Record.readSourceLocation());
12185 }
12186 
12187 void OMPClauseReader::VisitOMPUnifiedAddressClause(OMPUnifiedAddressClause *) {}
12188 
12189 void OMPClauseReader::VisitOMPUnifiedSharedMemoryClause(
12190     OMPUnifiedSharedMemoryClause *) {}
12191 
12192 void OMPClauseReader::VisitOMPReverseOffloadClause(OMPReverseOffloadClause *) {}
12193 
12194 void
12195 OMPClauseReader::VisitOMPDynamicAllocatorsClause(OMPDynamicAllocatorsClause *) {
12196 }
12197 
12198 void OMPClauseReader::VisitOMPAtomicDefaultMemOrderClause(
12199     OMPAtomicDefaultMemOrderClause *C) {
12200   C->setAtomicDefaultMemOrderKind(
12201       static_cast<OpenMPAtomicDefaultMemOrderClauseKind>(Record.readInt()));
12202   C->setLParenLoc(Record.readSourceLocation());
12203   C->setAtomicDefaultMemOrderKindKwLoc(Record.readSourceLocation());
12204 }
12205 
12206 void OMPClauseReader::VisitOMPPrivateClause(OMPPrivateClause *C) {
12207   C->setLParenLoc(Record.readSourceLocation());
12208   unsigned NumVars = C->varlist_size();
12209   SmallVector<Expr *, 16> Vars;
12210   Vars.reserve(NumVars);
12211   for (unsigned i = 0; i != NumVars; ++i)
12212     Vars.push_back(Record.readSubExpr());
12213   C->setVarRefs(Vars);
12214   Vars.clear();
12215   for (unsigned i = 0; i != NumVars; ++i)
12216     Vars.push_back(Record.readSubExpr());
12217   C->setPrivateCopies(Vars);
12218 }
12219 
12220 void OMPClauseReader::VisitOMPFirstprivateClause(OMPFirstprivateClause *C) {
12221   VisitOMPClauseWithPreInit(C);
12222   C->setLParenLoc(Record.readSourceLocation());
12223   unsigned NumVars = C->varlist_size();
12224   SmallVector<Expr *, 16> Vars;
12225   Vars.reserve(NumVars);
12226   for (unsigned i = 0; i != NumVars; ++i)
12227     Vars.push_back(Record.readSubExpr());
12228   C->setVarRefs(Vars);
12229   Vars.clear();
12230   for (unsigned i = 0; i != NumVars; ++i)
12231     Vars.push_back(Record.readSubExpr());
12232   C->setPrivateCopies(Vars);
12233   Vars.clear();
12234   for (unsigned i = 0; i != NumVars; ++i)
12235     Vars.push_back(Record.readSubExpr());
12236   C->setInits(Vars);
12237 }
12238 
12239 void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {
12240   VisitOMPClauseWithPostUpdate(C);
12241   C->setLParenLoc(Record.readSourceLocation());
12242   C->setKind(Record.readEnum<OpenMPLastprivateModifier>());
12243   C->setKindLoc(Record.readSourceLocation());
12244   C->setColonLoc(Record.readSourceLocation());
12245   unsigned NumVars = C->varlist_size();
12246   SmallVector<Expr *, 16> Vars;
12247   Vars.reserve(NumVars);
12248   for (unsigned i = 0; i != NumVars; ++i)
12249     Vars.push_back(Record.readSubExpr());
12250   C->setVarRefs(Vars);
12251   Vars.clear();
12252   for (unsigned i = 0; i != NumVars; ++i)
12253     Vars.push_back(Record.readSubExpr());
12254   C->setPrivateCopies(Vars);
12255   Vars.clear();
12256   for (unsigned i = 0; i != NumVars; ++i)
12257     Vars.push_back(Record.readSubExpr());
12258   C->setSourceExprs(Vars);
12259   Vars.clear();
12260   for (unsigned i = 0; i != NumVars; ++i)
12261     Vars.push_back(Record.readSubExpr());
12262   C->setDestinationExprs(Vars);
12263   Vars.clear();
12264   for (unsigned i = 0; i != NumVars; ++i)
12265     Vars.push_back(Record.readSubExpr());
12266   C->setAssignmentOps(Vars);
12267 }
12268 
12269 void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) {
12270   C->setLParenLoc(Record.readSourceLocation());
12271   unsigned NumVars = C->varlist_size();
12272   SmallVector<Expr *, 16> Vars;
12273   Vars.reserve(NumVars);
12274   for (unsigned i = 0; i != NumVars; ++i)
12275     Vars.push_back(Record.readSubExpr());
12276   C->setVarRefs(Vars);
12277 }
12278 
12279 void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {
12280   VisitOMPClauseWithPostUpdate(C);
12281   C->setLParenLoc(Record.readSourceLocation());
12282   C->setModifierLoc(Record.readSourceLocation());
12283   C->setColonLoc(Record.readSourceLocation());
12284   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12285   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12286   C->setQualifierLoc(NNSL);
12287   C->setNameInfo(DNI);
12288 
12289   unsigned NumVars = C->varlist_size();
12290   SmallVector<Expr *, 16> Vars;
12291   Vars.reserve(NumVars);
12292   for (unsigned i = 0; i != NumVars; ++i)
12293     Vars.push_back(Record.readSubExpr());
12294   C->setVarRefs(Vars);
12295   Vars.clear();
12296   for (unsigned i = 0; i != NumVars; ++i)
12297     Vars.push_back(Record.readSubExpr());
12298   C->setPrivates(Vars);
12299   Vars.clear();
12300   for (unsigned i = 0; i != NumVars; ++i)
12301     Vars.push_back(Record.readSubExpr());
12302   C->setLHSExprs(Vars);
12303   Vars.clear();
12304   for (unsigned i = 0; i != NumVars; ++i)
12305     Vars.push_back(Record.readSubExpr());
12306   C->setRHSExprs(Vars);
12307   Vars.clear();
12308   for (unsigned i = 0; i != NumVars; ++i)
12309     Vars.push_back(Record.readSubExpr());
12310   C->setReductionOps(Vars);
12311   if (C->getModifier() == OMPC_REDUCTION_inscan) {
12312     Vars.clear();
12313     for (unsigned i = 0; i != NumVars; ++i)
12314       Vars.push_back(Record.readSubExpr());
12315     C->setInscanCopyOps(Vars);
12316     Vars.clear();
12317     for (unsigned i = 0; i != NumVars; ++i)
12318       Vars.push_back(Record.readSubExpr());
12319     C->setInscanCopyArrayTemps(Vars);
12320     Vars.clear();
12321     for (unsigned i = 0; i != NumVars; ++i)
12322       Vars.push_back(Record.readSubExpr());
12323     C->setInscanCopyArrayElems(Vars);
12324   }
12325 }
12326 
12327 void OMPClauseReader::VisitOMPTaskReductionClause(OMPTaskReductionClause *C) {
12328   VisitOMPClauseWithPostUpdate(C);
12329   C->setLParenLoc(Record.readSourceLocation());
12330   C->setColonLoc(Record.readSourceLocation());
12331   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12332   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12333   C->setQualifierLoc(NNSL);
12334   C->setNameInfo(DNI);
12335 
12336   unsigned NumVars = C->varlist_size();
12337   SmallVector<Expr *, 16> Vars;
12338   Vars.reserve(NumVars);
12339   for (unsigned I = 0; I != NumVars; ++I)
12340     Vars.push_back(Record.readSubExpr());
12341   C->setVarRefs(Vars);
12342   Vars.clear();
12343   for (unsigned I = 0; I != NumVars; ++I)
12344     Vars.push_back(Record.readSubExpr());
12345   C->setPrivates(Vars);
12346   Vars.clear();
12347   for (unsigned I = 0; I != NumVars; ++I)
12348     Vars.push_back(Record.readSubExpr());
12349   C->setLHSExprs(Vars);
12350   Vars.clear();
12351   for (unsigned I = 0; I != NumVars; ++I)
12352     Vars.push_back(Record.readSubExpr());
12353   C->setRHSExprs(Vars);
12354   Vars.clear();
12355   for (unsigned I = 0; I != NumVars; ++I)
12356     Vars.push_back(Record.readSubExpr());
12357   C->setReductionOps(Vars);
12358 }
12359 
12360 void OMPClauseReader::VisitOMPInReductionClause(OMPInReductionClause *C) {
12361   VisitOMPClauseWithPostUpdate(C);
12362   C->setLParenLoc(Record.readSourceLocation());
12363   C->setColonLoc(Record.readSourceLocation());
12364   NestedNameSpecifierLoc NNSL = Record.readNestedNameSpecifierLoc();
12365   DeclarationNameInfo DNI = Record.readDeclarationNameInfo();
12366   C->setQualifierLoc(NNSL);
12367   C->setNameInfo(DNI);
12368 
12369   unsigned NumVars = C->varlist_size();
12370   SmallVector<Expr *, 16> Vars;
12371   Vars.reserve(NumVars);
12372   for (unsigned I = 0; I != NumVars; ++I)
12373     Vars.push_back(Record.readSubExpr());
12374   C->setVarRefs(Vars);
12375   Vars.clear();
12376   for (unsigned I = 0; I != NumVars; ++I)
12377     Vars.push_back(Record.readSubExpr());
12378   C->setPrivates(Vars);
12379   Vars.clear();
12380   for (unsigned I = 0; I != NumVars; ++I)
12381     Vars.push_back(Record.readSubExpr());
12382   C->setLHSExprs(Vars);
12383   Vars.clear();
12384   for (unsigned I = 0; I != NumVars; ++I)
12385     Vars.push_back(Record.readSubExpr());
12386   C->setRHSExprs(Vars);
12387   Vars.clear();
12388   for (unsigned I = 0; I != NumVars; ++I)
12389     Vars.push_back(Record.readSubExpr());
12390   C->setReductionOps(Vars);
12391   Vars.clear();
12392   for (unsigned I = 0; I != NumVars; ++I)
12393     Vars.push_back(Record.readSubExpr());
12394   C->setTaskgroupDescriptors(Vars);
12395 }
12396 
12397 void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {
12398   VisitOMPClauseWithPostUpdate(C);
12399   C->setLParenLoc(Record.readSourceLocation());
12400   C->setColonLoc(Record.readSourceLocation());
12401   C->setModifier(static_cast<OpenMPLinearClauseKind>(Record.readInt()));
12402   C->setModifierLoc(Record.readSourceLocation());
12403   unsigned NumVars = C->varlist_size();
12404   SmallVector<Expr *, 16> Vars;
12405   Vars.reserve(NumVars);
12406   for (unsigned i = 0; i != NumVars; ++i)
12407     Vars.push_back(Record.readSubExpr());
12408   C->setVarRefs(Vars);
12409   Vars.clear();
12410   for (unsigned i = 0; i != NumVars; ++i)
12411     Vars.push_back(Record.readSubExpr());
12412   C->setPrivates(Vars);
12413   Vars.clear();
12414   for (unsigned i = 0; i != NumVars; ++i)
12415     Vars.push_back(Record.readSubExpr());
12416   C->setInits(Vars);
12417   Vars.clear();
12418   for (unsigned i = 0; i != NumVars; ++i)
12419     Vars.push_back(Record.readSubExpr());
12420   C->setUpdates(Vars);
12421   Vars.clear();
12422   for (unsigned i = 0; i != NumVars; ++i)
12423     Vars.push_back(Record.readSubExpr());
12424   C->setFinals(Vars);
12425   C->setStep(Record.readSubExpr());
12426   C->setCalcStep(Record.readSubExpr());
12427   Vars.clear();
12428   for (unsigned I = 0; I != NumVars + 1; ++I)
12429     Vars.push_back(Record.readSubExpr());
12430   C->setUsedExprs(Vars);
12431 }
12432 
12433 void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {
12434   C->setLParenLoc(Record.readSourceLocation());
12435   C->setColonLoc(Record.readSourceLocation());
12436   unsigned NumVars = C->varlist_size();
12437   SmallVector<Expr *, 16> Vars;
12438   Vars.reserve(NumVars);
12439   for (unsigned i = 0; i != NumVars; ++i)
12440     Vars.push_back(Record.readSubExpr());
12441   C->setVarRefs(Vars);
12442   C->setAlignment(Record.readSubExpr());
12443 }
12444 
12445 void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {
12446   C->setLParenLoc(Record.readSourceLocation());
12447   unsigned NumVars = C->varlist_size();
12448   SmallVector<Expr *, 16> Exprs;
12449   Exprs.reserve(NumVars);
12450   for (unsigned i = 0; i != NumVars; ++i)
12451     Exprs.push_back(Record.readSubExpr());
12452   C->setVarRefs(Exprs);
12453   Exprs.clear();
12454   for (unsigned i = 0; i != NumVars; ++i)
12455     Exprs.push_back(Record.readSubExpr());
12456   C->setSourceExprs(Exprs);
12457   Exprs.clear();
12458   for (unsigned i = 0; i != NumVars; ++i)
12459     Exprs.push_back(Record.readSubExpr());
12460   C->setDestinationExprs(Exprs);
12461   Exprs.clear();
12462   for (unsigned i = 0; i != NumVars; ++i)
12463     Exprs.push_back(Record.readSubExpr());
12464   C->setAssignmentOps(Exprs);
12465 }
12466 
12467 void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {
12468   C->setLParenLoc(Record.readSourceLocation());
12469   unsigned NumVars = C->varlist_size();
12470   SmallVector<Expr *, 16> Exprs;
12471   Exprs.reserve(NumVars);
12472   for (unsigned i = 0; i != NumVars; ++i)
12473     Exprs.push_back(Record.readSubExpr());
12474   C->setVarRefs(Exprs);
12475   Exprs.clear();
12476   for (unsigned i = 0; i != NumVars; ++i)
12477     Exprs.push_back(Record.readSubExpr());
12478   C->setSourceExprs(Exprs);
12479   Exprs.clear();
12480   for (unsigned i = 0; i != NumVars; ++i)
12481     Exprs.push_back(Record.readSubExpr());
12482   C->setDestinationExprs(Exprs);
12483   Exprs.clear();
12484   for (unsigned i = 0; i != NumVars; ++i)
12485     Exprs.push_back(Record.readSubExpr());
12486   C->setAssignmentOps(Exprs);
12487 }
12488 
12489 void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) {
12490   C->setLParenLoc(Record.readSourceLocation());
12491   unsigned NumVars = C->varlist_size();
12492   SmallVector<Expr *, 16> Vars;
12493   Vars.reserve(NumVars);
12494   for (unsigned i = 0; i != NumVars; ++i)
12495     Vars.push_back(Record.readSubExpr());
12496   C->setVarRefs(Vars);
12497 }
12498 
12499 void OMPClauseReader::VisitOMPDepobjClause(OMPDepobjClause *C) {
12500   C->setDepobj(Record.readSubExpr());
12501   C->setLParenLoc(Record.readSourceLocation());
12502 }
12503 
12504 void OMPClauseReader::VisitOMPDependClause(OMPDependClause *C) {
12505   C->setLParenLoc(Record.readSourceLocation());
12506   C->setModifier(Record.readSubExpr());
12507   C->setDependencyKind(
12508       static_cast<OpenMPDependClauseKind>(Record.readInt()));
12509   C->setDependencyLoc(Record.readSourceLocation());
12510   C->setColonLoc(Record.readSourceLocation());
12511   unsigned NumVars = C->varlist_size();
12512   SmallVector<Expr *, 16> Vars;
12513   Vars.reserve(NumVars);
12514   for (unsigned I = 0; I != NumVars; ++I)
12515     Vars.push_back(Record.readSubExpr());
12516   C->setVarRefs(Vars);
12517   for (unsigned I = 0, E = C->getNumLoops(); I < E; ++I)
12518     C->setLoopData(I, Record.readSubExpr());
12519 }
12520 
12521 void OMPClauseReader::VisitOMPDeviceClause(OMPDeviceClause *C) {
12522   VisitOMPClauseWithPreInit(C);
12523   C->setModifier(Record.readEnum<OpenMPDeviceClauseModifier>());
12524   C->setDevice(Record.readSubExpr());
12525   C->setModifierLoc(Record.readSourceLocation());
12526   C->setLParenLoc(Record.readSourceLocation());
12527 }
12528 
12529 void OMPClauseReader::VisitOMPMapClause(OMPMapClause *C) {
12530   C->setLParenLoc(Record.readSourceLocation());
12531   for (unsigned I = 0; I < NumberOfOMPMapClauseModifiers; ++I) {
12532     C->setMapTypeModifier(
12533         I, static_cast<OpenMPMapModifierKind>(Record.readInt()));
12534     C->setMapTypeModifierLoc(I, Record.readSourceLocation());
12535   }
12536   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12537   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12538   C->setMapType(
12539      static_cast<OpenMPMapClauseKind>(Record.readInt()));
12540   C->setMapLoc(Record.readSourceLocation());
12541   C->setColonLoc(Record.readSourceLocation());
12542   auto NumVars = C->varlist_size();
12543   auto UniqueDecls = C->getUniqueDeclarationsNum();
12544   auto TotalLists = C->getTotalComponentListNum();
12545   auto TotalComponents = C->getTotalComponentsNum();
12546 
12547   SmallVector<Expr *, 16> Vars;
12548   Vars.reserve(NumVars);
12549   for (unsigned i = 0; i != NumVars; ++i)
12550     Vars.push_back(Record.readExpr());
12551   C->setVarRefs(Vars);
12552 
12553   SmallVector<Expr *, 16> UDMappers;
12554   UDMappers.reserve(NumVars);
12555   for (unsigned I = 0; I < NumVars; ++I)
12556     UDMappers.push_back(Record.readExpr());
12557   C->setUDMapperRefs(UDMappers);
12558 
12559   SmallVector<ValueDecl *, 16> Decls;
12560   Decls.reserve(UniqueDecls);
12561   for (unsigned i = 0; i < UniqueDecls; ++i)
12562     Decls.push_back(Record.readDeclAs<ValueDecl>());
12563   C->setUniqueDecls(Decls);
12564 
12565   SmallVector<unsigned, 16> ListsPerDecl;
12566   ListsPerDecl.reserve(UniqueDecls);
12567   for (unsigned i = 0; i < UniqueDecls; ++i)
12568     ListsPerDecl.push_back(Record.readInt());
12569   C->setDeclNumLists(ListsPerDecl);
12570 
12571   SmallVector<unsigned, 32> ListSizes;
12572   ListSizes.reserve(TotalLists);
12573   for (unsigned i = 0; i < TotalLists; ++i)
12574     ListSizes.push_back(Record.readInt());
12575   C->setComponentListSizes(ListSizes);
12576 
12577   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12578   Components.reserve(TotalComponents);
12579   for (unsigned i = 0; i < TotalComponents; ++i) {
12580     Expr *AssociatedExprPr = Record.readExpr();
12581     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12582     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12583                             /*IsNonContiguous=*/false);
12584   }
12585   C->setComponents(Components, ListSizes);
12586 }
12587 
12588 void OMPClauseReader::VisitOMPAllocateClause(OMPAllocateClause *C) {
12589   C->setLParenLoc(Record.readSourceLocation());
12590   C->setColonLoc(Record.readSourceLocation());
12591   C->setAllocator(Record.readSubExpr());
12592   unsigned NumVars = C->varlist_size();
12593   SmallVector<Expr *, 16> Vars;
12594   Vars.reserve(NumVars);
12595   for (unsigned i = 0; i != NumVars; ++i)
12596     Vars.push_back(Record.readSubExpr());
12597   C->setVarRefs(Vars);
12598 }
12599 
12600 void OMPClauseReader::VisitOMPNumTeamsClause(OMPNumTeamsClause *C) {
12601   VisitOMPClauseWithPreInit(C);
12602   C->setNumTeams(Record.readSubExpr());
12603   C->setLParenLoc(Record.readSourceLocation());
12604 }
12605 
12606 void OMPClauseReader::VisitOMPThreadLimitClause(OMPThreadLimitClause *C) {
12607   VisitOMPClauseWithPreInit(C);
12608   C->setThreadLimit(Record.readSubExpr());
12609   C->setLParenLoc(Record.readSourceLocation());
12610 }
12611 
12612 void OMPClauseReader::VisitOMPPriorityClause(OMPPriorityClause *C) {
12613   VisitOMPClauseWithPreInit(C);
12614   C->setPriority(Record.readSubExpr());
12615   C->setLParenLoc(Record.readSourceLocation());
12616 }
12617 
12618 void OMPClauseReader::VisitOMPGrainsizeClause(OMPGrainsizeClause *C) {
12619   VisitOMPClauseWithPreInit(C);
12620   C->setGrainsize(Record.readSubExpr());
12621   C->setLParenLoc(Record.readSourceLocation());
12622 }
12623 
12624 void OMPClauseReader::VisitOMPNumTasksClause(OMPNumTasksClause *C) {
12625   VisitOMPClauseWithPreInit(C);
12626   C->setNumTasks(Record.readSubExpr());
12627   C->setLParenLoc(Record.readSourceLocation());
12628 }
12629 
12630 void OMPClauseReader::VisitOMPHintClause(OMPHintClause *C) {
12631   C->setHint(Record.readSubExpr());
12632   C->setLParenLoc(Record.readSourceLocation());
12633 }
12634 
12635 void OMPClauseReader::VisitOMPDistScheduleClause(OMPDistScheduleClause *C) {
12636   VisitOMPClauseWithPreInit(C);
12637   C->setDistScheduleKind(
12638       static_cast<OpenMPDistScheduleClauseKind>(Record.readInt()));
12639   C->setChunkSize(Record.readSubExpr());
12640   C->setLParenLoc(Record.readSourceLocation());
12641   C->setDistScheduleKindLoc(Record.readSourceLocation());
12642   C->setCommaLoc(Record.readSourceLocation());
12643 }
12644 
12645 void OMPClauseReader::VisitOMPDefaultmapClause(OMPDefaultmapClause *C) {
12646   C->setDefaultmapKind(
12647        static_cast<OpenMPDefaultmapClauseKind>(Record.readInt()));
12648   C->setDefaultmapModifier(
12649       static_cast<OpenMPDefaultmapClauseModifier>(Record.readInt()));
12650   C->setLParenLoc(Record.readSourceLocation());
12651   C->setDefaultmapModifierLoc(Record.readSourceLocation());
12652   C->setDefaultmapKindLoc(Record.readSourceLocation());
12653 }
12654 
12655 void OMPClauseReader::VisitOMPToClause(OMPToClause *C) {
12656   C->setLParenLoc(Record.readSourceLocation());
12657   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12658     C->setMotionModifier(
12659         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12660     C->setMotionModifierLoc(I, Record.readSourceLocation());
12661   }
12662   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12663   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12664   C->setColonLoc(Record.readSourceLocation());
12665   auto NumVars = C->varlist_size();
12666   auto UniqueDecls = C->getUniqueDeclarationsNum();
12667   auto TotalLists = C->getTotalComponentListNum();
12668   auto TotalComponents = C->getTotalComponentsNum();
12669 
12670   SmallVector<Expr *, 16> Vars;
12671   Vars.reserve(NumVars);
12672   for (unsigned i = 0; i != NumVars; ++i)
12673     Vars.push_back(Record.readSubExpr());
12674   C->setVarRefs(Vars);
12675 
12676   SmallVector<Expr *, 16> UDMappers;
12677   UDMappers.reserve(NumVars);
12678   for (unsigned I = 0; I < NumVars; ++I)
12679     UDMappers.push_back(Record.readSubExpr());
12680   C->setUDMapperRefs(UDMappers);
12681 
12682   SmallVector<ValueDecl *, 16> Decls;
12683   Decls.reserve(UniqueDecls);
12684   for (unsigned i = 0; i < UniqueDecls; ++i)
12685     Decls.push_back(Record.readDeclAs<ValueDecl>());
12686   C->setUniqueDecls(Decls);
12687 
12688   SmallVector<unsigned, 16> ListsPerDecl;
12689   ListsPerDecl.reserve(UniqueDecls);
12690   for (unsigned i = 0; i < UniqueDecls; ++i)
12691     ListsPerDecl.push_back(Record.readInt());
12692   C->setDeclNumLists(ListsPerDecl);
12693 
12694   SmallVector<unsigned, 32> ListSizes;
12695   ListSizes.reserve(TotalLists);
12696   for (unsigned i = 0; i < TotalLists; ++i)
12697     ListSizes.push_back(Record.readInt());
12698   C->setComponentListSizes(ListSizes);
12699 
12700   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12701   Components.reserve(TotalComponents);
12702   for (unsigned i = 0; i < TotalComponents; ++i) {
12703     Expr *AssociatedExprPr = Record.readSubExpr();
12704     bool IsNonContiguous = Record.readBool();
12705     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12706     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12707   }
12708   C->setComponents(Components, ListSizes);
12709 }
12710 
12711 void OMPClauseReader::VisitOMPFromClause(OMPFromClause *C) {
12712   C->setLParenLoc(Record.readSourceLocation());
12713   for (unsigned I = 0; I < NumberOfOMPMotionModifiers; ++I) {
12714     C->setMotionModifier(
12715         I, static_cast<OpenMPMotionModifierKind>(Record.readInt()));
12716     C->setMotionModifierLoc(I, Record.readSourceLocation());
12717   }
12718   C->setMapperQualifierLoc(Record.readNestedNameSpecifierLoc());
12719   C->setMapperIdInfo(Record.readDeclarationNameInfo());
12720   C->setColonLoc(Record.readSourceLocation());
12721   auto NumVars = C->varlist_size();
12722   auto UniqueDecls = C->getUniqueDeclarationsNum();
12723   auto TotalLists = C->getTotalComponentListNum();
12724   auto TotalComponents = C->getTotalComponentsNum();
12725 
12726   SmallVector<Expr *, 16> Vars;
12727   Vars.reserve(NumVars);
12728   for (unsigned i = 0; i != NumVars; ++i)
12729     Vars.push_back(Record.readSubExpr());
12730   C->setVarRefs(Vars);
12731 
12732   SmallVector<Expr *, 16> UDMappers;
12733   UDMappers.reserve(NumVars);
12734   for (unsigned I = 0; I < NumVars; ++I)
12735     UDMappers.push_back(Record.readSubExpr());
12736   C->setUDMapperRefs(UDMappers);
12737 
12738   SmallVector<ValueDecl *, 16> Decls;
12739   Decls.reserve(UniqueDecls);
12740   for (unsigned i = 0; i < UniqueDecls; ++i)
12741     Decls.push_back(Record.readDeclAs<ValueDecl>());
12742   C->setUniqueDecls(Decls);
12743 
12744   SmallVector<unsigned, 16> ListsPerDecl;
12745   ListsPerDecl.reserve(UniqueDecls);
12746   for (unsigned i = 0; i < UniqueDecls; ++i)
12747     ListsPerDecl.push_back(Record.readInt());
12748   C->setDeclNumLists(ListsPerDecl);
12749 
12750   SmallVector<unsigned, 32> ListSizes;
12751   ListSizes.reserve(TotalLists);
12752   for (unsigned i = 0; i < TotalLists; ++i)
12753     ListSizes.push_back(Record.readInt());
12754   C->setComponentListSizes(ListSizes);
12755 
12756   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12757   Components.reserve(TotalComponents);
12758   for (unsigned i = 0; i < TotalComponents; ++i) {
12759     Expr *AssociatedExprPr = Record.readSubExpr();
12760     bool IsNonContiguous = Record.readBool();
12761     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12762     Components.emplace_back(AssociatedExprPr, AssociatedDecl, IsNonContiguous);
12763   }
12764   C->setComponents(Components, ListSizes);
12765 }
12766 
12767 void OMPClauseReader::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *C) {
12768   C->setLParenLoc(Record.readSourceLocation());
12769   auto NumVars = C->varlist_size();
12770   auto UniqueDecls = C->getUniqueDeclarationsNum();
12771   auto TotalLists = C->getTotalComponentListNum();
12772   auto TotalComponents = C->getTotalComponentsNum();
12773 
12774   SmallVector<Expr *, 16> Vars;
12775   Vars.reserve(NumVars);
12776   for (unsigned i = 0; i != NumVars; ++i)
12777     Vars.push_back(Record.readSubExpr());
12778   C->setVarRefs(Vars);
12779   Vars.clear();
12780   for (unsigned i = 0; i != NumVars; ++i)
12781     Vars.push_back(Record.readSubExpr());
12782   C->setPrivateCopies(Vars);
12783   Vars.clear();
12784   for (unsigned i = 0; i != NumVars; ++i)
12785     Vars.push_back(Record.readSubExpr());
12786   C->setInits(Vars);
12787 
12788   SmallVector<ValueDecl *, 16> Decls;
12789   Decls.reserve(UniqueDecls);
12790   for (unsigned i = 0; i < UniqueDecls; ++i)
12791     Decls.push_back(Record.readDeclAs<ValueDecl>());
12792   C->setUniqueDecls(Decls);
12793 
12794   SmallVector<unsigned, 16> ListsPerDecl;
12795   ListsPerDecl.reserve(UniqueDecls);
12796   for (unsigned i = 0; i < UniqueDecls; ++i)
12797     ListsPerDecl.push_back(Record.readInt());
12798   C->setDeclNumLists(ListsPerDecl);
12799 
12800   SmallVector<unsigned, 32> ListSizes;
12801   ListSizes.reserve(TotalLists);
12802   for (unsigned i = 0; i < TotalLists; ++i)
12803     ListSizes.push_back(Record.readInt());
12804   C->setComponentListSizes(ListSizes);
12805 
12806   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12807   Components.reserve(TotalComponents);
12808   for (unsigned i = 0; i < TotalComponents; ++i) {
12809     auto *AssociatedExprPr = Record.readSubExpr();
12810     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12811     Components.emplace_back(AssociatedExprPr, AssociatedDecl,
12812                             /*IsNonContiguous=*/false);
12813   }
12814   C->setComponents(Components, ListSizes);
12815 }
12816 
12817 void OMPClauseReader::VisitOMPUseDeviceAddrClause(OMPUseDeviceAddrClause *C) {
12818   C->setLParenLoc(Record.readSourceLocation());
12819   auto NumVars = C->varlist_size();
12820   auto UniqueDecls = C->getUniqueDeclarationsNum();
12821   auto TotalLists = C->getTotalComponentListNum();
12822   auto TotalComponents = C->getTotalComponentsNum();
12823 
12824   SmallVector<Expr *, 16> Vars;
12825   Vars.reserve(NumVars);
12826   for (unsigned i = 0; i != NumVars; ++i)
12827     Vars.push_back(Record.readSubExpr());
12828   C->setVarRefs(Vars);
12829 
12830   SmallVector<ValueDecl *, 16> Decls;
12831   Decls.reserve(UniqueDecls);
12832   for (unsigned i = 0; i < UniqueDecls; ++i)
12833     Decls.push_back(Record.readDeclAs<ValueDecl>());
12834   C->setUniqueDecls(Decls);
12835 
12836   SmallVector<unsigned, 16> ListsPerDecl;
12837   ListsPerDecl.reserve(UniqueDecls);
12838   for (unsigned i = 0; i < UniqueDecls; ++i)
12839     ListsPerDecl.push_back(Record.readInt());
12840   C->setDeclNumLists(ListsPerDecl);
12841 
12842   SmallVector<unsigned, 32> ListSizes;
12843   ListSizes.reserve(TotalLists);
12844   for (unsigned i = 0; i < TotalLists; ++i)
12845     ListSizes.push_back(Record.readInt());
12846   C->setComponentListSizes(ListSizes);
12847 
12848   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12849   Components.reserve(TotalComponents);
12850   for (unsigned i = 0; i < TotalComponents; ++i) {
12851     Expr *AssociatedExpr = Record.readSubExpr();
12852     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12853     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12854                             /*IsNonContiguous*/ false);
12855   }
12856   C->setComponents(Components, ListSizes);
12857 }
12858 
12859 void OMPClauseReader::VisitOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) {
12860   C->setLParenLoc(Record.readSourceLocation());
12861   auto NumVars = C->varlist_size();
12862   auto UniqueDecls = C->getUniqueDeclarationsNum();
12863   auto TotalLists = C->getTotalComponentListNum();
12864   auto TotalComponents = C->getTotalComponentsNum();
12865 
12866   SmallVector<Expr *, 16> Vars;
12867   Vars.reserve(NumVars);
12868   for (unsigned i = 0; i != NumVars; ++i)
12869     Vars.push_back(Record.readSubExpr());
12870   C->setVarRefs(Vars);
12871   Vars.clear();
12872 
12873   SmallVector<ValueDecl *, 16> Decls;
12874   Decls.reserve(UniqueDecls);
12875   for (unsigned i = 0; i < UniqueDecls; ++i)
12876     Decls.push_back(Record.readDeclAs<ValueDecl>());
12877   C->setUniqueDecls(Decls);
12878 
12879   SmallVector<unsigned, 16> ListsPerDecl;
12880   ListsPerDecl.reserve(UniqueDecls);
12881   for (unsigned i = 0; i < UniqueDecls; ++i)
12882     ListsPerDecl.push_back(Record.readInt());
12883   C->setDeclNumLists(ListsPerDecl);
12884 
12885   SmallVector<unsigned, 32> ListSizes;
12886   ListSizes.reserve(TotalLists);
12887   for (unsigned i = 0; i < TotalLists; ++i)
12888     ListSizes.push_back(Record.readInt());
12889   C->setComponentListSizes(ListSizes);
12890 
12891   SmallVector<OMPClauseMappableExprCommon::MappableComponent, 32> Components;
12892   Components.reserve(TotalComponents);
12893   for (unsigned i = 0; i < TotalComponents; ++i) {
12894     Expr *AssociatedExpr = Record.readSubExpr();
12895     auto *AssociatedDecl = Record.readDeclAs<ValueDecl>();
12896     Components.emplace_back(AssociatedExpr, AssociatedDecl,
12897                             /*IsNonContiguous=*/false);
12898   }
12899   C->setComponents(Components, ListSizes);
12900 }
12901 
12902 void OMPClauseReader::VisitOMPNontemporalClause(OMPNontemporalClause *C) {
12903   C->setLParenLoc(Record.readSourceLocation());
12904   unsigned NumVars = C->varlist_size();
12905   SmallVector<Expr *, 16> Vars;
12906   Vars.reserve(NumVars);
12907   for (unsigned i = 0; i != NumVars; ++i)
12908     Vars.push_back(Record.readSubExpr());
12909   C->setVarRefs(Vars);
12910   Vars.clear();
12911   Vars.reserve(NumVars);
12912   for (unsigned i = 0; i != NumVars; ++i)
12913     Vars.push_back(Record.readSubExpr());
12914   C->setPrivateRefs(Vars);
12915 }
12916 
12917 void OMPClauseReader::VisitOMPInclusiveClause(OMPInclusiveClause *C) {
12918   C->setLParenLoc(Record.readSourceLocation());
12919   unsigned NumVars = C->varlist_size();
12920   SmallVector<Expr *, 16> Vars;
12921   Vars.reserve(NumVars);
12922   for (unsigned i = 0; i != NumVars; ++i)
12923     Vars.push_back(Record.readSubExpr());
12924   C->setVarRefs(Vars);
12925 }
12926 
12927 void OMPClauseReader::VisitOMPExclusiveClause(OMPExclusiveClause *C) {
12928   C->setLParenLoc(Record.readSourceLocation());
12929   unsigned NumVars = C->varlist_size();
12930   SmallVector<Expr *, 16> Vars;
12931   Vars.reserve(NumVars);
12932   for (unsigned i = 0; i != NumVars; ++i)
12933     Vars.push_back(Record.readSubExpr());
12934   C->setVarRefs(Vars);
12935 }
12936 
12937 void OMPClauseReader::VisitOMPUsesAllocatorsClause(OMPUsesAllocatorsClause *C) {
12938   C->setLParenLoc(Record.readSourceLocation());
12939   unsigned NumOfAllocators = C->getNumberOfAllocators();
12940   SmallVector<OMPUsesAllocatorsClause::Data, 4> Data;
12941   Data.reserve(NumOfAllocators);
12942   for (unsigned I = 0; I != NumOfAllocators; ++I) {
12943     OMPUsesAllocatorsClause::Data &D = Data.emplace_back();
12944     D.Allocator = Record.readSubExpr();
12945     D.AllocatorTraits = Record.readSubExpr();
12946     D.LParenLoc = Record.readSourceLocation();
12947     D.RParenLoc = Record.readSourceLocation();
12948   }
12949   C->setAllocatorsData(Data);
12950 }
12951 
12952 void OMPClauseReader::VisitOMPAffinityClause(OMPAffinityClause *C) {
12953   C->setLParenLoc(Record.readSourceLocation());
12954   C->setModifier(Record.readSubExpr());
12955   C->setColonLoc(Record.readSourceLocation());
12956   unsigned NumOfLocators = C->varlist_size();
12957   SmallVector<Expr *, 4> Locators;
12958   Locators.reserve(NumOfLocators);
12959   for (unsigned I = 0; I != NumOfLocators; ++I)
12960     Locators.push_back(Record.readSubExpr());
12961   C->setVarRefs(Locators);
12962 }
12963 
12964 void OMPClauseReader::VisitOMPOrderClause(OMPOrderClause *C) {
12965   C->setKind(Record.readEnum<OpenMPOrderClauseKind>());
12966   C->setLParenLoc(Record.readSourceLocation());
12967   C->setKindKwLoc(Record.readSourceLocation());
12968 }
12969 
12970 void OMPClauseReader::VisitOMPFilterClause(OMPFilterClause *C) {
12971   VisitOMPClauseWithPreInit(C);
12972   C->setThreadID(Record.readSubExpr());
12973   C->setLParenLoc(Record.readSourceLocation());
12974 }
12975 
12976 OMPTraitInfo *ASTRecordReader::readOMPTraitInfo() {
12977   OMPTraitInfo &TI = getContext().getNewOMPTraitInfo();
12978   TI.Sets.resize(readUInt32());
12979   for (auto &Set : TI.Sets) {
12980     Set.Kind = readEnum<llvm::omp::TraitSet>();
12981     Set.Selectors.resize(readUInt32());
12982     for (auto &Selector : Set.Selectors) {
12983       Selector.Kind = readEnum<llvm::omp::TraitSelector>();
12984       Selector.ScoreOrCondition = nullptr;
12985       if (readBool())
12986         Selector.ScoreOrCondition = readExprRef();
12987       Selector.Properties.resize(readUInt32());
12988       for (auto &Property : Selector.Properties)
12989         Property.Kind = readEnum<llvm::omp::TraitProperty>();
12990     }
12991   }
12992   return &TI;
12993 }
12994 
12995 void ASTRecordReader::readOMPChildren(OMPChildren *Data) {
12996   if (!Data)
12997     return;
12998   if (Reader->ReadingKind == ASTReader::Read_Stmt) {
12999     // Skip NumClauses, NumChildren and HasAssociatedStmt fields.
13000     skipInts(3);
13001   }
13002   SmallVector<OMPClause *, 4> Clauses(Data->getNumClauses());
13003   for (unsigned I = 0, E = Data->getNumClauses(); I < E; ++I)
13004     Clauses[I] = readOMPClause();
13005   Data->setClauses(Clauses);
13006   if (Data->hasAssociatedStmt())
13007     Data->setAssociatedStmt(readStmt());
13008   for (unsigned I = 0, E = Data->getNumChildren(); I < E; ++I)
13009     Data->getChildren()[I] = readStmt();
13010 }
13011